diff --git a/.bundler-audit.yml b/.bundler-audit.yml new file mode 100644 index 0000000000..3d22165690 --- /dev/null +++ b/.bundler-audit.yml @@ -0,0 +1,6 @@ +ignore: + - CVE-2024-53985 + - CVE-2024-53986 + - CVE-2024-53987 + - CVE-2024-53988 + - CVE-2024-53989 diff --git a/.env.production.sample b/.env.production.sample index 0b458a1aa9..1faaf5b57c 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -45,6 +45,17 @@ ES_PASS=password SECRET_KEY_BASE= OTP_SECRET= +# Encryption secrets +# ------------------ +# Must be available (and set to same values) for all server processes +# These are private/secret values, do not share outside hosting environment +# Use `bin/rails db:encryption:init` to generate fresh secrets +# Do NOT change these secrets once in use, as this would cause data loss and other issues +# ------------------ +# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= +# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= +# ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= + # Web Push # -------- # Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` diff --git a/.github/actions/setup-ruby/action.yml b/.github/actions/setup-ruby/action.yml index 3e232f134c..672a06f9ea 100644 --- a/.github/actions/setup-ruby/action.yml +++ b/.github/actions/setup-ruby/action.yml @@ -21,3 +21,4 @@ runs: with: ruby-version: ${{ inputs.ruby-version }} bundler-cache: true + cache-version: 4.3 diff --git a/.github/workflows/build-security.yml b/.github/workflows/build-security.yml index 1e2455d3d9..d3cb4e5e0a 100644 --- a/.github/workflows/build-security.yml +++ b/.github/workflows/build-security.yml @@ -24,8 +24,6 @@ jobs: uses: ./.github/workflows/build-container-image.yml with: file_to_build: Dockerfile - platforms: linux/amd64,linux/arm64 - use_native_arm64_builder: true cache: false push_to_images: | tootsuite/mastodon @@ -46,8 +44,6 @@ jobs: uses: ./.github/workflows/build-container-image.yml with: file_to_build: streaming/Dockerfile - platforms: linux/amd64,linux/arm64 - use_native_arm64_builder: true cache: false push_to_images: | tootsuite/mastodon-streaming diff --git a/.github/workflows/crowdin-download-stable.yml b/.github/workflows/crowdin-download-stable.yml index c0b402a5b9..de21e2e58f 100644 --- a/.github/workflows/crowdin-download-stable.yml +++ b/.github/workflows/crowdin-download-stable.yml @@ -50,7 +50,7 @@ jobs: # Create or update the pull request - name: Create Pull Request - uses: peter-evans/create-pull-request@v7.0.1 + uses: peter-evans/create-pull-request@v7.0.5 with: commit-message: 'New Crowdin translations' title: 'New Crowdin Translations for ${{ github.base_ref || github.ref_name }} (automated)' diff --git a/.github/workflows/test-migrations.yml b/.github/workflows/test-migrations.yml index 3f7a016a80..892f59f941 100644 --- a/.github/workflows/test-migrations.yml +++ b/.github/workflows/test-migrations.yml @@ -35,6 +35,8 @@ jobs: postgres: - 14-alpine - 15-alpine + - 16-alpine + - 17-alpine services: postgres: diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index e6c81f1257..ee22e19bee 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -131,6 +131,7 @@ jobs: - '3.1' - '3.2' - '.ruby-version' + - '3.4' steps: - uses: actions/checkout@v4 @@ -147,7 +148,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg libpam-dev + additional-system-dependencies: ffmpeg imagemagick libpam-dev - name: Load database schema run: | @@ -233,6 +234,7 @@ jobs: - '3.1' - '3.2' - '.ruby-version' + - '3.4' steps: - uses: actions/checkout@v4 @@ -249,7 +251,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg libpam-dev libyaml-dev + additional-system-dependencies: ffmpeg libpam-dev - name: Load database schema run: './bin/rails db:create db:schema:load db:seed' @@ -313,6 +315,7 @@ jobs: - '3.1' - '3.2' - '.ruby-version' + - '3.4' steps: - uses: actions/checkout@v4 @@ -330,7 +333,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg + additional-system-dependencies: ffmpeg imagemagick - name: Set up Javascript environment uses: ./.github/actions/setup-javascript @@ -430,6 +433,7 @@ jobs: - '3.1' - '3.2' - '.ruby-version' + - '3.4' search-image: - docker.elastic.co/elasticsearch/elasticsearch:7.17.13 include: @@ -450,7 +454,7 @@ jobs: uses: ./.github/actions/setup-ruby with: ruby-version: ${{ matrix.ruby-version}} - additional-system-dependencies: ffmpeg + additional-system-dependencies: ffmpeg imagemagick - name: Set up Javascript environment uses: ./.github/actions/setup-javascript diff --git a/CHANGELOG.md b/CHANGELOG.md index 5eef082ccc..ea985b236f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,216 @@ All notable changes to this project will be documented in this file. -## [4.3.0] - UNRELEASED +## [4.3.8] - 2025-05-06 + +### Security + +- Update dependencies +- Check scheme on account, profile, and media URLs ([GHSA-x2rc-v5wx-g3m5](https://github.com/mastodon/mastodon/security/advisories/GHSA-x2rc-v5wx-g3m5)) + +### Added + +- Add warning for REDIS_NAMESPACE deprecation at startup (#34581 by @ClearlyClaire) +- Add built-in context for interaction policies (#34574 by @ClearlyClaire) + +### Changed + +- Change activity distribution error handling to skip retrying for deleted accounts (#33617 by @ClearlyClaire) + +### Removed + +- Remove double-query for signed query strings (#34610 by @ClearlyClaire) + +### Fixed + +- Fix incorrect redirect in response to unauthenticated API requests in limited federation mode (#34549 by @ClearlyClaire) +- Fix sign-up e-mail confirmation page reloading on error or redirect (#34548 by @ClearlyClaire) + +## [4.3.7] - 2025-04-02 + +### Added + +- Add delay to profile updates to debounce them (#34137 by @ClearlyClaire) +- Add support for paginating partial collections in `SynchronizeFollowersService` (#34272 and #34277 by @ClearlyClaire) + +### Changed + +- Change account suspensions to be federated to recently-followed accounts as well (#34294 by @ClearlyClaire) +- Change `AccountReachFinder` to consider statuses based on suspension date (#32805 and #34291 by @ClearlyClaire and @mjankowski) +- Change user archive signed URL TTL from 10 seconds to 1 hour (#34254 by @ClearlyClaire) + +### Fixed + +- Fix static version of animated PNG emojis not being properly extracted (#34337 by @ClearlyClaire) +- Fix filters not applying in detailed view, favourites and bookmarks (#34259 and #34260 by @ClearlyClaire) +- Fix handling of malformed/unusual HTML (#34201 by @ClearlyClaire) +- Fix `CacheBuster` being queued for missing media attachments (#34253 by @ClearlyClaire) +- Fix incorrect URL being used when cache busting (#34189 by @ClearlyClaire) +- Fix streaming server refusing unix socket path in `DATABASE_URL` (#34091 by @ClearlyClaire) +- Fix “x” hotkey not working on boosted filtered posts (#33758 by @ClearlyClaire) + +## [4.3.6] - 2025-03-13 + +### Security + +- Update dependency `omniauth-saml` +- Update dependency `rack` + +### Fixed + +- Fix Stoplight errors when using `REDIS_NAMESPACE` (#34126 by @ClearlyClaire) + +## [4.3.5] - 2025-03-10 + +### Changed + +- Change hashtag suggestion to prefer personal history capitalization (#34070 by @ClearlyClaire) + +### Fixed + +- Fix processing errors for some HEIF images from iOS 18 (#34086 by @renchap) +- Fix streaming server not filtering unknown-language posts from public timelines (#33774 by @ClearlyClaire) +- Fix preview cards under Content Warnings not being shown in detailed statuses (#34068 by @ClearlyClaire) +- Fix username and display name being hidden on narrow screens in moderation interface (#33064 by @ClearlyClaire) + +## [4.3.4] - 2025-02-27 + +### Security + +- Update dependencies +- Change HTML sanitization to remove unusable and unused `embed` tag (#34021 by @ClearlyClaire, [GHSA-mq2m-hr29-8gqf](https://github.com/mastodon/mastodon/security/advisories/GHSA-mq2m-hr29-8gqf)) +- Fix rate-limit on sign-up email verification ([GHSA-v39f-c9jj-8w7h](https://github.com/mastodon/mastodon/security/advisories/GHSA-v39f-c9jj-8w7h)) +- Fix improper disclosure of domain blocks to unverified users ([GHSA-94h4-fj37-c825](https://github.com/mastodon/mastodon/security/advisories/GHSA-94h4-fj37-c825)) + +### Changed + +- Change preview cards to be shown when Content Warnings are expanded (#33827 by @ClearlyClaire) +- Change warnings against changing encryption secrets to be even more noticeable (#33631 by @ClearlyClaire) +- Change `mastodon:setup` to prevent overwriting already-configured servers (#33603, #33616, and #33684 by @ClearlyClaire and @mjankowski) +- Change notifications from moderators to not be filtered (#32974 and #33654 by @ClearlyClaire and @mjankowski) + +### Fixed + +- Fix `GET /api/v2/notifications/:id` and `POST /api/v2/notifications/:id/dismiss` for ungrouped notifications (#33990 by @ClearlyClaire) +- Fix issue with some versions of libvips on some systems (#33853 by @kleisauke) +- Fix handling of duplicate mentions in incoming status `Update` (#33911 by @ClearlyClaire) +- Fix inefficiencies in timeline generation (#33839 and #33842 by @ClearlyClaire) +- Fix emoji rewrite adding unnecessary curft to the DOM for most emoji (#33818 by @ClearlyClaire) +- Fix `tootctl feeds build` not building list timelines (#33783 by @ClearlyClaire) +- Fix flaky test in `/api/v2/notifications` tests (#33773 by @ClearlyClaire) +- Fix incorrect signature after HTTP redirect (#33757 and #33769 by @ClearlyClaire) +- Fix polls not being validated on edition (#33755 by @ClearlyClaire) +- Fix media preview height in compose form when 3 or more images are attached (#33571 by @ClearlyClaire) +- Fix preview card sizing in “Author attribution” in profile settings (#33482 by @ClearlyClaire) +- Fix processing of incoming notifications for unfilterable types (#33429 by @ClearlyClaire) +- Fix featured tags for remote accounts not being kept up to date (#33372, #33406, and #33425 by @ClearlyClaire and @mjankowski) +- Fix notification polling showing a loading bar in web UI (#32960 by @Gargron) +- Fix accounts table long display name (#29316 by @WebCoder49) +- Fix exclusive lists interfering with notifications (#28162 by @ShadowJonathan) + +## [4.3.3] - 2025-01-16 + +### Security + +- Fix insufficient validation of account URIs ([GHSA-5wxh-3p65-r4g6](https://github.com/mastodon/mastodon/security/advisories/GHSA-5wxh-3p65-r4g6)) +- Update dependencies + +### Fixed + +- Fix `libyaml` missing from `Dockerfile` build stage (#33591 by @vmstan) +- Fix incorrect notification settings migration for non-followers (#33348 by @ClearlyClaire) +- Fix down clause for notification policy v2 migrations (#33340 by @jesseplusplus) +- Fix error decrementing status count when `FeaturedTags#last_status_at` is `nil` (#33320 by @ClearlyClaire) +- Fix last paginated notification group only including data on a single notification (#33271 by @ClearlyClaire) +- Fix processing of mentions for post edits with an existing corresponding silent mention (#33227 by @ClearlyClaire) +- Fix deletion of unconfirmed users with Webauthn set (#33186 by @ClearlyClaire) +- Fix empty authors preview card serialization (#33151, #33466 by @mjankowski and @ClearlyClaire) + +## [4.3.2] - 2024-12-03 + +### Added + +- Add `tootctl feeds vacuum` (#33065 by @ClearlyClaire) +- Add error message when user tries to follow their own account (#31910 by @lenikadali) +- Add client_secret_expires_at to OAuth Applications (#30317 by @ThisIsMissEm) + +### Changed + +- Change design of Content Warnings and filters (#32543 by @ClearlyClaire) + +### Fixed + +- Fix processing incoming post edits with mentions to unresolvable accounts (#33129 by @ClearlyClaire) +- Fix error when including multiple instances of `embed.js` (#33107 by @YKWeyer) +- Fix inactive users' timelines being backfilled on follow and unsuspend (#33094 by @ClearlyClaire) +- Fix direct inbox delivery pushing posts into inactive followers' timelines (#33067 by @ClearlyClaire) +- Fix `TagFollow` records not being correctly handled in account operations (#33063 by @ClearlyClaire) +- Fix pushing hashtag-followed posts to feeds of inactive users (#33018 by @Gargron) +- Fix duplicate notifications in notification groups when using slow mode (#33014 by @ClearlyClaire) +- Fix posts made in the future being allowed to trend (#32996 by @ClearlyClaire) +- Fix uploading higher-than-wide GIF profile picture with libvips enabled (#32911 by @ClearlyClaire) +- Fix domain attribution field having autocorrect and autocapitalize enabled (#32903 by @ClearlyClaire) +- Fix titles being escaped twice (#32889 by @ClearlyClaire) +- Fix list creation limit check (#32869 by @ClearlyClaire) +- Fix error in `tootctl email_domain_blocks` when supplying `--with-dns-records` (#32863 by @mjankowski) +- Fix `min_id` and `max_id` causing error in search API (#32857 by @Gargron) +- Fix inefficiencies when processing removal of posts that use featured tags (#32787 by @ClearlyClaire) +- Fix alt-text pop-in not using the translated description (#32766 by @ClearlyClaire) +- Fix preview cards with long titles erroneously causing layout changes (#32678 by @ClearlyClaire) +- Fix embed modal layout on mobile (#32641 by @DismalShadowX) +- Fix and improve batch attachment deletion handling when using OpenStack Swift (#32637 by @hugogameiro) +- Fix blocks not being applied on link timeline (#32625 by @tribela) +- Fix follow counters being incorrectly changed (#32622 by @oneiros) +- Fix 'unknown' media attachment type rendering (#32613 and #32713 by @ThisIsMissEm and @renatolond) +- Fix tl language native name (#32606 by @seav) + +### Security + +- Update dependencies + +## [4.3.1] - 2024-10-21 + +### Added + +- Add more explicit explanations about author attribution and `fediverse:creator` (#32383 by @ClearlyClaire) +- Add ability to group follow notifications in WebUI, can be disabled in the column settings (#32520 by @renchap) +- Add back a 6 hours mute duration option (#32522 by @renchap) +- Add note about not changing ActiveRecord encryption secrets once they are set (#32413, #32476, #32512, and #32537 by @ClearlyClaire and @mjankowski) + +### Changed + +- Change translation feature to translate to selected regional variant (e.g. pt-BR) if available (#32428 by @c960657) + +### Removed + +- Remove ability to get embed code for remote posts (#32578 by @ClearlyClaire)\ + Getting the embed code is only reliable for local posts.\ + It never worked for non-Mastodon servers, and stopped working correctly with the changes made in 4.3.0.\ + We have therefore decided to remove the menu entry while we investigate solutions. + +### Fixed + +- Fix follow recommendation moderation page default language when using regional variant (#32580 by @ClearlyClaire) +- Fix column-settings spacing in local timeline in advanced view (#32567 by @lindwurm) +- Fix broken i18n in text welcome mailer tags area (#32571 by @mjankowski) +- Fix missing or incorrect cache-control headers for Streaming server (#32551 by @ThisIsMissEm) +- Fix only the first paragraph being displayed in some notifications (#32348 by @ClearlyClaire) +- Fix reblog icons on account media view (#32506 by @tribela) +- Fix Content-Security-Policy not allowing OpenStack SWIFT object storage URI (#32439 by @kenkiku1021) +- Fix back arrow pointing to the incorrect direction in RTL languages (#32485 by @renchap) +- Fix streaming server using `REDIS_USERNAME` instead of `REDIS_USER` (#32493 by @ThisIsMissEm) +- Fix follow recommendation carrousel scrolling on RTL layouts (#32462 and #32505 by @ClearlyClaire) +- Fix follow recommendation suppressions not applying immediately (#32392 by @ClearlyClaire) +- Fix language of push notifications (#32415 by @ClearlyClaire) +- Fix mute duration not being shown in list of muted accounts in web UI (#32388 by @ClearlyClaire) +- Fix “Mark every notification as read” not updating the read marker if scrolled down (#32385 by @ClearlyClaire) +- Fix “Mention” appearing for otherwise filtered posts (#32356 by @ClearlyClaire) +- Fix notification requests from suspended accounts still being listed (#32354 by @ClearlyClaire) +- Fix list edition modal styling (#32358 and #32367 by @ClearlyClaire and @vmstan) +- Fix 4 columns barely not fitting on 1920px screen (#32361 by @ClearlyClaire) +- Fix icon alignment in applications list (#32293 by @mjankowski) + +## [4.3.0] - 2024-10-08 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 @mjankowski. @@ -11,12 +220,12 @@ The following changelog entries focus on changes visible to users, administrator - **Add confirmation interstitial instead of silently redirecting logged-out visitors to remote resources** (#27792, #28902, and #30651 by @ClearlyClaire and @Gargron)\ This fixes a longstanding open redirect in Mastodon, at the cost of added friction when local links to remote resources are shared. - Fix ReDoS vulnerability on some Ruby versions ([GHSA-jpxp-r43f-rhvx](https://github.com/mastodon/mastodon/security/advisories/GHSA-jpxp-r43f-rhvx)) -- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 by @ClearlyClaire) +- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 and #32241 by @ClearlyClaire) - Update dependencies ### Added -- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089 and #32085 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\ +- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089, #32085, #32243, #32179 and #32254 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\ Group notifications of the same type for the same target, so that your notifications no longer get cluttered by boost and favorite notifications as soon as a couple of your posts get traction.\ This is done server-side so that clients can efficiently get relevant groups without having to go through numerous pages of individual notifications.\ As part of this, the visual design of the entire notifications feature has been revamped.\ @@ -28,7 +237,7 @@ The following changelog entries focus on changes visible to users, administrator - `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts - `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group - `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count -- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723 and #32062 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\ +- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723, #32062 and #32281 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\ The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\ You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\ Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\ @@ -51,7 +260,7 @@ The following changelog entries focus on changes visible to users, administrator - **Add notifications of severed relationships** (#27511, #29665, #29668, #29670, #29700, #29714, #29712, and #29731 by @ClearlyClaire and @Gargron)\ Notify local users when they lose relationships as a result of a local moderator blocking a remote account or server, allowing the affected user to retrieve the list of broken relationships.\ Note that this does not notify remote users.\ - This adds the `severed_relationships` notification type to the REST API and streaming, with a new [`relationship_severance_event` attribute](https://docs.joinmastodon.org/entities/Notification/#relationship_severance_event). + This adds the `severed_relationships` notification type to the REST API and streaming, with a new [`event` attribute](https://docs.joinmastodon.org/entities/Notification/#relationship_severance_event). - **Add hover cards in web UI** (#30754, #30864, #30850, #30879, #30928, #30949, #30948, #30931, and #31300 by @ClearlyClaire, @Gargron, and @renchap)\ Hovering over an avatar or username will now display a hover card with the first two lines of the user's description and their first two profile fields.\ This can be disabled in the “Animations and accessibility” section of the preferences. @@ -61,13 +270,13 @@ The following changelog entries focus on changes visible to users, administrator - **Add timeline of public posts about a trending link** (#30381 and #30840 by @Gargron)\ You can now see public posts mentioning currently-trending articles from people who have opted into discovery features.\ This adds a new REST API endpoint: https://docs.joinmastodon.org/methods/timelines/#link -- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, and #31900 by @Gargron and @oneiros)\ +- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, #31900 and #32188 by @Gargron, @mjankowski and @oneiros)\ This adds a mechanism to [highlight the author of news articles](https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/) shared on Mastodon.\ Articles hosted outside the fediverse can indicate a fediverse author with a meta tag: ```html ``` - On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors\ + On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors \ Users can allow arbitrary domains to use `fediverse:creator` to credit them by visiting `/settings/verification`.\ This is federated as a new `attributionDomains` property in the `http://joinmastodon.org/ns` namespace, containing an array of domain names: https://docs.joinmastodon.org/spec/activitypub/#properties-used-1 - **Add in-app notifications for moderation actions and warnings** (#30065, #30082, and #30081 by @ClearlyClaire)\ @@ -150,10 +359,12 @@ The following changelog entries focus on changes visible to users, administrator - Add groundwork for annual reports for accounts (#28693 by @Gargron)\ This lays the groundwork for a “year-in-review”/“wrapped” style report for local users, but is currently not in use. - Add notification email on invalid second authenticator (#28822 by @ClearlyClaire) +- Add date of account deletion in list of accounts in the admin interface (#25640 by @tribela) - Add new emojis from `jdecked/twemoji` 15.0 (#28404 by @TheEssem) - Add configurable error handling in attachment batch deletion (#28184 by @vmstan)\ This makes the S3 batch size configurable through the `S3_BATCH_DELETE_LIMIT` environment variable (defaults to 1000), and adds some retry logic, configurable through the `S3_BATCH_DELETE_RETRY` environment variable (defaults to 3). - Add VAPID public key to instance serializer (#28006 by @ThisIsMissEm) +- Add support for serving JRD `/.well-known/host-meta.json` in addition to XRD host-meta (#32206 by @c960657) - Add `nodeName` and `nodeDescription` to nodeinfo `metadata` (#28079 by @6543) - Add Thai diacritics and tone marks in `HASHTAG_INVALID_CHARS_RE` (#26576 by @ppnplus) - Add variable delay before link verification of remote account links (#27774 by @ClearlyClaire) @@ -168,7 +379,7 @@ The following changelog entries focus on changes visible to users, administrator ### Changed -- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, and #31525 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\ +- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, #31525, #32153, and #32201 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\ This changes all the interface icons from FontAwesome to Material Symbols for a more modern look, consistent with the official Mastodon Android app.\ In addition, better care is given to pixel alignment, and icon variants are used to better highlight active/inactive state. - **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, #31889 and #32033 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\ @@ -192,9 +403,9 @@ The following changelog entries focus on changes visible to users, administrator Administrators may need to update their setup accordingly. - Change how content warnings and filters are displayed in web UI (#31365, and #31761 by @Gargron) - Change preview card processing to ignore `undefined` as canonical url (#31882 by @oneiros) -- Change embedded posts to use web UI (#31766 and #32135 by @Gargron) +- Change embedded posts to use web UI (#31766, #32135 and #32271 by @Gargron) - Change inner borders in media galleries in web UI (#31852 by @Gargron) -- Change design of media attachments and profile media tab in web UI (#31807, #32048, and #31967 by @Gargron) +- Change design of media attachments and profile media tab in web UI (#31807, #32048, #31967, #32217, #32224 and #32257 by @ClearlyClaire and @Gargron) - Change labels on thread indicators in web UI (#31806 by @Gargron) - Change label of "Data export" menu item in settings interface (#32099 by @c960657) - Change responsive break points on navigation panel in web UI (#32034 by @Gargron) @@ -284,9 +495,10 @@ The following changelog entries focus on changes visible to users, administrator - Fix error when accepting an appeal for sensitive posts deleted in the meantime (#32037 by @ClearlyClaire) - Fix error when encountering reblog of deleted post in feed rebuild (#32001 by @ClearlyClaire) - Fix Safari browser glitch related to horizontal scrolling (#31960 by @Gargron) +- Fix unresolvable mentions sometimes preventing processing incoming posts (#29215 by @tribela and @ClearlyClaire) - Fix too many requests caused by relationship look-ups in web UI (#32042 by @Gargron) - Fix links for reblogs in moderation interface (#31979 by @ClearlyClaire) -- Fix the appearance of avatars when they do not load (#31966 by @renchap) +- Fix the appearance of avatars when they do not load (#31966 and #32270 by @Gargron and @renchap) - Fix spurious error notifications for aborted requests in web UI (#31952 by @c960657) - Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil) - Fix security context sometimes not being added in LD-Signed activities (#31871 by @ClearlyClaire) @@ -309,10 +521,12 @@ The following changelog entries focus on changes visible to users, administrator - Fix “Redirect URI” field not being marked as required in “New application” form (#30311 by @ThisIsMissEm) - Fix right-to-left text in preview cards (#30930 by @ClearlyClaire) - Fix rack attack `match_type` value typo in logging config (#30514 by @mjankowski) -- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445 and #32091 by @ClearlyClaire, @valtlai and @vmstan) +- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445, #32091, #32147 and #32137 by @ClearlyClaire, @mjankowski, @valtlai and @vmstan) +- Fix editing description of media uploads with custom thumbnails (#32221 by @ClearlyClaire) - Fix race condition in `POST /api/v1/push/subscription` (#30166 by @ClearlyClaire) - Fix post deletion not being delayed when those are part of an account warning (#30163 by @ClearlyClaire) - Fix rendering error on `/start` when not logged in (#30023 by @timothyjrogers) +- Fix unneeded requests to blocked domains when receiving relayed signed activities from them (#31161 by @ClearlyClaire) - Fix logo pushing header buttons out of view on certain conditions in mobile layout (#29787 by @ClearlyClaire) - Fix notification-related records not being reattributed when merging accounts (#29694 by @ClearlyClaire) - Fix results/query in `api/v1/featured_tags/suggestions` (#29597 by @mjankowski) @@ -322,6 +536,7 @@ The following changelog entries focus on changes visible to users, administrator - Fix full date display not respecting the locale 12/24h format (#29448 by @renchap) - Fix filters title and keywords overflow (#29396 by @GeopJr) - Fix incorrect date format in “Follows and followers” (#29390 by @JasonPunyon) +- Fix navigation item active highlight for some paths (#32159 by @mjankowski) - Fix “Edit media” modal sizing and layout when space-constrained (#27095 by @ronilaukkarinen) - Fix modal container bounds (#29185 by @nico3333fr) - Fix inefficient HTTP signature parsing using regexps and `StringScanner` (#29133 by @ClearlyClaire) diff --git a/Dockerfile b/Dockerfile index c7c02d9b46..bb4e8947aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -92,6 +92,9 @@ RUN \ # Set /opt/mastodon as working directory WORKDIR /opt/mastodon +# Add backport repository for some specific packages where we need the latest version +RUN echo 'deb http://deb.debian.org/debian bookworm-backports main' >> /etc/apt/sources.list + # hadolint ignore=DL3008,DL3005 RUN \ # Mount Apt cache and lib directories from Docker buildx caches @@ -150,6 +153,7 @@ RUN \ libpq-dev \ libssl-dev \ libtool \ + libyaml-dev \ meson \ nasm \ pkg-config \ @@ -160,7 +164,7 @@ RUN \ libexif-dev \ libexpat1-dev \ libgirepository1.0-dev \ - libheif-dev \ + libheif-dev/bookworm-backports \ libimagequant-dev \ libjpeg62-turbo-dev \ liblcms2-dev \ @@ -343,7 +347,7 @@ RUN \ # libvips components libcgif0 \ libexif12 \ - libheif1 \ + libheif1/bookworm-backports \ libimagequant0 \ libjpeg62-turbo \ liblcms2-2 \ diff --git a/Gemfile.lock b/Gemfile.lock index b85d97761d..130296745a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,35 +10,35 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.1.4) - actionpack (= 7.1.4) - activesupport (= 7.1.4) + actioncable (7.1.5.1) + actionpack (= 7.1.5.1) + activesupport (= 7.1.5.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.4) - actionpack (= 7.1.4) - activejob (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) + actionmailbox (7.1.5.1) + actionpack (= 7.1.5.1) + activejob (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.1.4) - actionpack (= 7.1.4) - actionview (= 7.1.4) - activejob (= 7.1.4) - activesupport (= 7.1.4) + actionmailer (7.1.5.1) + actionpack (= 7.1.5.1) + actionview (= 7.1.5.1) + activejob (= 7.1.5.1) + activesupport (= 7.1.5.1) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.2) - actionpack (7.1.4) - actionview (= 7.1.4) - activesupport (= 7.1.4) + actionpack (7.1.5.1) + actionview (= 7.1.5.1) + activesupport (= 7.1.5.1) nokogiri (>= 1.8.5) racc rack (>= 2.2.4) @@ -46,15 +46,15 @@ GEM rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.4) - actionpack (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) + actiontext (7.1.5.1) + actionpack (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.4) - activesupport (= 7.1.4) + actionview (7.1.5.1) + activesupport (= 7.1.5.1) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) @@ -64,30 +64,33 @@ GEM activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) - activejob (7.1.4) - activesupport (= 7.1.4) + activejob (7.1.5.1) + activesupport (= 7.1.5.1) globalid (>= 0.3.6) - activemodel (7.1.4) - activesupport (= 7.1.4) - activerecord (7.1.4) - activemodel (= 7.1.4) - activesupport (= 7.1.4) + activemodel (7.1.5.1) + activesupport (= 7.1.5.1) + activerecord (7.1.5.1) + activemodel (= 7.1.5.1) + activesupport (= 7.1.5.1) timeout (>= 0.4.0) - activestorage (7.1.4) - actionpack (= 7.1.4) - activejob (= 7.1.4) - activerecord (= 7.1.4) - activesupport (= 7.1.4) + activestorage (7.1.5.1) + actionpack (= 7.1.5.1) + activejob (= 7.1.5.1) + activerecord (= 7.1.5.1) + activesupport (= 7.1.5.1) marcel (~> 1.0) - activesupport (7.1.4) + activesupport (7.1.5.1) base64 + benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) mutex_m + securerandom (>= 0.3) tzinfo (~> 2.0) addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) @@ -126,6 +129,7 @@ GEM base64 (0.2.0) bcp47_spec (0.2.1) bcrypt (3.1.20) + benchmark (0.4.0) better_errors (2.10.1) erubi (>= 1.0.0) rack (>= 0.9.0) @@ -186,7 +190,7 @@ GEM activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) - date (3.3.4) + date (3.4.1) debug (1.9.2) irb (~> 1.10) reline (>= 0.3.8) @@ -262,15 +266,15 @@ GEM faraday (~> 1.0) fast_blank (1.0.1) fastimage (2.3.1) - ffi (1.16.3) + ffi (1.17.1) ffi-compiler (1.3.2) ffi (>= 1.15.5) rake - flatware (2.3.3) + flatware (2.3.4) drb thor (< 2.0) - flatware-rspec (2.3.3) - flatware (= 2.3.3) + flatware-rspec (2.3.4) + flatware (= 2.3.4) rspec (>= 3.6) fog-core (2.5.0) builder @@ -406,7 +410,7 @@ GEM llhttp-ffi (0.5.0) ffi-compiler (~> 1.0) rake (~> 13.0) - logger (1.6.1) + logger (1.6.6) lograge (0.14.0) actionpack (>= 4) activesupport (>= 4) @@ -433,7 +437,7 @@ GEM mime-types-data (~> 3.2015) mime-types-data (3.2024.0820) mini_mime (1.1.5) - mini_portile2 (2.8.7) + mini_portile2 (2.8.8) minitest (5.25.1) msgpack (1.7.2) multi_json (1.15.0) @@ -443,7 +447,7 @@ GEM uri net-http-persistent (4.0.2) connection_pool (~> 2.2) - net-imap (0.4.15) + net-imap (0.5.8) date net-protocol net-ldap (0.19.0) @@ -451,16 +455,16 @@ GEM net-protocol net-protocol (0.2.2) timeout - net-smtp (0.5.0) + net-smtp (0.5.1) net-protocol nio4r (2.7.3) - nokogiri (1.16.7) + nokogiri (1.18.8) mini_portile2 (~> 2.8.2) racc (~> 1.4) oj (3.16.6) bigdecimal (>= 3.0) ostruct (>= 0.2) - omniauth (2.1.2) + omniauth (2.1.3) hashie (>= 3.4.6) rack (>= 2.2.3) rack-protection @@ -471,9 +475,9 @@ GEM omniauth-rails_csrf_protection (1.0.2) actionpack (>= 4.2) omniauth (~> 2.0) - omniauth-saml (2.2.1) + omniauth-saml (2.2.3) omniauth (~> 2.1) - ruby-saml (~> 1.17) + ruby-saml (~> 1.18) omniauth_openid_connect (0.6.1) omniauth (>= 1.9, < 3) openid_connect (~> 1.1) @@ -601,7 +605,7 @@ GEM actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - propshaft (1.0.1) + propshaft (1.1.0) actionpack (>= 7.0.0) activesupport (>= 7.0.0) rack @@ -615,7 +619,7 @@ GEM activesupport (>= 3.0.0) raabro (1.4.0) racc (1.8.1) - rack (2.2.9) + rack (2.2.13) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (2.0.2) @@ -638,20 +642,20 @@ GEM rackup (1.0.0) rack (< 3) webrick - rails (7.1.4) - actioncable (= 7.1.4) - actionmailbox (= 7.1.4) - actionmailer (= 7.1.4) - actionpack (= 7.1.4) - actiontext (= 7.1.4) - actionview (= 7.1.4) - activejob (= 7.1.4) - activemodel (= 7.1.4) - activerecord (= 7.1.4) - activestorage (= 7.1.4) - activesupport (= 7.1.4) + rails (7.1.5.1) + actioncable (= 7.1.5.1) + actionmailbox (= 7.1.5.1) + actionmailer (= 7.1.5.1) + actionpack (= 7.1.5.1) + actiontext (= 7.1.5.1) + actionview (= 7.1.5.1) + activejob (= 7.1.5.1) + activemodel (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) bundler (>= 1.15.0) - railties (= 7.1.4) + railties (= 7.1.5.1) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) actionview (>= 5.0.1.rc1) @@ -660,15 +664,15 @@ GEM activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.6.0) + rails-html-sanitizer (1.6.2) loofah (~> 2.21) - nokogiri (~> 1.14) + nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) rails-i18n (7.0.9) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.1.4) - actionpack (= 7.1.4) - activesupport (= 7.1.4) + railties (7.1.5.1) + actionpack (= 7.1.5.1) + activesupport (= 7.1.5.1) irb rackup (>= 1.0.0) rake (>= 12.2) @@ -698,7 +702,7 @@ GEM responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.3.7) + rexml (3.3.9) rotp (6.3.0) rouge (4.3.0) rpam2 (4.0.2) @@ -748,25 +752,25 @@ GEM parser (>= 3.3.1.0) rubocop-capybara (2.21.0) rubocop (~> 1.41) - rubocop-performance (1.21.1) + rubocop-performance (1.22.1) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rails (2.25.1) + rubocop-rails (2.26.2) activesupport (>= 4.2.0) rack (>= 1.1) - rubocop (>= 1.33.0, < 2.0) + rubocop (>= 1.52.0, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (3.0.4) + rubocop-rspec (3.0.5) rubocop (~> 1.61) rubocop-rspec_rails (2.30.0) rubocop (~> 1.61) rubocop-rspec (~> 3, >= 3.0.1) ruby-prof (1.7.0) ruby-progressbar (1.13.0) - ruby-saml (1.17.0) + ruby-saml (1.18.0) nokogiri (>= 1.13.10) rexml - ruby-vips (2.2.2) + ruby-vips (2.2.3) ffi (~> 1.12) logger ruby2_keywords (0.0.5) @@ -781,6 +785,7 @@ GEM scenic (1.8.0) activerecord (>= 4.0.0) railties (>= 4.0.0) + securerandom (0.4.1) selenium-webdriver (4.25.0) base64 (~> 0.2) logger (~> 1.4) @@ -837,7 +842,7 @@ GEM test-prof (1.4.2) thor (1.3.2) tilt (2.4.0) - timeout (0.4.1) + timeout (0.4.3) tpm-key_attestation (0.12.1) bindata (~> 2.4) openssl (> 2.0) @@ -863,7 +868,7 @@ GEM unf_ext unf_ext (0.0.9.1) unicode-display_width (2.5.0) - uri (0.13.1) + uri (0.13.2) validate_email (0.1.6) activemodel (>= 3.0) mail (>= 2.2.5) @@ -884,7 +889,7 @@ GEM webfinger (1.2.0) activesupport httpclient (>= 2.4) - webmock (3.23.1) + webmock (3.24.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -1060,4 +1065,4 @@ RUBY VERSION ruby 3.3.4p94 BUNDLED WITH - 2.5.18 + 2.6.5 diff --git a/app/controllers/admin/announcements_controller.rb b/app/controllers/admin/announcements_controller.rb index 8f9708183a..12230a6506 100644 --- a/app/controllers/admin/announcements_controller.rb +++ b/app/controllers/admin/announcements_controller.rb @@ -6,6 +6,7 @@ class Admin::AnnouncementsController < Admin::BaseController def index authorize :announcement, :index? + @published_announcements_count = Announcement.published.async_count end def new diff --git a/app/controllers/admin/disputes/appeals_controller.rb b/app/controllers/admin/disputes/appeals_controller.rb index 5e342409b0..0c41553676 100644 --- a/app/controllers/admin/disputes/appeals_controller.rb +++ b/app/controllers/admin/disputes/appeals_controller.rb @@ -6,6 +6,7 @@ class Admin::Disputes::AppealsController < Admin::BaseController def index authorize :appeal, :index? + @pending_appeals_count = Appeal.pending.async_count @appeals = filtered_appeals.page(params[:page]) end diff --git a/app/controllers/admin/trends/links/preview_card_providers_controller.rb b/app/controllers/admin/trends/links/preview_card_providers_controller.rb index 768b79f8db..5e4b4084f8 100644 --- a/app/controllers/admin/trends/links/preview_card_providers_controller.rb +++ b/app/controllers/admin/trends/links/preview_card_providers_controller.rb @@ -4,6 +4,7 @@ class Admin::Trends::Links::PreviewCardProvidersController < Admin::BaseControll def index authorize :preview_card_provider, :review? + @pending_preview_card_providers_count = PreviewCardProvider.unreviewed.async_count @preview_card_providers = filtered_preview_card_providers.page(params[:page]) @form = Trends::PreviewCardProviderBatch.new end diff --git a/app/controllers/admin/trends/tags_controller.rb b/app/controllers/admin/trends/tags_controller.rb index f5946448ae..fcd23fbf66 100644 --- a/app/controllers/admin/trends/tags_controller.rb +++ b/app/controllers/admin/trends/tags_controller.rb @@ -4,6 +4,7 @@ class Admin::Trends::TagsController < Admin::BaseController def index authorize :tag, :review? + @pending_tags_count = Tag.pending_review.async_count @tags = filtered_tags.page(params[:page]) @form = Trends::TagBatch.new end diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index 06a113511c..b73dae17e5 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -72,6 +72,13 @@ class Api::BaseController < ApplicationController end end + # Redefine `require_functional!` to properly output JSON instead of HTML redirects + def require_functional! + return if current_user.functional? + + require_user! + end + def render_empty render json: {}, status: 200 end diff --git a/app/controllers/api/v1/accounts/credentials_controller.rb b/app/controllers/api/v1/accounts/credentials_controller.rb index 7488fdec7c..4f7d79beca 100644 --- a/app/controllers/api/v1/accounts/credentials_controller.rb +++ b/app/controllers/api/v1/accounts/credentials_controller.rb @@ -14,7 +14,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController @account = current_account UpdateAccountService.new.call(@account, account_params, raise_error: true) current_user.update(user_params) if user_params - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id) render json: @account, serializer: REST::CredentialAccountSerializer rescue ActiveRecord::RecordInvalid => e render json: ValidationErrorFormatter.new(e).as_json, status: 422 diff --git a/app/controllers/api/v1/accounts/exclude_antennas_controller.rb b/app/controllers/api/v1/accounts/exclude_antennas_controller.rb index c1f5c5981c..65d75dbc6e 100644 --- a/app/controllers/api/v1/accounts/exclude_antennas_controller.rb +++ b/app/controllers/api/v1/accounts/exclude_antennas_controller.rb @@ -6,7 +6,7 @@ class Api::V1::Accounts::ExcludeAntennasController < Api::BaseController before_action :set_account def index - @antennas = @account.suspended? ? [] : current_account.antennas.where('exclude_accounts @> \'[?]\'', @account.id) + @antennas = @account.suspended? ? [] : current_account.antennas.where("exclude_accounts @> '#{@account.id}'") render json: @antennas, each_serializer: REST::AntennaSerializer end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 6e55236c42..050d13b0c8 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -16,6 +16,7 @@ class Api::V1::AccountsController < Api::BaseController before_action :check_account_confirmation, except: [:index, :create] before_action :check_enabled_registrations, only: [:create] before_action :check_accounts_limit, only: [:index] + before_action :check_following_self, only: [:follow] skip_before_action :require_authenticated_user!, only: :create @@ -106,6 +107,10 @@ class Api::V1::AccountsController < Api::BaseController raise(Mastodon::ValidationError) if account_ids.size > DEFAULT_ACCOUNTS_LIMIT end + def check_following_self + render json: { error: I18n.t('accounts.self_follow_error') }, status: 403 if current_user.account.id == @account.id + end + def relationships(**options) AccountRelationshipsPresenter.new([@account], current_user.account_id, **options) end diff --git a/app/controllers/api/v1/antennas_controller.rb b/app/controllers/api/v1/antennas_controller.rb index 37bfb7f552..7cb0c5f093 100644 --- a/app/controllers/api/v1/antennas_controller.rb +++ b/app/controllers/api/v1/antennas_controller.rb @@ -21,7 +21,7 @@ class Api::V1::AntennasController < Api::BaseController end def create - @antenna = Antenna.create!(antenna_params.merge(account: current_account, list_id: 0)) + @antenna = Antenna.create!({ list_id: 0 }.merge(antenna_params.merge(account: current_account))) render json: @antenna, serializer: REST::AntennaSerializer end diff --git a/app/controllers/api/v1/instances/domain_blocks_controller.rb b/app/controllers/api/v1/instances/domain_blocks_controller.rb index 7ec94312f4..bf96fbaaa8 100644 --- a/app/controllers/api/v1/instances/domain_blocks_controller.rb +++ b/app/controllers/api/v1/instances/domain_blocks_controller.rb @@ -31,7 +31,7 @@ class Api::V1::Instances::DomainBlocksController < Api::V1::Instances::BaseContr end def show_domain_blocks_to_user? - Setting.show_domain_blocks == 'users' && user_signed_in? + Setting.show_domain_blocks == 'users' && user_signed_in? && current_user.functional_or_moved? end def set_domain_blocks @@ -47,6 +47,6 @@ class Api::V1::Instances::DomainBlocksController < Api::V1::Instances::BaseContr end def show_rationale_for_user? - Setting.show_domain_blocks_rationale == 'users' && user_signed_in? + Setting.show_domain_blocks_rationale == 'users' && user_signed_in? && current_user.functional_or_moved? end end diff --git a/app/controllers/api/v1/notifications/requests_controller.rb b/app/controllers/api/v1/notifications/requests_controller.rb index 36ee073b9c..3c90f13ce2 100644 --- a/app/controllers/api/v1/notifications/requests_controller.rb +++ b/app/controllers/api/v1/notifications/requests_controller.rb @@ -52,7 +52,7 @@ class Api::V1::Notifications::RequestsController < Api::BaseController private def load_requests - requests = NotificationRequest.where(account: current_account).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( + requests = NotificationRequest.where(account: current_account).without_suspended.includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( limit_param(DEFAULT_ACCOUNTS_LIMIT), params_slice(:max_id, :since_id, :min_id) ) diff --git a/app/controllers/api/v1/profile/avatars_controller.rb b/app/controllers/api/v1/profile/avatars_controller.rb index bc4d01a597..e6c954ed63 100644 --- a/app/controllers/api/v1/profile/avatars_controller.rb +++ b/app/controllers/api/v1/profile/avatars_controller.rb @@ -7,7 +7,7 @@ class Api::V1::Profile::AvatarsController < Api::BaseController def destroy @account = current_account UpdateAccountService.new.call(@account, { avatar: nil }, raise_error: true) - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id) render json: @account, serializer: REST::CredentialAccountSerializer end end diff --git a/app/controllers/api/v1/profile/headers_controller.rb b/app/controllers/api/v1/profile/headers_controller.rb index 9f4daa2f77..4472a01b05 100644 --- a/app/controllers/api/v1/profile/headers_controller.rb +++ b/app/controllers/api/v1/profile/headers_controller.rb @@ -7,7 +7,7 @@ class Api::V1::Profile::HeadersController < Api::BaseController def destroy @account = current_account UpdateAccountService.new.call(@account, { header: nil }, raise_error: true) - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id) render json: @account, serializer: REST::CredentialAccountSerializer end end diff --git a/app/controllers/api/v1/statuses/translations_controller.rb b/app/controllers/api/v1/statuses/translations_controller.rb index 8cf495f78a..bd5cd9bb07 100644 --- a/app/controllers/api/v1/statuses/translations_controller.rb +++ b/app/controllers/api/v1/statuses/translations_controller.rb @@ -23,6 +23,6 @@ class Api::V1::Statuses::TranslationsController < Api::V1::Statuses::BaseControl private def set_translation - @translation = TranslateStatusService.new.call(@status, content_locale) + @translation = TranslateStatusService.new.call(@status, I18n.locale.to_s) end end diff --git a/app/controllers/api/v2/notifications_controller.rb b/app/controllers/api/v2/notifications_controller.rb index c070c0e5e7..848c361cfc 100644 --- a/app/controllers/api/v2/notifications_controller.rb +++ b/app/controllers/api/v2/notifications_controller.rb @@ -46,7 +46,7 @@ class Api::V2::NotificationsController < Api::BaseController end def show - @notification = current_account.notifications.without_suspended.find_by!(group_key: params[:group_key]) + @notification = current_account.notifications.without_suspended.by_group_key(params[:group_key]).take! presenter = GroupedNotificationsPresenter.new(NotificationGroup.from_notifications([@notification])) render json: presenter, serializer: REST::DedupNotificationGroupSerializer end @@ -57,7 +57,7 @@ class Api::V2::NotificationsController < Api::BaseController end def dismiss - current_account.notifications.where(group_key: params[:group_key]).destroy_all + current_account.notifications.by_group_key(params[:group_key]).destroy_all render_empty end @@ -80,10 +80,31 @@ class Api::V2::NotificationsController < Api::BaseController return [] if @notifications.empty? MastodonOTELTracer.in_span('Api::V2::NotificationsController#load_grouped_notifications') do - NotificationGroup.from_notifications(@notifications, pagination_range: (@notifications.last.id)..(@notifications.first.id), grouped_types: params[:grouped_types]) + pagination_range = (@notifications.last.id)..@notifications.first.id + + # If the page is incomplete, we know we are on the last page + if incomplete_page? + if paginating_up? + pagination_range = @notifications.last.id...(params[:max_id]&.to_i) + else + range_start = params[:since_id]&.to_i + range_start += 1 unless range_start.nil? + pagination_range = range_start..(@notifications.first.id) + end + end + + NotificationGroup.from_notifications(@notifications, pagination_range: pagination_range, grouped_types: params[:grouped_types]) end end + def incomplete_page? + @notifications.size < limit_param(DEFAULT_NOTIFICATIONS_LIMIT) + end + + def paginating_up? + params[:min_id].present? + end + def browserable_account_notifications current_account.notifications.without_suspended.browserable( types: Array(browserable_params[:types]), diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 62e3355ae6..081b435811 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -71,7 +71,23 @@ class ApplicationController < ActionController::Base end def require_functional! - redirect_to edit_user_registration_path unless current_user.functional? + return if current_user.functional? + + respond_to do |format| + format.any do + redirect_to edit_user_registration_path + end + + format.json do + if !current_user.confirmed? + render json: { error: 'Your login is missing a confirmed e-mail address' }, status: 403 + elsif !current_user.approved? + render json: { error: 'Your login is currently pending approval' }, status: 403 + elsif !current_user.functional? + render json: { error: 'Your login is currently disabled' }, status: 403 + end + end + end end def skip_csrf_meta_tags? diff --git a/app/controllers/backups_controller.rb b/app/controllers/backups_controller.rb index 5df1af5f2f..076d19874b 100644 --- a/app/controllers/backups_controller.rb +++ b/app/controllers/backups_controller.rb @@ -9,13 +9,15 @@ class BackupsController < ApplicationController before_action :authenticate_user! before_action :set_backup + BACKUP_LINK_TIMEOUT = 1.hour.freeze + def download case Paperclip::Attachment.default_options[:storage] when :s3, :azure - redirect_to @backup.dump.expiring_url(10), allow_other_host: true + redirect_to @backup.dump.expiring_url(BACKUP_LINK_TIMEOUT.to_i), allow_other_host: true when :fog if Paperclip::Attachment.default_options.dig(:fog_credentials, :openstack_temp_url_key).present? - redirect_to @backup.dump.expiring_url(Time.now.utc + 10), allow_other_host: true + redirect_to @backup.dump.expiring_url(BACKUP_LINK_TIMEOUT.from_now), allow_other_host: true else redirect_to full_asset_url(@backup.dump.url), allow_other_host: true end diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index 68f09ee023..deabacbc80 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -117,7 +117,7 @@ module SignatureVerification def verify_signature_strength! raise SignatureVerificationError, 'Mastodon requires the Date header or (created) pseudo-header to be signed' unless signed_headers.include?('date') || signed_headers.include?('(created)') - raise SignatureVerificationError, 'Mastodon requires the Digest header or (request-target) pseudo-header to be signed' unless signed_headers.include?(Request::REQUEST_TARGET) || signed_headers.include?('digest') + raise SignatureVerificationError, 'Mastodon requires the Digest header or (request-target) pseudo-header to be signed' unless signed_headers.include?(HttpSignatureDraft::REQUEST_TARGET) || signed_headers.include?('digest') raise SignatureVerificationError, 'Mastodon requires the Host header to be signed when doing a GET request' if request.get? && !signed_headers.include?('host') raise SignatureVerificationError, 'Mastodon requires the Digest header to be signed when doing a POST request' if request.post? && !signed_headers.include?('digest') end @@ -155,14 +155,14 @@ module SignatureVerification def build_signed_string(include_query_string: true) signed_headers.map do |signed_header| case signed_header - when Request::REQUEST_TARGET + when HttpSignatureDraft::REQUEST_TARGET if include_query_string - "#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.original_fullpath}" + "#{HttpSignatureDraft::REQUEST_TARGET}: #{request.method.downcase} #{request.original_fullpath}" else # Current versions of Mastodon incorrectly omit the query string from the (request-target) pseudo-header. # Therefore, temporarily support such incorrect signatures for compatibility. # TODO: remove eventually some time after release of the fixed version - "#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.path}" + "#{HttpSignatureDraft::REQUEST_TARGET}: #{request.method.downcase} #{request.path}" end when '(created)' raise SignatureVerificationError, 'Invalid pseudo-header (created) for rsa-sha256' unless signature_algorithm == 'hs2019' diff --git a/app/controllers/concerns/web_app_controller_concern.rb b/app/controllers/concerns/web_app_controller_concern.rb index ebbdba59af..9485ecda49 100644 --- a/app/controllers/concerns/web_app_controller_concern.rb +++ b/app/controllers/concerns/web_app_controller_concern.rb @@ -13,7 +13,7 @@ module WebAppControllerConcern policy = ContentSecurityPolicy.new if policy.sso_host.present? - p.form_action policy.sso_host + p.form_action policy.sso_host, -> { "https://#{request.host}/auth/auth/" } else p.form_action :none end diff --git a/app/controllers/settings/pictures_controller.rb b/app/controllers/settings/pictures_controller.rb index 58a4325307..7e61e6d580 100644 --- a/app/controllers/settings/pictures_controller.rb +++ b/app/controllers/settings/pictures_controller.rb @@ -8,7 +8,7 @@ module Settings def destroy if valid_picture? if UpdateAccountService.new.call(@account, { @picture => nil, "#{@picture}_remote_url" => '' }) - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id) redirect_to settings_profile_path, notice: I18n.t('generic.changes_saved_msg'), status: 303 else redirect_to settings_profile_path diff --git a/app/controllers/settings/privacy_controller.rb b/app/controllers/settings/privacy_controller.rb index 1102c89fad..6c4836ec56 100644 --- a/app/controllers/settings/privacy_controller.rb +++ b/app/controllers/settings/privacy_controller.rb @@ -8,7 +8,7 @@ class Settings::PrivacyController < Settings::BaseController def update if UpdateAccountService.new.call(@account, account_params.except(:settings)) current_user.update!(settings_attributes: account_params[:settings]) - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id) redirect_to settings_privacy_path, notice: I18n.t('generic.changes_saved_msg') else render :show diff --git a/app/controllers/settings/privacy_extra_controller.rb b/app/controllers/settings/privacy_extra_controller.rb index 54cedf2c4b..b09a93a21f 100644 --- a/app/controllers/settings/privacy_extra_controller.rb +++ b/app/controllers/settings/privacy_extra_controller.rb @@ -8,7 +8,7 @@ class Settings::PrivacyExtraController < Settings::BaseController def update if UpdateAccountService.new.call(@account, account_params.except(:settings)) current_user.update!(settings_attributes: account_params[:settings]) - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id) redirect_to settings_privacy_extra_path, notice: I18n.t('generic.changes_saved_msg') else render :show diff --git a/app/controllers/settings/profiles_controller.rb b/app/controllers/settings/profiles_controller.rb index dc759a060b..1db9673eb7 100644 --- a/app/controllers/settings/profiles_controller.rb +++ b/app/controllers/settings/profiles_controller.rb @@ -9,7 +9,7 @@ class Settings::ProfilesController < Settings::BaseController def update if UpdateAccountService.new.call(@account, account_params) - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id) redirect_to settings_profile_path, notice: I18n.t('generic.changes_saved_msg') else @account.build_fields diff --git a/app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb b/app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb index 0bff01ec27..ca8d46afe4 100644 --- a/app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb +++ b/app/controllers/settings/two_factor_authentication/otp_authentication_controller.rb @@ -15,7 +15,7 @@ module Settings end def create - session[:new_otp_secret] = User.generate_otp_secret(32) + session[:new_otp_secret] = User.generate_otp_secret redirect_to new_settings_two_factor_authentication_confirmation_path end diff --git a/app/controllers/settings/verifications_controller.rb b/app/controllers/settings/verifications_controller.rb index 4e0663253c..7575be3a78 100644 --- a/app/controllers/settings/verifications_controller.rb +++ b/app/controllers/settings/verifications_controller.rb @@ -8,7 +8,7 @@ class Settings::VerificationsController < Settings::BaseController def update if UpdateAccountService.new.call(@account, account_params) - ActivityPub::UpdateDistributionWorker.perform_async(@account.id) + ActivityPub::UpdateDistributionWorker.perform_in(ActivityPub::UpdateDistributionWorker::DEBOUNCE_DELAY, @account.id) redirect_to settings_verification_path, notice: I18n.t('generic.changes_saved_msg') else render :show diff --git a/app/controllers/well_known/host_meta_controller.rb b/app/controllers/well_known/host_meta_controller.rb index 201da9fbc3..6dee587baf 100644 --- a/app/controllers/well_known/host_meta_controller.rb +++ b/app/controllers/well_known/host_meta_controller.rb @@ -7,7 +7,23 @@ module WellKnown def show @webfinger_template = "#{webfinger_url}?resource={uri}" expires_in 3.days, public: true - render content_type: 'application/xrd+xml', formats: [:xml] + + respond_to do |format| + format.any do + render content_type: 'application/xrd+xml', formats: [:xml] + end + + format.json do + render json: { + links: [ + { + rel: 'lrdd', + template: @webfinger_template, + }, + ], + } + end + end end end end diff --git a/app/helpers/admin/action_logs_helper.rb b/app/helpers/admin/action_logs_helper.rb index f3bf60d830..54a99dec29 100644 --- a/app/helpers/admin/action_logs_helper.rb +++ b/app/helpers/admin/action_logs_helper.rb @@ -37,4 +37,11 @@ module Admin::ActionLogsHelper end end end + + def sorted_action_log_types + Admin::ActionLogFilter::ACTION_TYPE_MAP + .keys + .map { |key| [I18n.t("admin.action_logs.action_types.#{key}"), key] } + .sort_by(&:first) + end end diff --git a/app/helpers/admin/dashboard_helper.rb b/app/helpers/admin/dashboard_helper.rb index 6096ff1381..f87fdad708 100644 --- a/app/helpers/admin/dashboard_helper.rb +++ b/app/helpers/admin/dashboard_helper.rb @@ -18,6 +18,11 @@ module Admin::DashboardHelper end end + def date_range(range) + [l(range.first), l(range.last)] + .join(' - ') + end + def relevant_account_timestamp(account) timestamp, exact = if account.user_current_sign_in_at && account.user_current_sign_in_at < 24.hours.ago [account.user_current_sign_in_at, true] @@ -25,6 +30,8 @@ module Admin::DashboardHelper [account.user_current_sign_in_at, false] elsif account.user_pending? [account.user_created_at, true] + elsif account.suspended_at.present? && account.local? && account.user.nil? + [account.suspended_at, true] elsif account.last_status_at.present? [account.last_status_at, true] else diff --git a/app/helpers/admin/trends/statuses_helper.rb b/app/helpers/admin/trends/statuses_helper.rb index c7a59660cf..33da1f7216 100644 --- a/app/helpers/admin/trends/statuses_helper.rb +++ b/app/helpers/admin/trends/statuses_helper.rb @@ -2,11 +2,18 @@ module Admin::Trends::StatusesHelper def one_line_preview(status) - text = if status.local? - status.text.split("\n").first - else - Nokogiri::HTML5(status.text).css('html > body > *').first&.text - end + text = begin + if status.local? + status.text.split("\n").first + else + Nokogiri::HTML5(status.text).css('html > body > *').first&.text + end + rescue ArgumentError + # This can happen if one of the Nokogumbo limits is encountered + # Unfortunately, it does not use a more precise error class + # nor allows more graceful handling + '' + end return '' if text.blank? diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 36fa883906..8b7fbde207 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -3,12 +3,6 @@ module ApplicationHelper include RegistrationLimitationHelper - DANGEROUS_SCOPES = %w( - read - write - follow - ).freeze - RTL_LOCALES = %i( ar ckb @@ -87,7 +81,7 @@ module ApplicationHelper def html_title safe_join( - [content_for(:page_title).to_s.chomp, title] + [content_for(:page_title), title] .compact_blank, ' - ' ) @@ -97,8 +91,11 @@ module ApplicationHelper Rails.env.production? ? site_title : "#{site_title} (Dev)" end - def class_for_scope(scope) - 'scope-danger' if DANGEROUS_SCOPES.include?(scope.to_s) + def label_for_scope(scope) + safe_join [ + tag.samp(scope, class: { 'scope-danger' => SessionActivation::DEFAULT_SCOPES.include?(scope.to_s) }), + tag.span(t("doorkeeper.scopes.#{scope}"), class: :hint), + ] end def can?(action, record) @@ -266,6 +263,15 @@ module ApplicationHelper current_account&.user&.custom_css&.updated_at.to_s end + def copyable_input(options = {}) + tag.input(type: :text, maxlength: 999, spellcheck: false, readonly: true, **options) + end + + def recent_tag_usage(tag) + people = tag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts + I18n.t 'user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(people), count: people + end + private def storage_host_var diff --git a/app/helpers/context_helper.rb b/app/helpers/context_helper.rb index 03ca88670f..efcb3a5cd5 100644 --- a/app/helpers/context_helper.rb +++ b/app/helpers/context_helper.rb @@ -34,6 +34,13 @@ module ContextHelper license: { 'schema' => 'http://schema.org#', 'license' => 'schema:license' }, suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' }, attribution_domains: { 'toot' => 'http://joinmastodon.org/ns#', 'attributionDomains' => { '@id' => 'toot:attributionDomains', '@type' => '@id' } }, + interaction_policies: { + 'gts' => 'https://gotosocial.org/ns#', + 'interactionPolicy' => { '@id' => 'gts:interactionPolicy', '@type' => '@id' }, + 'canQuote' => { '@id' => 'gts:canQuote', '@type' => '@id' }, + 'automaticApproval' => { '@id' => 'gts:automaticApproval', '@type' => '@id' }, + 'manualApproval' => { '@id' => 'gts:manualApproval', '@type' => '@id' }, + }, }.freeze def full_context diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index b6c09b7314..c0c8001eaa 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -162,7 +162,7 @@ module LanguagesHelper th: ['Thai', 'ไทย'].freeze, ti: ['Tigrinya', 'ትግርኛ'].freeze, tk: ['Turkmen', 'Türkmen'].freeze, - tl: ['Tagalog', 'Wikang Tagalog'].freeze, + tl: ['Tagalog', 'Tagalog'].freeze, tn: ['Tswana', 'Setswana'].freeze, to: ['Tonga', 'faka Tonga'].freeze, tr: ['Turkish', 'Türkçe'].freeze, diff --git a/app/helpers/webfinger_helper.rb b/app/helpers/webfinger_helper.rb deleted file mode 100644 index 482f4e19ea..0000000000 --- a/app/helpers/webfinger_helper.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -module WebfingerHelper - def webfinger!(uri) - Webfinger.new(uri).perform - end -end diff --git a/app/javascript/entrypoints/sign_up.ts b/app/javascript/entrypoints/sign_up.ts index 880738fcb7..87100be56d 100644 --- a/app/javascript/entrypoints/sign_up.ts +++ b/app/javascript/entrypoints/sign_up.ts @@ -4,9 +4,12 @@ import axios from 'axios'; import ready from '../mastodon/ready'; async function checkConfirmation() { - const response = await axios.get('/api/v1/emails/check_confirmation'); + const response = await axios.get('/api/v1/emails/check_confirmation', { + headers: { Accept: 'application/json' }, + withCredentials: true, + }); - if (response.data) { + if (response.status === 200 && response.data === true) { window.location.href = '/start'; } } diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js index d9e9fef0c6..1cadcb79e4 100644 --- a/app/javascript/mastodon/actions/importer/normalizer.js +++ b/app/javascript/mastodon/actions/importer/normalizer.js @@ -97,6 +97,17 @@ export function normalizeStatus(status, normalOldStatus) { normalStatus.contentHtml = emojify(normalStatus.content, emojiMap); normalStatus.spoilerHtml = emojify(escapeTextContentForBrowser(spoilerText), emojiMap); normalStatus.hidden = expandSpoilers ? false : spoilerText.length > 0 || normalStatus.sensitive; + + if (normalStatus.url && !(normalStatus.url.startsWith('http://') || normalStatus.url.startsWith('https://'))) { + normalStatus.url = null; + } + + normalStatus.url ||= normalStatus.uri; + + normalStatus.media_attachments.forEach(item => { + if (item.remote_url && !(item.remote_url.startsWith('http://') || item.remote_url.startsWith('https://'))) + item.remote_url = null; + }); } if (normalOldStatus) { diff --git a/app/javascript/mastodon/actions/markers.ts b/app/javascript/mastodon/actions/markers.ts index 0b3280c212..251546cb9a 100644 --- a/app/javascript/mastodon/actions/markers.ts +++ b/app/javascript/mastodon/actions/markers.ts @@ -37,8 +37,7 @@ export const synchronouslySubmitMarkers = createAppAsyncThunk( }); return; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - } else if ('navigator' && 'sendBeacon' in navigator) { + } else if ('sendBeacon' in navigator) { // Failing that, we can use sendBeacon, but we have to encode the data as // FormData for DoorKeeper to recognize the token. const formData = new FormData(); diff --git a/app/javascript/mastodon/actions/notification_groups.ts b/app/javascript/mastodon/actions/notification_groups.ts index 40dd0521cf..77fbc198e8 100644 --- a/app/javascript/mastodon/actions/notification_groups.ts +++ b/app/javascript/mastodon/actions/notification_groups.ts @@ -8,6 +8,7 @@ import type { ApiAccountJSON } from 'mastodon/api_types/accounts'; import type { ApiNotificationGroupJSON, ApiNotificationJSON, + NotificationType, } from 'mastodon/api_types/notifications'; import { allNotificationTypes } from 'mastodon/api_types/notifications'; import type { ApiStatusJSON } from 'mastodon/api_types/statuses'; @@ -15,6 +16,7 @@ import { usePendingItems } from 'mastodon/initial_state'; import type { NotificationGap } from 'mastodon/reducers/notification_groups'; import { selectSettingsNotificationsExcludedTypes, + selectSettingsNotificationsGroupFollows, selectSettingsNotificationsQuickFilterActive, selectSettingsNotificationsShows, } from 'mastodon/selectors/settings'; @@ -68,17 +70,19 @@ function dispatchAssociatedRecords( dispatch(importFetchedStatuses(fetchedStatuses)); } -const supportedGroupedNotificationTypes = [ - 'favourite', - 'reblog', - 'emoji_reaction', -]; +function selectNotificationGroupedTypes(state: RootState) { + const types: NotificationType[] = ['favourite', 'reblog', 'emoji_reaction']; + + if (selectSettingsNotificationsGroupFollows(state)) types.push('follow'); + + return types; +} export const fetchNotifications = createDataLoadingThunk( 'notificationGroups/fetch', async (_params, { getState }) => apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), exclude_types: getExcludedTypes(getState()), }), ({ notifications, accounts, statuses }, { dispatch }) => { @@ -102,7 +106,7 @@ export const fetchNotificationsGap = createDataLoadingThunk( 'notificationGroups/fetchGap', async (params: { gap: NotificationGap }, { getState }) => apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), max_id: params.gap.maxId, exclude_types: getExcludedTypes(getState()), }), @@ -119,7 +123,7 @@ export const pollRecentNotifications = createDataLoadingThunk( 'notificationGroups/pollRecentNotifications', async (_params, { getState }) => { return apiFetchNotificationGroups({ - grouped_types: supportedGroupedNotificationTypes, + grouped_types: selectNotificationGroupedTypes(getState()), max_id: undefined, exclude_types: getExcludedTypes(getState()), // In slow mode, we don't want to include notifications that duplicate the already-displayed ones @@ -137,6 +141,9 @@ export const pollRecentNotifications = createDataLoadingThunk( return { notifications }; }, + { + useLoadingBar: false, + }, ); export const processNewNotificationForGroups = createAppAsyncThunk( @@ -148,7 +155,7 @@ export const processNewNotificationForGroups = createAppAsyncThunk( const showInColumn = activeFilter === 'all' - ? notificationShows[notification.type] + ? notificationShows[notification.type] !== false : activeFilter === notification.type; if (!showInColumn) return; @@ -168,7 +175,10 @@ export const processNewNotificationForGroups = createAppAsyncThunk( dispatchAssociatedRecords(dispatch, [notification]); - return notification; + return { + notification, + groupedTypes: selectNotificationGroupedTypes(state), + }; }, ); diff --git a/app/javascript/mastodon/api_types/accounts.ts b/app/javascript/mastodon/api_types/accounts.ts index a9464b1a47..80d575cad6 100644 --- a/app/javascript/mastodon/api_types/accounts.ts +++ b/app/javascript/mastodon/api_types/accounts.ts @@ -39,7 +39,7 @@ export interface ApiServerFeaturesJSON { } // See app/serializers/rest/account_serializer.rb -export interface ApiAccountJSON { +export interface BaseApiAccountJSON { acct: string; avatar: string; avatar_static: string; @@ -74,3 +74,12 @@ export interface ApiAccountJSON { memorial?: boolean; hide_collections: boolean; } + +// See app/serializers/rest/muted_account_serializer.rb +export interface ApiMutedAccountJSON extends BaseApiAccountJSON { + mute_expires_at?: string | null; +} + +// For now, we have the same type representing both `Account` and `MutedAccount` +// objects, but we should refactor this in the future. +export type ApiAccountJSON = ApiMutedAccountJSON; diff --git a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap index 2f0a2de324..124b50d8c7 100644 --- a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap +++ b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap @@ -2,7 +2,7 @@ exports[` Autoplay renders a animated avatar 1`] = `
Autoplay renders a animated avatar 1`] = ` >
@@ -21,7 +23,7 @@ exports[` Autoplay renders a animated avatar 1`] = ` exports[` Still renders a still avatar 1`] = `
Still renders a still avatar 1`] = ` >
diff --git a/app/javascript/mastodon/components/avatar.tsx b/app/javascript/mastodon/components/avatar.tsx index 8b16296c2c..f61d9676de 100644 --- a/app/javascript/mastodon/components/avatar.tsx +++ b/app/javascript/mastodon/components/avatar.tsx @@ -1,10 +1,11 @@ +import { useState, useCallback } from 'react'; + import classNames from 'classnames'; +import { useHovering } from 'mastodon/../hooks/useHovering'; +import { autoPlayGif } from 'mastodon/initial_state'; import type { Account } from 'mastodon/models/account'; -import { useHovering } from '../../hooks/useHovering'; -import { autoPlayGif } from '../initial_state'; - interface Props { account: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there size: number; @@ -25,6 +26,8 @@ export const Avatar: React.FC = ({ counterBorderColor, }) => { const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(false); const style = { ...styleFromParent, @@ -37,16 +40,28 @@ export const Avatar: React.FC = ({ ? account?.get('avatar') : account?.get('avatar_static'); + const handleLoad = useCallback(() => { + setLoading(false); + }, [setLoading]); + + const handleError = useCallback(() => { + setError(true); + }, [setError]); + return (
- {src && } + {src && !error && ( + + )} + {counter && (

diff --git a/app/javascript/mastodon/components/filter_warning.tsx b/app/javascript/mastodon/components/filter_warning.tsx index 4305e43038..5eaaac4ba3 100644 --- a/app/javascript/mastodon/components/filter_warning.tsx +++ b/app/javascript/mastodon/components/filter_warning.tsx @@ -10,13 +10,16 @@ export const FilterWarning: React.FC<{

{chunks}, + }} />

diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index 671fd1a648..e0641f62e3 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -113,12 +113,12 @@ class Item extends PureComponent { width = 25; } - if (attachment.get('description')?.length > 0) { - badges.push(); - } - const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); + if (description?.length > 0) { + badges.push(); + } + if (attachment.get('type') === 'unknown') { return (
@@ -212,7 +212,7 @@ class Item extends PureComponent { {visible && thumbnail} - {badges && ( + {visible && badges && (
{badges}
@@ -366,14 +366,14 @@ class MediaGallery extends PureComponent { return (
+ {children} + {(!visible || uncached) && (
{spoilerButton}
)} - {children} - {(visible && !uncached) && (
diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 4d5e036a9b..893b93b484 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -340,7 +340,7 @@ class Status extends ImmutablePureComponent { const { onToggleHidden } = this.props; const status = this._properStatus(); - if (status.get('matched_filters')) { + if (this.props.status.get('matched_filters')) { const expandedBecauseOfCW = !status.get('hidden') || status.get('spoiler_text').length === 0; const expandedBecauseOfFilter = this.state.showDespiteFilter; @@ -477,7 +477,7 @@ class Status extends ImmutablePureComponent { media={status.get('media_attachments')} /> ); - } else if (['image', 'gifv'].includes(status.getIn(['media_attachments', 0, 'type'])) || status.get('media_attachments').size > 1) { + } else if (['image', 'gifv', 'unknown'].includes(status.getIn(['media_attachments', 0, 'type'])) || status.get('media_attachments').size > 1) { media = ( {Component => ( diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index ebc62bd651..2f636ddbd9 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -11,7 +11,6 @@ import { connect } from 'react-redux'; import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg'; import BookmarkBorderIcon from '@/material-icons/400-24px/bookmark.svg?react'; -import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; @@ -166,8 +165,6 @@ class StatusActionBar extends ImmutablePureComponent { } }; - handleEmojiPickInnerButton = () => {}; - handleReblogClick = e => { const { signedIn } = this.props.identity; @@ -316,14 +313,14 @@ class StatusActionBar extends ImmutablePureComponent { if (publicStatus && isRemote) { menu.push({ text: intl.formatMessage(messages.openOriginalPage), href: status.get('url') }); } - + menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy }); - + if (publicStatus && 'share' in navigator) { menu.push({ text: intl.formatMessage(messages.share), action: this.handleShareClick }); } - - if (anonymousStatus && (signedIn || !isRemote)) { + + if (anonymousStatus && !isRemote) { menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed }); } } @@ -485,9 +482,7 @@ class StatusActionBar extends ImmutablePureComponent { const denyFromAll = emojiReactionPolicy !== 'block' && emojiReactionPolicy !== 'block'; const emojiPickerDropdown = (enableEmojiReaction && emojiReactionAvailableServer && denyFromAll && (writtenByMe || (following && followed && mutual && outside)) && (
- - )} /> +
)) || (enableEmojiReaction && (
diff --git a/app/javascript/mastodon/components/status_banner.tsx b/app/javascript/mastodon/components/status_banner.tsx index 8ff17a9b2e..d25c05d6db 100644 --- a/app/javascript/mastodon/components/status_banner.tsx +++ b/app/javascript/mastodon/components/status_banner.tsx @@ -1,8 +1,8 @@ import { FormattedMessage } from 'react-intl'; export enum BannerVariant { - Yellow = 'yellow', - Blue = 'blue', + Warning = 'warning', + Filter = 'filter', } export const StatusBanner: React.FC<{ @@ -11,9 +11,9 @@ export const StatusBanner: React.FC<{ expanded?: boolean; onClick?: () => void; }> = ({ children, variant, expanded, onClick }) => ( -
+ ) : variant === BannerVariant.Warning ? ( + ) : ( )} -
+ ); diff --git a/app/javascript/mastodon/containers/compose_container.jsx b/app/javascript/mastodon/containers/compose_container.jsx index 171f14d3b2..788c654316 100644 --- a/app/javascript/mastodon/containers/compose_container.jsx +++ b/app/javascript/mastodon/containers/compose_container.jsx @@ -1,5 +1,6 @@ import { Provider } from 'react-redux'; +import { fetchCircles } from 'mastodon/actions/circles'; import { fetchCustomEmojis } from 'mastodon/actions/custom_emojis'; import { hydrateStore } from 'mastodon/actions/store'; import { Router } from 'mastodon/components/router'; @@ -13,6 +14,7 @@ if (initialState) { } store.dispatch(fetchCustomEmojis()); +store.dispatch(fetchCircles()); const ComposeContainer = () => ( diff --git a/app/javascript/mastodon/features/bookmarked_statuses/index.jsx b/app/javascript/mastodon/features/bookmarked_statuses/index.jsx index 93be1c6b2e..284342d4ee 100644 --- a/app/javascript/mastodon/features/bookmarked_statuses/index.jsx +++ b/app/javascript/mastodon/features/bookmarked_statuses/index.jsx @@ -101,6 +101,7 @@ class Bookmarks extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} emptyMessage={emptyMessage} bindToDocument={!multiColumn} + timelineId='bookmarks' /> diff --git a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx index 43795d030f..dac873c8e4 100644 --- a/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx +++ b/app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.jsx @@ -325,6 +325,7 @@ class EmojiPickerDropdown extends PureComponent { onPickEmoji: PropTypes.func.isRequired, onSkinTone: PropTypes.func.isRequired, skinTone: PropTypes.number.isRequired, + inverted: PropTypes.bool, }; state = { @@ -387,7 +388,7 @@ class EmojiPickerDropdown extends PureComponent { }; render () { - const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis } = this.props; + const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis, inverted } = this.props; const title = intl.formatMessage(messages.emoji); const { active, loading, placement } = this.state; @@ -399,7 +400,7 @@ class EmojiPickerDropdown extends PureComponent { active={active} iconComponent={MoodIcon} onClick={this.onToggle} - inverted + inverted={typeof(inverted) === 'undefined' || inverted} /> diff --git a/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js b/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js index 9d6ff5226a..35804de82a 100644 --- a/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js +++ b/app/javascript/mastodon/features/emoji/__tests__/emoji-test.js @@ -22,23 +22,23 @@ describe('emoji', () => { it('does unicode', () => { expect(emojify('\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66')).toEqual( - '👩‍👩‍👦‍👦'); + '👩‍👩‍👦‍👦'); expect(emojify('👨‍👩‍👧‍👧')).toEqual( - '👨‍👩‍👧‍👧'); - expect(emojify('👩‍👩‍👦')).toEqual('👩‍👩‍👦'); + '👨‍👩‍👧‍👧'); + expect(emojify('👩‍👩‍👦')).toEqual('👩‍👩‍👦'); expect(emojify('\u2757')).toEqual( - '❗'); + '❗'); }); it('does multiple unicode', () => { expect(emojify('\u2757 #\uFE0F\u20E3')).toEqual( - '❗ #️⃣'); + '❗ #️⃣'); expect(emojify('\u2757#\uFE0F\u20E3')).toEqual( - '❗#️⃣'); + '❗#️⃣'); expect(emojify('\u2757 #\uFE0F\u20E3 \u2757')).toEqual( - '❗ #️⃣ ❗'); + '❗ #️⃣ ❗'); expect(emojify('foo \u2757 #\uFE0F\u20E3 bar')).toEqual( - 'foo ❗ #️⃣ bar'); + 'foo ❗ #️⃣ bar'); }); it('ignores unicode inside of tags', () => { @@ -46,16 +46,16 @@ describe('emoji', () => { }); it('does multiple emoji properly (issue 5188)', () => { - expect(emojify('👌🌈💕')).toEqual('👌🌈💕'); - expect(emojify('👌 🌈 💕')).toEqual('👌 🌈 💕'); + expect(emojify('👌🌈💕')).toEqual('👌🌈💕'); + expect(emojify('👌 🌈 💕')).toEqual('👌 🌈 💕'); }); it('does an emoji that has no shortcode', () => { - expect(emojify('👁‍🗨')).toEqual('👁‍🗨'); + expect(emojify('👁‍🗨')).toEqual('👁‍🗨'); }); it('does an emoji whose filename is irregular', () => { - expect(emojify('↙️')).toEqual('↙️'); + expect(emojify('↙️')).toEqual('↙️'); }); it('avoid emojifying on invisible text', () => { @@ -67,11 +67,11 @@ describe('emoji', () => { it('avoid emojifying on invisible text with nested tags', () => { expect(emojify('😇')) - .toEqual('😇'); + .toEqual('😇'); expect(emojify('😇')) - .toEqual('😇'); + .toEqual('😇'); expect(emojify('😇')) - .toEqual('😇'); + .toEqual('😇'); }); it('does not emojify emojis with textual presentation VS15 character', () => { @@ -81,17 +81,17 @@ describe('emoji', () => { it('does a simple emoji properly', () => { expect(emojify('♀♂')) - .toEqual('♀♂'); + .toEqual('♀♂'); }); it('does an emoji containing ZWJ properly', () => { expect(emojify('💂‍♀️💂‍♂️')) - .toEqual('💂\u200D♀️💂\u200D♂️'); + .toEqual('💂\u200D♀️💂\u200D♂️'); }); it('keeps ordering as expected (issue fixed by PR 20677)', () => { - expect(emojify('

💕 #foo test: foo.

')) - .toEqual('

💕 #foo test: foo.

'); + expect(emojify('

💕 #foo test: foo.

')) + .toEqual('

💕 #foo test: foo.

'); }); }); }); diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js index 1f469aced7..66dcd89488 100644 --- a/app/javascript/mastodon/features/emoji/emoji.js +++ b/app/javascript/mastodon/features/emoji/emoji.js @@ -97,30 +97,30 @@ const emojifyTextNode = (node, customEmojis) => { const { filename, shortCode } = unicodeMapping[unicode_emoji]; const title = shortCode ? `:${shortCode}:` : ''; - replacement = document.createElement('picture'); - const isSystemTheme = !!document.body?.classList.contains('theme-system'); - if(isSystemTheme) { - let source = document.createElement('source'); - source.setAttribute('media', '(prefers-color-scheme: dark)'); - source.setAttribute('srcset', `${assetHost}/emoji/${emojiFilename(filename, "dark")}.svg`); - replacement.appendChild(source); - } + const theme = (isSystemTheme || document.body?.classList.contains('theme-mastodon-light')) ? 'light' : 'dark'; - let img = document.createElement('img'); + const imageFilename = emojiFilename(filename, theme); + + const img = document.createElement('img'); img.setAttribute('draggable', 'false'); img.setAttribute('class', 'emojione'); img.setAttribute('alt', unicode_emoji); img.setAttribute('title', title); + img.setAttribute('src', `${assetHost}/emoji/${imageFilename}.svg`); - let theme = "light"; + if (isSystemTheme && imageFilename !== emojiFilename(filename, 'dark')) { + replacement = document.createElement('picture'); - if(!isSystemTheme && !document.body?.classList.contains('theme-mastodon-light')) - theme = "dark"; - - img.setAttribute('src', `${assetHost}/emoji/${emojiFilename(filename, theme)}.svg`); - replacement.appendChild(img); + const source = document.createElement('source'); + source.setAttribute('media', '(prefers-color-scheme: dark)'); + source.setAttribute('srcset', `${assetHost}/emoji/${emojiFilename(filename, 'dark')}.svg`); + replacement.appendChild(source); + replacement.appendChild(img); + } else { + replacement = img; + } } // Add the processed-up-to-now string and the emoji replacement @@ -135,7 +135,7 @@ const emojifyTextNode = (node, customEmojis) => { }; const emojifyNode = (node, customEmojis) => { - for (const child of node.childNodes) { + for (const child of Array.from(node.childNodes)) { switch(child.nodeType) { case Node.TEXT_NODE: emojifyTextNode(child, customEmojis); diff --git a/app/javascript/mastodon/features/favourited_statuses/index.jsx b/app/javascript/mastodon/features/favourited_statuses/index.jsx index f7d6d14178..9049a20f05 100644 --- a/app/javascript/mastodon/features/favourited_statuses/index.jsx +++ b/app/javascript/mastodon/features/favourited_statuses/index.jsx @@ -101,6 +101,7 @@ class Favourites extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} emptyMessage={emptyMessage} bindToDocument={!multiColumn} + timelineId='favourites' /> diff --git a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx index 1b8040e55b..3269b5a497 100644 --- a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx +++ b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx @@ -129,8 +129,13 @@ export const InlineFollowSuggestions = ({ hidden }) => { return; } - setCanScrollLeft(bodyRef.current.scrollLeft > 0); - setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth); + if (getComputedStyle(bodyRef.current).direction === 'rtl') { + setCanScrollLeft((bodyRef.current.clientWidth - bodyRef.current.scrollLeft) < bodyRef.current.scrollWidth); + setCanScrollRight(bodyRef.current.scrollLeft < 0); + } else { + setCanScrollLeft(bodyRef.current.scrollLeft > 0); + setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth); + } }, [setCanScrollRight, setCanScrollLeft, bodyRef, suggestions]); const handleLeftNav = useCallback(() => { @@ -146,8 +151,13 @@ export const InlineFollowSuggestions = ({ hidden }) => { return; } - setCanScrollLeft(bodyRef.current.scrollLeft > 0); - setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth); + if (getComputedStyle(bodyRef.current).direction === 'rtl') { + setCanScrollLeft((bodyRef.current.clientWidth - bodyRef.current.scrollLeft) < bodyRef.current.scrollWidth); + setCanScrollRight(bodyRef.current.scrollLeft < 0); + } else { + setCanScrollLeft(bodyRef.current.scrollLeft > 0); + setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth); + } }, [setCanScrollRight, setCanScrollLeft, bodyRef]); const handleDismiss = useCallback(() => { diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.jsx b/app/javascript/mastodon/features/notifications/components/column_settings.jsx index d5185e2bc9..e8f02f1718 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.jsx +++ b/app/javascript/mastodon/features/notifications/components/column_settings.jsx @@ -44,6 +44,7 @@ class ColumnSettings extends PureComponent { const alertStr = ; const showStr = ; const soundStr = ; + const groupStr = ; const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed'); const pushStr = showPushSettings && ; @@ -100,6 +101,7 @@ class ColumnSettings extends PureComponent { {showPushSettings && } +
diff --git a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js index 8bcc7ab4ef..4ac6cfa629 100644 --- a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js @@ -56,11 +56,12 @@ const mapDispatchToProps = (dispatch) => ({ } else { dispatch(changeSetting(['notifications', ...path], checked)); } - } else if(path[0] === 'groupingBeta') { - dispatch(changeSetting(['notifications', ...path], checked)); - dispatch(initializeNotifications()); } else { dispatch(changeSetting(['notifications', ...path], checked)); + + if(path[0] === 'group' && path[1] === 'follow') { + dispatch(initializeNotifications()); + } } }, diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx index 6a9a45d242..a00f6267c5 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_follow.tsx @@ -1,16 +1,19 @@ import { FormattedMessage } from 'react-intl'; +import { Link } from 'react-router-dom'; + import PersonAddIcon from '@/material-icons/400-24px/person_add-fill.svg?react'; import { FollowersCounter } from 'mastodon/components/counters'; import { FollowButton } from 'mastodon/components/follow_button'; import { ShortNumber } from 'mastodon/components/short_number'; +import { me } from 'mastodon/initial_state'; import type { NotificationGroupFollow } from 'mastodon/models/notification_group'; import { useAppSelector } from 'mastodon/store'; import type { LabelRenderer } from './notification_group_with_status'; import { NotificationGroupWithStatus } from './notification_group_with_status'; -const labelRenderer: LabelRenderer = (displayedName, total) => { +const labelRenderer: LabelRenderer = (displayedName, total, seeMoreHref) => { if (total === 1) return ( { return ( + seeMoreHref ? {chunks} : chunks, }} /> ); @@ -37,8 +42,14 @@ const FollowerCount: React.FC<{ accountId: string }> = ({ accountId }) => { if (!account) return null; + const isHide = account.other_settings.hide_followers_count; + return ( - + ); }; @@ -46,6 +57,10 @@ export const NotificationFollow: React.FC<{ notification: NotificationGroupFollow; unread: boolean; }> = ({ notification, unread }) => { + const username = useAppSelector( + (state) => state.accounts.getIn([me, 'username']) as string, + ); + let actions: JSX.Element | undefined; let additionalContent: JSX.Element | undefined; @@ -68,6 +83,7 @@ export const NotificationFollow: React.FC<{ timestamp={notification.latest_page_notification_at} count={notification.notifications_count} labelRenderer={labelRenderer} + labelSeeMoreHref={`/@${username}/followers`} unread={unread} actions={actions} additionalContent={additionalContent} diff --git a/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx b/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx index 6541227355..47efc57d4e 100644 --- a/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx +++ b/app/javascript/mastodon/features/notifications_v2/components/notification_with_status.tsx @@ -13,6 +13,7 @@ import { import type { IconProp } from 'mastodon/components/icon'; import { Icon } from 'mastodon/components/icon'; import Status from 'mastodon/containers/status_container'; +import { getStatusHidden } from 'mastodon/selectors/filters'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; import { DisplayedName } from './displayed_name'; @@ -50,6 +51,12 @@ export const NotificationWithStatus: React.FC<{ (state) => state.statuses.getIn([statusId, 'visibility']) === 'direct', ); + const isFiltered = useAppSelector( + (state) => + statusId && + getStatusHidden(state, { id: statusId, contextType: 'notifications' }), + ); + const handlers = useMemo( () => ({ open: () => { @@ -75,7 +82,7 @@ export const NotificationWithStatus: React.FC<{ [dispatch, statusId], ); - if (!statusId) return null; + if (!statusId || isFiltered) return null; return ( diff --git a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx index 5c9be49e7a..ec6d52c8cd 100644 --- a/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx +++ b/app/javascript/mastodon/features/picture_in_picture/components/footer.jsx @@ -14,6 +14,8 @@ import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; import StarIcon from '@/material-icons/400-24px/star.svg?react'; +import RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react'; +import RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react'; import { replyCompose } from 'mastodon/actions/compose'; import { toggleReblog, toggleFavourite } from 'mastodon/actions/interactions'; import { openModal } from 'mastodon/actions/modal'; @@ -159,22 +161,26 @@ class Footer extends ImmutablePureComponent { replyTitle = intl.formatMessage(messages.replyAll); } - let reblogTitle = ''; + let reblogTitle, reblogIconComponent; if (status.get('reblogged')) { reblogTitle = intl.formatMessage(messages.cancel_reblog_private); + reblogIconComponent = publicStatus ? RepeatIcon : RepeatPrivateIcon; } else if (publicStatus) { reblogTitle = intl.formatMessage(messages.reblog); + reblogIconComponent = RepeatIcon; } else if (reblogPrivate) { reblogTitle = intl.formatMessage(messages.reblog_private); + reblogIconComponent = RepeatPrivateIcon; } else { reblogTitle = intl.formatMessage(messages.cannot_reblog); + reblogIconComponent = RepeatDisabledIcon; } return (
- + {withOpenButton && }
diff --git a/app/javascript/mastodon/features/status/components/action_bar.jsx b/app/javascript/mastodon/features/status/components/action_bar.jsx index 7aaa809bd8..86aa4ba699 100644 --- a/app/javascript/mastodon/features/status/components/action_bar.jsx +++ b/app/javascript/mastodon/features/status/components/action_bar.jsx @@ -11,7 +11,6 @@ import { connect } from 'react-redux'; import BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg?react'; import BookmarkBorderIcon from '@/material-icons/400-24px/bookmark.svg?react'; -import EmojiReactionIcon from '@/material-icons/400-24px/mood.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; @@ -232,8 +231,6 @@ class ActionBar extends PureComponent { this.props.onEmojiReact(this.props.status, data); }; - handleEmojiPickInnerButton = () => {}; - render () { const { status, relationship, intl } = this.props; const { signedIn, permissions } = this.props.identity; @@ -401,9 +398,7 @@ class ActionBar extends PureComponent { const denyFromAll = emojiReactionPolicy !== 'block' && emojiReactionPolicy !== 'block'; const emojiPickerDropdown = (enableEmojiReaction && emojiReactionAvailableServer && denyFromAll && (writtenByMe || (following && followed && mutual && outside)) && (
- - )} /> +
)) || (enableEmojiReaction && (
diff --git a/app/javascript/mastodon/features/status/components/detailed_status.tsx b/app/javascript/mastodon/features/status/components/detailed_status.tsx index 8d4505dc80..017fcaa17b 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.tsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.tsx @@ -15,6 +15,7 @@ import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?re import { AnimatedNumber } from 'mastodon/components/animated_number'; import { ContentWarning } from 'mastodon/components/content_warning'; import EditedTimestamp from 'mastodon/components/edited_timestamp'; +import { FilterWarning } from 'mastodon/components/filter_warning'; import type { StatusLike } from 'mastodon/components/hashtag_bar'; import { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar'; import { Icon } from 'mastodon/components/icon'; @@ -78,6 +79,7 @@ export const DetailedStatus: React.FC<{ }) => { const properStatus = status?.get('reblog') ?? status; const [height, setHeight] = useState(0); + const [showDespiteFilter, setShowDespiteFilter] = useState(false); const nodeRef = useRef(); const handleOpenVideo = useCallback( @@ -90,6 +92,10 @@ export const DetailedStatus: React.FC<{ [onOpenVideo, status], ); + const handleFilterToggle = useCallback(() => { + setShowDespiteFilter(!showDespiteFilter); + }, [showDespiteFilter, setShowDespiteFilter]); + const handleExpandedToggle = useCallback(() => { if (onToggleHidden) onToggleHidden(status); }, [onToggleHidden, status]); @@ -163,7 +169,7 @@ export const DetailedStatus: React.FC<{ media = ; } else if (status.get('media_attachments').size > 0) { if ( - ['image', 'gifv'].includes( + ['image', 'gifv', 'unknown'].includes( status.getIn(['media_attachments', 0, 'type']) as string, ) || status.get('media_attachments').size > 1 @@ -235,7 +241,7 @@ export const DetailedStatus: React.FC<{ ); } @@ -367,8 +373,12 @@ export const DetailedStatus: React.FC<{ const { statusContentProps, hashtagBar } = getHashtagBarForStatus( status as StatusLike, ); + + const matchedFilters = status.get('matched_filters'); + const expanded = - !status.get('hidden') || status.get('spoiler_text').length === 0; + (!matchedFilters || showDespiteFilter) && + (!status.get('hidden') || status.get('spoiler_text').length === 0); const quote = !muted && status.get('quote_id') && ( <> @@ -412,17 +422,26 @@ export const DetailedStatus: React.FC<{ )} - {status.get('spoiler_text').length > 0 && ( - )} + {status.get('spoiler_text').length > 0 && + (!matchedFilters || showDespiteFilter) && ( + + )} + {expanded && ( <> { }); const mapStateToProps = (state, props) => { - const status = getStatus(state, { id: props.params.statusId }); + const status = getStatus(state, { id: props.params.statusId, contextType: 'detailed' }); let ancestorsIds = Immutable.List(); let descendantsIds = Immutable.List(); diff --git a/app/javascript/mastodon/features/ui/components/mute_modal.jsx b/app/javascript/mastodon/features/ui/components/mute_modal.jsx index 70d95b5931..90b88030a0 100644 --- a/app/javascript/mastodon/features/ui/components/mute_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/mute_modal.jsx @@ -116,6 +116,7 @@ export const MuteModal = ({ accountId, acct }) => {
+ diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 18830708db..419212a4bf 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -84,6 +84,7 @@ "alert.rate_limited.title": "معدل الطلبات محدود", "alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.", "alert.unexpected.title": "المعذرة!", + "alt_text_badge.title": "نص بديل", "announcement.announcement": "إعلان", "attachments_list.unprocessed": "(غير معالَج)", "audio.hide": "إخفاء المقطع الصوتي", @@ -195,6 +196,7 @@ "confirmations.unfollow.title": "إلغاء متابعة المستخدم؟", "content_warning.hide": "إخفاء المنشور", "content_warning.show": "إظهار على أي حال", + "content_warning.show_more": "إظهار المزيد", "conversation.delete": "احذف المحادثة", "conversation.mark_as_read": "اعتبرها كمقروءة", "conversation.open": "اعرض المحادثة", @@ -301,7 +303,6 @@ "filter_modal.select_filter.subtitle": "استخدم فئة موجودة أو قم بإنشاء فئة جديدة", "filter_modal.select_filter.title": "تصفية هذا المنشور", "filter_modal.title.status": "تصفية منشور", - "filter_warning.matches_filter": "يطابق عامل التصفية \"{title}\"", "filtered_notifications_banner.title": "الإشعارات المصفاة", "firehose.all": "الكل", "firehose.local": "هذا الخادم", @@ -490,6 +491,7 @@ "notification.label.private_reply": "رد خاص", "notification.label.reply": "ردّ", "notification.mention": "إشارة", + "notification.mentioned_you": "أشارَ إليك {name}", "notification.moderation-warning.learn_more": "اعرف المزيد", "notification.moderation_warning": "لقد تلقيت تحذيرًا بالإشراف", "notification.moderation_warning.action_delete_statuses": "تم حذف بعض من منشوراتك.", @@ -758,7 +760,7 @@ "status.history.edited": "عدله {name} {date}", "status.load_more": "حمّل المزيد", "status.media.open": "اضغط للفتح", - "status.media.show": "اضغط لإظهاره", + "status.media.show": "اضغط لإظهارها", "status.media_hidden": "وسائط مخفية", "status.mention": "أذكُر @{name}", "status.more": "المزيد", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 219ea0d17c..01430c9e2d 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -4,32 +4,38 @@ "about.disclaimer": "Mastodon ye software gratuito y de códigu llibre, y una marca rexistrada de Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "El motivu nun ta disponible", "about.domain_blocks.preamble": "Polo xeneral, Mastodon permítete ver el conteníu ya interactuar colos perfiles d'otros sirvidores nel fediversu. Estes son les esceiciones que se ficieron nesti sirvidor.", - "about.domain_blocks.silenced.explanation": "Polo xeneral, nun ves los perfiles ya'l conteníu d'esti sirvidor sacante que los busques o decidas siguilos.", + "about.domain_blocks.silenced.explanation": "Polo xeneral, nun ves los perfiles y el conteníu d'esti sirvidor sacante que los busques o decidas siguilos.", "about.domain_blocks.silenced.title": "Llendóse", - "about.domain_blocks.suspended.explanation": "Nun se procesa, atroxa nin intercambia nengún datu d'esti sirvidor, lo que fai que cualesquier interaición o comunicación colos sos perfiles seya imposible.", + "about.domain_blocks.suspended.explanation": "Nun se procesa, atroxa nin intercambia nengún datu d'esti sirvidor, lo que fai imposible cualesquier interaición o comunicación colos sos perfiles.", "about.domain_blocks.suspended.title": "Suspendióse", "about.not_available": "Esta información nun ta disponible nesti sirvidor.", "about.powered_by": "Una rede social descentralizada que tien la teunoloxía de {mastodon}", "about.rules": "Normes del sirvidor", "account.account_note_header": "Nota personal", "account.add_or_remove_from_list": "Amestar o quitar de les llistes", + "account.badges.bot": "Automatizóse", "account.badges.group": "Grupu", "account.block": "Bloquiar a @{name}", "account.block_domain": "Bloquiar el dominiu {domain}", + "account.block_short": "Bloquiar", "account.blocked": "Perfil bloquiáu", + "account.copy": "Copiar l'enlllaz al perfil", "account.direct": "Mentar a @{name} per privao", "account.disable_notifications": "Dexar d'avisame cuando @{name} espublice artículos", "account.domain_blocked": "Dominiu bloquiáu", "account.edit_profile": "Editar el perfil", "account.enable_notifications": "Avisame cuando @{name} espublice artículos", "account.endorse": "Destacar nel perfil", - "account.featured_tags.last_status_never": "Nun hai nengún artículu", + "account.featured_tags.last_status_never": "Nun hai nenguna publicación", "account.featured_tags.title": "Etiquetes destacaes de: {name}", "account.follow": "Siguir", + "account.follow_back": "Siguir tamién", "account.followers": "Siguidores", "account.followers.empty": "Naide sigue a esti perfil.", + "account.following": "Siguiendo", "account.follows.empty": "Esti perfil nun sigue a naide.", - "account.hide_reblogs": "Anubrir los artículos compartíos de @{name}", + "account.go_to_profile": "Dir al perfil", + "account.hide_reblogs": "Esconder los artículos compartíos de @{name}", "account.in_memoriam": "N'alcordanza.", "account.joined_short": "Data de xunión", "account.link_verified_on": "La propiedá d'esti enllaz comprobóse'l {date}", @@ -37,6 +43,8 @@ "account.mention": "Mentar a @{name}", "account.moved_to": "{name} indicó qu'agora la so cuenta nueva ye:", "account.mute": "Desactivar los avisos de @{name}", + "account.mute_notifications_short": "Silenciar avisos", + "account.mute_short": "Silenciar", "account.no_bio": "Nun se fornió nenguna descripción.", "account.open_original_page": "Abrir la páxina orixinal", "account.posts": "Artículos", @@ -47,9 +55,11 @@ "account.show_reblogs": "Amosar los artículos compartíos de @{name}", "account.unblock": "Desbloquiar a @{name}", "account.unblock_domain": "Desbloquiar el dominiu «{domain}»", + "account.unblock_short": "Desbloquiar", "account.unendorse": "Dexar de destacar nel perfil", "account.unfollow": "Dexar de siguir", "account.unmute": "Activar los avisos de @{name}", + "account.unmute_notifications_short": "Dexar de silenciar notificaciones", "account.unmute_short": "Activar los avisos", "account_note.placeholder": "Calca equí p'amestar una nota", "admin.dashboard.retention.average": "Media", @@ -58,15 +68,25 @@ "alert.rate_limited.message": "Volvi tentalo dempués de la hora: {retry_time, time, medium}.", "alert.unexpected.message": "Prodúxose un error inesperáu.", "alert.unexpected.title": "¡Meca!", + "alt_text_badge.title": "Testu alternativu", "announcement.announcement": "Anunciu", "attachments_list.unprocessed": "(ensin procesar)", + "block_modal.show_less": "Amosar menos", + "block_modal.show_more": "Amosar más", + "block_modal.they_cant_mention": "Nun van poder mencionate o siguite.", + "block_modal.they_cant_see_posts": "Nun pueden ver les tos espublizaciones y tu nun podrás ver les suyes.", + "block_modal.you_wont_see_mentions": "Nun verás espublizaciones que-yos mencionen.", "bundle_column_error.error.body": "La páxina solicitada nun se pudo renderizar. Ye posible que seya pola mor d'un fallu nel códigu o por un problema de compatibilidá del restolador.", "bundle_column_error.error.title": "¡Oh, non!", "bundle_column_error.network.body": "Hebo un error al tentar de cargar esta páxina. Esto pudo ser pola mor d'un problema temporal cola conexón a internet o con esti sirvidor.", + "bundle_column_error.network.title": "Fallu de rede", + "bundle_column_error.retry": "Retentar", "bundle_column_error.return": "Volver al aniciu", "bundle_column_error.routing.body": "Nun se pudo atopar la páxina solicitada. ¿De xuru que la URL de la barra de direiciones ta bien escrita?", "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "Zarrar", "bundle_modal_error.message": "Asocedió daqué malo mentanto se cargaba esti componente.", + "bundle_modal_error.retry": "Retentar", "closed_registrations.other_server_instructions": "Darréu que Mastodon ye una rede social descentralizada, pues crear una cuenta n'otru sirvidor y siguir interactuando con esti.", "closed_registrations_modal.description": "Anguaño nun ye posible crear cuentes en {domain}, mas ten en cuenta que nun precises una cuenta nesti sirvidor pa usar Mastodon.", "closed_registrations_modal.find_another_server": "Atopar otru sirvidor", @@ -78,6 +98,8 @@ "column.community": "Llinia de tiempu llocal", "column.direct": "Menciones privaes", "column.domain_blocks": "Dominios bloquiaos", + "column.favourites": "Favoritos", + "column.firehose": "Feed en direuto", "column.follow_requests": "Solicitúes de siguimientu", "column.home": "Aniciu", "column.lists": "Llistes", @@ -96,7 +118,9 @@ "community.column_settings.remote_only": "Namás lo remoto", "compose.language.change": "Camudar la llingua", "compose.language.search": "Buscar llingües…", - "compose.published.body": "Espublizóse l'artículu.", + "compose.published.body": "Publicóse la publicación.", + "compose.published.open": "Abrir", + "compose.saved.body": "Guardóse la publicación.", "compose_form.direct_message_warning_learn_more": "Saber más", "compose_form.encryption_warning": "Los artículos de Mastodon nun tán cifraos de puntu a puntu. Nun compartas nengún tipu d'información sensible per Mastodon.", "compose_form.lock_disclaimer": "La to cuenta nun ye {locked}. Cualesquier perfil pue siguite pa ver los artículos que son namás pa siguidores.", @@ -104,33 +128,55 @@ "compose_form.placeholder": "¿En qué pienses?", "compose_form.poll.option_placeholder": "Opción {number}", "compose_form.poll.type": "Tipu", - "compose_form.publish_form": "Artículu nuevu", + "compose_form.publish": "Espublizar", + "compose_form.publish_form": "Publicación nueva", + "compose_form.reply": "Responder", "confirmation_modal.cancel": "Encaboxar", "confirmations.block.confirm": "Bloquiar", "confirmations.delete.confirm": "Desaniciar", - "confirmations.delete.message": "¿De xuru que quies desaniciar esti artículu?", + "confirmations.delete.message": "¿De xuru que quies desaniciar esta publicación?", + "confirmations.delete.title": "¿Quies desaniciar esta publicación?", "confirmations.delete_list.confirm": "Desaniciar", + "confirmations.delete_list.message": "¿De xuru que quies desaniciar permanentemente esta llista?", + "confirmations.delete_list.title": "¿Quies desaniciar la llista?", "confirmations.discard_edit_media.confirm": "Escartar", + "confirmations.edit.confirm": "Editar", "confirmations.edit.message": "La edición va sobrescribir el mensaxe que tas escribiendo. ¿De xuru que quies siguir?", "confirmations.logout.confirm": "Zarrar la sesión", "confirmations.logout.message": "¿De xuru que quies zarrar la sesión?", + "confirmations.logout.title": "¿Quies zarrar la sesión?", "confirmations.redraft.confirm": "Desaniciar y reeditar", + "confirmations.redraft.title": "¿Desaniciar y reeditar la publicación?", "confirmations.reply.confirm": "Responder", + "confirmations.reply.message": "Responder agora va sobrescribir el mensaxe que tas componiendo anguaño. ¿De xuru que quies siguir?", "confirmations.unfollow.confirm": "Dexar de siguir", "confirmations.unfollow.message": "¿De xuru que quies dexar de siguir a {name}?", + "confirmations.unfollow.title": "¿Dexar de siguir al usuariu?", + "content_warning.hide": "Esconder la publicación", + "content_warning.show": "Amosar de toes toes", + "content_warning.show_more": "Amosar más", "conversation.delete": "Desaniciar la conversación", + "conversation.mark_as_read": "Marcar como lleíu", "conversation.open": "Ver la conversación", "conversation.with": "Con {names}", + "copy_icon_button.copied": "Copiáu nel cartafueyu", "copypaste.copied": "Copióse", + "copypaste.copy_to_clipboard": "Copiar nel cartafueyu", "directory.federated": "Del fediversu conocíu", "directory.local": "De «{domain}» namás", "directory.new_arrivals": "Cuentes nueves", "directory.recently_active": "Con actividá recién", + "disabled_account_banner.account_settings": "Axustes de la cuenta", "dismissable_banner.community_timeline": "Esta seición contién los artículos públicos más actuales de los perfiles agospiaos nel dominiu {domain}.", "dismissable_banner.dismiss": "Escartar", "dismissable_banner.explore_tags": "Esta seición contién les etiquetes del fediversu que tán ganando popularidá güei. Les etiquetes más usaes polos perfiles apaecen no cimero.", "dismissable_banner.public_timeline": "Esta seición contién los artículos más nuevos de les persones na web social que les persones de {domain} siguen.", - "embed.instructions": "Empotra esti artículu nel to sitiu web pente la copia del códigu d'abaxo.", + "domain_block_modal.block": "Bloquiar el sirvidor", + "domain_block_modal.they_cant_follow": "Naide d'esti sirvidor pue siguite.", + "domain_block_modal.title": "Bloquiar el dominiu?", + "domain_pill.server": "Sirvidor", + "domain_pill.username": "Nome d'usuariu", + "embed.instructions": "Empotra esta publicación nel to sitiu web copiando'l códigu d'abaxo.", "embed.preview": "Va apaecer asina:", "emoji_button.activity": "Actividá", "emoji_button.flags": "Banderes", @@ -144,9 +190,10 @@ "emoji_button.search_results": "Resultaos de la busca", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes y llugares", - "empty_column.account_timeline": "¡Equí nun hai nengún artículu!", + "empty_column.account_suspended": "Cuenta suspendida", + "empty_column.account_timeline": "¡Equí nun hai nenguna publicación!", "empty_column.blocks": "Nun bloquiesti a nengún perfil.", - "empty_column.bookmarked_statuses": "Nun tienes nengún artículu en Marcadores. Cuando amiestes dalgún, apaez equí.", + "empty_column.bookmarked_statuses": "Nun tienes nenguna publicación en Marcadores. Cuando amiestes dalguna, va apaecer equí.", "empty_column.direct": "Nun tienes nenguna mención privada. Cuando unvies o recibas dalguna, apaez equí.", "empty_column.domain_blocks": "Nun hai nengún dominiu bloquiáu.", "empty_column.explore_statuses": "Agora nun hai nada en tendencia. ¡Volvi equí dempués!", @@ -168,20 +215,21 @@ "explore.trending_links": "Noticies", "explore.trending_statuses": "Artículos", "explore.trending_tags": "Etiquetes", - "filter_modal.added.context_mismatch_explanation": "Esta categoría de peñera nun s'aplica al contestu nel qu'accediesti a esti artículu. Si tamién quies que se peñere l'artículu nesti contestu, tienes d'editar la peñera.", + "filter_modal.added.context_mismatch_explanation": "Esta categoría de peñera nun s'aplica al contestu nel qu'accediesti a esta publicación. Si tamién quies que se peñere la publicación nesti contestu, tienes d'editar la peñera.", "filter_modal.added.context_mismatch_title": "¡El contestu nun coincide!", "filter_modal.added.expired_explanation": "Esta categoría de peñera caducó, tienes de camudar la so data de caducidá p'aplicala.", "filter_modal.added.expired_title": "¡La peñera caducó!", "filter_modal.added.review_and_configure": "Pa revisar y configurar a fondu esta categoría de peñera, vete a la {settings_link}.", "filter_modal.added.review_and_configure_title": "Configuración de la peñera", "filter_modal.added.settings_link": "páxina de configuración", - "filter_modal.added.short_explanation": "Esti artículu amestóse a la categoría de peñera siguiente: {title}.", + "filter_modal.added.short_explanation": "Esta publicación amestóse a la categoría de peñera siguiente: {title}.", "filter_modal.added.title": "¡Amestóse la peñera!", + "filter_modal.select_filter.expired": "caducó", "filter_modal.select_filter.prompt_new": "Categoría nueva: {name}", "filter_modal.select_filter.search": "Buscar o crear", "filter_modal.select_filter.subtitle": "Usa una categoría esistente o créala", - "filter_modal.select_filter.title": "Peñerar esti artículu", - "filter_modal.title.status": "Peñera d'un artículu", + "filter_modal.select_filter.title": "Peñerar esta publicación", + "filter_modal.title.status": "Peñera d'una publicación", "firehose.all": "Tolos sirvidores", "firehose.local": "Esti sirvidor", "firehose.remote": "Otros sirvidores", @@ -196,6 +244,7 @@ "follow_suggestions.similar_to_recently_followed_longer": "Aseméyase a los perfiles que siguiesti apocayá", "follow_suggestions.view_all": "Ver too", "follow_suggestions.who_to_follow": "A quién siguir", + "followed_tags": "Etiquetes siguíes", "footer.about": "Tocante a", "footer.directory": "Direutoriu de perfiles", "footer.get_app": "Consiguir l'aplicación", @@ -210,30 +259,37 @@ "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "ensin {additional}", "hashtag.column_settings.select.no_options_message": "Nun s'atopó nenguna suxerencia", + "hashtag.column_settings.select.placeholder": "Introduz etiquetes…", + "hashtag.column_settings.tag_mode.all": "Toes estes", + "hashtag.column_settings.tag_mode.any": "Cualesquiera d'estes", + "hashtag.column_settings.tag_mode.none": "Nenguna d'estes", "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", "hashtag.follow": "Siguir a la etiqueta", "hashtag.unfollow": "Dexar de siguir a la etiqueta", + "hints.threads.replies_may_be_missing": "Ye posible que falten les rempuestes d'otros sirvidores.", "home.column_settings.show_reblogs": "Amosar los artículos compartíos", "home.column_settings.show_replies": "Amosar les rempuestes", "home.pending_critical_update.body": "¡Anueva'l sirvidor de Mastodon namás que puedas!", + "home.show_announcements": "Amosar anuncios", "interaction_modal.description.follow": "Con una cuenta de Mastodon, pues siguir a {name} pa recibir los artículos de so nel to feed d'aniciu.", - "interaction_modal.description.reblog": "Con una cuenta de Mastodon, pues compartir esti artículu colos perfiles que te sigan.", - "interaction_modal.description.reply": "Con una cuenta de Mastodon, pues responder a esti artículu.", + "interaction_modal.description.reblog": "Con una cuenta de Mastodon, pues compartir esta publicación colos perfiles que te sigan.", + "interaction_modal.description.reply": "Con una cuenta de Mastodon, pues responder a esta publicación.", "interaction_modal.on_another_server": "N'otru sirvidor", "interaction_modal.on_this_server": "Nesti sirvidor", - "interaction_modal.title.reply": "Rempuesta al artículu de: {name}", + "interaction_modal.title.follow": "Siguir a {name}", + "interaction_modal.title.reply": "Rempuesta a la publicación de: {name}", "intervals.full.days": "{number, plural, one {# día} other {# díes}}", "intervals.full.hours": "{number, plural, one {# hora} other {# hores}}", "intervals.full.minutes": "{number, plural, one {# minutu} other {# minutos}}", "keyboard_shortcuts.back": "Dir p'atrás", "keyboard_shortcuts.blocked": "Abrir la llista de perfiles bloquiaos", - "keyboard_shortcuts.boost": "Compartir un artículu", + "keyboard_shortcuts.boost": "Compartir una publicación", "keyboard_shortcuts.column": "Enfocar una columna", "keyboard_shortcuts.compose": "Enfocar l'área de composición", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "p'abrir la columna de les menciones privaes", "keyboard_shortcuts.down": "Baxar na llista", - "keyboard_shortcuts.enter": "Abrir un artículu", + "keyboard_shortcuts.enter": "Abrir una publicación", "keyboard_shortcuts.federated": "Abrir la llinia de tiempu federada", "keyboard_shortcuts.heading": "Atayos del tecláu", "keyboard_shortcuts.home": "Abrir la llinia de tiempu del aniciu", @@ -247,15 +303,21 @@ "keyboard_shortcuts.open_media": "Abrir el conteníu mutimedia", "keyboard_shortcuts.pinned": "Abrir la llista d'artículos fixaos", "keyboard_shortcuts.profile": "Abrir el perfil del autor/a", - "keyboard_shortcuts.reply": "Responder a un artículu", + "keyboard_shortcuts.reply": "Responder a una publicación", "keyboard_shortcuts.requests": "Abrir la llista de solicitúes de siguimientu", "keyboard_shortcuts.search": "Enfocar la barra de busca", "keyboard_shortcuts.start": "Abrir la columna «Entamar»", - "keyboard_shortcuts.toggle_sensitivity": "Amosar/anubrir el conteníu multimedia", - "keyboard_shortcuts.toot": "Comenzar un artículu nuevu", + "keyboard_shortcuts.toggle_sensitivity": "Amosar/esconder el conteníu multimedia", + "keyboard_shortcuts.toot": "Escribir una publicación nueva", "keyboard_shortcuts.unfocus": "Desenfocar l'área de composición/busca", "keyboard_shortcuts.up": "Xubir na llista", + "lightbox.close": "Zarrar", + "lightbox.next": "Siguiente", "limited_account_hint.action": "Amosar el perfil de toes toes", + "link_preview.author": "Por {name}", + "link_preview.more_from_author": "Más de {name}", + "lists.account.add": "Amestar a la llista", + "lists.account.remove": "Desaniciar de la llista", "lists.delete": "Desaniciar la llista", "lists.edit": "Editar la llista", "lists.edit.submit": "Camudar el títulu", @@ -268,6 +330,7 @@ "lists.search": "Buscar ente los perfiles que sigues", "lists.subheading": "Les tos llistes", "load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}", + "loading_indicator.label": "Cargando…", "navigation_bar.about": "Tocante a", "navigation_bar.blocks": "Perfiles bloquiaos", "navigation_bar.bookmarks": "Marcadores", @@ -275,13 +338,17 @@ "navigation_bar.direct": "Menciones privaes", "navigation_bar.domain_blocks": "Dominios bloquiaos", "navigation_bar.explore": "Esploración", + "navigation_bar.favourites": "Favoritos", "navigation_bar.filters": "Pallabres desactivaes", "navigation_bar.follow_requests": "Solicitúes de siguimientu", + "navigation_bar.followed_tags": "Etiquetes siguíes", "navigation_bar.follows_and_followers": "Perfiles que sigues y te siguen", "navigation_bar.lists": "Llistes", "navigation_bar.logout": "Zarrar la sesión", + "navigation_bar.moderation": "Moderación", "navigation_bar.mutes": "Perfiles colos avisos desactivaos", "navigation_bar.opened_in_classic_interface": "Los artículos, les cuentes y otres páxines específiques ábrense por defeutu na interfaz web clásica.", + "navigation_bar.personal": "Personal", "navigation_bar.pins": "Artículos fixaos", "navigation_bar.preferences": "Preferencies", "navigation_bar.public_timeline": "Llinia de tiempu federada", @@ -291,14 +358,27 @@ "notification.admin.sign_up": "{name} rexistróse", "notification.follow": "{name} siguióte", "notification.follow_request": "{name} solicitó siguite", - "notification.reblog": "{name} compartió'l to artículu", + "notification.label.mention": "Mención", + "notification.label.private_mention": "Mención privada", + "notification.label.private_reply": "Rempuesta privada", + "notification.label.reply": "Responder", + "notification.mention": "Mención", + "notification.mentioned_you": "{name} mentóte", + "notification.moderation-warning.learn_more": "Deprender más", + "notification.poll": "Finó una encuesta na que votesti", + "notification.reblog": "{name} compartió la to publicación", "notification.status": "{name} ta acabante d'espublizar", - "notification.update": "{name} editó un artículu", + "notification.update": "{name} editó una publicación", + "notification_requests.edit_selection": "Editar", + "notification_requests.exit_selection": "Fecho", "notifications.clear": "Borrar los avisos", "notifications.column_settings.admin.report": "Informes nuevos:", "notifications.column_settings.admin.sign_up": "Rexistros nuevos:", + "notifications.column_settings.favourite": "Favoritos:", + "notifications.column_settings.filter_bar.advanced": "Amosar toles categoríes", "notifications.column_settings.follow": "Siguidores nuevos:", "notifications.column_settings.follow_request": "Solicitúes de siguimientu nueves:", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultaos de les encuestes:", "notifications.column_settings.reblog": "Artículos compartíos:", @@ -308,10 +388,16 @@ "notifications.column_settings.unread_notifications.category": "Avisos ensin lleer", "notifications.column_settings.unread_notifications.highlight": "Rescamplar los avisos ensin lleer", "notifications.column_settings.update": "Ediciones:", + "notifications.filter.all": "Too", + "notifications.filter.favourites": "Favoritos", "notifications.filter.mentions": "Menciones", + "notifications.filter.polls": "Resultaos de la encuesta", "notifications.group": "{count} avisos", "notifications.mark_as_read": "Marcar tolos avisos como lleíos", "notifications.permission_required": "Los avisos d'escritoriu nun tán disponibles porque nun se concedió'l permisu riquíu.", + "notifications.policy.accept": "Aceptar", + "notifications.policy.accept_hint": "Amosar n'avisos", + "onboarding.profile.note": "Biografía", "onboarding.profile.note_hint": "Pues @mentar a otros perfiles o poner #etiquetes…", "onboarding.start.lead": "Yá yes parte de Mastodon, una plataforma social multimedia descentralizada onde tu y non un algoritmu, personalices la to esperiencia. Vamos presentate esti llugar social nuevu:", "onboarding.start.skip": "¿Nun precises ayuda pa comenzar?", @@ -327,10 +413,10 @@ "poll.votes": "{votes, plural, one {# votu} other {# votos}}", "poll_button.add_poll": "Amestar una encuesta", "poll_button.remove_poll": "Quitar la encuesta", - "privacy.change": "Configurar la privacidá del artículu", + "privacy.change": "Configurar la privacidá de la publicación", "privacy.direct.short": "Perfiles específicos", "privacy.private.short": "Siguidores", - "privacy.public.short": "Artículu públicu", + "privacy.public.short": "Publicación pública", "privacy_policy.last_updated": "Data del últimu anovamientu: {date}", "privacy_policy.title": "Política de privacidá", "refresh": "Anovar", @@ -347,13 +433,15 @@ "relative_time.seconds": "{number} s", "relative_time.today": "güei", "reply_indicator.cancel": "Encaboxar", + "reply_indicator.poll": "Encuesta", "report.block": "Bloquiar", + "report.categories.legal": "Llegal", "report.categories.spam": "Spam", "report.categories.violation": "El conteníu incumple una o más normes del sirvidor", "report.category.subtitle": "Escueyi la meyor opción", "report.category.title": "Dinos qué pasa con esti {type}", "report.category.title_account": "perfil", - "report.category.title_status": "artículu", + "report.category.title_status": "publicación", "report.close": "Fecho", "report.comment.title": "¿Hai daqué más qu'habríemos saber?", "report.forward": "Reunviar a {target}", @@ -363,6 +451,7 @@ "report.placeholder": "Comentarios adicionales", "report.reasons.dislike": "Nun me presta", "report.reasons.dislike_description": "Nun ye daqué que quiera ver", + "report.reasons.legal": "Ye illegal", "report.reasons.other": "Ye daqué más", "report.reasons.other_description": "La incidencia nun s'axusta a les demás categoríes", "report.reasons.spam": "Ye spam", @@ -372,7 +461,7 @@ "report.rules.subtitle": "Seleiciona tolo que s'axuste", "report.rules.title": "¿Qué normes s'incumplen?", "report.statuses.subtitle": "Seleiciona tolo que s'axuste", - "report.statuses.title": "¿Hai dalgún artículu qu'apoye esti informe?", + "report.statuses.title": "¿Hai dalguna publicación qu'apoye esti informe?", "report.submit": "Unviar", "report.target": "Informe de: {target}", "report.thanks.take_action": "Equí tienes les opciones pa controlar qué ves en Mastodon:", @@ -381,8 +470,11 @@ "report.thanks.title_actionable": "Gracies pol informe, el casu yá ta n'investigación.", "report.unfollow": "Dexar de siguir a @{name}", "report.unfollow_explanation": "Sigues a esta cuenta. Pa dexar de ver los sos artículos nel to feed d'aniciu, dexa de siguila.", - "report_notification.attached_statuses": "{count, plural, one {Axuntóse {count} artículu} other {Axuntáronse {count} artículos}}", + "report_notification.attached_statuses": "{count, plural, one {Axuntóse {count} publicación} other {Axuntáronse {count} publicaciones}}", + "report_notification.categories.legal": "Llegal", "report_notification.categories.legal_sentence": "conteníu illegal", + "report_notification.categories.spam": "Spam", + "report_notification.categories.spam_sentence": "spam", "report_notification.open": "Abrir l'informe", "search.no_recent_searches": "Nun hai nenguna busca recién", "search.placeholder": "Buscar", @@ -391,6 +483,7 @@ "search.quick_action.go_to_hashtag": "Dir a la etiqueta {x}", "search.quick_action.status_search": "Artículos que concasen con {x}", "search.search_or_paste": "Busca o apiega una URL", + "search_popout.full_text_search_disabled_message": "Nun ta disponible nel dominiu {domain}.", "search_popout.language_code": "códigu de llingua ISO", "search_popout.options": "Opciones de busca", "search_popout.quick_actions": "Aiciones rápides", @@ -404,37 +497,42 @@ "search_results.see_all": "Ver too", "search_results.statuses": "Artículos", "search_results.title": "Busca de: {q}", + "server_banner.is_one_of_many": "{domain} ye unu de los munchos sirvidores independientes de Mastodon que pues usar pa participar nel fediversu.", "server_banner.server_stats": "Estadístiques del sirvidor:", "sign_in_banner.create_account": "Crear una cuenta", + "sign_in_banner.mastodon_is": "Mastodon ye la meyor manera de siguir al momentu qué pasa.", + "sign_in_banner.sign_in": "Aniciar la sesión", "sign_in_banner.sso_redirect": "Aniciar la sesión o rexistrase", "status.admin_account": "Abrir la interfaz de moderación pa @{name}", "status.admin_domain": "Abrir la interfaz de moderación pa «{domain}»", - "status.admin_status": "Abrir esti artículu na interfaz de moderación", + "status.admin_status": "Abrir esta publicación na interfaz de moderación", "status.block": "Bloquiar a @{name}", "status.bookmark": "Meter en Marcadores", - "status.cannot_reblog": "Esti artículu nun se pue compartir", - "status.copy": "Copiar l'enllaz al artículu", + "status.cannot_reblog": "Esta publicación nun se pue compartir", + "status.copy": "Copiar l'enllaz a la publicación", "status.delete": "Desaniciar", "status.direct": "Mentar a @{name} per privao", "status.direct_indicator": "Mención privada", "status.edited_x_times": "Editóse {count, plural, one {{count} vegada} other {{count} vegaes}}", - "status.filter": "Peñerar esti artículu", + "status.embed": "Consiguir el códigu pa empotrar", + "status.filter": "Peñerar esta publicación", "status.history.created": "{name} creó {date}", "status.history.edited": "{name} editó {date}", "status.load_more": "Cargar más", - "status.media_hidden": "Conteníu multimedia anubríu", + "status.media_hidden": "Conteníu multimedia escondíu", "status.mention": "Mentar a @{name}", "status.more": "Más", "status.mute": "Desactivar los avisos de @{name}", "status.mute_conversation": "Desactivar los avisos de la conversación", - "status.open": "Espander esti artículu", + "status.open": "Espander esta publicación", "status.pin": "Fixar nel perfil", - "status.pinned": "Artículu fixáu", + "status.pinned": "Publicación fixada", "status.read_more": "Lleer más", "status.reblog": "Compartir", "status.reblogged_by": "{name} compartió", - "status.reblogs.empty": "Naide nun compartió esti artículu. Cuando daquién lo faiga, apaez equí.", + "status.reblogs.empty": "Naide nun compartió esta publicación. Cuando daquién lo faiga, va apaecer equí.", "status.redraft": "Desaniciar y reeditar", + "status.remove_bookmark": "Desaniciar el marcador", "status.replied_to": "En rempuesta a {name}", "status.reply": "Responder", "status.replyAll": "Responder al filu", @@ -447,6 +545,7 @@ "status.uncached_media_warning": "La previsualización nun ta disponible", "status.unmute_conversation": "Activar los avisos de la conversación", "status.unpin": "Lliberar del perfil", + "subscribed_languages.save": "Guardar los cambeos", "tabs_bar.home": "Aniciu", "tabs_bar.notifications": "Avisos", "time_remaining.days": "{number, plural, one {Queda # día} other {Queden # díes}}", @@ -459,6 +558,7 @@ "units.short.billion": "{count} MM", "units.short.million": "{count} M", "units.short.thousand": "{count} mil", + "upload_area.title": "Arrastra y suelta pa xubir", "upload_button.label": "Amestar ficheros multimedia", "upload_error.poll": "La xuba de ficheros nun ta permitida coles encuestes.", "upload_form.audio_description": "Describi'l conteníu pa persones sordes y/o ciegues", @@ -468,14 +568,15 @@ "upload_modal.applying": "Aplicando…", "upload_modal.detect_text": "Detectar el testu de la semeya", "upload_modal.edit_media": "Edición", - "upload_modal.hint": "Calca o arrastra'l círculu de la previsualización pa escoyer el puntu d'enfoque que siempres va tar a la vista en toles miniatures.", + "upload_modal.hint": "Calca o arrastra'l círculu de la previsualización pa escoyer el puntu d'enfoque que siempre va tar a la vista en toles miniatures.", "upload_progress.label": "Xubiendo…", "upload_progress.processing": "Procesando…", "video.close": "Zarrar el videu", "video.download": "Baxar el ficheru", + "video.exit_fullscreen": "Colar de la pantalla completa", "video.expand": "Espander el videu", "video.fullscreen": "Pantalla completa", - "video.hide": "Anubrir el videu", + "video.hide": "Esconder el videu", "video.mute": "Desactivar el soníu", "video.pause": "Posar", "video.play": "Reproducir", diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json new file mode 100644 index 0000000000..3b2d8fa68d --- /dev/null +++ b/app/javascript/mastodon/locales/az.json @@ -0,0 +1,270 @@ +{ + "about.blocks": "Moderasiya olunan serverlər", + "about.contact": "Əlaqə:", + "about.disclaimer": "Mastodon pulsuz, açıq-mənbəli proqram təminatıdır və Mastodon gGmbH-nin əmtəə nişanıdır.", + "about.domain_blocks.no_reason_available": "Səbəb naməlumdur", + "about.domain_blocks.preamble": "Mastodon adətən fediversedəki hər hansısa bir serverdən olan məzmuna baxmaq və istifadəçilərlə qarşılıqlı əlaqədə olmaq imkanı verir. Bunlar bu serverdə edilmiş istisnalardır.", + "about.domain_blocks.silenced.explanation": "Siz bu serverdəki profilləri və məzmunu xüsusi olaraq axtarmasanız və ya izləməsəniz ümumiyyətlə görməyəcəksiniz.", + "about.domain_blocks.silenced.title": "Məhdudlaşdırılmış", + "about.domain_blocks.suspended.explanation": "Bu serverdən heç bir data emal edilməyəcək, saxlanılmayacaq və ya mübadilə edilməyəcək və bu serverdən olan istifadəçilərlə hər hansı qarşılıqlı əlaqə qeyri-mümkün olacaq.", + "about.domain_blocks.suspended.title": "Qadağa qoyulub", + "about.not_available": "Bu məlumat bu serverdə əlçatan edilməyib.", + "about.powered_by": "{mastodon} tərəfindən təchiz edilən desentralizasiya edilmiş sosial media", + "about.rules": "Server qaydaları", + "account.account_note_header": "Şəxsi qeyd", + "account.add_or_remove_from_list": "Siyahılara əlavə et və ya sil", + "account.badges.bot": "Avtomatlaşdırılmış", + "account.badges.group": "Qrup", + "account.block": "@{name} istifadəçisini blokla", + "account.block_domain": "{domain} domenini blokla", + "account.block_short": "Blok", + "account.blocked": "Bloklanıb", + "account.cancel_follow_request": "İzləməni ləğv et", + "account.copy": "Profil linkini kopyala", + "account.direct": "@{name} istifadəçisini fərdi olaraq etiketlə", + "account.disable_notifications": "@{name} paylaşım edəndə mənə bildiriş göndərməyi dayandır", + "account.domain_blocked": "Domen bloklanıb", + "account.edit_profile": "Profili redaktə et", + "account.enable_notifications": "@{name} paylaşım edəndə mənə bildiriş göndər", + "account.endorse": "Profildə seçilmişlərə əlavə et", + "account.featured_tags.last_status_at": "Son paylaşım {date} tarixində olub", + "account.featured_tags.last_status_never": "Paylaşım yoxdur", + "account.featured_tags.title": "{name} istifadəçisinin seçilmiş heşteqləri", + "account.follow": "İzlə", + "account.follow_back": "Sən də izlə", + "account.followers": "İzləyicilər", + "account.followers.empty": "Bu istifadəçini hələ ki, heç kim izləmir.", + "account.followers_counter": "{count, plural, one {{counter} izləyici} other {{counter} izləyici}}", + "account.following": "İzləyir", + "account.following_counter": "{count, plural, one {{counter} izləyir} other {{counter} izləyir}}", + "account.follows.empty": "Bu istifadəçi hələ ki, heç kimi izləmir.", + "account.go_to_profile": "Profilə get", + "account.hide_reblogs": "@{name} istifadəçisindən olan gücləndirmələri gizlət", + "account.in_memoriam": "Xatirə.", + "account.joined_short": "Qoşulub", + "account.languages": "Abunə olunmuş dilləri dəyiş", + "account.link_verified_on": "Bu linkin dəqiqliyi {date} tarixində yoxlanılıb", + "account.locked_info": "Bu hesabın məxfilik statusu kilidlənib. Hesabın sahibi onu kimin izləyə biləcəyini manual olaraq təyin edir.", + "account.media": "Media", + "account.mention": "@{name} istifadəçisini teq et", + "account.moved_to": "{name} onun yeni hesabının artıq bu olduğunu bildirdi:", + "account.mute": "@{name} istifadəçisini susdur", + "account.mute_notifications_short": "Bildirişləri səssizləşdir", + "account.mute_short": "Səssizləşdir", + "account.muted": "Səssizləşdirilib", + "account.mutual": "Ortaq", + "account.no_bio": "Təsvir göstərilməyib.", + "account.open_original_page": "Orijinal səhifəni aç", + "account.posts": "Paylaşım", + "account.posts_with_replies": "Paylaşım və cavablar", + "account.report": "@{name} istifadəçisini şikayət et", + "account.requested": "Təsdiq edilməsi gözlənilir. İzləmə sorğusunu ləğv etmək üçün kliklə", + "account.requested_follow": "{name} sizi izləmək sorğusu göndərib", + "account.share": "@{name} profilini paylaş", + "account.show_reblogs": "@{name} istifadəçisindən olan gücləndirmələri göstər", + "account.statuses_counter": "{count, plural, one {{counter} paylaşım} other {{counter} paylaşım}}", + "account.unblock": "@{name} blokunu aç", + "account.unblock_domain": "{domain} domeninin blokunu aç", + "account.unblock_short": "Bloku aç", + "account.unendorse": "Profildə seçilmişlərə əlavə etmə", + "account.unfollow": "İzləmədən çıxar", + "account.unmute": "@{name} səssizləşdirmədən çıxart", + "account.unmute_notifications_short": "Bildirişlərin səsini aç", + "account.unmute_short": "Səssizləşdirmədən çıxart", + "account_note.placeholder": "Qeyd əlavə etmək üçün kliklə", + "admin.dashboard.daily_retention": "Qeydiyyatdan sonrakı günə görə istifadəçi qalma dərəcəsi", + "admin.dashboard.monthly_retention": "Qeydiyyatdan sonrakı aya görə istifadəçi qalma dərəcəsi", + "admin.dashboard.retention.average": "Orta", + "admin.dashboard.retention.cohort": "Qeydiyyatdan keçmə ayı", + "admin.dashboard.retention.cohort_size": "Yeni istifadəçilər", + "admin.impact_report.instance_accounts": "Bunun siləcəyi istifadəçi hesabları", + "admin.impact_report.instance_followers": "İstifadəçilərimizin itirəcəyi izləyici sayı", + "admin.impact_report.instance_follows": "Onların istifadəçilərinin itirəcəyi izləyici sayı", + "admin.impact_report.title": "Təsirin xülasəsi", + "alert.rate_limited.message": "Zəhmət olmasa, {retry_time, time, medium} sonra yenidən cəhd edin.", + "alert.rate_limited.title": "Sürət limiti", + "alert.unexpected.message": "Bilinməyən bir xəta baş verdi.", + "alert.unexpected.title": "Ah!", + "alt_text_badge.title": "Alternativ mətn", + "announcement.announcement": "Elan", + "attachments_list.unprocessed": "(emal edilməyib)", + "audio.hide": "Audionu gizlət", + "block_modal.remote_users_caveat": "Biz {domain} serverindən qərarınıza hörmət etməsini xahiş edəcəyik. Bununla belə, bəzi serverlər blokları fərqli şəkildə idarə edə bildiyi üçün uyğunluğa zəmanət verilmir. İctimai paylaşımlar hələ də daxil olmayan istifadəçilərə görünə bilər.", + "block_modal.show_less": "Daha az göstər", + "block_modal.show_more": "Daha çox göstər", + "block_modal.they_cant_mention": "O səni teq edə bilməz və ya izləyə bilməz.", + "block_modal.they_cant_see_posts": "O sənin paylaşımlarını görməyəcək, sən də onun paylaşımlarını görməyəcəksən.", + "block_modal.they_will_know": "O sənin onu blokladığını görə biləcək.", + "block_modal.title": "İstifadəçi bloklansın?", + "block_modal.you_wont_see_mentions": "Onu teq edən postları görməyəcəksən.", + "boost_modal.combo": "Növbəti dəfə bunu atlamaq üçün {combo} klikləyə bilərsən", + "boost_modal.reblog": "Paylaşım gücləndirilsin?", + "boost_modal.undo_reblog": "Paylaşımın gücləndirilməsi ləğv edilsin?", + "bundle_column_error.copy_stacktrace": "Xəta hesabatını kopyala", + "bundle_column_error.error.body": "Tələb olunan səhifəni göstərmək mümkün olmadı. Bu, kodumuzdakı səhv və ya brauzer uyğunluğu problemi ilə bağlı ola bilər.", + "bundle_column_error.error.title": "Ah, yox!", + "bundle_column_error.network.body": "Bu səhifəni yükləməyə çalışarkən xəta baş verdi. Bu, internet bağlantınız və ya bu serverlə bağlı müvəqqəti problemlə əlaqədar ola bilər.", + "bundle_column_error.network.title": "Şəbəkə xətası", + "bundle_column_error.retry": "Yenidən cəhd et", + "bundle_column_error.return": "Ana səhifəyə qayıt", + "bundle_column_error.routing.body": "Tələb olunan səhifəni tapmaq mümkün olmadı. Ünvan çubuğundakı URL-nin düzgün olduğuna əminsiniz?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "Bağla", + "bundle_modal_error.retry": "Yenidən cəhd et", + "closed_registrations.other_server_instructions": "Mastodon desentralizasiya edilmiş olduğu üçün başqa bir serverdə hesab yarada və hələ də bu serverdən istifadə edə bilərsiniz.", + "closed_registrations_modal.description": "{domain} serverində hesab yaratmaq hazırda mümkün deyil, lakin nəzərə alın ki, Mastodondan istifadə etmək üçün xüsusi olaraq {domain} serverində hesaba ehtiyacınız yoxdur.", + "closed_registrations_modal.find_another_server": "Başqa server tap", + "closed_registrations_modal.preamble": "Mastodon desentralizasiya edilib, ona görə də hesabınızı harada yaratmağınızdan asılı olmayaraq, siz bu serverdə hər kəsi izləyə və onunla əlaqə saxlaya biləcəksiniz. Siz hətta özünüz server aça bilərsiniz!", + "closed_registrations_modal.title": "Mastodonda qeydiyyatdan keçmək", + "column.about": "Haqqında", + "column.blocks": "Bloklanmış istifadəçilər", + "column.bookmarks": "Əlfəcinlər", + "column.community": "Lokal zaman qrafiki", + "column.direct": "Fərdi teqlər", + "column.directory": "Profillər arasında gəz", + "column.domain_blocks": "Bloklanmış domenlər", + "column.favourites": "Sevimlilər", + "column.firehose": "Canlı lentlər", + "column.follow_requests": "İzləyici sorğuları", + "column.home": "Ana səhifə", + "column.lists": "Siyahılar", + "column.mutes": "Səssizləşdirilmiş istifadəçilər", + "column.notifications": "Bildirişlər", + "column.pins": "Bərkidilmiş paylaşımlar", + "column.public": "Federasiya zaman qrafiki", + "column_back_button.label": "Geriyə", + "column_header.hide_settings": "Parametrləri gizlət", + "column_header.moveLeft_settings": "Sütunu sola köçür", + "column_header.moveRight_settings": "Sütunu sağa köçür", + "column_header.pin": "Bərkit", + "column_header.show_settings": "Parametrləri göstər", + "column_header.unpin": "Bərkitmə", + "column_subheading.settings": "Parametrlər", + "community.column_settings.local_only": "Sadəcə lokalda", + "community.column_settings.media_only": "Sadəcə media", + "community.column_settings.remote_only": "Sadəcə uzaq serverlər", + "compose.language.change": "Dili dəyiş", + "compose.language.search": "Dil axtar...", + "compose.published.body": "Paylaşıldı.", + "compose.published.open": "Bax", + "compose.saved.body": "Paylaşım yadda saxlandı.", + "compose_form.direct_message_warning_learn_more": "Ətraflı öyrən", + "compose_form.encryption_warning": "Mastodondakı paylaşımlar ucdan-uca şifrələnmir. Mastodonda heç bir həssas məlumat paylaşmayın.", + "compose_form.hashtag_warning": "Bu yazı ictimai olmadığı üçün heç bir heşteqdə göstərilməyəcək. Yalnız açıq yazılar heşteq ilə axtarıla bilər.", + "compose_form.lock_disclaimer": "Hesabınız {locked} deyil. Sadəcə izləyicilər üçün paylaşımlarınıza baxmaq üçün hər kəs sizi izləyə bilər.", + "compose_form.lock_disclaimer.lock": "kilidli", + "compose_form.placeholder": "Ağlınızdan nə keçir?", + "compose_form.poll.duration": "Sorğunun müddəti", + "compose_form.poll.multiple": "Çoxlu cavab", + "compose_form.poll.option_placeholder": "Seçim {number}", + "compose_form.poll.switch_to_multiple": "Çoxsaylı cavablara icazə vermək üçün sorğunu redaktə et", + "compose_form.poll.switch_to_single": "Tək cavaba icazə vermək üçün sorğunu redaktə et", + "compose_form.poll.type": "Stil", + "compose_form.publish": "Paylaş", + "compose_form.publish_form": "Yeni paylaşım", + "compose_form.reply": "Cavabla", + "compose_form.save_changes": "Yenilə", + "compose_form.spoiler.marked": "Məzmun xəbərdarlığını sil", + "compose_form.spoiler.unmarked": "Məzmun xəbərdarlığı əlavə et", + "compose_form.spoiler_placeholder": "Məzmun xəbərdarlığı (məcburi deyil)", + "confirmation_modal.cancel": "İmtina", + "confirmations.block.confirm": "Blokla", + "confirmations.delete.confirm": "Sil", + "confirmations.delete.message": "Bu paylaşımı silmək istədiyinizə əminsiniz?", + "confirmations.delete.title": "Paylaşım silinsin?", + "confirmations.delete_list.confirm": "Sil", + "confirmations.delete_list.message": "Bu siyahını həmişəlik silmək istədiyinizə əminsiniz?", + "confirmations.delete_list.title": "Siyahı silinsin?", + "confirmations.discard_edit_media.confirm": "Ləğv et", + "confirmations.discard_edit_media.message": "Media təsvirində və ya önizləmədə yadda saxlanmamış dəyişiklikləriniz var, ləğv edilsin?", + "confirmations.edit.confirm": "Redaktə et", + "confirmations.edit.message": "Redaktə etmək hazırda tərtib etdiyiniz mesajın üzərinə yazacaq. Davam etmək istədiyinizə əminsiniz?", + "confirmations.edit.title": "Paylaşım yenidə yazılsın?", + "confirmations.logout.confirm": "Çıxış et", + "confirmations.logout.message": "Çıxmaq istədiyinizə əminsiniz?", + "confirmations.logout.title": "Çıxış edilsin?", + "confirmations.mute.confirm": "Səssizləşdir", + "confirmations.redraft.confirm": "Sil və qaralamaya köçür", + "confirmations.redraft.message": "Bu paylaşımı silmək və qaralamaya köçürmək istədiyinizə əminsiniz? Bəyənmələr və gücləndirmələr itəcək və orijinal paylaşıma olan cavablar tənha qalacaq.", + "confirmations.redraft.title": "Paylaşım silinsin & qaralamaya köçürülsün?", + "confirmations.reply.confirm": "Cavabla", + "confirmations.reply.message": "İndi cavab vermək hal-hazırda yazdığınız mesajın üzərinə yazacaq. Davam etmək istədiyinizə əminsiniz?", + "confirmations.reply.title": "Paylaşım yenidən yazılsın?", + "confirmations.unfollow.confirm": "İzləmədən çıxar", + "confirmations.unfollow.message": "{name} izləmədən çıxmaq istədiyinizə əminsiniz?", + "confirmations.unfollow.title": "İstifadəçi izləmədən çıxarılsın?", + "content_warning.hide": "Paylaşımı gizlət", + "content_warning.show": "Yenə də göstər", + "content_warning.show_more": "Daha çox göstər", + "conversation.delete": "Söhbəti sil", + "conversation.mark_as_read": "Oxunmuş kimi qeyd et", + "conversation.open": "Söhbətə bax", + "conversation.with": "{names} ilə", + "copy_icon_button.copied": "Mübadilə buferinə köçürüldü", + "copypaste.copied": "Kopyalandı", + "copypaste.copy_to_clipboard": "Kopyala", + "directory.federated": "Bilinən fediversedən", + "directory.local": "Sadəcə {domain}", + "directory.new_arrivals": "Yeni gələnlər", + "directory.recently_active": "Bayaq aktiv olanlar", + "disabled_account_banner.account_settings": "Hesab parametrləri", + "disabled_account_banner.text": "Sizin hesabınız {disabledAccount} hal-hazırda deaktiv edilib.", + "dismissable_banner.community_timeline": "Bunlar, hesabları {domain} serverində yerləşən insanların ən son ictimai paylaşımlarıdır.", + "dismissable_banner.dismiss": "Bağla", + "domain_block_modal.block": "Serveri blokla", + "domain_block_modal.block_account_instead": "@{name} istifadəçisini blokla", + "domain_block_modal.they_can_interact_with_old_posts": "Bu serverdən olan insanlar köhnə paylaşımlarınızla əlaqə qura bilər.", + "domain_block_modal.they_cant_follow": "Bu serverdən heç kim sizi izləyə bilməz.", + "domain_block_modal.they_wont_know": "Onlar bloklandıqlarını bilməyəcəklər.", + "domain_block_modal.title": "Domen bloklansın?", + "domain_block_modal.you_will_lose_num_followers": "Siz {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} izləyici}} və izlədiyiniz {followingCount, plural, one {{followingCountDisplay} istifadəçini} other {{followingCountDisplay} istifadəçini}} itirəcəksiniz.", + "domain_block_modal.you_will_lose_relationships": "Bu serverdən olan bütün izləyicilərinizi və izlədiklərinizi itirəcəksiniz.", + "domain_block_modal.you_wont_see_posts": "Bu serverdən olan paylaşımları və istifadəçilərdən olan bildirişləri görməyəcəksiniz.", + "domain_pill.activitypub_lets_connect": "Bu, təkcə Mastodonda deyil, həm də müxtəlif sosial tətbiqlərdə insanlarla əlaqə saxlamağa və onlarla ünsiyyət qurmağa imkan verir.", + "domain_pill.activitypub_like_language": "ActivityPub-ı Mastodonun digər sosial şəbəkələrlə danışdığı dil kimi düşünə bilərsiniz.", + "domain_pill.server": "Server", + "domain_pill.their_handle": "Tanıdıcısı:", + "domain_pill.their_server": "Onların bütün paylaşımlarının yaşadığı rəqəmsal ev.", + "domain_pill.their_username": "Serverdəki unikal identifikator. Fərqli serverlərdə eyni istifadəçi adı ilə istifadəçilər tapmaq mümkündür.", + "domain_pill.username": "İstifadəçi adı", + "domain_pill.whats_in_a_handle": "Tanıdıcı nədir?", + "domain_pill.who_they_are": "Tanıdıcılar kimin kim olduğunu və harada olduğunu bildirdiyi üçün siz sosial şəbəkəsindəki bütün insanlarla əlaqə saxlaya bilərsiniz.", + "domain_pill.who_you_are": "Tanıdıcılar sizin kim olduğunuzu və harada olduğunuzu bildirdiyi üçün sosial şəbəkəsindəki bütün insanlar sizlə əlaqə saxlaya bilər.", + "domain_pill.your_handle": "Tanıdıcınız:", + "domain_pill.your_server": "Bütün paylaşımlarınızın yaşadığı rəqəmsal ev. Buranı bəyənmirsiniz? İstədiyiniz vaxt serverdən köçün və izləyicilərinizi də aparın.", + "domain_pill.your_username": "Serverdəki unikal identifikatoruz. Fərqli serverlərdə eyni istifadəçi adı ilə istifadəçilər tapmaq mümkündür.", + "embed.instructions": "Aşağıdakı kodu kopyalayaraq bu postu veb-saytınıza yerləşdirin.", + "embed.preview": "Belə görünəcək:", + "emoji_button.activity": "Aktivlik", + "emoji_button.clear": "Təmizlə", + "emoji_button.custom": "Özəl", + "emoji_button.flags": "Bayraqlar", + "emoji_button.food": "Yemək və içki", + "emoji_button.label": "Emoji daxil et", + "emoji_button.nature": "Təbiət", + "emoji_button.not_found": "Uyğun emoji tapılmadı", + "emoji_button.objects": "Obyektlər", + "emoji_button.people": "İnsanlar", + "emoji_button.recent": "Tez-tez istifadə edilən", + "emoji_button.search": "Axtar...", + "emoji_button.search_results": "Axtarış nəticələri", + "emoji_button.symbols": "Simvollar", + "emoji_button.travel": "Səyahət və məkanlar", + "empty_column.account_hides_collections": "Bu istifadəçi bu məlumatı əlçatan etməməyi seçib", + "empty_column.account_suspended": "Hesab silinib", + "empty_column.account_timeline": "Heç bir paylaşım yoxdur!", + "empty_column.account_unavailable": "Profil əlçatan deyil", + "empty_column.blocks": "Hələ ki, heç bir istifadəçini bloklamamasınız.", + "empty_column.bookmarked_statuses": "Hələ ki, heç bir paylaşımı yadda saxlamamısınız. Yadda saxlayanda burada görünəcək.", + "empty_column.community": "Lokal zaman qrafiki boşdur. Topun yuvarlanmağa başlaması üçün ictimai bir şey paylaşın!", + "empty_column.direct": "Gizli etiketiniz yoxdur. Göndərdikdə və ya qəbul etdikdə burada görəcəksiniz.", + "empty_column.domain_blocks": "Hələ ki, bloklanmış domen yoxdur.", + "empty_column.explore_statuses": "Hal-hazırda trenddə heç yoxdur. Daha sonra yenidən yoxlayın!", + "empty_column.favourited_statuses": "Bəyəndiyiniz paylaşımlar yoxdur. Birini bəyəndikdə burada görünəcək.", + "empty_column.favourites": "Bu paylaşımı hələ ki, heç kim bəyənməyib. Bəyənildikdə burada görünəcək.", + "empty_column.follow_requests": "İzləmə sorğularınız yoxdur. Qəbul etdikdə burada görəcəksiniz.", + "empty_column.followed_tags": "Heç bir heşteq izləmirsiniz. İzlədikdə burada görünəcək.", + "empty_column.hashtag": "Bu heşteqdə hələ ki, heç nə yoxdur.", + "follow_suggestions.hints.friends_of_friends": "Bu profil izlədiyiniz insanlar arasında populyardır.", + "follow_suggestions.hints.most_followed": "Bu profil {domain} serverində ən çox izlənilənlərdən biridir." +} diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 797d8cc22e..805ba9a992 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Ліміт перавышаны", "alert.unexpected.message": "Узнікла нечаканая памылка.", "alert.unexpected.title": "Вой!", + "alt_text_badge.title": "Альтэрнатыўны тэкст", "announcement.announcement": "Аб'ява", "attachments_list.unprocessed": "(неапрацаваны)", "audio.hide": "Схаваць аўдыя", @@ -97,6 +98,8 @@ "block_modal.title": "Заблакіраваць карыстальніка?", "block_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.", "boost_modal.combo": "Націсніце {combo}, каб прапусціць наступным разам", + "boost_modal.reblog": "Пашырыць допіс?", + "boost_modal.undo_reblog": "Прыбраць допіс?", "bundle_column_error.copy_stacktrace": "Скапіраваць справаздачу пра памылку", "bundle_column_error.error.body": "Запытаная старонка не можа быць адлюстраваная. Гэта магло стацца праз хібу ў нашым кодзе, або праз памылку сумяшчальнасці з браўзерам.", "bundle_column_error.error.title": "Халера!", @@ -151,7 +154,7 @@ "compose_form.hashtag_warning": "Гэты допіс не будзе паказаны пад аніякім хэштэгам, бо ён не публічны. Толькі публічныя допісы можна знайсці па хэштэгу.", "compose_form.lock_disclaimer": "Ваш уліковы запіс не {locked}. Усе могуць падпісацца на вас, каб бачыць допісы толькі для падпісчыкаў.", "compose_form.lock_disclaimer.lock": "закрыты", - "compose_form.placeholder": "Што здарылася?", + "compose_form.placeholder": "Што ў вас новага?", "compose_form.poll.duration": "Працягласць апытання", "compose_form.poll.multiple": "Множны выбар", "compose_form.poll.option_placeholder": "Варыянт {number}", @@ -194,6 +197,7 @@ "confirmations.unfollow.title": "Адпісацца ад карыстальніка?", "content_warning.hide": "Схаваць допіс", "content_warning.show": "Усё адно паказаць", + "content_warning.show_more": "Паказаць усё роўна", "conversation.delete": "Выдаліць размову", "conversation.mark_as_read": "Адзначыць прачытаным", "conversation.open": "Прагледзець размову", @@ -219,6 +223,8 @@ "domain_block_modal.they_cant_follow": "Ніхто з гэтага сервера не зможа падпісацца на вас.", "domain_block_modal.they_wont_know": "Карыстальнік не будзе ведаць пра блакіроўку.", "domain_block_modal.title": "Заблакіраваць дамен?", + "domain_block_modal.you_will_lose_num_followers": "Вы страціце {followersCount, plural, one {{followersCountDisplay} падпісчыка} other {{followersCountDisplay} падпісчыкаў}} і {followingCount, plural, one {{followingCountDisplay} чалавека, на якога падпісаны} other {{followingCountDisplay} людзей, на якіх падпісаны}}.", + "domain_block_modal.you_will_lose_relationships": "Вы страціце ўсіх падпісчыкаў і людзей на якіх падпісаны на гэтым серверы.", "domain_block_modal.you_wont_see_posts": "Вы не ўбачыце допісаў і апавяшчэнняў ад карыстальнікаў з гэтага сервера.", "domain_pill.activitypub_lets_connect": "Ён дазваляе вам узаемадзейнічаць не толькі з карыстальнікамі Mastodon, але і розных іншых сацыяльных платформ.", "domain_pill.activitypub_like_language": "ActivityPub — гэта мова, на якой Mastodon размаўляе з іншымі сацыяльнымі сеткамі.", @@ -300,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую", "filter_modal.select_filter.title": "Фільтраваць гэты допіс", "filter_modal.title.status": "Фільтраваць допіс", - "filter_warning.matches_filter": "Адпавядае фільтру \"{title}\"", + "filter_warning.matches_filter": "Адпавядае фільтру \"{title}\"", "filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце", "filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні", "firehose.all": "Усе", @@ -350,6 +356,14 @@ "hashtag.follow": "Падпісацца на хэштэг", "hashtag.unfollow": "Адпісацца ад хэштэга", "hashtags.and_other": "…і яшчэ {count, plural, other {#}}", + "hints.profiles.followers_may_be_missing": "Падпісчыкі гэтага профілю могуць адсутнічаць.", + "hints.profiles.follows_may_be_missing": "Падпіскі гэтага профілю могуць адсутнічаць.", + "hints.profiles.posts_may_be_missing": "Некаторыя допісы гэтага профілю могуць адсутнічаць.", + "hints.profiles.see_more_followers": "Глядзець больш падпісаных на {domain}", + "hints.profiles.see_more_follows": "Глядзець больш падпісак на {domain}", + "hints.profiles.see_more_posts": "Глядзець больш допісаў на {domain}", + "hints.threads.replies_may_be_missing": "Адказы зь іншых сэрвэраў могуць адсутнічаць.", + "hints.threads.see_more": "Глядзіце больш адказаў на {domain}", "home.column_settings.show_reblogs": "Паказваць пашырэнні", "home.column_settings.show_replies": "Паказваць адказы", "home.hide_announcements": "Схаваць аб'явы", @@ -357,7 +371,17 @@ "home.pending_critical_update.link": "Прагледзець абнаўленні", "home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!", "home.show_announcements": "Паказаць аб'явы", + "ignore_notifications_modal.disclaimer": "Mastodon ня можа йнфармаваць карыстальнікаў аб тым, што вы прайігнаравалі йх паведамленьні. Ігнараваньне паведамленьняў не спыніць іх адпраўку.", + "ignore_notifications_modal.filter_instead": "Замест гэтага адфільтраваць", + "ignore_notifications_modal.filter_to_act_users": "Вы па-ранейшаму зможаце прымаць, адхіляць ці скардзіцца на карыстальнікаў", + "ignore_notifications_modal.filter_to_avoid_confusion": "Фільтраваньне дапамагае пазьбегнуць патэнцыйнай блытаніны", + "ignore_notifications_modal.filter_to_review_separately": "Вы можаце прагледзець адфільтраваныя паведамленьні асобна", + "ignore_notifications_modal.ignore": "Ігнараваць паведамленьні", + "ignore_notifications_modal.limited_accounts_title": "Ігнараваць паведамленьні ад абмежаваных уліковых запісаў?", + "ignore_notifications_modal.new_accounts_title": "Ігнараваць паведамленьні ад новых уліковых запісаў?", + "ignore_notifications_modal.not_followers_title": "Ігнараваць паведамленьні ад людзей, якія ня падпісаныя на вас?", "ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?", + "ignore_notifications_modal.private_mentions_title": "Ігнараваць паведамленьні аб непажаданых прыватных згадках?", "interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.", "interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.", "interaction_modal.description.reblog": "З уліковым запісам Mastodon, вы можаце пашырыць гэты пост, каб падзяліцца ім са сваімі падпісчыкамі.", @@ -434,6 +458,7 @@ "lists.subheading": "Вашыя спісы", "load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}", "loading_indicator.label": "Загрузка…", + "media_gallery.hide": "Схаваць", "moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны таму што вы перанесены на {movedToAccount}.", "mute_modal.hide_from_notifications": "Схаваць з апавяшчэнняў", "mute_modal.hide_options": "Схаваць опцыі", @@ -461,6 +486,7 @@ "navigation_bar.follows_and_followers": "Падпіскі і падпісчыкі", "navigation_bar.lists": "Спісы", "navigation_bar.logout": "Выйсці", + "navigation_bar.moderation": "Мадэрацыя", "navigation_bar.mutes": "Ігнараваныя карыстальнікі", "navigation_bar.opened_in_classic_interface": "Допісы, уліковыя запісы і іншыя спецыфічныя старонкі па змоўчанні адчыняюцца ў класічным вэб-інтэрфейсе.", "navigation_bar.personal": "Асабістае", @@ -479,11 +505,13 @@ "notification.favourite": "Ваш допіс упадабаны {name}", "notification.follow": "{name} падпісаўся на вас", "notification.follow_request": "{name} адправіў запыт на падпіску", + "notification.follow_request.name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} запыталіся падпісацца на вас", "notification.label.mention": "Згадванне", "notification.label.private_mention": "Асабістае згадванне", "notification.label.private_reply": "Асабісты адказ", "notification.label.reply": "Адказ", "notification.mention": "Згадванне", + "notification.mentioned_you": "{name} згадаў вас", "notification.moderation-warning.learn_more": "Даведацца больш", "notification.moderation_warning": "Вы атрымалі папярэджанне аб мадэрацыі", "notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.", @@ -496,6 +524,7 @@ "notification.own_poll": "Ваша апытанне скончылася", "notification.poll": "Апытанне, дзе вы прынялі ўдзел, скончылася", "notification.reblog": "{name} пашырыў ваш допіс", + "notification.reblog.name_and_others_with_link": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} абагулілі ваш допіс", "notification.relationships_severance_event": "Страціў сувязь з {name}", "notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу {target}, што азначае, што вы больш не можаце атрымліваць ад іх абнаўлення ці ўзаемадзейнічаць з імі.", "notification.relationships_severance_event.domain_block": "Адміністратар з {from} заблакіраваў {target}, у тым ліку {followersCount} вашых падпісчыка(-аў) і {followingCount, plural, one {# уліковы запіс} few {# уліковыя запісы} many {# уліковых запісаў} other {# уліковых запісаў}}.", @@ -525,6 +554,7 @@ "notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі", "notifications.column_settings.follow": "Новыя падпісчыкі:", "notifications.column_settings.follow_request": "Новыя запыты на падпіску:", + "notifications.column_settings.group": "Аб'яднаць апавяшчэнні ад падпісчыкаў", "notifications.column_settings.mention": "Згадванні:", "notifications.column_settings.poll": "Вынікі апытання:", "notifications.column_settings.push": "Push-апавяшчэнні", @@ -552,6 +582,7 @@ "notifications.policy.accept_hint": "Паказваць у апавяшчэннях", "notifications.policy.drop": "Iгнараваць", "notifications.policy.filter": "Фільтраваць", + "notifications.policy.filter_limited_accounts_title": "Абмежаваныя ўліковыя запісы", "notifications.policy.filter_new_accounts.hint": "Створаныя на працягу {days, plural, one {апошняга # дня} few {апошніх # дзён} many {апошніх # дзён} other {апошняй # дня}}", "notifications.policy.filter_new_accounts_title": "Новыя ўліковыя запісы", "notifications.policy.filter_not_followers_hint": "Уключаючы людзей, якія падпісаны на вас менш, чым {days, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}", @@ -735,6 +766,7 @@ "status.bookmark": "Дадаць закладку", "status.cancel_reblog_private": "Прыбраць", "status.cannot_reblog": "Гэты пост нельга пашырыць", + "status.continued_thread": "Працяг тэмы", "status.copy": "Скапіраваць спасылку на допіс", "status.delete": "Выдаліць", "status.detailed_status": "Дэтальны агляд размовы", @@ -743,6 +775,7 @@ "status.edit": "Рэдагаваць", "status.edited": "Апошняе рэдагаванне {date}", "status.edited_x_times": "Рэдагавана {count, plural, one {{count} раз} few {{count} разы} many {{count} разоў} other {{count} разу}}", + "status.embed": "Атрымаць убудаваны код", "status.favourite": "Упадабанае", "status.favourites": "{count, plural, one {# упадабанае} few {# упадабаныя} many {# упадабаных} other {# упадабанага}}", "status.filter": "Фільтраваць гэты допіс", @@ -767,6 +800,7 @@ "status.reblogs.empty": "Гэты допіс яшчэ ніхто не пашырыў. Калі гэта адбудзецца, гэтых людзей будзе бачна тут.", "status.redraft": "Выдаліць і паправіць", "status.remove_bookmark": "Выдаліць закладку", + "status.replied_in_thread": "Адказаў у тэме", "status.replied_to": "Адказаў {name}", "status.reply": "Адказаць", "status.replyAll": "Адказаць у ланцугу", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 1e462ba752..25a20185c1 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -22,7 +22,7 @@ "account.cancel_follow_request": "Оттегляне на заявката за последване", "account.copy": "Копиране на връзка към профила", "account.direct": "Частно споменаване на @{name}", - "account.disable_notifications": "Сприране на известия при публикуване от @{name}", + "account.disable_notifications": "Спиране на известяване при публикуване от @{name}", "account.domain_blocked": "Блокиран домейн", "account.edit_profile": "Редактиране на профила", "account.enable_notifications": "Известяване при публикуване от @{name}", @@ -89,7 +89,7 @@ "announcement.announcement": "Оповестяване", "attachments_list.unprocessed": "(необработено)", "audio.hide": "Скриване на звука", - "block_modal.remote_users_caveat": "Ще поискаме сървърът {domain} да почита решението ви. Съгласието обаче не се гарантира откак някои сървъри могат да боравят с блоковете по различен начин. Обществените публикации още може да се виждат от невлезли в системата потребители.", + "block_modal.remote_users_caveat": "Ще приканим сървъра {domain} да уважава решението ви. За съжаление не можем да гарантираме това защото някои сървъри могат да третират блокиранията по различен начин. Публичните постове може да продължат да бъдат видими за потребители, които не са се регистрирали.", "block_modal.show_less": "Повече на показ", "block_modal.show_more": "По-малко на показ", "block_modal.they_cant_mention": "Те не могат да ви споменават или последват.", @@ -120,7 +120,7 @@ "column.about": "Относно", "column.blocks": "Блокирани потребители", "column.bookmarks": "Отметки", - "column.community": "Локален инфопоток", + "column.community": "Локална хронология", "column.direct": "Частни споменавания", "column.directory": "Разглеждане на профили", "column.domain_blocks": "Блокирани домейни", @@ -132,7 +132,7 @@ "column.mutes": "Заглушени потребители", "column.notifications": "Известия", "column.pins": "Закачени публикации", - "column.public": "Федериран инфопоток", + "column.public": "Федеративна хронология", "column_back_button.label": "Назад", "column_header.hide_settings": "Скриване на настройките", "column_header.moveLeft_settings": "Преместване на колона вляво", @@ -193,9 +193,11 @@ "confirmations.reply.message": "Отговарянето сега ще замени съобщението, което в момента съставяте. Сигурни ли сте, че искате да продължите?", "confirmations.reply.title": "Презаписвате ли публикацията?", "confirmations.unfollow.confirm": "Без следване", - "confirmations.unfollow.message": "Наистина ли искате да не следвате {name}?", + "confirmations.unfollow.message": "Наистина ли искате вече да не следвате {name}?", "confirmations.unfollow.title": "Спирате ли да следвате потребителя?", "content_warning.hide": "Скриване на публ.", + "content_warning.show": "Нека се покаже", + "content_warning.show_more": "Показване на още", "conversation.delete": "Изтриване на разговора", "conversation.mark_as_read": "Маркиране като прочетено", "conversation.open": "Преглед на разговора", @@ -211,7 +213,7 @@ "disabled_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен.", "dismissable_banner.community_timeline": "Ето най-скорошните публични публикации от хора, чиито акаунти са разположени в {domain}.", "dismissable_banner.dismiss": "Отхвърляне", - "dismissable_banner.explore_links": "Това са най-споделяните новини в социалната мрежа днес. По-нови истории, споделени от повече хора се показват по-напред.", + "dismissable_banner.explore_links": "Има новинарски истории, които са най-споделяните в социалната мрежа днес. По-нови новинарски истории, публикувани от повече различни хора са класирани по-напред.", "dismissable_banner.explore_statuses": "Има публикации през социалната мрежа, които днес набират популярност. По-новите публикации с повече подсилвания и любими са класирани по-високо.", "dismissable_banner.explore_tags": "Тези хаштагове сега набират популярност сред хората в този и други сървъри на децентрализирата мрежа.", "dismissable_banner.public_timeline": "Ето най-новите обществени публикации от хора в социална мрежа, която хората в {domain} следват.", @@ -221,18 +223,20 @@ "domain_block_modal.they_cant_follow": "Никого от този сървър не може да ви последва.", "domain_block_modal.they_wont_know": "Няма да узнаят, че са били блокирани.", "domain_block_modal.title": "Блокирате ли домейн?", + "domain_block_modal.you_will_lose_num_followers": "Ще загубите {followersCount, plural, one {{followersCountDisplay} последовател} other {{followersCountDisplay} последователи}} и {followingCount, plural, one {{followingCountDisplay} лице, което следвате} other {{followingCountDisplay} души, които следвате}}.", + "domain_block_modal.you_will_lose_relationships": "Ще загубите всичките си последователи и хората, които следвате от този сървър.", "domain_block_modal.you_wont_see_posts": "Няма да виждате публикации или известия от потребителите на този сървър.", "domain_pill.activitypub_lets_connect": "Позволява ви да се свързвате и взаимодействате с хора не само в Mastodon, но и през различни социални приложения.", "domain_pill.activitypub_like_language": "ActivityPub е като език на Mastodon, говорещ с други социални мрежи.", "domain_pill.server": "Сървър", - "domain_pill.their_handle": "Тяхната ръчка:", + "domain_pill.their_handle": "Техният адрес:", "domain_pill.their_server": "Цифровият им дом, където живеят всичките им публикации.", "domain_pill.their_username": "Неповторимият им идентификатор на сървъра им. Възможно е да се намерят потребители със същото потребителско име на други сървъри.", "domain_pill.username": "Потребителско име", - "domain_pill.whats_in_a_handle": "Какво е в ръчката?", - "domain_pill.who_they_are": "Откак ръчките казват кой кой е и къде е, то може да взаимодействате с хора през социаното уебпространство на .", - "domain_pill.who_you_are": "Тъй като вашата ръчка казва кои сте и къде сте, то може да взаимодействате с хора през социаното уебпространство на .", - "domain_pill.your_handle": "Вашата ръчка:", + "domain_pill.whats_in_a_handle": "Как се съставя адресът?", + "domain_pill.who_they_are": "Адресът показва за някой кой е той и къде се намира. Това ви позволява да общувате с всички в социалната мрежа от .", + "domain_pill.who_you_are": "Адресът ви показва кой сте и къде се намирате. Това ви позволява да общувате с всички в социалната мрежа от .", + "domain_pill.your_handle": "Вашият адрес:", "domain_pill.your_server": "Цифровият ви дом, където живеят всичките ви публикации. Не харесвате ли този? Прехвърляте се на сървъри по всяко време и докарвате последователите си също.", "domain_pill.your_username": "Неповторимият ви идентификатор на този сървър. Възможно е да се намерят потребители със същото потребителско име на други сървъри.", "embed.instructions": "Вградете публикацията в уебсайта си, копирайки кода долу.", @@ -258,16 +262,16 @@ "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": "Няма тенденции в момента. Проверете пак по-късно!", + "empty_column.explore_statuses": "Няма нищо популярно в момента. Проверете пак по-късно!", "empty_column.favourited_statuses": "Още нямате никакви любими публикации. Правейки любима, то тя ще се покаже тук.", "empty_column.favourites": "Още никого не е слагал публикацията в любими. Когато някой го направи, този човек ще се покаже тук.", "empty_column.follow_requests": "Още нямате заявки за последване. Получавайки такава, то тя ще се покаже тук.", "empty_column.followed_tags": "Още не сте последвали никакви хаштагове. Последваните хаштагове ще се покажат тук.", "empty_column.hashtag": "Още няма нищо в този хаштаг.", - "empty_column.home": "Вашата начална часова ос е празна! Последвайте повече хора, за да я запълните. {suggestions}", + "empty_column.home": "Вашата начална хронология е празна! Последвайте повече хора, за да се запълни.", "empty_column.list": "Все още списъкът е празен. Членуващите на списъка, публикуващи нови публикации, ще се появят тук.", "empty_column.lists": "Все още нямате списъци. Когато създадете такъв, той ще се покаже тук.", "empty_column.mutes": "Още не сте заглушавали потребители.", @@ -302,6 +306,7 @@ "filter_modal.select_filter.subtitle": "Изберете съществуваща категория или създайте нова", "filter_modal.select_filter.title": "Филтриране на публ.", "filter_modal.title.status": "Филтриране на публ.", + "filter_warning.matches_filter": "Съвпадащ филтър на “{title}”", "filtered_notifications_banner.pending_requests": "От {count, plural, =0 {никого, когото може да познавате} one {едно лице, което може да познавате} other {# души, които може да познавате}}", "filtered_notifications_banner.title": "Филтрирани известия", "firehose.all": "Всичко", @@ -366,13 +371,24 @@ "home.pending_critical_update.link": "Преглед на обновяванията", "home.pending_critical_update.title": "Налично критично обновяване на сигурността!", "home.show_announcements": "Показване на оповестяванията", + "ignore_notifications_modal.disclaimer": "Mastodon не може да осведоми потребители, че сте пренебрегнали известията им. Пренебрегването на известията няма да спре самите съобщения да не бъдат изпращани.", + "ignore_notifications_modal.filter_instead": "Вместо това филтриране", + "ignore_notifications_modal.filter_to_act_users": "Вие все още ще може да приемате, отхвърляте или докладвате потребители", + "ignore_notifications_modal.filter_to_avoid_confusion": "Прецеждането помага за избягване на възможно объркване", + "ignore_notifications_modal.filter_to_review_separately": "Може да разгледате отделно филтрираните известия", + "ignore_notifications_modal.ignore": "Пренебрегване на известията", + "ignore_notifications_modal.limited_accounts_title": "Пренебрегвате ли известията от модерирани акаунти?", + "ignore_notifications_modal.new_accounts_title": "Пренебрегвате ли известията от нови акаунти?", + "ignore_notifications_modal.not_followers_title": "Пренебрегвате ли известията от хора, които не са ви последвали?", + "ignore_notifications_modal.not_following_title": "Пренебрегвате ли известията от хора, които не сте последвали?", + "ignore_notifications_modal.private_mentions_title": "Пренебрегвате ли известия от непоискани лични споменавания?", "interaction_modal.description.favourite": "Имайки акаунт в Mastodon, може да сложите тази публикации в любими, за да позволите на автора да узнае, че я цените и да я запазите за по-късно.", "interaction_modal.description.follow": "С акаунт в Mastodon може да последвате {name}, за да получавате публикациите от този акаунт в началния си инфоканал.", "interaction_modal.description.reblog": "С акаунт в Mastodon може да подсилите тази публикация, за да я споделите с последователите си.", "interaction_modal.description.reply": "С акаунт в Mastodon може да добавите отговор към тази публикация.", "interaction_modal.login.action": "Към началото", "interaction_modal.login.prompt": "Домейнът на сървъра ви, примерно, mastodon.social", - "interaction_modal.no_account_yet": "Още не е в Мастодон?", + "interaction_modal.no_account_yet": "Още ли не сте в Mastodon?", "interaction_modal.on_another_server": "На различен сървър", "interaction_modal.on_this_server": "На този сървър", "interaction_modal.sign_in": "Не сте влезли в този сървър. Къде се хоства акаунтът ви?", @@ -395,12 +411,12 @@ "keyboard_shortcuts.enter": "Отваряне на публикация", "keyboard_shortcuts.favourite": "Любима публикация", "keyboard_shortcuts.favourites": "Отваряне на списъка с любими", - "keyboard_shortcuts.federated": "Отваряне на федерирания инфопоток", + "keyboard_shortcuts.federated": "Отваряне на федералната хронология", "keyboard_shortcuts.heading": "Клавишни съчетания", - "keyboard_shortcuts.home": "Отваряне на личния инфопоток", + "keyboard_shortcuts.home": "Отваряне на началната хронология", "keyboard_shortcuts.hotkey": "Бърз клавиш", "keyboard_shortcuts.legend": "Показване на тази легенда", - "keyboard_shortcuts.local": "Отваряне на локалния инфопоток", + "keyboard_shortcuts.local": "Отваряне на локалната хронология", "keyboard_shortcuts.mention": "Споменаване на автора", "keyboard_shortcuts.muted": "Отваряне на списъка със заглушени потребители", "keyboard_shortcuts.my_profile": "Отваряне на профила ви", @@ -421,6 +437,8 @@ "lightbox.close": "Затваряне", "lightbox.next": "Напред", "lightbox.previous": "Назад", + "lightbox.zoom_in": "Увеличение до действителната големина", + "lightbox.zoom_out": "Увеличение до побиране", "limited_account_hint.action": "Показване на профила въпреки това", "limited_account_hint.title": "Този профил е бил скрит от модераторите на {domain}.", "link_preview.author": "От {name}", @@ -442,6 +460,7 @@ "lists.subheading": "Вашите списъци", "load_pending": "{count, plural, one {# нов елемент} other {# нови елемента}}", "loading_indicator.label": "Зареждане…", + "media_gallery.hide": "Скриване", "moved_to_account_banner.text": "Вашият акаунт {disabledAccount} сега е изключен, защото се преместихте в {movedToAccount}.", "mute_modal.hide_from_notifications": "Скриване от известията", "mute_modal.hide_options": "Скриване на възможностите", @@ -457,7 +476,7 @@ "navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс", "navigation_bar.blocks": "Блокирани потребители", "navigation_bar.bookmarks": "Отметки", - "navigation_bar.community_timeline": "Локален инфопоток", + "navigation_bar.community_timeline": "Локална хронология", "navigation_bar.compose": "Съставяне на нова публикация", "navigation_bar.direct": "Частни споменавания", "navigation_bar.discover": "Откриване", @@ -490,7 +509,7 @@ "notification.favourite": "{name} направи любима публикацията ви", "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# друг} other {# други}} направиха любима ваша публикация", "notification.follow": "{name} ви последва", - "notification.follow.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} ви последваха", + "notification.follow.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} ви последваха", "notification.follow_request": "{name} поиска да ви последва", "notification.follow_request.name_and_others": "{name} и {count, plural, one {# друг} other {# други}} поискаха да ви последват", "notification.label.mention": "Споменаване", @@ -498,6 +517,7 @@ "notification.label.private_reply": "Личен отговор", "notification.label.reply": "Отговор", "notification.mention": "Споменаване", + "notification.mentioned_you": "{name} ви спомена", "notification.moderation-warning.learn_more": "Научете повече", "notification.moderation_warning": "Получихте предупреждение за модериране", "notification.moderation_warning.action_delete_statuses": "Някои от публикациите ви са премахнати.", @@ -519,10 +539,15 @@ "notification.status": "{name} току-що публикува", "notification.update": "{name} промени публикация", "notification_requests.accept": "Приемам", + "notification_requests.accept_multiple": "{count, plural, one {Приемане на # заявка…} other {Приемане на # заявки…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Приемане на заявката} other {Приемане на заявките}}", "notification_requests.confirm_accept_multiple.message": "На път сте да приемете {count, plural, one {едно известие за заявка} other {# известия за заявки}}. Наистина ли искате да продължите?", "notification_requests.confirm_accept_multiple.title": "Приемате ли заявките за известие?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Отхвърляне на заявката} other {Отхвърляне на заявките}}", + "notification_requests.confirm_dismiss_multiple.message": "На път сте да отхвърлите {count, plural, one {една заявка за известие} other {# заявки за известие}}. Няма да имате лесен достъп до {count, plural, one {това лице} other {тях}} отново. Наистина ли искате да продължите?", "notification_requests.confirm_dismiss_multiple.title": "Отхвърляте ли заявките за известие?", "notification_requests.dismiss": "Отхвърлям", + "notification_requests.dismiss_multiple": "{count, plural, one {Отхвърляне на # заявка…} other {Отхвърляне на # заявки…}}", "notification_requests.edit_selection": "Редактиране", "notification_requests.exit_selection": "Готово", "notification_requests.explainer_for_limited_account": "Известията от този акаунт са прецедени, защото акаунтът е ограничен от модератор.", @@ -543,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Лента за бърз филтър", "notifications.column_settings.follow": "Нови последователи:", "notifications.column_settings.follow_request": "Нови заявки за последване:", + "notifications.column_settings.group": "Групиране", "notifications.column_settings.mention": "Споменавания:", "notifications.column_settings.poll": "Резултати от анкета:", "notifications.column_settings.push": "Изскачащи известия", @@ -568,7 +594,10 @@ "notifications.permission_required": "Известията на работния плот ги няма, щото няма дадено нужното позволение.", "notifications.policy.accept": "Приемам", "notifications.policy.accept_hint": "Показване в известия", + "notifications.policy.drop": "Пренебрегване", + "notifications.policy.drop_hint": "Изпращане в празнотата, за да не се видим никога пак", "notifications.policy.filter": "Филтър", + "notifications.policy.filter_hint": "Изпращане до филтрираните входящи за известия", "notifications.policy.filter_limited_accounts_hint": "Ограничено от модераторите на сървъра", "notifications.policy.filter_limited_accounts_title": "Модерирани акаунти", "notifications.policy.filter_new_accounts.hint": "Сътворено през {days, plural, one {последния ден} other {последните # дена}}", @@ -588,7 +617,7 @@ "onboarding.actions.go_to_explore": "Виж тенденции", "onboarding.actions.go_to_home": "Към началния ми инфоканал", "onboarding.compose.template": "Здравейте, #Mastodon!", - "onboarding.follows.empty": "За съжаление, в момента не могат да бъдат показани резултати. Може да опитате да търсите или да разгледате, за да намерите кого да последвате, или опитайте отново по-късно.", + "onboarding.follows.empty": "За съжаление, в момента не могат да се показват резултати. Може да опитате посредством търсене или сърфиране да разгледате страницата, за да намерите хора за последване, или опитайте пак по-късно.", "onboarding.follows.lead": "Може да бъдете куратор на началния си инфоканал. Последвайки повече хора, по-деен и по-интересен ще става. Тези профили може да са добра начална точка, от която винаги по-късно да спрете да следвате!", "onboarding.follows.title": "Популярно в Mastodon", "onboarding.profile.discoverable": "Правене на моя профил откриваем", @@ -596,7 +625,7 @@ "onboarding.profile.display_name": "Името на показ", "onboarding.profile.display_name_hint": "Вашето пълно име или псевдоним…", "onboarding.profile.lead": "Винаги може да завършите това по-късно в настройките, където дори има повече възможности за настройване.", - "onboarding.profile.note": "Биогр.", + "onboarding.profile.note": "Биография", "onboarding.profile.note_hint": "Може да @споменавате други хора или #хаштагове…", "onboarding.profile.save_and_continue": "Запазване и продължаване", "onboarding.profile.title": "Настройване на профила", @@ -613,7 +642,7 @@ "onboarding.steps.follow_people.title": "Персонализиране на началния ви инфоканал", "onboarding.steps.publish_status.body": "Поздравете целия свят.", "onboarding.steps.publish_status.title": "Направете първата си публикация", - "onboarding.steps.setup_profile.body": "Други са по-вероятно да взаимодействат с вас с попълнения профил.", + "onboarding.steps.setup_profile.body": "Подсилете взаимодействията си, имайки изчерпателен профил.", "onboarding.steps.setup_profile.title": "Пригодете профила си", "onboarding.steps.share_profile.body": "Позволете на приятелите си да знаят как да ви намират в Mastodon!", "onboarding.steps.share_profile.title": "Споделяне на профила ви", @@ -684,7 +713,7 @@ "report.placeholder": "Допълнителни коментари", "report.reasons.dislike": "Не ми харесва", "report.reasons.dislike_description": "Не е нещо, което искате да виждате", - "report.reasons.legal": "Законово е", + "report.reasons.legal": "Незаконно е", "report.reasons.legal_description": "Смятате, че това нарушава закона на вашата страна или държавата на сървъра", "report.reasons.other": "Нещо друго е", "report.reasons.other_description": "Проблемът не попада в нито една от останалите категории", @@ -722,7 +751,7 @@ "search.quick_action.open_url": "Отваряне на URL адреса в Mastodon", "search.quick_action.status_search": "Съвпадение на публикации {x}", "search.search_or_paste": "Търсене/поставяне на URL", - "search_popout.full_text_search_disabled_message": "Не е достъпно на {domain}.", + "search_popout.full_text_search_disabled_message": "Не е налично на {domain}.", "search_popout.full_text_search_logged_out_message": "Достъпно само при влизане в системата.", "search_popout.language_code": "Код на езика по ISO", "search_popout.options": "Възможности при търсене", @@ -754,6 +783,7 @@ "status.bookmark": "Отмятане", "status.cancel_reblog_private": "Край на подсилването", "status.cannot_reblog": "Публикацията не може да се подсилва", + "status.continued_thread": "Продължена нишка", "status.copy": "Копиране на връзката към публикация", "status.delete": "Изтриване", "status.detailed_status": "Подробен изглед на разговора", @@ -762,6 +792,7 @@ "status.edit": "Редактиране", "status.edited": "Последно редактирано на {date}", "status.edited_x_times": "Редактирано {count, plural,one {{count} път} other {{count} пъти}}", + "status.embed": "Вземане на кода за вграждане", "status.favourite": "Любимо", "status.favourites": "{count, plural, one {любимо} other {любими}}", "status.filter": "Филтриране на публ.", @@ -786,6 +817,7 @@ "status.reblogs.empty": "Още никого не е подсилвал публикацията. Подсилващият ще се покаже тук.", "status.redraft": "Изтриване и преработване", "status.remove_bookmark": "Премахване на отметката", + "status.replied_in_thread": "Отговорено в нишката", "status.replied_to": "В отговор до {name}", "status.reply": "Отговор", "status.replyAll": "Отговор на нишка", @@ -801,9 +833,9 @@ "status.uncached_media_warning": "Онагледяването не е налично", "status.unmute_conversation": "Без заглушаването на разговора", "status.unpin": "Разкачане от профила", - "subscribed_languages.lead": "Публикации само на избрани езици ще се явяват в началото ви и в списъка с часови оси след промяната. Изберете \"нищо\", за да получавате публикации на всички езици.", + "subscribed_languages.lead": "Публикации само на избрани езици ще се явяват в началото ви и в хронологичните списъци след промяната. Изберете \"нищо\", за да получавате публикации на всички езици.", "subscribed_languages.save": "Запазване на промените", - "subscribed_languages.target": "Смяна на езика за {target}", + "subscribed_languages.target": "Промяна на абонираните езици за {target}", "tabs_bar.home": "Начало", "tabs_bar.notifications": "Известия", "time_remaining.days": "{number, plural, one {остава # ден} other {остават # дни}}", @@ -823,6 +855,11 @@ "upload_error.poll": "Качването на файлове не е позволено с анкети.", "upload_form.audio_description": "Опишете за хора, които са глухи или трудно чуват", "upload_form.description": "Опишете за хора, които са слепи или имат слабо зрение", + "upload_form.drag_and_drop.instructions": "Натиснете интервал или enter, за да подберете мултимедийно прикачване. Провлачвайки, ползвайте клавишите със стрелки, за да премествате мултимедията във всяка дадена посока. Натиснете пак интервал или enter, за да се стовари мултимедийното прикачване в новото си положение или натиснете Esc за отмяна.", + "upload_form.drag_and_drop.on_drag_cancel": "Провлачването е отменено. Мултимедийното прикачване {item} е спуснато.", + "upload_form.drag_and_drop.on_drag_end": "Мултимедийното прикачване {item} е спуснато.", + "upload_form.drag_and_drop.on_drag_over": "Мултимедийното прикачване {item} е преместено.", + "upload_form.drag_and_drop.on_drag_start": "Избрано мултимедийно прикачване {item}.", "upload_form.edit": "Редактиране", "upload_form.thumbnail": "Промяна на миниобраза", "upload_form.video_description": "Опишете за хора, които са глухи или трудно чуват, слепи или имат слабо зрение", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 9512f6a92b..3d55fc81fc 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -11,6 +11,7 @@ "about.not_available": "এই তথ্য এই সার্ভারে উন্মুক্ত করা হয়নি.", "about.powered_by": "{mastodon} দ্বারা তৈরি বিকেন্দ্রীভূত সামাজিক মিডিয়া।", "about.rules": "সার্ভারের নিয়মাবলী", + "account.account_note_header": "ব্যক্তিগত টীকা", "account.add_or_remove_from_list": "তালিকাতে যোগ বা অপসারণ করো", "account.badges.bot": "বট", "account.badges.group": "দল", @@ -19,6 +20,7 @@ "account.block_short": "ব্লক", "account.blocked": "অবরুদ্ধ", "account.cancel_follow_request": "অনুসরণ অনুরোধ প্রত্যাহার করুন", + "account.copy": "অবতারের সংযোগ অনুলিপি করো", "account.direct": "গোপনে মেনশন করুন @{name}", "account.disable_notifications": "আমাকে জানানো বন্ধ করো যখন @{name} পোস্ট করবে", "account.domain_blocked": "ডোমেইন ব্লক করা", @@ -29,6 +31,7 @@ "account.featured_tags.last_status_never": "কোনো পোস্ট নেই", "account.featured_tags.title": "{name} এর ফিচার করা Hashtag সমূহ", "account.follow": "অনুসরণ", + "account.follow_back": "তাকে অনুসরণ করো", "account.followers": "অনুসরণকারী", "account.followers.empty": "এই ব্যক্তিকে এখনো কেউ অনুসরণ করে না.", "account.following": "অনুসরণ করা হচ্ছে", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 79949ed91f..69e1ac8d9b 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -161,9 +161,11 @@ "confirmations.delete.message": "Ha sur oc'h e fell deoc'h dilemel an toud-mañ ?", "confirmations.delete_list.confirm": "Dilemel", "confirmations.delete_list.message": "Ha sur eo hoc'h eus c'hoant da zilemel ar roll-mañ da vat ?", + "confirmations.delete_list.title": "Dilemel al listenn?", "confirmations.discard_edit_media.confirm": "Nac'hañ", "confirmations.discard_edit_media.message": "Bez ez eus kemmoù n'int ket enrollet e deskrivadur ar media pe ar rakwel, nullañ anezho evelato?", "confirmations.edit.confirm": "Kemmañ", + "confirmations.edit.message": "Kemmañ bremañ a zilamo ar gemennadenn emaoc'h o skrivañ. Sur e oc'h e fell deoc'h kenderc'hel ganti?", "confirmations.logout.confirm": "Digevreañ", "confirmations.logout.message": "Ha sur oc'h e fell deoc'h digevreañ ?", "confirmations.mute.confirm": "Kuzhat", @@ -172,6 +174,7 @@ "confirmations.reply.message": "Respont bremañ a zilamo ar gemennadenn emaoc'h o skrivañ. Sur e oc'h e fell deoc'h kenderc'hel ganti?", "confirmations.unfollow.confirm": "Diheuliañ", "confirmations.unfollow.message": "Ha sur oc'h e fell deoc'h paouez da heuliañ {name} ?", + "content_warning.show_more": "Diskouez muioc'h", "conversation.delete": "Dilemel ar gaozeadenn", "conversation.mark_as_read": "Merkañ evel lennet", "conversation.open": "Gwelout ar gaozeadenn", @@ -250,6 +253,7 @@ "filter_modal.select_filter.subtitle": "Implijout ur rummad a zo anezhañ pe krouiñ unan nevez", "filter_modal.select_filter.title": "Silañ an toud-mañ", "filter_modal.title.status": "Silañ un toud", + "filter_warning.matches_filter": "A glot gant ar sil “{title}”", "firehose.all": "Pep tra", "firehose.local": "Ar servijer-mañ", "firehose.remote": "Servijerioù all", @@ -385,12 +389,19 @@ "notification.admin.report": "Disklêriet eo bet {target} gant {name}", "notification.admin.sign_up": "{name} en·he deus lakaet e·hec'h anv", "notification.follow": "heuliañ a ra {name} ac'hanoc'h", + "notification.follow.name_and_others": "{name} {count, plural, one {hag # den all} two {ha # zen all} few {ha # den all} many {ha # den all} other {ha # den all}} zo o heuliañ ac'hanoc'h", "notification.follow_request": "Gant {name} eo bet goulennet ho heuliañ", + "notification.label.reply": "Respont", "notification.moderation-warning.learn_more": "Gouzout hiroc'h", "notification.own_poll": "Echu eo ho sontadeg", "notification.reblog": "Gant {name} eo bet skignet ho toud", + "notification.relationships_severance_event.learn_more": "Gouzout hiroc'h", "notification.status": "Emañ {name} o paouez toudañ", "notification.update": "Gant {name} ez eus bet kemmet un toud", + "notification_requests.accept": "Asantiñ", + "notification_requests.dismiss": "Diverkañ", + "notification_requests.edit_selection": "Kemmañ", + "notification_requests.exit_selection": "Graet", "notifications.clear": "Skarzhañ ar c'hemennoù", "notifications.clear_confirmation": "Ha sur oc'h e fell deoc'h skarzhañ ho holl kemennoù ?", "notifications.column_settings.admin.report": "Disklêriadurioù nevez :", @@ -399,6 +410,7 @@ "notifications.column_settings.favourite": "Muiañ-karet:", "notifications.column_settings.follow": "Heulierien nevez:", "notifications.column_settings.follow_request": "Pedadoù heuliañ nevez :", + "notifications.column_settings.group": "Strollañ", "notifications.column_settings.mention": "Menegoù:", "notifications.column_settings.poll": "Disoc'hoù ar sontadeg:", "notifications.column_settings.push": "Kemennoù push", @@ -422,6 +434,10 @@ "notifications.permission_denied": "Kemennoù war ar burev n'int ket hegerz rak pedadenn aotren ar merdeer a zo bet nullet araok", "notifications.permission_denied_alert": "Kemennoù wa ar burev na c'hellont ket bezañ lezelet, rak aotre ar merdeer a zo bet nac'het a-raok", "notifications.permission_required": "Kemennoù war ar burev n'int ket hegerz abalamour d'an aotre rekis n'eo ket bet roet.", + "notifications.policy.accept": "Asantiñ", + "notifications.policy.accept_hint": "Diskouez er c’hemennoù", + "notifications.policy.drop": "Tremen e-bioù", + "notifications.policy.filter": "Silañ", "notifications.policy.filter_new_accounts_title": "Kontoù nevez", "notifications_permission_banner.enable": "Lezel kemennoù war ar burev", "notifications_permission_banner.how_to_control": "Evit reseviñ kemennoù pa ne vez ket digoret Mastodon, lezelit kemennoù war ar burev. Gallout a rit kontrollañ peseurt eskemmoù a c'henel kemennoù war ar burev gant ar {icon} nozelenn a-us kentre ma'z int lezelet.", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index b79ac156e2..cf986f8205 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -150,7 +150,7 @@ "compose.published.open": "Obre", "compose.saved.body": "Tut desat.", "compose_form.direct_message_warning_learn_more": "Més informació", - "compose_form.encryption_warning": "Les publicacions a Mastodon no estant xifrades punt a punt. No comparteixis informació sensible mitjançant Mastodon.", + "compose_form.encryption_warning": "Els tuts a Mastodon no estan xifrats punt a punt. No compartiu informació confidencial mitjançant Mastodon.", "compose_form.hashtag_warning": "Aquest tut no apareixerà a les llistes d'etiquetes perquè no és públic. Només els tuts públics apareixen a les cerques per etiqueta.", "compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure els tuts de només per a seguidors.", "compose_form.lock_disclaimer.lock": "blocat", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Deixar de seguir l'usuari?", "content_warning.hide": "Amaga la publicació", "content_warning.show": "Mostra-la igualment", + "content_warning.show_more": "Mostra'n més", "conversation.delete": "Elimina la conversa", "conversation.mark_as_read": "Marca com a llegida", "conversation.open": "Mostra la conversa", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova", "filter_modal.select_filter.title": "Filtra aquest tut", "filter_modal.title.status": "Filtra un tut", - "filter_warning.matches_filter": "Coincideix amb el filtre “{title}”", + "filter_warning.matches_filter": "Coincideix amb el filtre “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {De ningú} one {D'una persona} other {De # persones}} que potser coneixes", "filtered_notifications_banner.title": "Notificacions filtrades", "firehose.all": "Tots", @@ -508,7 +509,7 @@ "notification.favourite": "{name} ha afavorit el teu tut", "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# altre} other {# altres}} han afavorit la vostra publicació", "notification.follow": "{name} et segueix", - "notification.follow.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} us han seguit", + "notification.follow.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} us han seguit", "notification.follow_request": "{name} ha sol·licitat de seguir-te", "notification.follow_request.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} han demanat de seguir-vos", "notification.label.mention": "Menció", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Resposta en privat", "notification.label.reply": "Resposta", "notification.mention": "Menció", + "notification.mentioned_you": "{name} us ha mencionat", "notification.moderation-warning.learn_more": "Per a saber-ne més", "notification.moderation_warning": "Heu rebut un avís de moderació", "notification.moderation_warning.action_delete_statuses": "S'han eliminat algunes de les vostres publicacions.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra ràpida de filtres", "notifications.column_settings.follow": "Nous seguidors:", "notifications.column_settings.follow_request": "Noves sol·licituds de seguiment:", + "notifications.column_settings.group": "Agrupa", "notifications.column_settings.mention": "Mencions:", "notifications.column_settings.poll": "Resultats de l’enquesta:", "notifications.column_settings.push": "Notificacions push", @@ -612,11 +615,11 @@ "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": "Ves a la teva línia de temps", + "onboarding.actions.go_to_home": "Aneu a la vostra pantalla d'inici", "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": "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.follows.lead": "La vostra pantalla d'inici és la manera principal d'experimentar Mastodon. Com més gent seguiu, més activa i interessant serà. Per a començar, alguns suggeriments:", + "onboarding.follows.title": "Personalitzeu la pantalla d'inci", "onboarding.profile.discoverable": "Fes el meu perfil descobrible", "onboarding.profile.discoverable_hint": "En acceptar d'ésser descobert a Mastodon els teus missatges poden aparèixer dins les tendències i els resultats de cerques, i el teu perfil es pot suggerir a qui tingui interessos semblants als teus.", "onboarding.profile.display_name": "Nom que es mostrarà", @@ -636,7 +639,7 @@ "onboarding.start.skip": "Vols saltar-te tota la resta?", "onboarding.start.title": "Llestos!", "onboarding.steps.follow_people.body": "Mastodon va de seguir a gent interessant.", - "onboarding.steps.follow_people.title": "Personalitza la pantalla d'inci", + "onboarding.steps.follow_people.title": "Personalitzeu la pantalla d'inici", "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 interactuïn amb tu si tens un perfil complet.", @@ -671,11 +674,11 @@ "privacy.unlisted.long": "Menys fanfàrries algorísmiques", "privacy.unlisted.short": "Públic silenciós", "privacy_policy.last_updated": "Darrera actualització {date}", - "privacy_policy.title": "Política de Privacitat", + "privacy_policy.title": "Política de privadesa", "recommended": "Recomanat", "refresh": "Actualitza", "regeneration_indicator.label": "Es carrega…", - "regeneration_indicator.sublabel": "Es prepara la teva línia de temps d'Inici!", + "regeneration_indicator.sublabel": "Es prepara la vostra pantalla d'Inici!", "relative_time.days": "{number}d", "relative_time.full.days": "fa {number, plural, one {# dia} other {# dies}}", "relative_time.full.hours": "fa {number, plural, one {# hora} other {# hores}}", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 1f2804daa5..76da53f804 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -85,10 +85,11 @@ "alert.rate_limited.title": "Spojení omezena", "alert.unexpected.message": "Objevila se neočekávaná chyba.", "alert.unexpected.title": "Jejda!", + "alt_text_badge.title": "Popisek", "announcement.announcement": "Oznámení", "attachments_list.unprocessed": "(nezpracováno)", "audio.hide": "Skrýt zvuk", - "block_modal.remote_users_caveat": "Požádáme server {domain}, aby respektoval vaše rozhodnutí. Úplné dodržování nastavení však není zaručeno, protože některé servery mohou řešit blokování různě. Veřejné příspěvky mohou stále být viditelné pro nepřihlášené uživatele.", + "block_modal.remote_users_caveat": "Požádáme server {domain}, aby respektoval vaše rozhodnutí. Úplné dodržování nastavení však není zaručeno, protože některé servery mohou řešit blokování různě. Veřejné příspěvky mohou být stále viditelné pro nepřihlášené uživatele.", "block_modal.show_less": "Zobrazit méně", "block_modal.show_more": "Zobrazit více", "block_modal.they_cant_mention": "Nemůže vás zmiňovat ani sledovat.", @@ -195,6 +196,8 @@ "confirmations.unfollow.message": "Opravdu chcete {name} přestat sledovat?", "confirmations.unfollow.title": "Přestat sledovat uživatele?", "content_warning.hide": "Skrýt příspěvek", + "content_warning.show": "Přesto zobrazit", + "content_warning.show_more": "Zobrazit více", "conversation.delete": "Smazat konverzaci", "conversation.mark_as_read": "Označit jako přečtené", "conversation.open": "Zobrazit konverzaci", @@ -220,17 +223,19 @@ "domain_block_modal.they_cant_follow": "Nikdo z tohoto serveru vás nemůže sledovat.", "domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován*a.", "domain_block_modal.title": "Blokovat doménu?", + "domain_block_modal.you_will_lose_num_followers": "Ztratíte {followersCount, plural, one {{followersCountDisplay} sledujícího} few {{followersCountDisplay} sledující} many {{followersCountDisplay} sledujících} other {{followersCountDisplay} sledujících}} a {followingCount, plural, one {{followingCountDisplay} sledovaného} few {{followingCountDisplay} sledované} many {{followingCountDisplay} sledovaných} other {{followingCountDisplay} sledovaných}}.", + "domain_block_modal.you_will_lose_relationships": "Ztratíte všechny sledující a sledované z tohoto serveru.", "domain_block_modal.you_wont_see_posts": "Neuvidíte příspěvky ani upozornění od uživatelů z tohoto serveru.", - "domain_pill.activitypub_lets_connect": "Umožňuje vám spojit se a komunikovat s lidmi nejen na Mastodonu, ale i s dalšími sociálními aplikacemi.", + "domain_pill.activitypub_lets_connect": "Umožňuje vám spojit se a komunikovat s lidmi nejen na Mastodonu, ale i na jiných sociálních aplikacích.", "domain_pill.activitypub_like_language": "ActivityPub je jako jazyk, kterým Mastodon mluví s jinými sociálními sítěmi.", "domain_pill.server": "Server", "domain_pill.their_handle": "Handle:", - "domain_pill.their_server": "Digitální domov, kde žijí všechny příspěvky.", - "domain_pill.their_username": "Jedinečný identikátor na serveru. Je možné najít uživatele se stejným uživatelským jménem na různých serverech.", + "domain_pill.their_server": "Jejich digitální domov, kde žijí jejich všechny příspěvky.", + "domain_pill.their_username": "Jejich jedinečný identifikátor na jejich serveru. Je možné, že na jiných serverech jsou uživatelé se stejným uživatelským jménem.", "domain_pill.username": "Uživatelské jméno", "domain_pill.whats_in_a_handle": "Co obsahuje handle?", - "domain_pill.who_they_are": "Protože handle říkají kdo je kdo a také kde, je možné interagovat s lidmi napříč sociálními weby .", - "domain_pill.who_you_are": "Protože handle říká kdo jsi a kde jsi, mohou s tebou lidé komunikovat napříč sociálními weby .", + "domain_pill.who_they_are": "Protože handly říkají kdo je kdo a také kde, je možné interagovat s lidmi napříč sociálním webem, skládajícím se z .", + "domain_pill.who_you_are": "Protože handle říká kdo jsi a kde jsi, mohou s tebou komunikovat lidé napříč sociálním webem, skládajícím se z .", "domain_pill.your_handle": "Tvůj handle:", "domain_pill.your_server": "Tvůj digitální domov, kde žijí všechny tvé příspěvky. Nelíbí se ti? Kdykoliv se přesuň na jiný server a vezmi si sebou i své sledující.", "domain_pill.your_username": "Tvůj jedinečný identifikátor na tomto serveru. Je možné najít uživatele se stejným uživatelským jménem na jiných serverech.", @@ -251,7 +256,7 @@ "emoji_button.search_results": "Výsledky hledání", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestování a místa", - "empty_column.account_hides_collections": "Tento uživatel se rozhodl nezveřejňovat tuto informaci", + "empty_column.account_hides_collections": "Tento uživatel se rozhodl tuto informaci nezveřejňovat", "empty_column.account_suspended": "Účet je pozastaven", "empty_column.account_timeline": "Nejsou tu žádné příspěvky!", "empty_column.account_unavailable": "Profil není dostupný", @@ -301,6 +306,8 @@ "filter_modal.select_filter.subtitle": "Použít existující kategorii nebo vytvořit novou kategorii", "filter_modal.select_filter.title": "Filtrovat tento příspěvek", "filter_modal.title.status": "Filtrovat příspěvek", + "filter_warning.matches_filter": "Odpovídá filtru “{title}”", + "filtered_notifications_banner.pending_requests": "Od {count, plural, =0 {nikoho, koho možná znáte} one {člověka, kterého možná znáte} few {#, které možná znáte} many {#, které možná znáte} other {#, které možná znáte}}", "filtered_notifications_banner.title": "Filtrovaná oznámení", "firehose.all": "Vše", "firehose.local": "Tento server", @@ -308,14 +315,14 @@ "follow_request.authorize": "Autorizovat", "follow_request.reject": "Zamítnout", "follow_requests.unlocked_explanation": "Přestože váš účet není uzamčen, personál {domain} usoudil, že byste mohli chtít tyto požadavky na sledování zkontrolovat ručně.", - "follow_suggestions.curated_suggestion": "Výběr personálů", + "follow_suggestions.curated_suggestion": "Výběr personálu", "follow_suggestions.dismiss": "Znovu nezobrazovat", "follow_suggestions.featured_longer": "Ručně vybráno týmem {domain}", "follow_suggestions.friends_of_friends_longer": "Populární mezi lidmi, které sledujete", "follow_suggestions.hints.featured": "Tento profil byl ručně vybrán týmem {domain}.", "follow_suggestions.hints.friends_of_friends": "Tento profil je populární mezi lidmi, které sledujete.", - "follow_suggestions.hints.most_followed": "Tento profil je jedním z nejvíce sledovaných na {domain}.", - "follow_suggestions.hints.most_interactions": "Tento profil nedávno dostalo velkou pozornost na {domain}.", + "follow_suggestions.hints.most_followed": "Tento profil je jedním z nejsledovanějších na {domain}.", + "follow_suggestions.hints.most_interactions": "Tomuto profilu se nedávno dostalo velké pozornosti na {domain}.", "follow_suggestions.hints.similar_to_recently_followed": "Tento profil je podobný profilům, které jste nedávno sledovali.", "follow_suggestions.personalized_suggestion": "Přizpůsobený návrh", "follow_suggestions.popular_suggestion": "Populární návrh", @@ -349,6 +356,14 @@ "hashtag.follow": "Sledovat hashtag", "hashtag.unfollow": "Přestat sledovat hashtag", "hashtags.and_other": "…a {count, plural, one {# další} few {# další} other {# dalších}}", + "hints.profiles.followers_may_be_missing": "Sledující mohou pro tento profil chybět.", + "hints.profiles.follows_may_be_missing": "Sledování mohou pro tento profil chybět.", + "hints.profiles.posts_may_be_missing": "Některé příspěvky z tohoto profilu mohou chybět.", + "hints.profiles.see_more_followers": "Zobrazit více sledujících na {domain}", + "hints.profiles.see_more_follows": "Zobrazit další sledování na {domain}", + "hints.profiles.see_more_posts": "Zobrazit další příspěvky na {domain}", + "hints.threads.replies_may_be_missing": "Odpovědi z jiných serverů mohou chybět.", + "hints.threads.see_more": "Zobrazit další odpovědi na {domain}", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", "home.hide_announcements": "Skrýt oznámení", @@ -356,6 +371,17 @@ "home.pending_critical_update.link": "Zobrazit aktualizace", "home.pending_critical_update.title": "K dispozici je kritická bezpečnostní aktualizace!", "home.show_announcements": "Zobrazit oznámení", + "ignore_notifications_modal.disclaimer": "Mastodon nemůže informovat uživatele, že jste ignorovali jejich oznámení. Ignorování oznámení nezabrání odesílání zpráv samotných.", + "ignore_notifications_modal.filter_instead": "Místo toho filtrovat", + "ignore_notifications_modal.filter_to_act_users": "Stále budete moci přijmout, odmítnout nebo nahlásit uživatele", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrování pomáhá vyhnout se možným nejasnostem", + "ignore_notifications_modal.filter_to_review_separately": "Filtrovaná oznámení můžete zkontrolovat samostatně", + "ignore_notifications_modal.ignore": "Ignorovat oznámení", + "ignore_notifications_modal.limited_accounts_title": "Ignorovat oznámení z moderovaných účtů?", + "ignore_notifications_modal.new_accounts_title": "Ignorovat oznámení z nových účtů?", + "ignore_notifications_modal.not_followers_title": "Ignorovat oznámení od lidí, kteří vás nesledují?", + "ignore_notifications_modal.not_following_title": "Ignorovat oznámení od lidí, které nesledujete?", + "ignore_notifications_modal.private_mentions_title": "Ignorovat oznámení z nevyžádaných soukromých zmínek?", "interaction_modal.description.favourite": "Pokud máte účet na Mastodonu, můžete tento příspěvek označit jako oblíbený a dát tak autorovi najevo, že si ho vážíte, a uložit si ho na později.", "interaction_modal.description.follow": "S účtem na Mastodonu můžete sledovat uživatele {name} a přijímat příspěvky ve vašem domovském kanálu.", "interaction_modal.description.reblog": "S účtem na Mastodonu můžete boostnout tento příspěvek a sdílet jej s vlastními sledujícími.", @@ -411,6 +437,8 @@ "lightbox.close": "Zavřít", "lightbox.next": "Další", "lightbox.previous": "Předchozí", + "lightbox.zoom_in": "Přiblížit na skutečnou velikost", + "lightbox.zoom_out": "Přizpůsobit velikost", "limited_account_hint.action": "Přesto profil zobrazit", "limited_account_hint.title": "Tento profil byl skryt moderátory {domain}.", "link_preview.author": "Podle {name}", @@ -432,10 +460,11 @@ "lists.subheading": "Vaše seznamy", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}", "loading_indicator.label": "Načítání…", + "media_gallery.hide": "Skrýt", "moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálně deaktivován, protože jste se přesunul/a na {movedToAccount}.", - "mute_modal.hide_from_notifications": "Skrýt z notifikací", + "mute_modal.hide_from_notifications": "Skrýt z oznámení", "mute_modal.hide_options": "Skrýt možnosti", - "mute_modal.indefinite": "Dokud je neodkryju", + "mute_modal.indefinite": "Dokud je neodeberu ze ztišených", "mute_modal.show_options": "Zobrazit možnosti", "mute_modal.they_can_mention_and_follow": "Mohou vás zmínit a sledovat, ale neuvidíte je.", "mute_modal.they_wont_know": "Nebudou vědět, že byli skryti.", @@ -443,7 +472,8 @@ "mute_modal.you_wont_see_mentions": "Neuvidíte příspěvky, které je zmiňují.", "mute_modal.you_wont_see_posts": "Stále budou moci vidět vaše příspěvky, ale vy jejich neuvidíte.", "navigation_bar.about": "O aplikaci", - "navigation_bar.advanced_interface": "Otevřít pokročilé webové rozhraní", + "navigation_bar.administration": "Administrace", + "navigation_bar.advanced_interface": "Otevřít v pokročilém webovém rozhraní", "navigation_bar.blocks": "Blokovaní uživatelé", "navigation_bar.bookmarks": "Záložky", "navigation_bar.community_timeline": "Místní časová osa", @@ -459,6 +489,7 @@ "navigation_bar.follows_and_followers": "Sledovaní a sledující", "navigation_bar.lists": "Seznamy", "navigation_bar.logout": "Odhlásit se", + "navigation_bar.moderation": "Moderace", "navigation_bar.mutes": "Skrytí uživatelé", "navigation_bar.opened_in_classic_interface": "Příspěvky, účty a další specifické stránky jsou ve výchozím nastavení otevřeny v klasickém webovém rozhraní.", "navigation_bar.personal": "Osobní", @@ -469,24 +500,37 @@ "navigation_bar.security": "Zabezpečení", "not_signed_in_indicator.not_signed_in": "Pro přístup k tomuto zdroji se musíte přihlásit.", "notification.admin.report": "Uživatel {name} nahlásil {target}", - "notification.admin.report_statuses": "{name} nahlásil {target} za {category}", - "notification.admin.report_statuses_other": "{name} nahlásil {target}", + "notification.admin.report_account": "{name} nahlásil {count, plural, one {jeden příspěvek} few {# příspěvky} many {# příspěvků} other {# příspěvků}} od {target} za {category}", + "notification.admin.report_account_other": "{name} nahlásil {count, plural, one {jeden příspěvek} few {# příspěvky} many {# příspěvků} other {# příspěvků}} od {target}", + "notification.admin.report_statuses": "{name} nahlásili {target} za {category}", + "notification.admin.report_statuses_other": "{name} nahlásili {target}", "notification.admin.sign_up": "Uživatel {name} se zaregistroval", - "notification.favourite": "Uživatel {name} si oblíbil váš příspěvek", + "notification.admin.sign_up.name_and_others": "{name} a {count, plural, one {# další} few {# další} many {# dalších} other {# dalších}} se zaregistrovali", + "notification.favourite": "{name} si oblíbil*a váš příspěvek", + "notification.favourite.name_and_others_with_link": "{name} a {count, plural, one {# další si oblíbil} few {# další si oblíbili} other {# dalších si oblíbilo}} Váš příspěvek", "notification.follow": "Uživatel {name} vás začal sledovat", + "notification.follow.name_and_others": "{name} a {count, plural, one {# další Vás začal sledovat} few {# další Vás začali sledovat} other {# dalších Vás začalo sledovat}}", "notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat", + "notification.follow_request.name_and_others": "{name} a {count, plural, one {# další Vám poslal žádost o sledování} few {# další Vám poslali žádost o sledování} other {# dalších Vám poslalo žádost o sledování}}", + "notification.label.mention": "Zmínka", + "notification.label.private_mention": "Soukromá zmínka", + "notification.label.private_reply": "Privátní odpověď", + "notification.label.reply": "Odpověď", + "notification.mention": "Zmínka", + "notification.mentioned_you": "{name} vás zmínil", "notification.moderation-warning.learn_more": "Zjistit více", - "notification.moderation_warning": "Obdrželi jste moderační varování", + "notification.moderation_warning": "Obdrželi jste varování od moderátorů", "notification.moderation_warning.action_delete_statuses": "Některé z vašich příspěvků byly odstraněny.", "notification.moderation_warning.action_disable": "Váš účet je zablokován.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Některé z vašich příspěvků byly označeny jako citlivé.", - "notification.moderation_warning.action_none": "Váš účet obdržel moderační varování.", + "notification.moderation_warning.action_none": "Váš účet obdržel varování od moderátorů.", "notification.moderation_warning.action_sensitive": "Vaše příspěvky budou od nynějška označeny jako citlivé.", "notification.moderation_warning.action_silence": "Váš účet byl omezen.", "notification.moderation_warning.action_suspend": "Váš účet byl pozastaven.", "notification.own_poll": "Vaše anketa skončila", "notification.poll": "Anketa, ve které jste hlasovali, skončila", "notification.reblog": "Uživatel {name} boostnul váš příspěvek", + "notification.reblog.name_and_others_with_link": "{name} a {count, plural, one {# další boostnul} few {# další boostnuli} other {# dalších boostnulo}} Váš příspěvek", "notification.relationships_severance_event": "Kontakt ztracen s {name}", "notification.relationships_severance_event.account_suspension": "Administrátor z {from} pozastavil {target}, což znamená, že již od nich nemůžete přijímat aktualizace nebo s nimi interagovat.", "notification.relationships_severance_event.domain_block": "Administrátor z {from} pozastavil {target}, včetně {followersCount} z vašich sledujících a {followingCount, plural, one {# účet, který sledujete} few {# účty, které sledujete} many {# účtů, které sledujete} other {# účtů, které sledujete}}.", @@ -495,11 +539,24 @@ "notification.status": "Uživatel {name} právě přidal příspěvek", "notification.update": "Uživatel {name} upravil příspěvek", "notification_requests.accept": "Přijmout", + "notification_requests.accept_multiple": "{count, plural, one {Schválit # požadavek…} few {Schválit # požadavky…} other {Schválit # požadavků…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Schválit požadavek} other {Schválit požadavky}}", + "notification_requests.confirm_accept_multiple.message": "Chystáte se schválit {count, plural, one {jeden požadavek} few {# požadavky} other {# požadavků}} na oznámení. Opravdu chcete pokračovat?", + "notification_requests.confirm_accept_multiple.title": "Přijmout žádosti o oznámení?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Zamítnout požadavek} other {Zamítnout požadavky}}", + "notification_requests.confirm_dismiss_multiple.message": "Chystáte se zamítnout {count, plural, one {jeden požadavek} few {# požadavky} many {# požadavků} other {# požadavků}} na oznámení. Poté k {count, plural, one {němu} other {něm}} již nebudete mít snadný přístup. Opravdu chcete pokračovat?", + "notification_requests.confirm_dismiss_multiple.title": "Zamítnout požadavky na oznámení?", "notification_requests.dismiss": "Zamítnout", + "notification_requests.dismiss_multiple": "Zamítnout {count, plural, one {# požadavek} few {# požadavky} many {# požadavků} other {# požadavků}}…", + "notification_requests.edit_selection": "Upravit", + "notification_requests.exit_selection": "Hotovo", + "notification_requests.explainer_for_limited_account": "Oznámení z tohoto účtu byla filtrována, protože tento účet byl omezen moderátorem.", + "notification_requests.explainer_for_limited_remote_account": "Oznámení z tohoto účtu byla filtrována, protože tento účet nebo jeho server byl omezen moderátorem.", "notification_requests.maximize": "Maximalizovat", "notification_requests.minimize_banner": "Minimalizovat banner filtrovaných oznámení", "notification_requests.notifications_from": "Oznámení od {name}", - "notification_requests.title": "Vyfiltrovaná oznámení", + "notification_requests.title": "Filtrovaná oznámení", + "notification_requests.view": "Zobrazit oznámení", "notifications.clear": "Vyčistit oznámení", "notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?", "notifications.clear_title": "Vyčistit oznámení?", @@ -511,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování", "notifications.column_settings.follow": "Noví sledující:", "notifications.column_settings.follow_request": "Nové žádosti o sledování:", + "notifications.column_settings.group": "Skupina", "notifications.column_settings.mention": "Zmínky:", "notifications.column_settings.poll": "Výsledky anket:", "notifications.column_settings.push": "Push oznámení", @@ -534,6 +592,14 @@ "notifications.permission_denied": "Oznámení na ploše nejsou k dispozici, protože byla zamítnuta žádost o oprávnění je zobrazovat", "notifications.permission_denied_alert": "Oznámení na ploše není možné zapnout, protože oprávnění bylo v minulosti zamítnuto", "notifications.permission_required": "Oznámení na ploše nejsou k dispozici, protože nebylo uděleno potřebné oprávnění.", + "notifications.policy.accept": "Přijmout", + "notifications.policy.accept_hint": "Zobrazit v oznámeních", + "notifications.policy.drop": "Ignorovat", + "notifications.policy.drop_hint": "Permanentně odstranit, aby již nikdy nespatřil světlo světa", + "notifications.policy.filter": "Filtrovat", + "notifications.policy.filter_hint": "Odeslat do filtrované schránky oznámení", + "notifications.policy.filter_limited_accounts_hint": "Omezeno moderátory serveru", + "notifications.policy.filter_limited_accounts_title": "Moderované účty", "notifications.policy.filter_new_accounts.hint": "Vytvořeno během {days, plural, one {včerejška} few {posledních # dnů} many {posledních # dní} other {posledních # dní}}", "notifications.policy.filter_new_accounts_title": "Nové účty", "notifications.policy.filter_not_followers_hint": "Včetně lidí, kteří vás sledovali méně než {days, plural, one {jeden den} few {# dny} many {# dní} other {# dní}}", @@ -542,6 +608,7 @@ "notifications.policy.filter_not_following_title": "Lidé, které nesledujete", "notifications.policy.filter_private_mentions_hint": "Vyfiltrováno, pokud to není odpověď na vaši zmínku nebo pokud sledujete odesílatele", "notifications.policy.filter_private_mentions_title": "Nevyžádané soukromé zmínky", + "notifications.policy.title": "Spravovat oznámení od…", "notifications_permission_banner.enable": "Povolit oznámení na ploše", "notifications_permission_banner.how_to_control": "Chcete-li dostávat oznámení, i když nemáte Mastodon otevřený, povolte oznámení na ploše. Můžete si zvolit, o kterých druzích interakcí chcete být oznámením na ploše informování pod tlačítkem {icon} výše.", "notifications_permission_banner.title": "Nenechte si nic uniknout", @@ -550,7 +617,7 @@ "onboarding.actions.go_to_explore": "Podívejte se, co je populární", "onboarding.actions.go_to_home": "Přejít na svůj domovský feed", "onboarding.compose.template": "Ahoj #Mastodon!", - "onboarding.follows.empty": "Bohužel, žádné výsledky nelze momentálně zobrazit. Můžete zkusit vyhledat nebo procházet stránku s průzkumem a najít lidi, kteří budou sledovat, nebo to zkuste znovu později.", + "onboarding.follows.empty": "Bohužel, žádné výsledky nelze momentálně zobrazit. Můžete zkusit najít uživatele ke sledování za pomocí vyhledávání nebo na stránce „Objevit“, nebo to zkuste znovu později.", "onboarding.follows.lead": "Domovský kanál je hlavní metodou zažívání Mastodonu. Čím více lidí sledujete, tím aktivnější a zajímavější bude. Pro začnutí, zde máte několik návrhů:", "onboarding.follows.title": "Přispůsobit vlastní domovský kanál", "onboarding.profile.discoverable": "Udělat svůj profil vyhledatelným", @@ -674,7 +741,7 @@ "report_notification.categories.spam": "Spam", "report_notification.categories.spam_sentence": "spam", "report_notification.categories.violation": "Porušení pravidla", - "report_notification.categories.violation_sentence": "porušení pravidla", + "report_notification.categories.violation_sentence": "porušení pravidel", "report_notification.open": "Otevřít hlášení", "search.no_recent_searches": "Žádná nedávná vyhledávání", "search.placeholder": "Hledat", @@ -716,6 +783,7 @@ "status.bookmark": "Přidat do záložek", "status.cancel_reblog_private": "Zrušit boostnutí", "status.cannot_reblog": "Tento příspěvek nemůže být boostnutý", + "status.continued_thread": "Pokračuje ve vlákně", "status.copy": "Zkopírovat odkaz na příspěvek", "status.delete": "Smazat", "status.detailed_status": "Podrobné zobrazení konverzace", @@ -724,6 +792,7 @@ "status.edit": "Upravit", "status.edited": "Naposledy upraveno {date}", "status.edited_x_times": "Upraveno {count, plural, one {{count}krát} few {{count}krát} many {{count}krát} other {{count}krát}}", + "status.embed": "Získejte kód pro vložení", "status.favourite": "Oblíbit", "status.favourites": "{count, plural, one {oblíbený} few {oblíbené} many {oblíbených} other {oblíbených}}", "status.filter": "Filtrovat tento příspěvek", @@ -748,6 +817,7 @@ "status.reblogs.empty": "Tento příspěvek ještě nikdo neboostnul. Pokud to někdo udělá, zobrazí se zde.", "status.redraft": "Smazat a přepsat", "status.remove_bookmark": "Odstranit ze záložek", + "status.replied_in_thread": "Odpověděli ve vlákně", "status.replied_to": "Odpověděl/a uživateli {name}", "status.reply": "Odpovědět", "status.replyAll": "Odpovědět na vlákno", @@ -785,6 +855,11 @@ "upload_error.poll": "Nahrávání souborů není povoleno s anketami.", "upload_form.audio_description": "Popis pro sluchově postižené", "upload_form.description": "Popis pro zrakově postižené", + "upload_form.drag_and_drop.instructions": "Chcete-li zvednout přílohu, stiskněte mezerník nebo enter. Při přetažení použijte klávesnicové šipky k přesunutí mediální přílohy v libovolném směru. Stiskněte mezerník nebo enter pro vložení přílohy do nové pozice, nebo stiskněte Esc pro ukončení.", + "upload_form.drag_and_drop.on_drag_cancel": "Přetažení bylo zrušeno. Příloha {item} byla vrácena.", + "upload_form.drag_and_drop.on_drag_end": "Příloha {item} byla vrácena.", + "upload_form.drag_and_drop.on_drag_over": "Příloha {item} byla přesunuta.", + "upload_form.drag_and_drop.on_drag_start": "Zvednuta příloha {item}.", "upload_form.edit": "Upravit", "upload_form.thumbnail": "Změnit miniaturu", "upload_form.video_description": "Popis pro sluchově či zrakově postižené", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index f2d0708882..f8f22b204f 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -1,5 +1,5 @@ { - "about.blocks": "Gweinyddion gyda chymedrolwyr", + "about.blocks": "Gweinyddion wedi'u cymedroli", "about.contact": "Cysylltwch â:", "about.disclaimer": "Mae Mastodon yn feddalwedd cod agored rhydd ac o dan hawlfraint Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Nid yw'r rheswm ar gael", @@ -13,35 +13,35 @@ "about.rules": "Rheolau'r gweinydd", "account.account_note_header": "Nodyn personol", "account.add_or_remove_from_list": "Ychwanegu neu Ddileu o'r rhestrau", - "account.badges.bot": "Bot", + "account.badges.bot": "Awtomataidd", "account.badges.group": "Grŵp", "account.block": "Blocio @{name}", - "account.block_domain": "Blocio parth {domain}", + "account.block_domain": "Blocio'r parth {domain}", "account.block_short": "Blocio", "account.blocked": "Blociwyd", "account.cancel_follow_request": "Tynnu cais i ddilyn", "account.copy": "Copïo dolen i'r proffil", "account.direct": "Crybwyll yn breifat @{name}", "account.disable_notifications": "Stopiwch fy hysbysu pan fydd @{name} yn postio", - "account.domain_blocked": "Parth wedi ei flocio", + "account.domain_blocked": "Parth wedi'i rwystro", "account.edit_profile": "Golygu proffil", "account.enable_notifications": "Rhowch wybod i fi pan fydd @{name} yn postio", "account.endorse": "Dangos ar fy mhroffil", - "account.featured_tags.last_status_at": "Y postiad diwethaf ar {date}", + "account.featured_tags.last_status_at": "Y postiad olaf ar {date}", "account.featured_tags.last_status_never": "Dim postiadau", "account.featured_tags.title": "Prif hashnodau {name}", "account.follow": "Dilyn", - "account.follow_back": "Dilyn yn ôl", + "account.follow_back": "Dilyn nôl", "account.followers": "Dilynwyr", "account.followers.empty": "Does neb yn dilyn y defnyddiwr hwn eto.", "account.followers_counter": "{count, plural, one {{counter} dilynwr} two {{counter} ddilynwr} other {{counter} dilynwyr}}", "account.following": "Yn dilyn", - "account.following_counter": "{count, plural, one {Yn dilyn {counter}} other {Yn dilyn {counter}}}", + "account.following_counter": "{count, plural, one {Yn dilyn {counter}} other {Yn dilyn {counter} arall}}", "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", "account.go_to_profile": "Mynd i'r proffil", "account.hide_reblogs": "Cuddio hybiau gan @{name}", "account.in_memoriam": "Er Cof.", - "account.joined_short": "Wedi Ymuno", + "account.joined_short": "Ymunodd", "account.languages": "Newid ieithoedd wedi tanysgrifio iddyn nhw", "account.link_verified_on": "Gwiriwyd perchnogaeth y ddolen yma ar {date}", "account.locked_info": "Mae'r statws preifatrwydd cyfrif hwn wedi'i osod i fod ar glo. Mae'r perchennog yn adolygu'r sawl sy'n gallu eu dilyn.", @@ -56,16 +56,16 @@ "account.no_bio": "Dim disgrifiad wedi'i gynnig.", "account.open_original_page": "Agor y dudalen wreiddiol", "account.posts": "Postiadau", - "account.posts_with_replies": "Postiadau ac atebion", + "account.posts_with_replies": "Postiadau ac ymatebion", "account.report": "Adrodd @{name}", "account.requested": "Aros am gymeradwyaeth. Cliciwch er mwyn canslo cais dilyn", "account.requested_follow": "Mae {name} wedi gwneud cais i'ch dilyn", - "account.share": "Rhannwch broffil @{name}", + "account.share": "Rhannu proffil @{name}", "account.show_reblogs": "Dangos hybiau gan @{name}", - "account.statuses_counter": "{count, plural, one {{counter} post} two {{counter} bost} few {{counter} phost} many {{counter} post} other {{counter} post}}", - "account.unblock": "Dadflocio @{name}", - "account.unblock_domain": "Dadflocio parth {domain}", - "account.unblock_short": "Dadflocio", + "account.statuses_counter": "{count, plural, one {{counter} postiad} two {{counter} bostiad} few {{counter} phostiad} many {{counter} postiad} other {{counter} postiad}}", + "account.unblock": "Dadrwystro @{name}", + "account.unblock_domain": "Dadrwystro parth {domain}", + "account.unblock_short": "Dadrwystro", "account.unendorse": "Peidio a'i ddangos ar fy mhroffil", "account.unfollow": "Dad-ddilyn", "account.unmute": "Dad-dewi {name}", @@ -85,28 +85,29 @@ "alert.rate_limited.title": "Cyfradd gyfyngedig", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.", "alert.unexpected.title": "Wps!", + "alt_text_badge.title": "Testun amgen", "announcement.announcement": "Cyhoeddiad", "attachments_list.unprocessed": "(heb eu prosesu)", "audio.hide": "Cuddio sain", "block_modal.remote_users_caveat": "Byddwn yn gofyn i'r gweinydd {domain} barchu eich penderfyniad. Fodd bynnag, nid yw cydymffurfiad wedi'i warantu gan y gall rhai gweinyddwyr drin rhwystro mewn ffyrdd gwahanol. Mae'n bosibl y bydd postiadau cyhoeddus yn dal i fod yn weladwy i ddefnyddwyr nad ydynt wedi mewngofnodi.", "block_modal.show_less": "Dangos llai", - "block_modal.show_more": "Dangos mwy", - "block_modal.they_cant_mention": "Nid ydynt yn gallu eich crybwyll na'ch dilyn.", - "block_modal.they_cant_see_posts": "Nid ydynt yn gallu gweld eich postiadau ac ni fyddwch yn gweld eu rhai hwy.", - "block_modal.they_will_know": "Gallant weld eu bod wedi'u rhwystro.", + "block_modal.show_more": "Dangos rhagor", + "block_modal.they_cant_mention": "Dydyn nhw ddim yn gallu eich crybwyll na'ch dilyn.", + "block_modal.they_cant_see_posts": "Dydyn nhw ddim yn gallu gweld eich postiadau a fyddwch chi ddim yn gweld eu rhai nhw.", + "block_modal.they_will_know": "Gallan nhw weld eu bod wedi'u rhwystro.", "block_modal.title": "Blocio defnyddiwr?", "block_modal.you_wont_see_mentions": "Fyddwch chi ddim yn gweld postiadau sy'n sôn amdanyn nhw.", "boost_modal.combo": "Mae modd pwyso {combo} er mwyn hepgor hyn tro nesa", "boost_modal.reblog": "Hybu postiad?", "boost_modal.undo_reblog": "Dad-hybu postiad?", "bundle_column_error.copy_stacktrace": "Copïo'r adroddiad gwall", - "bundle_column_error.error.body": "Nid oedd modd cynhyrchu'r dudalen honno. Gall fod oherwydd gwall yn ein cod neu fater cydnawsedd porwr.", + "bundle_column_error.error.body": "Does dim modd cynhyrchu'r dudalen honno. Gall fod oherwydd gwall yn ein cod neu fater cydnawsedd porwr.", "bundle_column_error.error.title": "O na!", "bundle_column_error.network.body": "Bu gwall wrth geisio llwytho'r dudalen hon. Gall hyn fod oherwydd anhawster dros-dro gyda'ch cysylltiad gwe neu'r gweinydd hwn.", "bundle_column_error.network.title": "Gwall rhwydwaith", "bundle_column_error.retry": "Ceisiwch eto", "bundle_column_error.return": "Mynd i'r ffrwd gartref", - "bundle_column_error.routing.body": "Nid oedd modd canfod y dudalen honno. Ydych chi'n siŵr fod yr URL yn y bar cyfeiriad yn gywir?", + "bundle_column_error.routing.body": "Doedd dim modd canfod y dudalen honno. Ydych chi'n siŵr fod yr URL yn y bar cyfeiriad yn gywir?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Cau", "bundle_modal_error.message": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", @@ -115,14 +116,14 @@ "closed_registrations_modal.description": "Ar hyn o bryd nid yw'n bosib creu cyfrif ar {domain}, ond cadwch mewn cof nad oes raid i chi gael cyfrif yn benodol ar {domain} i ddefnyddio Mastodon.", "closed_registrations_modal.find_another_server": "Dod o hyd i weinydd arall", "closed_registrations_modal.preamble": "Mae Mastodon wedi'i ddatganoli, felly does dim gwahaniaeth ble rydych chi'n creu eich cyfrif, byddwch chi'n gallu dilyn a rhyngweithio ag unrhyw un ar y gweinydd hwn. Gallwch hyd yn oed ei gynnal un eich hun!", - "closed_registrations_modal.title": "Ymgofrestru ar Mastodon", + "closed_registrations_modal.title": "Cofrestru ar Mastodon", "column.about": "Ynghylch", - "column.blocks": "Defnyddwyr a flociwyd", + "column.blocks": "Defnyddwyr wedi'u rhwystro", "column.bookmarks": "Llyfrnodau", "column.community": "Ffrwd lleol", "column.direct": "Crybwylliadau preifat", "column.directory": "Pori proffiliau", - "column.domain_blocks": "Parthau wedi'u blocio", + "column.domain_blocks": "Parthau wedi'u rhwystro", "column.favourites": "Ffefrynnau", "column.firehose": "Ffrydiau byw", "column.follow_requests": "Ceisiadau dilyn", @@ -133,7 +134,7 @@ "column.pins": "Postiadau wedi eu pinio", "column.public": "Ffrwd y ffederasiwn", "column_back_button.label": "Nôl", - "column_header.hide_settings": "Cuddio dewisiadau", + "column_header.hide_settings": "Cuddio'r dewisiadau", "column_header.moveLeft_settings": "Symud y golofn i'r chwith", "column_header.moveRight_settings": "Symud y golofn i'r dde", "column_header.pin": "Pinio", @@ -150,7 +151,7 @@ "compose.saved.body": "Postiad wedi'i gadw.", "compose_form.direct_message_warning_learn_more": "Dysgu mwy", "compose_form.encryption_warning": "Dyw postiadau ar Mastodon ddim wedi'u hamgryptio o ben i ben. Peidiwch â rhannu unrhyw wybodaeth sensitif dros Mastodon.", - "compose_form.hashtag_warning": "Ni fydd y postiad hwn wedi ei restru o dan unrhyw hashnod gan nad yw'n gyhoeddus. Dim ond postiadau cyhoeddus y mae modd eu chwilio drwy hashnod.", + "compose_form.hashtag_warning": "Fydd y postiad hwn ddim wedi'i restru o dan unrhyw hashnod gan nad yw'n gyhoeddus. Dim ond postiadau cyhoeddus y mae modd eu chwilio drwy hashnod.", "compose_form.lock_disclaimer": "Nid yw eich cyfri wedi'i {locked}. Gall unrhyw un eich dilyn i weld eich postiadau dilynwyr-yn-unig.", "compose_form.lock_disclaimer.lock": "wedi ei gloi", "compose_form.placeholder": "Beth sydd ar eich meddwl?", @@ -161,15 +162,15 @@ "compose_form.poll.switch_to_multiple": "Newid pleidlais i adael mwy nag un dewis", "compose_form.poll.switch_to_single": "Newid pleidlais i gyfyngu i un dewis", "compose_form.poll.type": "Arddull", - "compose_form.publish": "Postiad", - "compose_form.publish_form": "Cyhoeddi", - "compose_form.reply": "Ateb", - "compose_form.save_changes": "Diweddariad", + "compose_form.publish": "Postio", + "compose_form.publish_form": "Postiad newydd", + "compose_form.reply": "Ymateb", + "compose_form.save_changes": "Diweddaru", "compose_form.spoiler.marked": "Dileu rhybudd cynnwys", "compose_form.spoiler.unmarked": "Ychwanegu rhybudd cynnwys", "compose_form.spoiler_placeholder": "Rhybudd cynnwys (dewisol)", "confirmation_modal.cancel": "Canslo", - "confirmations.block.confirm": "Blocio", + "confirmations.block.confirm": "Rhwystro", "confirmations.delete.confirm": "Dileu", "confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y post hwn?", "confirmations.delete.title": "Dileu postiad?", @@ -188,7 +189,7 @@ "confirmations.redraft.confirm": "Dileu ac ailddrafftio", "confirmations.redraft.message": "Ydych chi wir eisiau'r dileu'r postiad hwn a'i ailddrafftio? Bydd ffefrynnau a hybiau'n cael eu colli, a bydd atebion i'r post gwreiddiol yn mynd yn amddifad.", "confirmations.redraft.title": "Dileu & ailddraftio postiad?", - "confirmations.reply.confirm": "Ateb", + "confirmations.reply.confirm": "Ymateb", "confirmations.reply.message": "Bydd ateb nawr yn cymryd lle y neges yr ydych yn cyfansoddi ar hyn o bryd. Ydych chi'n siŵr eich bod am barhau?", "confirmations.reply.title": "Trosysgrifo'r postiad?", "confirmations.unfollow.confirm": "Dad-ddilyn", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Dad-ddilyn defnyddiwr?", "content_warning.hide": "Cuddio'r postiad", "content_warning.show": "Dangos beth bynnag", + "content_warning.show_more": "Dangos rhagor", "conversation.delete": "Dileu sgwrs", "conversation.mark_as_read": "Nodi fel wedi'i ddarllen", "conversation.open": "Gweld sgwrs", @@ -209,8 +211,8 @@ "directory.recently_active": "Ar-lein yn ddiweddar", "disabled_account_banner.account_settings": "Gosodiadau'r cyfrif", "disabled_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd.", - "dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.", - "dismissable_banner.dismiss": "Cau", + "dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl y caiff eu cyfrifon eu cynnal ar {domain}.", + "dismissable_banner.dismiss": "Diystyru", "dismissable_banner.explore_links": "Dyma straeon newyddion sy’n cael eu rhannu fwyaf ar y we gymdeithasol heddiw. Mae'r straeon newyddion diweddaraf sy'n cael eu postio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.", "dismissable_banner.explore_statuses": "Dyma postiadau o bob gwr o'r we gymdeithasol sy'n derbyn sylw heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynnau'n cael eu graddio'n uwch.", "dismissable_banner.explore_tags": "Mae'r rhain yn hashnodau sydd ar gynnydd ar y we gymdeithasol heddiw. Mae hashnodau sy'n cael eu defnyddio gan fwy o unigolion gwahanol yn cael eu graddio'n uwch.", @@ -218,9 +220,11 @@ "domain_block_modal.block": "Blocio gweinydd", "domain_block_modal.block_account_instead": "Blocio @{name} yn ei le", "domain_block_modal.they_can_interact_with_old_posts": "Gall pobl o'r gweinydd hwn ryngweithio â'ch hen bostiadau.", - "domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.", + "domain_block_modal.they_cant_follow": "All neb o'r gweinydd hwn eich dilyn.", "domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu blocio.", "domain_block_modal.title": "Blocio parth?", + "domain_block_modal.you_will_lose_num_followers": "Byddwch yn colli {followersCount, plural, one {{followersCountDisplay} dilynwr} other {{followersCountDisplay} dilynwyr}} a {followingCount, plural, one {{followingCountDisplay} person rydych yn dilyn} other {{followingCountDisplay} o bobl rydych yn eu dilyn}}.", + "domain_block_modal.you_will_lose_relationships": "Byddwch yn colli'r holl ddilynwyr a phobl rydych chi'n eu dilyn o'r gweinydd hwn.", "domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.", "domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.", "domain_pill.activitypub_like_language": "Mae ActivityPub fel yr iaith y mae Mastodon yn ei siarad â rhwydweithiau cymdeithasol eraill.", @@ -256,10 +260,10 @@ "empty_column.account_suspended": "Cyfrif wedi'i atal", "empty_column.account_timeline": "Dim postiadau yma!", "empty_column.account_unavailable": "Nid yw'r proffil ar gael", - "empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.", - "empty_column.bookmarked_statuses": "Nid oes gennych unrhyw bostiad wedi'u cadw fel nod tudalen eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.", + "empty_column.blocks": "Dydych chi heb rwystro unrhyw ddefnyddwyr eto.", + "empty_column.bookmarked_statuses": "Does gennych chi ddim unrhyw bostiad wedi'u cadw fel nod tudalen eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.", "empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!", - "empty_column.direct": "Nid oes gennych unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.", + "empty_column.direct": "Does gennych chi unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.", "empty_column.domain_blocks": "Nid oes unrhyw barthau wedi'u blocio eto.", "empty_column.explore_statuses": "Does dim pynciau llosg ar hyn o bryd. Dewch nôl nes ymlaen!", "empty_column.favourited_statuses": "Rydych chi heb ffafrio unrhyw bostiadau eto. Pan byddwch chi'n ffafrio un, bydd yn ymddangos yma.", @@ -302,8 +306,8 @@ "filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd", "filter_modal.select_filter.title": "Hidlo'r postiad hwn", "filter_modal.title.status": "Hidlo postiad", - "filter_warning.matches_filter": "Yn cydweddu'r hidlydd “{title}”", - "filtered_notifications_banner.pending_requests": "Gan {count, plural, =0 {no one} one {un person} two {# berson} few {# pherson} other {# person}} efallai eich bod yn eu hadnabod", + "filter_warning.matches_filter": "Yn cyd-fynd â'r hidlydd “ {title} ”", + "filtered_notifications_banner.pending_requests": "Oddi wrth {count, plural, =0 {no one} one {un person} two {# berson} few {# pherson} other {# person}} efallai eich bod yn eu hadnabod", "filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo", "firehose.all": "Popeth", "firehose.local": "Gweinydd hwn", @@ -346,22 +350,22 @@ "hashtag.column_settings.tag_mode.any": "Unrhyw un o'r rhain", "hashtag.column_settings.tag_mode.none": "Dim o'r rhain", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.counter_by_accounts": "{cyfrif, lluosog, un {{counter} cyfranogwr} arall {{counter} cyfranogwr}}", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} cyfranogwr} other {{counter} cyfranogwr}}", "hashtag.counter_by_uses": "{count, plural, one {postiad {counter}} other {postiad {counter}}}", - "hashtag.counter_by_uses_today": "{cyfrif, lluosog, un {{counter} postiad} arall {{counter} postiad}} heddiw", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} postiad} other {{counter} postiad}} heddiw", "hashtag.follow": "Dilyn hashnod", "hashtag.unfollow": "Dad-ddilyn hashnod", - "hashtags.and_other": "…a {count, plural, other {# more}}", + "hashtags.and_other": "…a {count, plural, other {# arall}}", "hints.profiles.followers_may_be_missing": "Mae'n bosibl bod dilynwyr y proffil hwn ar goll.", "hints.profiles.follows_may_be_missing": "Mae'n bosibl bod dilynwyr y proffil hwn ar goll.", "hints.profiles.posts_may_be_missing": "Mae'n bosibl bod rhai postiadau y proffil hwn ar goll.", "hints.profiles.see_more_followers": "Gweld mwy o ddilynwyr ar {domain}", "hints.profiles.see_more_follows": "Gweld mwy o 'yn dilyn' ar {domain}", "hints.profiles.see_more_posts": "Gweld mwy o bostiadau ar {domain}", - "hints.threads.replies_may_be_missing": "Mae'n bosibl y bydd atebion gan weinyddion eraill ar goll.", - "hints.threads.see_more": "Gweld mwy o atebion ar {domain}", + "hints.threads.replies_may_be_missing": "Mae'n bosibl y bydd ymatebion gan weinyddion eraill ar goll.", + "hints.threads.see_more": "Gweld mwy o ymatebion ar {domain}", "home.column_settings.show_reblogs": "Dangos hybiau", - "home.column_settings.show_replies": "Dangos atebion", + "home.column_settings.show_replies": "Dangos ymatebion", "home.hide_announcements": "Cuddio cyhoeddiadau", "home.pending_critical_update.body": "Diweddarwch eich gweinydd Mastodon cyn gynted â phosibl!", "home.pending_critical_update.link": "Gweld diweddariadau", @@ -420,7 +424,7 @@ "keyboard_shortcuts.open_media": "Agor cyfryngau", "keyboard_shortcuts.pinned": "Agor rhestr postiadau wedi'u pinio", "keyboard_shortcuts.profile": "Agor proffil yr awdur", - "keyboard_shortcuts.reply": "Ateb i bostiad", + "keyboard_shortcuts.reply": "Ymateb i bostiad", "keyboard_shortcuts.requests": "Agor rhestr ceisiadau dilyn", "keyboard_shortcuts.search": "Ffocysu ar y bar chwilio", "keyboard_shortcuts.spoilers": "Dangos/cuddio'r maes CW", @@ -439,11 +443,11 @@ "limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.", "link_preview.author": "Gan {name}", "link_preview.more_from_author": "Mwy gan {name}", - "link_preview.shares": "{count, plural, one {{counter} ostiad } two {{counter} bostiad } few {{counter} postiad} many {{counter} postiad} other {{counter} postiad}}", + "link_preview.shares": "{count, plural, one {{counter} postiad } two {{counter} bostiad } few {{counter} postiad} many {{counter} postiad} other {{counter} postiad}}", "lists.account.add": "Ychwanegu at restr", "lists.account.remove": "Tynnu o'r rhestr", - "lists.delete": "Dileu rhestr", - "lists.edit": "Golygu rhestr", + "lists.delete": "Dileu'r rhestr", + "lists.edit": "Golygu'r rhestr", "lists.edit.submit": "Newid teitl", "lists.exclusive": "Cuddio'r postiadau hyn o'r ffrwd gartref", "lists.new.create": "Ychwanegu rhestr", @@ -457,7 +461,7 @@ "load_pending": "{count, plural, one {# eitem newydd} other {# eitem newydd}}", "loading_indicator.label": "Yn llwytho…", "media_gallery.hide": "Cuddio", - "moved_to_account_banner.text": "Ar hyn y bryd, mae eich cyfrif {disabledAccount} wedi ei analluogi am i chi symud i {movedToAccount}.", + "moved_to_account_banner.text": "Mae eich cyfrif {disabledAccount} wedi ei analluogi ar hyn o bryd am i chi symud i {movedToAccount}.", "mute_modal.hide_from_notifications": "Cuddio rhag hysbysiadau", "mute_modal.hide_options": "Cuddio'r dewis", "mute_modal.indefinite": "Nes i mi eu dad-dewi", @@ -495,24 +499,25 @@ "navigation_bar.search": "Chwilio", "navigation_bar.security": "Diogelwch", "not_signed_in_indicator.not_signed_in": "Rhaid i chi fewngofnodi i weld yr adnodd hwn.", - "notification.admin.report": "Adroddwyd ar {name} {target}", - "notification.admin.report_account": "{name} reported {count, plural, one {un postiad} other {# postiad}} from {target} for {category}", - "notification.admin.report_account_other": "Adroddodd {name} {count, plural, one {un postiad} two {# bostiad} few {# phost} other {# postiad}} gan {target}", + "notification.admin.report": "Adroddodd {name} {target}", + "notification.admin.report_account": "Adroddodd {name} {count, plural, one {un postiad} other {# postiad}} gan {target} oherwydd {category}", + "notification.admin.report_account_other": "Adroddodd {name} {count, plural, one {un postiad} two {# bostiad} few {# postiad} other {# postiad}} gan {target}", "notification.admin.report_statuses": "Adroddodd {name} {target} ar gyfer {category}", "notification.admin.report_statuses_other": "Adroddodd {name} {target}", "notification.admin.sign_up": "Cofrestrodd {name}", - "notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # eraill}}", + "notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # arall}}", "notification.favourite": "Ffafriodd {name} eich postiad", - "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# eraill}} eich postiad", + "notification.favourite.name_and_others_with_link": "Ffafriodd {name} a {count, plural, one {# arall} other {# arall}} eich postiad", "notification.follow": "Dilynodd {name} chi", - "notification.follow.name_and_others": "Mae {name} a {count, plural, one {# other} other {# others}} wedi'ch dilyn chi", + "notification.follow.name_and_others": "Mae {name} a {count, plural, zero {}one {# arall} two {# arall} few {# arall} many {# others} other {# arall}} nawr yn eich dilyn chi", "notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn", - "notification.follow_request.name_and_others": "Mae {name} a{count, plural, one {# other} other {# others}} wedi gofyn i'ch dilyn chi", + "notification.follow_request.name_and_others": "Mae {name} a{count, plural, one {# arall} other {# arall}} wedi gofyn i'ch dilyn chi", "notification.label.mention": "Crybwyll", "notification.label.private_mention": "Crybwyll preifat", - "notification.label.private_reply": "Ateb preifat", - "notification.label.reply": "Ateb", + "notification.label.private_reply": "Ymateb preifat", + "notification.label.reply": "Ymateb", "notification.mention": "Crybwyll", + "notification.mentioned_you": "Rydych wedi'ch crybwyll gan {name}", "notification.moderation-warning.learn_more": "Dysgu mwy", "notification.moderation_warning": "Rydych wedi derbyn rhybudd gan gymedrolwr", "notification.moderation_warning.action_delete_statuses": "Mae rhai o'ch postiadau wedi'u dileu.", @@ -525,7 +530,7 @@ "notification.own_poll": "Mae eich pleidlais wedi dod i ben", "notification.poll": "Mae arolwg y gwnaethoch bleidleisio ynddo wedi dod i ben", "notification.reblog": "Hybodd {name} eich post", - "notification.reblog.name_and_others_with_link": "Mae {name} a {count, plural, one {# other} other {# others}} wedi hybu eich postiad", + "notification.reblog.name_and_others_with_link": "Mae {name} a {count, plural, one {# arall} other {# arall}} wedi hybu eich postiad", "notification.relationships_severance_event": "Wedi colli cysylltiad â {name}", "notification.relationships_severance_event.account_suspension": "Mae gweinyddwr o {from} wedi atal {target}, sy'n golygu na allwch dderbyn diweddariadau ganddynt mwyach na rhyngweithio â nhw.", "notification.relationships_severance_event.domain_block": "Mae gweinyddwr o {from} wedi blocio {target}, gan gynnwys {followersCount} o'ch dilynwyr a {followingCount, plural, one {# cyfrif} other {# cyfrif}} arall rydych chi'n ei ddilyn.", @@ -534,9 +539,9 @@ "notification.status": "{name} newydd ei bostio", "notification.update": "Golygodd {name} bostiad", "notification_requests.accept": "Derbyn", - "notification_requests.accept_multiple": "{count, plural, one {Accept # request…} other {Accept # requests…}}", - "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Accept request} other {Accept requests}}", - "notification_requests.confirm_accept_multiple.message": "Rydych ar fin derbyn {count, plural, one {one notification request} other {# notification requests}}. Ydych chi'n siŵr eich bod am barhau?", + "notification_requests.accept_multiple": "{count, plural, one {Derbyn # cais…} other {Derbyn # cais…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Derbyn cais} other {Derbyn cais}}", + "notification_requests.confirm_accept_multiple.message": "Rydych ar fin derbyn {count, plural, one {un cais hysbysiad} other {# cais hysbysiad}}. Ydych chi'n siŵr eich bod am barhau?", "notification_requests.confirm_accept_multiple.title": "Derbyn ceisiadau hysbysu?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Diystyru cais} other {Diystyru ceisiadau}}", "notification_requests.confirm_dismiss_multiple.message": "Rydych ar fin diystyru {count, plural, one {un cais hysbysu} other {# cais hysbysiad}}. Fyddwch chi ddim yn gallu cyrchu {count, plural, one {it} other {them}} yn hawdd eto. Ydych chi'n yn siŵr eich bod am fwrw ymlaen?", @@ -563,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Bar hidlo cyflym", "notifications.column_settings.follow": "Dilynwyr newydd:", "notifications.column_settings.follow_request": "Ceisiadau dilyn newydd:", + "notifications.column_settings.group": "Grŵp", "notifications.column_settings.mention": "Crybwylliadau:", "notifications.column_settings.poll": "Canlyniadau pleidlais:", "notifications.column_settings.push": "Hysbysiadau gwthiadwy", @@ -684,7 +690,7 @@ "relative_time.minutes": "{number} munud", "relative_time.seconds": "{number} eiliad", "relative_time.today": "heddiw", - "reply_indicator.attachments": "{count, plural, one {# attachment} arall {# attachments}}", + "reply_indicator.attachments": "{count, plural, one {# atodiad} other {# atodiad}}", "reply_indicator.cancel": "Canslo", "reply_indicator.poll": "Arolwg", "report.block": "Blocio", @@ -693,7 +699,7 @@ "report.categories.other": "Arall", "report.categories.spam": "Sbam", "report.categories.violation": "Mae cynnwys yn torri un neu fwy o reolau'r gweinydd", - "report.category.subtitle": "Dewiswch y gyfatebiaeth gorau", + "report.category.subtitle": "Dewiswch yr ateb gorau", "report.category.title": "Beth sy'n digwydd gyda'r {type} yma?", "report.category.title_account": "proffil", "report.category.title_status": "post", @@ -727,7 +733,7 @@ "report.thanks.title_actionable": "Diolch am adrodd, byddwn yn ymchwilio i hyn.", "report.unfollow": "Dad-ddilyn @{name}", "report.unfollow_explanation": "Rydych chi'n dilyn y cyfrif hwn. I beidio â gweld eu postiadau yn eich ffrwd gartref mwyach, dad-ddilynwch nhw.", - "report_notification.attached_statuses": "{count, plural, one {{count} postiad} arall {{count} postiad}} atodwyd", + "report_notification.attached_statuses": "{count, plural, one {{count} postiad} other {{count} postiad}} wedi'i atodi", "report_notification.categories.legal": "Cyfreithiol", "report_notification.categories.legal_sentence": "cynnwys anghyfreithlon", "report_notification.categories.other": "Arall", @@ -807,13 +813,13 @@ "status.reblog": "Hybu", "status.reblog_private": "Hybu i'r gynulleidfa wreiddiol", "status.reblogged_by": "Hybodd {name}", - "status.reblogs": "{count, plural, one {hwb} other {hwb}}", + "status.reblogs": "{count, plural, one {# hwb} other {# hwb}}", "status.reblogs.empty": "Does neb wedi hybio'r post yma eto. Pan y bydd rhywun yn gwneud, byddent yn ymddangos yma.", "status.redraft": "Dileu ac ailddrafftio", "status.remove_bookmark": "Tynnu nod tudalen", "status.replied_in_thread": "Atebodd mewn edefyn", "status.replied_to": "Wedi ateb {name}", - "status.reply": "Ateb", + "status.reply": "Ymateb", "status.replyAll": "Ateb i edefyn", "status.report": "Adrodd ar @{name}", "status.sensitive_warning": "Cynnwys sensitif", @@ -849,6 +855,11 @@ "upload_error.poll": "Nid oes modd llwytho ffeiliau â phleidleisiau.", "upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw", "upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg", + "upload_form.drag_and_drop.instructions": "I godi atodiad cyfryngau, pwyswch y space neu enter. Wrth lusgo, defnyddiwch y bysellau saeth i symud yr atodiad cyfryngau i unrhyw gyfeiriad penodol. Pwyswch space neu enter eto i ollwng yr atodiad cyfryngau yn ei safle newydd, neu pwyswch escape i ddiddymu.", + "upload_form.drag_and_drop.on_drag_cancel": "Cafodd llusgo ei ddiddymu. Cafodd atodiad cyfryngau {item} ei ollwng.", + "upload_form.drag_and_drop.on_drag_end": "Cafodd atodiad cyfryngau {item} ei ollwng.", + "upload_form.drag_and_drop.on_drag_over": "Symudwyd atodiad cyfryngau {item}.", + "upload_form.drag_and_drop.on_drag_start": "Atodiad cyfryngau godwyd {item}.", "upload_form.edit": "Golygu", "upload_form.thumbnail": "Newid llun bach", "upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 659f807d05..13143a6247 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -29,7 +29,7 @@ "account.endorse": "Fremhæv på profil", "account.featured_tags.last_status_at": "Seneste indlæg {date}", "account.featured_tags.last_status_never": "Ingen indlæg", - "account.featured_tags.title": "{name}s fremhævede hashtags", + "account.featured_tags.title": "{name}s fremhævede etiketter", "account.follow": "Følg", "account.follow_back": "Følg tilbage", "account.followers": "Følgere", @@ -39,7 +39,7 @@ "account.following_counter": "{count, plural, one {{counter} følger} other {{counter} følger}}", "account.follows.empty": "Denne bruger følger ikke nogen endnu.", "account.go_to_profile": "Gå til profil", - "account.hide_reblogs": "Skjul boosts fra @{name}", + "account.hide_reblogs": "Skjul fremhævelser fra @{name}", "account.in_memoriam": "Til minde om.", "account.joined_short": "Oprettet", "account.languages": "Skift abonnementssprog", @@ -49,9 +49,9 @@ "account.mention": "Nævn @{name}", "account.moved_to": "{name} har angivet, at vedkommendes nye konto nu er:", "account.mute": "Skjul @{name}", - "account.mute_notifications_short": "Slå lyden fra for notifikationer", - "account.mute_short": "Skjul (mute)", - "account.muted": "Skjult (muted)", + "account.mute_notifications_short": "Sluk for notifikationer", + "account.mute_short": "Skjul", + "account.muted": "Skjult", "account.mutual": "Fælles", "account.no_bio": "Ingen beskrivelse til rådighed.", "account.open_original_page": "Åbn oprindelig side", @@ -63,14 +63,14 @@ "account.share": "Del @{name}s profil", "account.show_reblogs": "Vis fremhævelser fra @{name}", "account.statuses_counter": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}", - "account.unblock": "Afblokér @{name}", - "account.unblock_domain": "Afblokér domænet {domain}", - "account.unblock_short": "Afblokér", + "account.unblock": "Fjern blokering af @{name}", + "account.unblock_domain": "Fjern blokering af domænet {domain}", + "account.unblock_short": "Fjern blokering", "account.unendorse": "Fjern visning på din profil", "account.unfollow": "Følg ikke længere", - "account.unmute": "Vis @{name} igen (unmute)", - "account.unmute_notifications_short": "Slå lyden fra for notifikationer", - "account.unmute_short": "Vis igen (unmute)", + "account.unmute": "Vis @{name} igen", + "account.unmute_notifications_short": "Tænd for notifikationer", + "account.unmute_short": "Vis igen", "account_note.placeholder": "Klik for at tilføje notat", "admin.dashboard.daily_retention": "Brugerfastholdelsesrate per dag efter tilmelding", "admin.dashboard.monthly_retention": "Brugerfastholdelsesrate per måned efter tilmelding", @@ -90,16 +90,16 @@ "attachments_list.unprocessed": "(ubehandlet)", "audio.hide": "Skjul lyd", "block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.", - "block_modal.show_less": "Vis mindre", + "block_modal.show_less": "Vis færre", "block_modal.show_more": "Vis flere", - "block_modal.they_cant_mention": "Vedkommende kan ikke nævne eller følge dig.", + "block_modal.they_cant_mention": "Vedkommende kan ikke omtale eller følge dig.", "block_modal.they_cant_see_posts": "Vedkommende kan ikke se dine indlæg, og du vil ikke se vedkommendes.", "block_modal.they_will_know": "Vedkommende kan se den aktive blokering.", "block_modal.title": "Blokér bruger?", - "block_modal.you_wont_see_mentions": "Du vil ikke se indlæg, som nævner vedkommende.", + "block_modal.you_wont_see_mentions": "Du vil ikke se indlæg, som omtaler vedkommende.", "boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang", - "boost_modal.reblog": "Boost indlæg?", - "boost_modal.undo_reblog": "Fjern boost af indlæg?", + "boost_modal.reblog": "Fremhæv indlæg?", + "boost_modal.undo_reblog": "Fjern fremhævning af indlæg?", "bundle_column_error.copy_stacktrace": "Kopiér fejlrapport", "bundle_column_error.error.body": "Den anmodede side kunne ikke gengives. Dette kan skyldes flere typer fejl.", "bundle_column_error.error.title": "Åh nej!", @@ -125,11 +125,11 @@ "column.directory": "Tjek profiler", "column.domain_blocks": "Blokerede domæner", "column.favourites": "Favoritter", - "column.firehose": "Live feeds", + "column.firehose": "Aktuelt", "column.follow_requests": "Følgeanmodninger", "column.home": "Hjem", "column.lists": "Lister", - "column.mutes": "Skjulte brugere (mutede)", + "column.mutes": "Skjulte brugere", "column.notifications": "Notifikationer", "column.pins": "Fastgjorte indlæg", "column.public": "Fælles tidslinje", @@ -139,7 +139,7 @@ "column_header.moveRight_settings": "Flyt kolonne til højre", "column_header.pin": "Fastgør", "column_header.show_settings": "Vis indstillinger", - "column_header.unpin": "Løsgør", + "column_header.unpin": "Frigør", "column_subheading.settings": "Indstillinger", "community.column_settings.local_only": "Kun lokalt", "community.column_settings.media_only": "Kun medier", @@ -151,7 +151,7 @@ "compose.saved.body": "Indlæg gemt.", "compose_form.direct_message_warning_learn_more": "Få mere at vide", "compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende-krypteret. Del derfor ikke sensitiv information via Mastodon.", - "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under noget hashtag, da kun offentlige indlæg er søgbare via hashtags.", + "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under nogen etiket, da kun offentlige indlæg er søgbare via etiketter.", "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Enhver kan følge dig og se indlæg kun beregnet for følgere.", "compose_form.lock_disclaimer.lock": "låst", "compose_form.placeholder": "Hvad tænker du på?", @@ -166,9 +166,9 @@ "compose_form.publish_form": "Publicér", "compose_form.reply": "Svar", "compose_form.save_changes": "Opdatér", - "compose_form.spoiler.marked": "Fjern indholdsadvarsel", - "compose_form.spoiler.unmarked": "Tilføj indholdsadvarsel", - "compose_form.spoiler_placeholder": "Indholdsadvarsel (valgfri)", + "compose_form.spoiler.marked": "Fjern emnefelt", + "compose_form.spoiler.unmarked": "Tilføj emnefelt", + "compose_form.spoiler_placeholder": "Emnefelt (valgfrit)", "confirmation_modal.cancel": "Afbryd", "confirmations.block.confirm": "Blokér", "confirmations.delete.confirm": "Slet", @@ -185,9 +185,9 @@ "confirmations.logout.confirm": "Log ud", "confirmations.logout.message": "Er du sikker på, at du vil logge ud?", "confirmations.logout.title": "Log ud?", - "confirmations.mute.confirm": "Skjul (mute)", + "confirmations.mute.confirm": "Skjul", "confirmations.redraft.confirm": "Slet og omformulér", - "confirmations.redraft.message": "Sikker på, at dette indlæg skal slettes og omskrives? Favoritter og boosts går tabt, og svar til det oprindelige indlæg mister tilknytningen.", + "confirmations.redraft.message": "Sikker på, at dette indlæg skal slettes og omskrives? Favoritter og fremhævelser går tabt, og svar til det oprindelige indlæg mister tilknytningen.", "confirmations.redraft.title": "Slet og omformulér indlæg?", "confirmations.reply.confirm": "Svar", "confirmations.reply.message": "Hvis du svarer nu, vil det overskrive den besked, du er ved at skrive. Fortsæt alligevel?", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Følg ikke længere bruger?", "content_warning.hide": "Skjul indlæg", "content_warning.show": "Vis alligevel", + "content_warning.show_more": "Vis flere", "conversation.delete": "Slet samtale", "conversation.mark_as_read": "Markér som læst", "conversation.open": "Vis samtale", @@ -204,7 +205,7 @@ "copy_icon_button.copied": "Kopieret til udklipsholderen", "copypaste.copied": "Kopieret", "copypaste.copy_to_clipboard": "Kopiér til udklipsholder", - "directory.federated": "Fra kendt fedivers", + "directory.federated": "Fra kendt fødivers", "directory.local": "Kun fra {domain}", "directory.new_arrivals": "Nye ankomster", "directory.recently_active": "Aktive for nyligt", @@ -213,32 +214,32 @@ "dismissable_banner.community_timeline": "Disse er de seneste offentlige indlæg fra personer med konti hostet af {domain}.", "dismissable_banner.dismiss": "Afvis", "dismissable_banner.explore_links": "Der tales lige nu om disse nyhedshistorier af folk på denne og andre servere i det decentraliserede netværk.", - "dismissable_banner.explore_statuses": "Disse indlæg fra diverse sociale netværk vinder fodfæste i dag. Nyere indlæg med flere boosts og favoritter rangeres højere.", - "dismissable_banner.explore_tags": "Disse hashtages vinder lige nu fodfæste blandt folk på denne og andre servere i det decentraliserede netværk.", + "dismissable_banner.explore_statuses": "Disse indlæg fra diverse sociale netværk vinder fodfæste i dag. Nyere indlæg med flere fremhævelser og favoritter rangeres højere.", + "dismissable_banner.explore_tags": "Disse etiketter vinder lige nu fodfæste blandt folk på denne og andre servere i det decentraliserede netværk.", "dismissable_banner.public_timeline": "Dette er de seneste offentlige indlæg fra folk på det sociale netværk, som folk på {domain} følger.", "domain_block_modal.block": "Blokér server", "domain_block_modal.block_account_instead": "Blokér i stedet @{name}", "domain_block_modal.they_can_interact_with_old_posts": "Folk fra denne server kan interagere med de gamle indlæg.", "domain_block_modal.they_cant_follow": "Ingen fra denne server kan følge dig.", - "domain_block_modal.they_wont_know": "Vedkommende ser ikke den aktive blokering.", + "domain_block_modal.they_wont_know": "De ser ikke den aktive blokering.", "domain_block_modal.title": "Blokér domæne?", "domain_block_modal.you_will_lose_num_followers": "Man vil miste {followersCount, plural, one {{followersCountDisplay} følger} other {{followersCountDisplay} følgere}} og {followingCount, plural, one {{followingCountDisplay} person, man følger} other {{followingCountDisplay} personer, man følger}}.", "domain_block_modal.you_will_lose_relationships": "Alle følgere og personer som følges på denne server mistes.", "domain_block_modal.you_wont_see_posts": "Indlæg eller notifikationer fra brugere på denne server vises ikke.", - "domain_pill.activitypub_lets_connect": "Det muliggør at komme i forbindelse og interagere med folk ikke kun på Mastodon, men også på tværs af forskellige sociale apps.", - "domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", Mastodon taler med andre sociale netværk.", + "domain_pill.activitypub_lets_connect": "Det muliggører at forbinde og interagere med folk, ikke kun på Mastodon, men også på tværs af forskellige sociale apps.", + "domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", som Mastodon taler med andre sociale netværk.", "domain_pill.server": "Server", - "domain_pill.their_handle": "Vedkommendes handle:", + "domain_pill.their_handle": "Deres greb:", "domain_pill.their_server": "Det digitale hjem, hvor alle indlæggene findes.", "domain_pill.their_username": "Entydig identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.", "domain_pill.username": "Brugernavn", - "domain_pill.whats_in_a_handle": "Hvad er der i et handle (@brugernavn)?", - "domain_pill.who_they_are": "Da et handle fortæller, hvem nogen er, og hvor de er, kan man interagere med folk på tværs af det sociale net af .", - "domain_pill.who_you_are": "Da et handle fortæller, hvem man er, og hvor man er, kan man interagere med folk på tværs af det sociale net af .", - "domain_pill.your_handle": "Dit handle:", - "domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om denne? Overfør til enhver tid servere samt tilhængere også.", + "domain_pill.whats_in_a_handle": "Hvad er der i et greb?", + "domain_pill.who_they_are": "Da et greb fortæller, hvem nogen er, og hvor de er, kan man interagere med folk på tværs af det sociale net af .", + "domain_pill.who_you_are": "Da et greb fortæller, hvem man er, og hvor man er, kan man interagere med folk på tværs af det sociale net af .", + "domain_pill.your_handle": "Dit greb:", + "domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.", "domain_pill.your_username": "Din entydige identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.", - "embed.instructions": "Indlejr dette indlæg på dit websted ved at kopiere nedenstående kode.", + "embed.instructions": "Indlejr dette indlæg på din hjemmeside ved at kopiere nedenstående kode.", "embed.preview": "Sådan kommer det til at se ud:", "emoji_button.activity": "Aktivitet", "emoji_button.clear": "Ryd", @@ -257,30 +258,30 @@ "emoji_button.travel": "Rejser og steder", "empty_column.account_hides_collections": "Brugeren har valgt ikke at gøre denne information tilgængelig", "empty_column.account_suspended": "Konto suspenderet", - "empty_column.account_timeline": "Ingen indlæg hér!", + "empty_column.account_timeline": "Ingen indlæg her!", "empty_column.account_unavailable": "Profil utilgængelig", "empty_column.blocks": "Ingen brugere blokeret endnu.", "empty_column.bookmarked_statuses": "Du har ingen bogmærkede indlæg endnu. Når du bogmærker ét, vil det dukke op hér.", "empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!", - "empty_column.direct": "Der er endnu ingen private omtaler. Når en sendes eller modtages, dukker den op hér.", + "empty_column.direct": "Der er endnu ingen private omtaler. Når en sendes eller modtages, dukker den op her.", "empty_column.domain_blocks": "Ingen blokerede domæner endnu.", "empty_column.explore_statuses": "Ingen nye tendenser lige nu. Tjek igen senere!", - "empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du favoritmarkerer ét, vil det dukke op hér.", - "empty_column.favourites": "Ingen har endnu gjort dette indlæg til favorit. Når nogen gør dét, vil det dukke op hér.", - "empty_column.follow_requests": "Du har endnu ingen følgeanmodninger. Når du modtager én, vil den dukke op hér.", - "empty_column.followed_tags": "Ingen hashtags følges endnu. Når det sker, vil de fremgå hér.", - "empty_column.hashtag": "Der er intet med dette hashtag endnu.", - "empty_column.home": "Din hjemmetidslinje er tom! Følg nogle personer, for at udfylde den. {suggestions}", - "empty_column.list": "Der er ikke noget på denne liste endnu. Når medlemmer af listen udgiver nye indlæg vil de fremgå hér.", + "empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du føjer et opslag til favoritter, vil det dukke op her.", + "empty_column.favourites": "Ingen har endnu føjet dette indlæg til favoritter. Når nogen gør det, vil det dukke op her.", + "empty_column.follow_requests": "Du har endnu ingen følgeanmodninger. Når du modtager én, vil den dukke op her.", + "empty_column.followed_tags": "Ingen etiketter følges endnu. Når det sker, vil de fremgå her.", + "empty_column.hashtag": "Der er intet med denne etiket endnu.", + "empty_column.home": "Din hjemmetidslinje er tom! Følg nogle personer, for at fylde den op.", + "empty_column.list": "Der er ikke noget på denne liste endnu. Når medlemmer af listen udgiver nye indlæg vil de fremgå her.", "empty_column.lists": "Du har endnu ingen lister. Når du opretter én, vil den fremgå hér.", - "empty_column.mutes": "Du har endnu ikke skjult (muted) nogle brugere.", - "empty_column.notification_requests": "Alt er klar! Der er intet her. Når der modtages nye notifikationer, fremgår de her jf. dine indstillinger.", - "empty_column.notifications": "Du har endnu ingen notifikationer. Når andre interagerer med dig, vil det fremgå hér.", - "empty_column.public": "Der er intet hér! Skriv noget offentligt eller følg manuelt brugere fra andre servere for at se indhold", - "error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en browser-kompatibilitetsfejl, kunne siden ikke vises korrekt.", + "empty_column.mutes": "Du har endnu ikke skjult nogle brugere.", + "empty_column.notification_requests": "Alt er klar! Der er intet her. Når der modtages nye notifikationer, fremgår de her jævnfør dine indstillinger.", + "empty_column.notifications": "Du har endnu ingen notifikationer. Når andre interagerer med dig, vil det fremgå her.", + "empty_column.public": "Der er intet her! Skriv noget offentligt eller følg manuelt brugere fra andre servere for at se indhold", + "error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en netlæser-kompatibilitetsfejl, kunne siden ikke vises korrekt.", "error.unexpected_crash.explanation_addons": "Denne side kunne ikke vises korrekt. Fejlen skyldes sandsynligvis en browsertilføjelse eller automatiske oversættelsesværktøjer.", - "error.unexpected_crash.next_steps": "Prøv at opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden browser eller app.", - "error.unexpected_crash.next_steps_addons": "Prøv at deaktivere dem og genindlæse siden. Hvis det ikke hjælper, kan Mastodon muligvis stadig bruges via en anden browser eller app.", + "error.unexpected_crash.next_steps": "Prøv at opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden netlæser eller app.", + "error.unexpected_crash.next_steps_addons": "Prøv at deaktivere dem og genindlæse siden. Hvis det ikke hjælper, kan Mastodon muligvis stadig bruges via en anden netlæser eller app.", "errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen", "errors.unexpected_crash.report_issue": "Anmeld problem", "explore.search_results": "Søgeresultater", @@ -288,7 +289,7 @@ "explore.title": "Udforsk", "explore.trending_links": "Nyheder", "explore.trending_statuses": "Indlæg", - "explore.trending_tags": "Hashtags", + "explore.trending_tags": "Etiketter", "filter_modal.added.context_mismatch_explanation": "Denne filterkategori omfatter ikke konteksten, hvorunder dette indlæg er tilgået. Redigér filteret, hvis indlægget også ønskes filtreret i denne kontekst.", "filter_modal.added.context_mismatch_title": "Kontekstmisforhold!", "filter_modal.added.expired_explanation": "Denne filterkategori er udløbet. Ændr dens udløbsdato, for at anvende den.", @@ -296,7 +297,7 @@ "filter_modal.added.review_and_configure": "Gå til {settings_link} for at gennemse og yderligere opsætte denne filterkategori.", "filter_modal.added.review_and_configure_title": "Filterindstillinger", "filter_modal.added.settings_link": "indstillingsside", - "filter_modal.added.short_explanation": "Dette indlæg er nu føjet til flg. filterkategori: {title}.", + "filter_modal.added.short_explanation": "Dette indlæg er nu føjet til følgende filterkategori: {title}.", "filter_modal.added.title": "Filter tilføjet!", "filter_modal.select_filter.context_mismatch": "gælder ikke for denne kontekst", "filter_modal.select_filter.expired": "udløbet", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny", "filter_modal.select_filter.title": "Filtrér dette indlæg", "filter_modal.title.status": "Filtrér et indlæg", - "filter_warning.matches_filter": "Matcher filteret “{title}”", + "filter_warning.matches_filter": "Matcher filteret “{title}”", "filtered_notifications_banner.pending_requests": "Fra {count, plural, =0 {ingen} one {én person} other {# personer}}, man måske kender", "filtered_notifications_banner.title": "Filtrerede notifikationer", "firehose.all": "Alle", @@ -329,7 +330,7 @@ "follow_suggestions.similar_to_recently_followed_longer": "Svarende til profiler, som for nylig er fulgt", "follow_suggestions.view_all": "Vis alle", "follow_suggestions.who_to_follow": "Hvem, som skal følges", - "followed_tags": "Hashtag, som følges", + "followed_tags": "Etiketter, som følges", "footer.about": "Om", "footer.directory": "Profiloversigt", "footer.get_app": "Hent appen", @@ -344,7 +345,7 @@ "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "uden {additional}", "hashtag.column_settings.select.no_options_message": "Ingen forslag fundet", - "hashtag.column_settings.select.placeholder": "Angiv hashtags…", + "hashtag.column_settings.select.placeholder": "Angiv etiketter…", "hashtag.column_settings.tag_mode.all": "Alle disse", "hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse", @@ -352,8 +353,8 @@ "hashtag.counter_by_accounts": "{count, plural, one {{counter} deltager} other {{counter} deltagere}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag", - "hashtag.follow": "Følg hashtag", - "hashtag.unfollow": "Stop med at følge hashtag", + "hashtag.follow": "Følg etiket", + "hashtag.unfollow": "Stop med at følge etiket", "hashtags.and_other": "…og {count, plural, one {}other {# flere}}", "hints.profiles.followers_may_be_missing": "Der kan mangle følgere for denne profil.", "hints.profiles.follows_may_be_missing": "Fulgte kan mangle for denne profil.", @@ -363,15 +364,15 @@ "hints.profiles.see_more_posts": "Se flere indlæg på {domain}", "hints.threads.replies_may_be_missing": "Der kan mangle svar fra andre servere.", "hints.threads.see_more": "Se flere svar på {domain}", - "home.column_settings.show_reblogs": "Vis boosts", + "home.column_settings.show_reblogs": "Vis fremhævelser", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul bekendtgørelser", - "home.pending_critical_update.body": "Opdater din Mastodon-server snarest muligt!", + "home.pending_critical_update.body": "Opdatér venligst din Mastodon-server snarest muligt!", "home.pending_critical_update.link": "Se opdateringer", "home.pending_critical_update.title": "Kritisk sikkerhedsopdatering tilgængelig!", "home.show_announcements": "Vis bekendtgørelser", "ignore_notifications_modal.disclaimer": "Mastodon kan ikke informere brugere om, at man har ignoreret deres notifikationer. Ignorerer man notifikationer, forhindrer det ikke selve beskedafsendelsen.", - "ignore_notifications_modal.filter_instead": "Filtrer i stedet", + "ignore_notifications_modal.filter_instead": "Filtrér i stedet", "ignore_notifications_modal.filter_to_act_users": "Man vil stadig kunne acceptere, afvise eller anmelde brugere", "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrering medvirker til at undgå potentiel forvirring", "ignore_notifications_modal.filter_to_review_separately": "Man kan gennemgå filtrerede notifikationer separat", @@ -392,32 +393,32 @@ "interaction_modal.on_this_server": "På denne server", "interaction_modal.sign_in": "Du er ikke logget ind på denne server. Hvor hostes din konto?", "interaction_modal.sign_in_hint": "Tip: Det er webstedet, hvor du tilmeldte dig. Har du glemt det, så kig efter velkomstmailen i indbakken. Du kan også angive dit fulde brugernavn! (f.eks. @Mastodon@mastodon.social)", - "interaction_modal.title.favourite": "Gør {name}s indlæg til favorit", + "interaction_modal.title.favourite": "Føj {name}s indlæg til favoritter", "interaction_modal.title.follow": "Følg {name}", - "interaction_modal.title.reblog": "Boost {name}s indlæg", + "interaction_modal.title.reblog": "Fremhæv {name}s indlæg", "interaction_modal.title.reply": "Besvar {name}s indlæg", "intervals.full.days": "{number, plural, one {# dag} other {# dage}}", "intervals.full.hours": "{number, plural, one {# time} other {# timer}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}", "keyboard_shortcuts.back": "Gå tilbage", "keyboard_shortcuts.blocked": "Åbn listen over blokerede brugere", - "keyboard_shortcuts.boost": "Boost indlæg", + "keyboard_shortcuts.boost": "Fremhæv indlæg", "keyboard_shortcuts.column": "Fokusér kolonne", "keyboard_shortcuts.compose": "Fokusér skriveområdet", "keyboard_shortcuts.description": "Beskrivelse", "keyboard_shortcuts.direct": "for at åbne kolonnen private omtaler", "keyboard_shortcuts.down": "Flyt nedad på listen", "keyboard_shortcuts.enter": "Åbn indlæg", - "keyboard_shortcuts.favourite": "Favoritmarkér indlæg", + "keyboard_shortcuts.favourite": "Føj indlæg til favoritter", "keyboard_shortcuts.favourites": "Åbn favoritlisten", - "keyboard_shortcuts.federated": "Åbn fælles tidslinje", + "keyboard_shortcuts.federated": "Åbn fødereret tidslinje", "keyboard_shortcuts.heading": "Tastaturgenveje", "keyboard_shortcuts.home": "Åbn hjemmetidslinje", "keyboard_shortcuts.hotkey": "Hurtigtast", "keyboard_shortcuts.legend": "Vis dette symbol", "keyboard_shortcuts.local": "Åbn lokal tidslinje", "keyboard_shortcuts.mention": "Omtal forfatter", - "keyboard_shortcuts.muted": "Åbn listen over skjulte (mutede) brugere", + "keyboard_shortcuts.muted": "Åbn listen over skjulte brugere", "keyboard_shortcuts.my_profile": "Åbn din profil", "keyboard_shortcuts.notifications": "for at åbne notifikationskolonnen", "keyboard_shortcuts.open_media": "Åbn medier", @@ -426,9 +427,9 @@ "keyboard_shortcuts.reply": "Besvar indlægget", "keyboard_shortcuts.requests": "Åbn liste over følgeanmodninger", "keyboard_shortcuts.search": "Fokusér søgebjælke", - "keyboard_shortcuts.spoilers": "Vis/skjul CW-felt", + "keyboard_shortcuts.spoilers": "Vis/skjul emnefelt", "keyboard_shortcuts.start": "Åbn \"komme i gang\"-kolonne", - "keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag CW", + "keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag emnefelt", "keyboard_shortcuts.toggle_sensitivity": "Vis/skjul medier", "keyboard_shortcuts.toot": "Påbegynd nyt indlæg", "keyboard_shortcuts.unfocus": "Fjern fokus fra tekstskrivningsområde/søgning", @@ -463,16 +464,16 @@ "moved_to_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret, da du flyttede til {movedToAccount}.", "mute_modal.hide_from_notifications": "Skjul fra notifikationer", "mute_modal.hide_options": "Skjul valgmuligheder", - "mute_modal.indefinite": "Indtil jeg fjerner tavsgørelsen", + "mute_modal.indefinite": "Indtil jeg vælger at se dem igen", "mute_modal.show_options": "Vis valgmuligheder", - "mute_modal.they_can_mention_and_follow": "Vedkommende kan nævne og følge dig, men vil ikke blive vist.", - "mute_modal.they_wont_know": "Vedkommende ser ikke den aktive tavsgørelse.", - "mute_modal.title": "Tavsgør bruger?", - "mute_modal.you_wont_see_mentions": "Indlæg, som nævner vedkommende, vises ikke.", - "mute_modal.you_wont_see_posts": "Vedkommende kan stadig se dine indlæg, med vedkommendes vise ikke.", + "mute_modal.they_can_mention_and_follow": "De kan omtale og følge dig, men du vil ikke se dem.", + "mute_modal.they_wont_know": "De vil ikke vide, at de er blevet skjult.", + "mute_modal.title": "Skjul bruger?", + "mute_modal.you_wont_see_mentions": "Du vil ikke se indlæg som omtaler dem.", + "mute_modal.you_wont_see_posts": "De kan stadig se dine indlæg, men du vil ikke se deres.", "navigation_bar.about": "Om", - "navigation_bar.administration": "Håndtering", - "navigation_bar.advanced_interface": "Åbn i avanceret webgrænseflade", + "navigation_bar.administration": "Administration", + "navigation_bar.advanced_interface": "Åbn i avanceret netgrænseflade", "navigation_bar.blocks": "Blokerede brugere", "navigation_bar.bookmarks": "Bogmærker", "navigation_bar.community_timeline": "Lokal tidslinje", @@ -482,14 +483,14 @@ "navigation_bar.domain_blocks": "Blokerede domæner", "navigation_bar.explore": "Udforsk", "navigation_bar.favourites": "Favoritter", - "navigation_bar.filters": "Skjulte ord (mutede)", + "navigation_bar.filters": "Skjulte ord", "navigation_bar.follow_requests": "Følgeanmodninger", - "navigation_bar.followed_tags": "Hashtag, som følges", + "navigation_bar.followed_tags": "Etiketter, som følges", "navigation_bar.follows_and_followers": "Følges og følgere", "navigation_bar.lists": "Lister", "navigation_bar.logout": "Log af", "navigation_bar.moderation": "Moderering", - "navigation_bar.mutes": "Skjulte brugere (mutede)", + "navigation_bar.mutes": "Skjulte brugere", "navigation_bar.opened_in_classic_interface": "Indlæg, konti og visse andre sider åbnes som standard i den klassiske webgrænseflade.", "navigation_bar.personal": "Personlig", "navigation_bar.pins": "Fastgjorte indlæg", @@ -505,44 +506,45 @@ "notification.admin.report_statuses_other": "{name} anmeldte {target}", "notification.admin.sign_up": "{name} tilmeldte sig", "notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} tilmeldte sig", - "notification.favourite": "{name} favoritmarkerede dit indlæg", - "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} gjorde dit indlæg til favorit", + "notification.favourite": "{name} føjede dit indlæg til favoritter", + "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} føjede dit indlæg til favoritter", "notification.follow": "{name} begyndte at følge dig", - "notification.follow.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} følger dig", + "notification.follow.name_and_others": "{name} og {count, plural, one {# andre} other {# andre}} begyndte at følge dig", "notification.follow_request": "{name} har anmodet om at følge dig", "notification.follow_request.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} har anmodet om at følger dig", "notification.label.mention": "Omtale", "notification.label.private_mention": "Privat omtale", "notification.label.private_reply": "Privat svar", - "notification.label.reply": "Besvar", + "notification.label.reply": "Svar", "notification.mention": "Omtale", + "notification.mentioned_you": "{name} omtalte dig", "notification.moderation-warning.learn_more": "Læs mere", - "notification.moderation_warning": "Du er tildelt en moderationsadvarsel", + "notification.moderation_warning": "Du har fået en moderationsadvarsel", "notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.", "notification.moderation_warning.action_disable": "Din konto er blevet deaktiveret.", - "notification.moderation_warning.action_mark_statuses_as_sensitive": "Nogle af dine indlæg er blevet markeret som sensitive.", - "notification.moderation_warning.action_none": "Din konto er tildelt en moderationsadvarsel.", - "notification.moderation_warning.action_sensitive": "Dine indlæg markeres fra nu af som sensitive.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Nogle af dine indlæg er blevet markeret som følsomme.", + "notification.moderation_warning.action_none": "Din konto har fået en moderationsadvarsel.", + "notification.moderation_warning.action_sensitive": "Dine indlæg markeres fra nu af som følsomme.", "notification.moderation_warning.action_silence": "Din konto er blevet begrænset.", "notification.moderation_warning.action_suspend": "Din konto er suspenderet.", "notification.own_poll": "Din afstemning er afsluttet", "notification.poll": "En afstemning, hvori du har stemt, er slut", - "notification.reblog": "{name} boostede dit indlæg", - "notification.reblog.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} boostede dit indlæg", + "notification.reblog": "{name} fremhævede dit indlæg", + "notification.reblog.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} fremhævede dit indlæg", "notification.relationships_severance_event": "Mistede forbindelser med {name}", - "notification.relationships_severance_event.account_suspension": "En admin fra {from} har suspenderet {target}, hvofor opdateringer herfra eller interaktion hermed ikke længer er mulig.", - "notification.relationships_severance_event.domain_block": "En admin fra {from} har blokeret {target}, herunder {followersCount} tilhængere og {followingCount, plural, one {# konto, der} other {# konti, som}} følges.", + "notification.relationships_severance_event.account_suspension": "En admin fra {from} har suspenderet {target}, så du kan ikke længere få opdateringer fra eller interagere med dem.", + "notification.relationships_severance_event.domain_block": "En admin fra {from} har blokeret {target}, herunder {followersCount} følgere og {followingCount, plural, one {# konto, der} other {# konti, som}} som du følger.", "notification.relationships_severance_event.learn_more": "Læs mere", - "notification.relationships_severance_event.user_domain_block": "{target} er blevet blokeret, og {followersCount} tilhængere samt {followingCount, plural, one {# konto, der} other {# konti, som}} følges, er hermed fjernet.", - "notification.status": "{name} har netop postet", + "notification.relationships_severance_event.user_domain_block": "Du har blokeret {target}. {followersCount} af dine følgere samt {followingCount, plural, one {# konto, der} other {# konti, som}} du følger, er hermed fjernet.", + "notification.status": "{name} har netop slået noget op", "notification.update": "{name} redigerede et indlæg", "notification_requests.accept": "Acceptér", "notification_requests.accept_multiple": "{count, plural, one {Acceptér # anmodning…} other {Acceptér # anmodninger…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Acceptér anmodning} other {Acceptér anmodninger}}", - "notification_requests.confirm_accept_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive accepteret. Fortsæt, sikker?", + "notification_requests.confirm_accept_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive accepteret. Er du sikker på, at du vil fortsætte?", "notification_requests.confirm_accept_multiple.title": "Acceptér notifikationsanmodninger?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Afvis anmodning} other {Afvis anmodninger}}", - "notification_requests.confirm_dismiss_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive afvist, hvorfor man ikke nemt vil kunne tilgå {count, plural, one {den} other {dem}} igen. Fortsæt, sikker?", + "notification_requests.confirm_dismiss_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive afvist, hvorfor man ikke nemt vil kunne tilgå {count, plural, one {den} other {dem}} igen. Er du sikker på, at du vil fortsætte?", "notification_requests.confirm_dismiss_multiple.title": "Afvis notifikationsanmodninger?", "notification_requests.dismiss": "Afvis", "notification_requests.dismiss_multiple": "{count, plural, one {Afvis # anmodning…} other {Afvis # anmodninger…}}", @@ -558,7 +560,7 @@ "notifications.clear": "Ryd notifikationer", "notifications.clear_confirmation": "Er du sikker på, at du vil rydde alle dine notifikationer permanent?", "notifications.clear_title": "Ryd notifikationer?", - "notifications.column_settings.admin.report": "Nye anmeldelser:", + "notifications.column_settings.admin.report": "Nye rapporteringer:", "notifications.column_settings.admin.sign_up": "Nye tilmeldinger:", "notifications.column_settings.alert": "Computernotifikationer", "notifications.column_settings.favourite": "Favoritter:", @@ -566,10 +568,11 @@ "notifications.column_settings.filter_bar.category": "Hurtigfiltreringsbjælke", "notifications.column_settings.follow": "Nye følgere:", "notifications.column_settings.follow_request": "Nye følgeanmodninger:", + "notifications.column_settings.group": "Gruppere", "notifications.column_settings.mention": "Omtaler:", "notifications.column_settings.poll": "Afstemningsresultater:", "notifications.column_settings.push": "Push-notifikationer", - "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.reblog": "Fremhævelser:", "notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.sound": "Afspil lyd", "notifications.column_settings.status": "Nye indlæg:", @@ -577,7 +580,7 @@ "notifications.column_settings.unread_notifications.highlight": "Fremhæv ulæste notifikationer", "notifications.column_settings.update": "Redigeringer:", "notifications.filter.all": "Alle", - "notifications.filter.boosts": "Boosts", + "notifications.filter.boosts": "Fremhævelser", "notifications.filter.favourites": "Favoritter", "notifications.filter.follows": "Følger", "notifications.filter.mentions": "Omtaler", @@ -586,8 +589,8 @@ "notifications.grant_permission": "Tildel tilladelse.", "notifications.group": "{count} notifikationer", "notifications.mark_as_read": "Markér alle notifikationer som læst", - "notifications.permission_denied": "Computernotifikationer er utilgængelige grundet tidligere afvist browsertilladelsesanmodning", - "notifications.permission_denied_alert": "Computernotifikationer kan ikke aktiveres, da browsertilladelse tidligere blev nægtet", + "notifications.permission_denied": "Computernotifikationer er utilgængelige grundet tidligere afvist netlæser-tilladelsesanmodning", + "notifications.permission_denied_alert": "Computernotifikationer kan ikke aktiveres, da netlæser-tilladelse tidligere blev nægtet", "notifications.permission_required": "Computernotifikationer er utilgængelige, da den krævede tilladelse ikke er tildelt.", "notifications.policy.accept": "Acceptér", "notifications.policy.accept_hint": "Vis notifikationer", @@ -619,15 +622,15 @@ "onboarding.follows.title": "Populært på Mastodon", "onboarding.profile.discoverable": "Gør min profil synlig", "onboarding.profile.discoverable_hint": "Når man vælger at være synlig på Mastodon, kan ens indlæg fremgå i søgeresultater og tendenser, og profilen kan blive foreslået til andre med tilsvarende interesse.", - "onboarding.profile.display_name": "Visningsnavn", - "onboarding.profile.display_name_hint": "Fulde navn eller dit sjove navn…", + "onboarding.profile.display_name": "Vist navn", + "onboarding.profile.display_name_hint": "Dit fulde navn eller dit sjove navn…", "onboarding.profile.lead": "Dette kan altid færdiggøres senere i indstillingerne, hvor endnu flere tilpasningsmuligheder forefindes.", "onboarding.profile.note": "Bio", - "onboarding.profile.note_hint": "Man kan @omtale andre personer eller #hashtags…", + "onboarding.profile.note_hint": "Man kan @omtale andre personer eller #etiketter…", "onboarding.profile.save_and_continue": "Gem og fortsæt", "onboarding.profile.title": "Profilopsætning", "onboarding.profile.upload_avatar": "Upload profilbillede", - "onboarding.profile.upload_header": "Upload profiloverskrift", + "onboarding.profile.upload_header": "Upload profilbanner", "onboarding.share.lead": "Lad folk vide, hvordan de kan finde dig på Mastodon!", "onboarding.share.message": "Jeg er {username} på #Mastodon! Følg mig på {url}", "onboarding.share.next_steps": "Mulige næste trin:", @@ -661,15 +664,15 @@ "poll_button.add_poll": "Tilføj en afstemning", "poll_button.remove_poll": "Fjern afstemning", "privacy.change": "Tilpas indlægsfortrolighed", - "privacy.direct.long": "Alle nævnt i indlægget", + "privacy.direct.long": "Alle omtalt i indlægget", "privacy.direct.short": "Bestemte personer", "privacy.private.long": "Kun dine følgere", "privacy.private.short": "Følgere", "privacy.public.long": "Alle på og udenfor Mastodon", "privacy.public.short": "Offentlig", - "privacy.unlisted.additional": "Dette er præcis som offentlig adfærd, dog vises indlægget ikke i live feeds/hashtags, udforsk eller Mastodon-søgning, selv hvis valget gælder hele kontoen.", + "privacy.unlisted.additional": "Dette er præcis som offentlig adfærd, dog vises indlægget ikke i tidslinjer, under etiketter, udforsk eller Mastodon-søgning, selv hvis du ellers har sagt at dine opslag godt må være søgbare.", "privacy.unlisted.long": "Færre algoritmiske fanfarer", - "privacy.unlisted.short": "Tavsgøre offentligt", + "privacy.unlisted.short": "Stille offentligt", "privacy_policy.last_updated": "Senest opdateret {date}", "privacy_policy.title": "Privatlivspolitik", "recommended": "Anbefalet", @@ -704,12 +707,12 @@ "report.comment.title": "Er der andet, som vi bør vide?", "report.forward": "Videresend til {target}", "report.forward_hint": "Kontoen er fra en anden server. Send også en anonymiseret kopi af anmeldelsen dertil?", - "report.mute": "Skjul (mute)", - "report.mute_explanation": "Du vil ikke se vedkommendes indlæg. Vedkommende kan stadig se dine indlæg og følge dig. Vedkommende vil ikke kunne se, at de er blevet skjult.", + "report.mute": "Skjul", + "report.mute_explanation": "Du vil ikke se deres indlæg. De kan stadig se dine indlæg og følge dig. De vil ikke kunne se, at de er blevet skjult.", "report.next": "Næste", "report.placeholder": "Yderligere kommentarer", "report.reasons.dislike": "Jeg bryder mig ikke om det", - "report.reasons.dislike_description": "Det er ikke noget, man ønsker at se", + "report.reasons.dislike_description": "Det er ikke noget, du ønsker at se", "report.reasons.legal": "Det er ulovligt", "report.reasons.legal_description": "Du mener, at det er i strid med lovgivningen i dit eller serverens land", "report.reasons.other": "Det er noget andet", @@ -729,7 +732,7 @@ "report.thanks.title": "Ønsker ikke at se dette?", "report.thanks.title_actionable": "Tak for anmeldelsen, der vil blive set nærmere på dette.", "report.unfollow": "Følg ikke længere @{name}", - "report.unfollow_explanation": "Du følger denne konto. For ikke længere at se vedkommendes indlæg i dit hjemmefeed, kan du stoppe med at følge dem.", + "report.unfollow_explanation": "Du følger denne konto. For ikke længere at se vedkommendes indlæg i din hjemmestrøm, kan du stoppe med at følge dem.", "report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} poster}} vedhæftet", "report_notification.categories.legal": "Juridisk", "report_notification.categories.legal_sentence": "ikke-tilladt indhold", @@ -744,7 +747,7 @@ "search.placeholder": "Søg", "search.quick_action.account_search": "Profiler matchende {x}", "search.quick_action.go_to_account": "Gå til profilen {x}", - "search.quick_action.go_to_hashtag": "Gå til hashtagget {x}", + "search.quick_action.go_to_hashtag": "Gå til etiketten {x}", "search.quick_action.open_url": "Åbn URL i Mastodon", "search.quick_action.status_search": "Indlæg matchende {x}", "search.search_or_paste": "Søg efter eller angiv URL", @@ -758,7 +761,7 @@ "search_popout.user": "bruger", "search_results.accounts": "Profiler", "search_results.all": "Alle", - "search_results.hashtags": "Hashtags", + "search_results.hashtags": "Etiketter", "search_results.nothing_found": "Ingen resultater for disse søgeord", "search_results.see_all": "Vis alle", "search_results.statuses": "Indlæg", @@ -766,10 +769,10 @@ "server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)", "server_banner.active_users": "aktive brugere", "server_banner.administered_by": "Håndteres af:", - "server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, man kan bruge for at deltage i fediverset.", + "server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, man kan bruge for at deltage i fødiverset.", "server_banner.server_stats": "Serverstatstik:", "sign_in_banner.create_account": "Opret konto", - "sign_in_banner.follow_anyone": "Følg alle på tværs af fediverset og se alt i kronologisk rækkefølge. Ingen algoritmer, annoncer eller clickbait i syne.", + "sign_in_banner.follow_anyone": "Følg alle på tværs af fødiverset og se alt i kronologisk rækkefølge. Ingen algoritmer, annoncer eller clickbait i syne.", "sign_in_banner.mastodon_is": "Mastodon er den bedste måde at holde sig ajour med, hvad der sker.", "sign_in_banner.sign_in": "Log ind", "sign_in_banner.sso_redirect": "Log ind eller Tilmeld", @@ -778,7 +781,7 @@ "status.admin_status": "Åbn dette indlæg i modereringsbrugerfladen", "status.block": "Blokér @{name}", "status.bookmark": "Bogmærk", - "status.cancel_reblog_private": "Fjern boost", + "status.cancel_reblog_private": "Fjern fremhævelse", "status.cannot_reblog": "Dette indlæg kan ikke fremhæves", "status.continued_thread": "Fortsat tråd", "status.copy": "Kopiér link til indlæg", @@ -801,23 +804,23 @@ "status.media_hidden": "Medie skjult", "status.mention": "Nævn @{name}", "status.more": "Mere", - "status.mute": "Skjul @{name} (mute)", - "status.mute_conversation": "Skjul samtale (mute)", + "status.mute": "Skjul @{name}", + "status.mute_conversation": "Skjul samtale", "status.open": "Udvid dette indlæg", "status.pin": "Fastgør til profil", "status.pinned": "Fastgjort indlæg", "status.read_more": "Læs mere", "status.reblog": "Fremhæv", - "status.reblog_private": "Boost med oprindelig synlighed", + "status.reblog_private": "Fremhæv med oprindelig synlighed", "status.reblogged_by": "{name} fremhævede", - "status.reblogs": "{count, plural, one {# boost} other {# boosts}}", + "status.reblogs": "{count, plural, one {# fremhævelse} other {# fremhævelser}}", "status.reblogs.empty": "Ingen har endnu fremhævet dette indlæg. Når nogen gør, vil det fremgå hér.", "status.redraft": "Slet og omformulér", "status.remove_bookmark": "Fjern bogmærke", "status.replied_in_thread": "Svaret i tråd", - "status.replied_to": "Besvarede {name}", + "status.replied_to": "Svarede {name}", "status.reply": "Besvar", - "status.replyAll": "Besvar alle", + "status.replyAll": "Svar alle", "status.report": "Anmeld @{name}", "status.sensitive_warning": "Følsomt indhold", "status.share": "Del", @@ -879,8 +882,8 @@ "video.expand": "Udvid video", "video.fullscreen": "Fuldskærm", "video.hide": "Skjul video", - "video.mute": "Sluk lyden", - "video.pause": "Pausér", + "video.mute": "Sluk for lyden", + "video.pause": "Sæt på pause", "video.play": "Afspil", "video.unmute": "Tænd for lyden" } diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 6f45d4fe53..547c5cba23 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -4,7 +4,7 @@ "about.disclaimer": "Mastodon ist eine freie, quelloffene Software und eine Marke der Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Grund unbekannt", "about.domain_blocks.preamble": "Mastodon erlaubt es dir grundsätzlich, alle Inhalte von allen Nutzer*innen auf allen Servern im Fediverse zu sehen und mit ihnen zu interagieren. Für diesen Server gibt es aber ein paar Ausnahmen.", - "about.domain_blocks.silenced.explanation": "Alle Inhalte und Profile dieses Servers werden zunächst nicht angezeigt. Du kannst die Profile und Inhalte aber dennoch sehen, wenn du explizit nach diesen suchst oder diesen folgst.", + "about.domain_blocks.silenced.explanation": "Standardmäßig werden von diesem Server keine Inhalte oder Profile angezeigt. Du kannst die Profile und Inhalte aber dennoch sehen, wenn du explizit nach diesen suchst oder diesen folgst.", "about.domain_blocks.silenced.title": "Stummgeschaltet", "about.domain_blocks.suspended.explanation": "Es werden keine Daten von diesem Server verarbeitet, gespeichert oder ausgetauscht, sodass eine Interaktion oder Kommunikation mit Nutzer*innen dieses Servers nicht möglich ist.", "about.domain_blocks.suspended.title": "Gesperrt", @@ -19,7 +19,7 @@ "account.block_domain": "{domain} sperren", "account.block_short": "Blockieren", "account.blocked": "Blockiert", - "account.cancel_follow_request": "Folgeanfrage zurückziehen", + "account.cancel_follow_request": "Follower-Anfrage zurückziehen", "account.copy": "Link zum Profil kopieren", "account.direct": "@{name} privat erwähnen", "account.disable_notifications": "Höre auf mich zu benachrichtigen wenn @{name} etwas postet", @@ -41,9 +41,9 @@ "account.go_to_profile": "Profil aufrufen", "account.hide_reblogs": "Geteilte Beiträge von @{name} ausblenden", "account.in_memoriam": "Zum Andenken.", - "account.joined_short": "Beigetreten", - "account.languages": "Ausgewählte Sprachen ändern", - "account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} bestätigt", + "account.joined_short": "Mitglied seit", + "account.languages": "Sprache ändern.", + "account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} verifiziert", "account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.", "account.media": "Medien", "account.mention": "@{name} erwähnen", @@ -63,7 +63,7 @@ "account.share": "Profil von @{name} teilen", "account.show_reblogs": "Geteilte Beiträge von @{name} anzeigen", "account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", - "account.unblock": "Blockierung von @{name} aufheben", + "account.unblock": "{name} nicht mehr blockieren", "account.unblock_domain": "Blockierung von {domain} aufheben", "account.unblock_short": "Blockierung aufheben", "account.unendorse": "Im Profil nicht mehr empfehlen", @@ -71,13 +71,13 @@ "account.unmute": "Stummschaltung von @{name} aufheben", "account.unmute_notifications_short": "Stummschaltung der Benachrichtigungen aufheben", "account.unmute_short": "Stummschaltung aufheben", - "account_note.placeholder": "Notiz durch Klicken hinzufügen", - "admin.dashboard.daily_retention": "Verweildauer der Benutzer*innen pro Tag nach der Registrierung", - "admin.dashboard.monthly_retention": "Verweildauer der Benutzer*innen pro Monat nach der Registrierung", + "account_note.placeholder": "Klicken, um Notiz hinzuzufügen", + "admin.dashboard.daily_retention": "Verweildauer der Nutzer*innen pro Tag nach der Registrierung", + "admin.dashboard.monthly_retention": "Verweildauer der Nutzer*innen pro Monat nach der Registrierung", "admin.dashboard.retention.average": "Durchschnitt", "admin.dashboard.retention.cohort": "Monat der Registrierung", "admin.dashboard.retention.cohort_size": "Neue Konten", - "admin.impact_report.instance_accounts": "Kontenprofile, die dadurch gelöscht würden", + "admin.impact_report.instance_accounts": "Profilkonten, die dadurch gelöscht würden", "admin.impact_report.instance_followers": "Follower, die unsere Nutzer*innen verlieren würden", "admin.impact_report.instance_follows": "Follower, die deren Nutzer*innen verlieren würden", "admin.impact_report.title": "Zusammenfassung der Auswirkung", @@ -94,7 +94,7 @@ "block_modal.show_more": "Mehr anzeigen", "block_modal.they_cant_mention": "Das Profil wird dich nicht erwähnen oder dir folgen können.", "block_modal.they_cant_see_posts": "Deine Beiträge können nicht mehr angesehen werden und du wirst deren Beiträge nicht mehr sehen.", - "block_modal.they_will_know": "Es wird erkennbar sein, dass dieses Profil blockiert wurde.", + "block_modal.they_will_know": "Das Profil wird erkennen können, dass du es blockiert hast.", "block_modal.title": "Profil blockieren?", "block_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.", "boost_modal.combo": "Mit {combo} erscheint dieses Fenster beim nächsten Mal nicht mehr", @@ -154,10 +154,10 @@ "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 gibts Neues?", "compose_form.poll.duration": "Umfragedauer", "compose_form.poll.multiple": "Mehrfachauswahl", - "compose_form.poll.option_placeholder": "Option {number}", + "compose_form.poll.option_placeholder": "{number}. Auswahl", "compose_form.poll.single": "Einfachauswahl", "compose_form.poll.switch_to_multiple": "Mehrfachauswahl erlauben", "compose_form.poll.switch_to_single": "Nur Einfachauswahl erlauben", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Profil entfolgen?", "content_warning.hide": "Beitrag ausblenden", "content_warning.show": "Trotzdem anzeigen", + "content_warning.show_more": "Beitrag anzeigen", "conversation.delete": "Unterhaltung löschen", "conversation.mark_as_read": "Als gelesen markieren", "conversation.open": "Unterhaltung anzeigen", @@ -232,7 +233,7 @@ "domain_pill.their_server": "Deren digitale Heimat. Hier „leben“ alle Beiträge von diesem Profil.", "domain_pill.their_username": "Deren eindeutigen Identität auf dem betreffenden Server. Es ist möglich, Profile mit dem gleichen Profilnamen auf verschiedenen Servern zu finden.", "domain_pill.username": "Profilname", - "domain_pill.whats_in_a_handle": "Was ist Teil der Adresse?", + "domain_pill.whats_in_a_handle": "Woraus besteht eine Adresse?", "domain_pill.who_they_are": "Adressen teilen mit, wer jemand ist und wo sich jemand aufhält. Daher kannst du mit Leuten im gesamten Social Web interagieren, wenn es eine durch ist.", "domain_pill.who_you_are": "Deine Adresse teilt mit, wer du bist und wo du dich aufhältst. Daher können andere Leute im gesamten Social Web mit dir interagieren, wenn es eine durch ist.", "domain_pill.your_handle": "Deine Adresse:", @@ -305,12 +306,12 @@ "filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen", "filter_modal.select_filter.title": "Diesen Beitrag filtern", "filter_modal.title.status": "Beitrag per Filter ausblenden", - "filter_warning.matches_filter": "Übereinstimmend mit dem Filter „{title}“", + "filter_warning.matches_filter": "Übereinstimmend mit dem Filter „{title}“", "filtered_notifications_banner.pending_requests": "Von {count, plural, =0 {keinem, den} one {einer Person, die} other {# Personen, die}} du möglicherweise kennst", "filtered_notifications_banner.title": "Gefilterte Benachrichtigungen", - "firehose.all": "Alles", + "firehose.all": "Alle Server", "firehose.local": "Dieser Server", - "firehose.remote": "Andere Server", + "firehose.remote": "Externe Server", "follow_request.authorize": "Genehmigen", "follow_request.reject": "Ablehnen", "follow_requests.unlocked_explanation": "Auch wenn dein Konto öffentlich bzw. nicht geschützt ist, haben die Moderator*innen von {domain} gedacht, dass du diesen Follower lieber manuell bestätigen solltest.", @@ -464,12 +465,12 @@ "mute_modal.hide_from_notifications": "Benachrichtigungen ausblenden", "mute_modal.hide_options": "Einstellungen ausblenden", "mute_modal.indefinite": "Bis ich die Stummschaltung aufhebe", - "mute_modal.show_options": "Einstellungen anzeigen", + "mute_modal.show_options": "Optionen anzeigen", "mute_modal.they_can_mention_and_follow": "Das Profil wird dich weiterhin erwähnen und dir folgen können, aber du wirst davon nichts sehen.", - "mute_modal.they_wont_know": "Es wird nicht erkennbar sein, dass dieses Profil stummgeschaltet wurde.", + "mute_modal.they_wont_know": "Das Profil wird nicht erkennen können, dass du es stummgeschaltet hast.", "mute_modal.title": "Profil stummschalten?", "mute_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.", - "mute_modal.you_wont_see_posts": "Deine Beiträge können weiterhin angesehen werden, aber du wirst deren Beiträge nicht mehr sehen.", + "mute_modal.you_wont_see_posts": "Deine Beiträge können von diesem stummgeschalteten Profil weiterhin gesehen werden, aber du wirst dessen Beiträge nicht mehr sehen.", "navigation_bar.about": "Über", "navigation_bar.administration": "Administration", "navigation_bar.advanced_interface": "Im erweiterten Webinterface öffnen", @@ -504,18 +505,19 @@ "notification.admin.report_statuses": "{name} meldete {target} wegen {category}", "notification.admin.report_statuses_other": "{name} meldete {target}", "notification.admin.sign_up": "{name} registrierte sich", - "notification.admin.sign_up.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} registrierten sich", + "notification.admin.sign_up.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} registrierten sich", "notification.favourite": "{name} favorisierte deinen Beitrag", - "notification.favourite.name_and_others_with_link": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} favorisierten deinen Beitrag", + "notification.favourite.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} favorisierten deinen Beitrag", "notification.follow": "{name} folgt dir", - "notification.follow.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} folgen dir", + "notification.follow.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} folgen dir", "notification.follow_request": "{name} möchte dir folgen", - "notification.follow_request.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} möchten dir folgen", + "notification.follow_request.name_and_others": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} möchten dir folgen", "notification.label.mention": "Erwähnung", "notification.label.private_mention": "Private Erwähnung", "notification.label.private_reply": "Private Antwort", "notification.label.reply": "Antwort", "notification.mention": "Erwähnung", + "notification.mentioned_you": "{name} erwähnte dich", "notification.moderation-warning.learn_more": "Mehr erfahren", "notification.moderation_warning": "Du wurdest von den Moderator*innen verwarnt", "notification.moderation_warning.action_delete_statuses": "Einige deiner Beiträge sind entfernt worden.", @@ -528,13 +530,13 @@ "notification.own_poll": "Deine Umfrage ist beendet", "notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet", "notification.reblog": "{name} teilte deinen Beitrag", - "notification.reblog.name_and_others_with_link": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} teilten deinen Beitrag", + "notification.reblog.name_and_others_with_link": "{name} und {count, plural, one {# weiteres Profil} other {# weitere Profile}} teilten deinen Beitrag", "notification.relationships_severance_event": "Verbindungen mit {name} verloren", "notification.relationships_severance_event.account_suspension": "Ein Admin von {from} hat {target} gesperrt. Du wirst von diesem Profil keine Updates mehr erhalten und auch nicht mit ihm interagieren können.", "notification.relationships_severance_event.domain_block": "Ein Admin von {from} hat {target} blockiert – darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.", "notification.relationships_severance_event.learn_more": "Mehr erfahren", "notification.relationships_severance_event.user_domain_block": "Du hast {target} blockiert – {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst, wurden entfernt.", - "notification.status": "{name} hat gerade etwas gepostet", + "notification.status": "{name} postete …", "notification.update": "{name} bearbeitete einen Beitrag", "notification_requests.accept": "Genehmigen", "notification_requests.accept_multiple": "{count, plural, one {# Anfrage genehmigen …} other {# Anfragen genehmigen …}}", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Filterleiste", "notifications.column_settings.follow": "Neue Follower:", "notifications.column_settings.follow_request": "Neue Follower-Anfragen:", + "notifications.column_settings.group": "Gruppieren", "notifications.column_settings.mention": "Erwähnungen:", "notifications.column_settings.poll": "Umfrageergebnisse:", "notifications.column_settings.push": "Push-Benachrichtigungen", @@ -596,15 +599,15 @@ "notifications.policy.filter": "Filtern", "notifications.policy.filter_hint": "An gefilterte Benachrichtigungen im Posteingang senden", "notifications.policy.filter_limited_accounts_hint": "Durch Server-Moderator*innen eingeschränkt", - "notifications.policy.filter_limited_accounts_title": "Moderierte Konten", + "notifications.policy.filter_limited_accounts_title": "moderierten Konten", "notifications.policy.filter_new_accounts.hint": "Innerhalb {days, plural, one {des letzten Tages} other {der letzten # Tagen}} erstellt", - "notifications.policy.filter_new_accounts_title": "Neuen Konten", + "notifications.policy.filter_new_accounts_title": "neuen Konten", "notifications.policy.filter_not_followers_hint": "Einschließlich Profilen, die dir seit weniger als {days, plural, one {einem Tag} other {# Tagen}} folgen", "notifications.policy.filter_not_followers_title": "Profilen, die mir nicht folgen", "notifications.policy.filter_not_following_hint": "Bis du sie manuell genehmigst", "notifications.policy.filter_not_following_title": "Profilen, denen ich nicht folge", "notifications.policy.filter_private_mentions_hint": "Solange sie keine Antwort auf deine Erwähnung ist oder du dem Profil nicht folgst", - "notifications.policy.filter_private_mentions_title": "Unerwünschten privaten Erwähnungen", + "notifications.policy.filter_private_mentions_title": "unerwünschten privaten Erwähnungen", "notifications.policy.title": "Benachrichtigungen verwalten von …", "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen", "notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.", @@ -662,7 +665,7 @@ "poll_button.remove_poll": "Umfrage entfernen", "privacy.change": "Sichtbarkeit anpassen", "privacy.direct.long": "Alle in diesem Beitrag erwähnten Profile", - "privacy.direct.short": "Bestimmte Profile", + "privacy.direct.short": "Ausgewählte Profile", "privacy.private.long": "Nur deine Follower", "privacy.private.short": "Follower", "privacy.public.long": "Alle in und außerhalb von Mastodon", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 85f893c63d..7376fe0543 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -1,5 +1,5 @@ { - "about.blocks": "Συντονισμένοι διακομιστές", + "about.blocks": "Συντονιζόμενοι διακομιστές", "about.contact": "Επικοινωνία:", "about.disclaimer": "Το Mastodon είναι ελεύθερο λογισμικό ανοιχτού κώδικα και εμπορικό σήμα της Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Αιτιολογία μη διαθέσιμη", @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Περιορισμός συχνότητας", "alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.", "alert.unexpected.title": "Ουπς!", + "alt_text_badge.title": "Εναλλακτικό κείμενο", "announcement.announcement": "Ανακοίνωση", "attachments_list.unprocessed": "(μη επεξεργασμένο)", "audio.hide": "Απόκρυψη αρχείου ήχου", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Άρση ακολούθησης;", "content_warning.hide": "Απόκρυψη ανάρτησης", "content_warning.show": "Εμφάνιση ούτως ή άλλως", + "content_warning.show_more": "Εμφάνιση περισσότερων", "conversation.delete": "Διαγραφή συζήτησης", "conversation.mark_as_read": "Σήμανση ως αναγνωσμένο", "conversation.open": "Προβολή συνομιλίας", @@ -221,6 +223,8 @@ "domain_block_modal.they_cant_follow": "Κανείς από αυτόν τον διακομιστή δεν μπορεί να σε ακολουθήσει.", "domain_block_modal.they_wont_know": "Δεν θα ξέρουν ότι έχουν αποκλειστεί.", "domain_block_modal.title": "Αποκλεισμός τομέα;", + "domain_block_modal.you_will_lose_num_followers": "Θα χάσετε {followersCount, plural, one {{followersCountDisplay} ακόλουθο} other {{followersCountDisplay} ακόλουθους}} και {followingCount, plural, one {{followingCountDisplay} άτομο που ακολουθείτε} other {{followingCountDisplay} άτομα που ακολουθείτε}}.", + "domain_block_modal.you_will_lose_relationships": "Θα χάσετε όλους τους ακόλουθους και τα άτομα που ακολουθείτε από αυτόν τον διακομιστή.", "domain_block_modal.you_wont_see_posts": "Δεν θα βλέπεις αναρτήσεις ή ειδοποιήσεις από χρήστες σε αυτόν το διακομιστή.", "domain_pill.activitypub_lets_connect": "Σού επιτρέπει να συνδεθείς και να αλληλεπιδράσεις με τους ανθρώπους όχι μόνο στο Mastodon, αλλά και σε διαφορετικές κοινωνικές εφαρμογές.", "domain_pill.activitypub_like_language": "Το ActivityPub είναι σαν τη γλώσσα Mastodon μιλάει με άλλα κοινωνικά δίκτυα.", @@ -302,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα", "filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης", "filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης", - "filter_warning.matches_filter": "Ταιριάζει με το φίλτρο “{title}”", + "filter_warning.matches_filter": "Ταιριάζει με το φίλτρο “{title}”", "filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις", "filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις", "firehose.all": "Όλα", @@ -382,9 +386,9 @@ "interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.", "interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.", "interaction_modal.description.reply": "Με ένα λογαριασμό Mastodon, μπορείς να απαντήσεις σε αυτή την ανάρτηση.", - "interaction_modal.login.action": "Take me home\nΠήγαινέ με στην αρχική σελίδα", + "interaction_modal.login.action": "Πήγαινέ με στην αρχική σελίδα", "interaction_modal.login.prompt": "Τομέας του οικιακού σου διακομιστή, πχ. mastodon.social", - "interaction_modal.no_account_yet": "Not on Mastodon?\nΔεν είστε στο Mastodon;", + "interaction_modal.no_account_yet": "Δεν είστε στο Mastodon;", "interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή", "interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή", "interaction_modal.sign_in": "Δεν είσαι συνδεδεμένος σε αυτόν το διακομιστή. Πού φιλοξενείται ο λογαριασμός σου;", @@ -505,7 +509,7 @@ "notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου", "notification.favourite.name_and_others_with_link": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} αγάπησαν την ανάρτησή σου", "notification.follow": "Ο/Η {name} σε ακολούθησε", - "notification.follow.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} σε ακολούθησαν", + "notification.follow.name_and_others": "Ο χρήστης {name} και {count, plural, one {# ακόμη} other {# ακόμη}} σε ακολούθησαν", "notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει", "notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν", "notification.label.mention": "Επισήμανση", @@ -513,6 +517,7 @@ "notification.label.private_reply": "Ιδιωτική απάντηση", "notification.label.reply": "Απάντηση", "notification.mention": "Επισήμανση", + "notification.mentioned_you": "Ο χρήστης {name} σε επισήμανε", "notification.moderation-warning.learn_more": "Μάθε περισσότερα", "notification.moderation_warning": "Έχετε λάβει μία προειδοποίηση συντονισμού", "notification.moderation_warning.action_delete_statuses": "Ορισμένες από τις αναρτήσεις σου έχουν αφαιρεθεί.", @@ -563,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου", "notifications.column_settings.follow": "Νέοι ακόλουθοι:", "notifications.column_settings.follow_request": "Νέο αίτημα ακολούθησης:", + "notifications.column_settings.group": "Ομάδα", "notifications.column_settings.mention": "Επισημάνσεις:", "notifications.column_settings.poll": "Αποτελέσματα δημοσκόπησης:", "notifications.column_settings.push": "Ειδοποιήσεις Push", @@ -837,7 +843,7 @@ "time_remaining.minutes": "απομένουν {number, plural, one {# λεπτό} other {# λεπτά}}", "time_remaining.moments": "Στιγμές που απομένουν", "time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}", - "trends.counter_by_accounts": "{count, plural, one {{counter} άτομο} other {{counter} άτομα} }{days, plural, one { την τελευταία ημέρα} other { τις τελευταίες {days} ημέρες}}", + "trends.counter_by_accounts": "{count, plural, one {{counter} άτομο} other {{counter} άτομα}} {days, plural, one {την τελευταία ημέρα} other {τις τελευταίες {days} ημέρες}}", "trends.trending_now": "Δημοφιλή τώρα", "ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.", "units.short.billion": "{count}Δις", @@ -849,6 +855,11 @@ "upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.", "upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής", "upload_form.description": "Περιγραφή για άτομα με προβλήματα όρασης", + "upload_form.drag_and_drop.instructions": "Για να επιλέξετε ένα συνημμένο αρχείο πολυμέσων, πατήστε το Space ή το Enter. Ενώ το σέρνετε, χρησιμοποιήστε τα πλήκτρα βέλους για να μετακινήσετε το συνημμένο αρχείο πολυμέσων προς οποιαδήποτε κατεύθυνση. Πατήστε ξανά το Space ή το Enter για να αποθέσετε το συνημμένο αρχείο πολυμέσων στη νέα του θέση ή πατήστε το Escape για ακύρωση.", + "upload_form.drag_and_drop.on_drag_cancel": "Η μετακίνηση ακυρώθηκε. Έγινε απόθεση του συνημμένου αρχείου πολυμέσων «{item}».", + "upload_form.drag_and_drop.on_drag_end": "Έγινε απόθεση του συνημμένου αρχείου πολυμέσων «{item}».", + "upload_form.drag_and_drop.on_drag_over": "Έγινε μετακίνηση του συνημμένου αρχείου πολυμέσων «{item}».", + "upload_form.drag_and_drop.on_drag_start": "Έγινε επιλογή του συνημμένου αρχείου πολυμέσων «{item}».", "upload_form.edit": "Επεξεργασία", "upload_form.thumbnail": "Αλλαγή μικρογραφίας", "upload_form.video_description": "Περιγραφή για άτομα με προβλήματα ακοής ή όρασης", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index b1d61ddd3d..bbf6fec730 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Unfollow user?", "content_warning.hide": "Hide post", "content_warning.show": "Show anyway", + "content_warning.show_more": "Show more", "conversation.delete": "Delete conversation", "conversation.mark_as_read": "Mark as read", "conversation.open": "View conversation", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", - "filter_warning.matches_filter": "Matches filter “{title}”", + "filter_warning.matches_filter": "Matches filter \"{title}\"", "filtered_notifications_banner.pending_requests": "From {count, plural, =0 {no one} one {one person} other {# people}} you may know", "filtered_notifications_banner.title": "Filtered notifications", "firehose.all": "All", @@ -508,7 +509,7 @@ "notification.favourite": "{name} favourited your post", "notification.favourite.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} favourited your post", "notification.follow": "{name} followed you", - "notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you", + "notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you", "notification.follow_request": "{name} has requested to follow you", "notification.follow_request.name_and_others": "{name} and {count, plural, one {# other} other {# others}} has requested to follow you", "notification.label.mention": "Mention", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Private reply", "notification.label.reply": "Reply", "notification.mention": "Mention", + "notification.mentioned_you": "{name} mentioned you", "notification.moderation-warning.learn_more": "Learn more", "notification.moderation_warning": "You have received a moderation warning", "notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.group": "Group", "notifications.column_settings.mention": "Mentions:", "notifications.column_settings.poll": "Poll results:", "notifications.column_settings.push": "Push notifications", @@ -791,7 +794,7 @@ "status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}", "status.embed": "Get embed code", "status.favourite": "Favourite", - "status.favourites": "{count, plural, one {favorite} other {favorites}}", + "status.favourites": "{count, plural, one {favourite} other {favourites}}", "status.filter": "Filter this post", "status.history.created": "{name} created {date}", "status.history.edited": "{name} edited {date}", @@ -852,6 +855,11 @@ "upload_error.poll": "File upload not allowed with polls.", "upload_form.audio_description": "Describe for people who are deaf or hard of hearing", "upload_form.description": "Describe for people who are blind or have low vision", + "upload_form.drag_and_drop.instructions": "To pick up a media attachment, press space or enter. While dragging, use the arrow keys to move the media attachment in any given direction. Press space or enter again to drop the media attachment in its new position, or press escape to cancel.", + "upload_form.drag_and_drop.on_drag_cancel": "Dragging was cancelled. Media attachment {item} was dropped.", + "upload_form.drag_and_drop.on_drag_end": "Media attachment {item} was dropped.", + "upload_form.drag_and_drop.on_drag_over": "Media attachment {item} was moved.", + "upload_form.drag_and_drop.on_drag_start": "Picked up media attachment {item}.", "upload_form.edit": "Edit", "upload_form.thumbnail": "Change thumbnail", "upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 8a96029834..87eacaaa28 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -291,6 +291,7 @@ "confirmations.unfollow.title": "Unfollow user?", "content_warning.hide": "Hide post", "content_warning.show": "Show anyway", + "content_warning.show_more": "Show more", "conversation.delete": "Delete conversation", "conversation.mark_as_read": "Mark as read", "conversation.open": "View conversation", @@ -408,7 +409,7 @@ "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", - "filter_warning.matches_filter": "Matches filter “{title}”", + "filter_warning.matches_filter": "Matches filter “{title}”", "filtered_notifications_banner.pending_requests": "From {count, plural, =0 {no one} one {one person} other {# people}} you may know", "filtered_notifications_banner.title": "Filtered notifications", "firehose.all": "All", @@ -625,7 +626,7 @@ "notification.favourite": "{name} favorited your post", "notification.favourite.name_and_others_with_link": "{name} and {count, plural, one {# other} other {# others}} favorited your post", "notification.follow": "{name} followed you", - "notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you", + "notification.follow.name_and_others": "{name} and {count, plural, one {# other} other {# others}} followed you", "notification.follow_request": "{name} has requested to follow you", "notification.follow_request.name_and_others": "{name} and {count, plural, one {# other} other {# others}} has requested to follow you", "notification.label.mention": "Mention", @@ -634,6 +635,7 @@ "notification.label.reply": "Reply", "notification.list_status": "{name} post is added to {listName}", "notification.mention": "Mention", + "notification.mentioned_you": "{name} mentioned you", "notification.moderation-warning.learn_more": "Learn more", "notification.moderation_warning": "You have received a moderation warning", "notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.", @@ -687,6 +689,7 @@ "notifications.column_settings.filter_bar.category": "Quick filter bar", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", + "notifications.column_settings.group": "Group", "notifications.column_settings.list_status": "New posts of list:", "notifications.column_settings.mention": "Mentions:", "notifications.column_settings.poll": "Poll results:", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 4268c38535..a512860d6f 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -1,8 +1,8 @@ { - "about.blocks": "Administritaj serviloj", + "about.blocks": "Reguligitaj serviloj", "about.contact": "Kontakto:", "about.disclaimer": "Mastodon estas libera, malfermitkoda programo kaj varmarko de la firmao Mastodon gGmbH.", - "about.domain_blocks.no_reason_available": "Kialo ne disponebla", + "about.domain_blocks.no_reason_available": "Kialo ne disponeblas", "about.domain_blocks.preamble": "Mastodon ĝenerale rajtigas vidi la enhavojn de uzantoj el aliaj serviloj en la fediverso, kaj komuniki kun ili. Jen la limigoj deciditaj de tiu ĉi servilo mem.", "about.domain_blocks.silenced.explanation": "Vi ne ĝenerale vidos profilojn kaj enhavojn de ĉi tiu servilo, krom se vi eksplice trovas aŭ estas permesita de via sekvato.", "about.domain_blocks.silenced.title": "Limigita", @@ -10,10 +10,10 @@ "about.domain_blocks.suspended.title": "Suspendita", "about.not_available": "Ĉi tiu informo ne estas disponebla ĉe ĉi tiu servilo.", "about.powered_by": "Malcentrigita socia retejo pere de {mastodon}", - "about.rules": "Regularo de la servilo", + "about.rules": "Reguloj de la servilo", "account.account_note_header": "Personaj notoj", "account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj", - "account.badges.bot": "Roboto", + "account.badges.bot": "Aŭtomata", "account.badges.group": "Grupo", "account.block": "Bloki @{name}", "account.block_domain": "Bloki la domajnon {domain}", @@ -22,11 +22,11 @@ "account.cancel_follow_request": "Nuligi peton por sekvado", "account.copy": "Kopii ligilon al profilo", "account.direct": "Private mencii @{name}", - "account.disable_notifications": "Ne plu sciigi min, kiam @{name} mesaĝas", + "account.disable_notifications": "Ĉesu sciigi min kiam @{name} afiŝas", "account.domain_blocked": "Domajno blokita", "account.edit_profile": "Redakti la profilon", - "account.enable_notifications": "Sciigi min, kiam @{name} mesaĝas", - "account.endorse": "Rekomendi ĉe via profilo", + "account.enable_notifications": "Sciigu min kiam @{name} afiŝos", + "account.endorse": "Prezenti ĉe via profilo", "account.featured_tags.last_status_at": "Lasta afîŝo je {date}", "account.featured_tags.last_status_never": "Neniu afiŝo", "account.featured_tags.title": "Rekomendataj kradvortoj de {name}", @@ -45,18 +45,18 @@ "account.languages": "Ŝanĝi la abonitajn lingvojn", "account.link_verified_on": "Propreco de tiu ligilo estis konfirmita je {date}", "account.locked_info": "Tiu konto estas privatigita. La posedanto mane akceptas tiun, kiu povas sekvi rin.", - "account.media": "Plurmedioj", + "account.media": "Aŭdovidaĵoj", "account.mention": "Mencii @{name}", "account.moved_to": "{name} indikis, ke ria nova konto estas nun:", "account.mute": "Silentigi @{name}", - "account.mute_notifications_short": "Silentigu Sciigojn", + "account.mute_notifications_short": "Silentigu sciigojn", "account.mute_short": "Silentigu", "account.muted": "Silentigita", "account.mutual": "Reciproka", "account.no_bio": "Neniu priskribo estas provizita.", "account.open_original_page": "Malfermi la originalan paĝon", "account.posts": "Afiŝoj", - "account.posts_with_replies": "Mesaĝoj kaj respondoj", + "account.posts_with_replies": "Afiŝoj kaj respondoj", "account.report": "Raporti @{name}", "account.requested": "Atendo de aprobo. Klaku por nuligi la peton por sekvado", "account.requested_follow": "{name} petis sekvi vin", @@ -69,7 +69,7 @@ "account.unendorse": "Ne plu rekomendi ĉe la profilo", "account.unfollow": "Ĉesi sekvi", "account.unmute": "Ne plu silentigi @{name}", - "account.unmute_notifications_short": "Malsilentigu Sciigojn", + "account.unmute_notifications_short": "Malsilentigu sciigojn", "account.unmute_short": "Ne plu silentigi", "account_note.placeholder": "Alklaku por aldoni noton", "admin.dashboard.daily_retention": "Uzantoretenprocento lau tag post registro", @@ -81,12 +81,12 @@ "admin.impact_report.instance_followers": "Sekvantojn niaj uzantoj perdus", "admin.impact_report.instance_follows": "Sekvantojn ties uzantoj perdus", "admin.impact_report.title": "Influa reporto", - "alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.", + "alert.rate_limited.message": "Bonvolu reprovi poste {retry_time, time, medium}.", "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.title": "Aj!", "alt_text_badge.title": "Alt-teksto", - "announcement.announcement": "Anoncoj", + "announcement.announcement": "Anonco", "attachments_list.unprocessed": "(neprilaborita)", "audio.hide": "Kaŝi aŭdion", "block_modal.remote_users_caveat": "Ni petos al la servilo {domain} respekti vian elekton. Tamen, plenumo ne estas garantiita ĉar iuj serviloj eble manipulas blokojn malsame. Publikaj afiŝoj eble ankoraŭ estas videbla por ne-ensalutintaj uzantoj.", @@ -105,13 +105,13 @@ "bundle_column_error.error.title": "Ho, ve!", "bundle_column_error.network.body": "Okazis eraro dum ŝarĝado de ĉi tiu paĝo. Tion povas kaŭzi portempa problemo pri via retkonektado aŭ pri ĉi tiu servilo.", "bundle_column_error.network.title": "Eraro de reto", - "bundle_column_error.retry": "Provu refoje", + "bundle_column_error.retry": "Provu denove", "bundle_column_error.return": "Reiri hejmen", "bundle_column_error.routing.body": "La celita paĝo ne troveblas. Ĉu vi certas, ke la retadreso (URL) en via retfoliumilo estas ĝusta?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Fermi", "bundle_modal_error.message": "Io misfunkciis en la ŝargado de ĉi tiu elemento.", - "bundle_modal_error.retry": "Bonvolu reprovi", + "bundle_modal_error.retry": "Provu denove", "closed_registrations.other_server_instructions": "Ĉar Mastodon estas malcentraliza, vi povas krei konton ĉe alia servilo kaj ankoraŭ komuniki kun ĉi tiu.", "closed_registrations_modal.description": "Krei konton ĉe {domain} aktuale ne eblas, tamen bonvole rimarku, ke vi ne bezonas konton specife ĉe {domain} por uzi Mastodon.", "closed_registrations_modal.find_another_server": "Trovi alian servilon", @@ -142,7 +142,7 @@ "column_header.unpin": "Malfiksi", "column_subheading.settings": "Agordoj", "community.column_settings.local_only": "Nur loka", - "community.column_settings.media_only": "Nur plurmedioj", + "community.column_settings.media_only": "Nur vidaŭdaĵoj", "community.column_settings.remote_only": "Nur fora", "compose.language.change": "Ŝanĝi lingvon", "compose.language.search": "Serĉi lingvojn...", @@ -163,7 +163,7 @@ "compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton", "compose_form.poll.type": "Stilo", "compose_form.publish": "Afiŝo", - "compose_form.publish_form": "Afiŝi", + "compose_form.publish_form": "Nova afiŝo", "compose_form.reply": "Respondi", "compose_form.save_changes": "Ĝisdatigi", "compose_form.spoiler.marked": "Forigi la averton de enhavo", @@ -173,17 +173,17 @@ "confirmations.block.confirm": "Bloki", "confirmations.delete.confirm": "Forigi", "confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun afiŝon?", - "confirmations.delete.title": "Ĉu forigi Afiŝon?", + "confirmations.delete.title": "Ĉu forigi afiŝon?", "confirmations.delete_list.confirm": "Forigi", "confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?", "confirmations.delete_list.title": "Ĉu forigi liston?", "confirmations.discard_edit_media.confirm": "Forĵeti", - "confirmations.discard_edit_media.message": "Vi havas nekonservitajn ŝanĝojn de la priskribo aŭ la antaŭmontro de la plurmedio, ĉu vi forĵetu ilin malgraŭe?", + "confirmations.discard_edit_media.message": "Vi havas nekonservitajn ŝanĝojn de la priskribo aŭ la antaŭvidigo de la vidaŭdaĵo, ĉu vi forĵetu ilin malgraŭe?", "confirmations.edit.confirm": "Redakti", "confirmations.edit.message": "Redakti nun anstataŭigos la skribatan afiŝon. Ĉu vi certas, ke vi volas daŭrigi?", "confirmations.edit.title": "Ĉu superskribi afiŝon?", - "confirmations.logout.confirm": "Adiaŭi", - "confirmations.logout.message": "Ĉu vi certas ke vi volas adiaŭi?", + "confirmations.logout.confirm": "Elsaluti", + "confirmations.logout.message": "Ĉu vi certas, ke vi volas elsaluti?", "confirmations.logout.title": "Ĉu elsaluti?", "confirmations.mute.confirm": "Silentigi", "confirmations.redraft.confirm": "Forigi kaj reskribi", @@ -197,8 +197,9 @@ "confirmations.unfollow.title": "Ĉu ĉesi sekvi uzanton?", "content_warning.hide": "Kaŝi afiŝon", "content_warning.show": "Montri ĉiukaze", + "content_warning.show_more": "Montri pli", "conversation.delete": "Forigi konversacion", - "conversation.mark_as_read": "Marki legita", + "conversation.mark_as_read": "Marku kiel legita", "conversation.open": "Vidi konversacion", "conversation.with": "Kun {names}", "copy_icon_button.copied": "Kopiis al kliptabulo", @@ -213,9 +214,9 @@ "dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.", "dismissable_banner.dismiss": "Eksigi", "dismissable_banner.explore_links": "Tiuj novaĵoj estas aktuale priparolataj de uzantoj en tiu ĉi kaj aliaj serviloj, sur la malcentrigita reto.", - "dismissable_banner.explore_statuses": "Ĉi tioj estas afiŝoj de socia reto kiu populariĝas hodiau.", + "dismissable_banner.explore_statuses": "Jen afiŝoj en la socia reto kiuj populariĝis hodiaŭ. Novaj afiŝoj kun pli da diskonigoj kaj stelumoj aperas pli alte.", "dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.", - "dismissable_banner.public_timeline": "Ĉi tioj estas plej lastaj publikaj afiŝoj de personoj ĉe socia reto kiu personoj ĉe {domain} sekvas.", + "dismissable_banner.public_timeline": "Ĉi tiuj estas la plej lastatempaj publikaj afiŝoj de homoj en la socia reto, kiujn homoj sur {domain} sekvas.", "domain_block_modal.block": "Bloki servilon", "domain_block_modal.block_account_instead": "Bloki @{name} anstataŭe", "domain_block_modal.they_can_interact_with_old_posts": "Homoj de ĉi tiu servilo povas interagi kun viaj malnovaj afiŝoj.", @@ -247,26 +248,26 @@ "emoji_button.food": "Manĝi kaj trinki", "emoji_button.label": "Enmeti emoĝion", "emoji_button.nature": "Naturo", - "emoji_button.not_found": "Neniu emoĝio!! (╯°□°)╯︵ ┻━┻", + "emoji_button.not_found": "Neniuj kongruaj emoĝioj trovitaj", "emoji_button.objects": "Aĵoj", "emoji_button.people": "Homoj", "emoji_button.recent": "Ofte uzataj", - "emoji_button.search": "Serĉo…", + "emoji_button.search": "Serĉo...", "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", "empty_column.account_hides_collections": "Ĉi tiu uzanto elektis ne disponebligi ĉi tiu informon", "empty_column.account_suspended": "Konto suspendita", - "empty_column.account_timeline": "Neniu afiŝo ĉi tie!", - "empty_column.account_unavailable": "Profilo ne disponebla", + "empty_column.account_timeline": "Neniuj afiŝoj ĉi tie!", + "empty_column.account_unavailable": "Profilo nedisponebla", "empty_column.blocks": "Vi ankoraŭ ne blokis uzanton.", "empty_column.bookmarked_statuses": "Vi ankoraŭ ne aldonis afiŝon al viaj legosignoj. Kiam vi aldonos iun, tiu aperos ĉi tie.", "empty_column.community": "La loka templinio estas malplena. Skribu ion por plenigi ĝin!", "empty_column.direct": "Vi ankoraŭ ne havas privatan mencion. Kiam vi sendos aŭ ricevos iun, tiu aperos ĉi tie.", "empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.", "empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!", - "empty_column.favourited_statuses": "Vi ankoraŭ ne havas stelumitan afiŝon.", - "empty_column.favourites": "Ankoraŭ neniu stelumis tiun afiŝon.", + "empty_column.favourited_statuses": "Vi ankoraŭ ne havas plej ŝatatajn afiŝojn. Kiam vi ŝatatas unu, ĝi aperos ĉi tie.", + "empty_column.favourites": "Neniu ankoraŭ ŝatis ĉi tiun afiŝon. Kiam iu ŝatos ĝin, ili aperos ĉi tie.", "empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.", "empty_column.followed_tags": "Vi ankoraŭ ne sekvas iujn kradvortojn. Kiam vi faras, ili aperos ĉi tie.", "empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.", @@ -296,7 +297,7 @@ "filter_modal.added.review_and_configure": "Por kontroli kaj pli modifi ĉi tiu filtrilkategorio, iru al la {settings_link}.", "filter_modal.added.review_and_configure_title": "Filtrilopcioj", "filter_modal.added.settings_link": "opciopaĝo", - "filter_modal.added.short_explanation": "Ĉi tiu mesaĝo aldonitas al la filtrilkategorio: {title}.", + "filter_modal.added.short_explanation": "Ĉi tiu afiŝo aldonitas al la filtrilkategorio: {title}.", "filter_modal.added.title": "Filtrilo aldonita!", "filter_modal.select_filter.context_mismatch": "ne kongruas la kuntekston", "filter_modal.select_filter.expired": "eksvalidiĝinta", @@ -304,8 +305,8 @@ "filter_modal.select_filter.search": "Serĉi aŭ krei", "filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan", "filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon", - "filter_modal.title.status": "Filtri mesaĝon", - "filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”", + "filter_modal.title.status": "Filtri afiŝon", + "filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”", "filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas", "filtered_notifications_banner.title": "Filtritaj sciigoj", "firehose.all": "Ĉiuj", @@ -332,7 +333,7 @@ "followed_tags": "Sekvataj kradvortoj", "footer.about": "Pri", "footer.directory": "Profilujo", - "footer.get_app": "Akiru la Programon", + "footer.get_app": "Akiri la apon", "footer.invite": "Inviti homojn", "footer.keyboard_shortcuts": "Fulmoklavoj", "footer.privacy_policy": "Politiko de privateco", @@ -343,7 +344,7 @@ "hashtag.column_header.tag_mode.all": "kaj {additional}", "hashtag.column_header.tag_mode.any": "aŭ {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", - "hashtag.column_settings.select.no_options_message": "Neniu sugesto trovita", + "hashtag.column_settings.select.no_options_message": "Neniuj sugestoj trovitaj", "hashtag.column_settings.select.placeholder": "Enmeti kradvortojn…", "hashtag.column_settings.tag_mode.all": "Ĉiuj", "hashtag.column_settings.tag_mode.any": "Iu ajn", @@ -351,7 +352,7 @@ "hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno", "hashtag.counter_by_accounts": "{count, plural,one {{counter} partoprenanto} other {{counter} partoprenantoj}}", "hashtag.counter_by_uses": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}", - "hashtag.counter_by_uses_today": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}} hodiau", + "hashtag.counter_by_uses_today": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}} hodiaŭ", "hashtag.follow": "Sekvi la kradvorton", "hashtag.unfollow": "Ne plu sekvi la kradvorton", "hashtags.and_other": "…kaj {count, plural,other {# pli}}", @@ -381,10 +382,10 @@ "ignore_notifications_modal.not_followers_title": "Ĉu ignori sciigojn de homoj, kiuj ne sekvas vin?", "ignore_notifications_modal.not_following_title": "Ĉu ignori sciigojn de homoj, kiujn vi ne sekvas?", "ignore_notifications_modal.private_mentions_title": "Ĉu ignori sciigojn de nepetitaj privataj mencioj?", - "interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumiti ĉi tiun afiŝon por sciigi la afiŝanton ke vi aprezigas ŝin kaj konservas por la estonteco.", - "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povos sekvi {name} por vidi ties mesaĝojn en via hejmo.", + "interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumi ĉi tiun afiŝon por sciigi la afiŝanton ke vi sâtas kaj konservas ĝin por poste.", + "interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povas sekvi {name} por ricevi iliajn afiŝojn en via hejma fluo.", "interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.", - "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu mesaĝo.", + "interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu afiŝo.", "interaction_modal.login.action": "Prenu min hejmen", "interaction_modal.login.prompt": "Domajno de via hejma servilo, ekz. mastodon.social", "interaction_modal.no_account_yet": "Ĉu ne estas ĉe Mastodon?", @@ -399,40 +400,40 @@ "intervals.full.days": "{number, plural, one {# tago} other {# tagoj}}", "intervals.full.hours": "{number, plural, one {# horo} other {# horoj}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutoj}}", - "keyboard_shortcuts.back": "reveni", + "keyboard_shortcuts.back": "Reiru reen", "keyboard_shortcuts.blocked": "Malfermi la liston de blokitaj uzantoj", "keyboard_shortcuts.boost": "Diskonigi la mesaĝon", - "keyboard_shortcuts.column": "fokusi mesaĝon en unu el la kolumnoj", - "keyboard_shortcuts.compose": "enfokusigi la tekstujon", + "keyboard_shortcuts.column": "Fokusi kolumnon", + "keyboard_shortcuts.compose": "Enfokusigi la tekstaron", "keyboard_shortcuts.description": "Priskribo", "keyboard_shortcuts.direct": "por malfermi la kolumnon pri privataj mencioj", - "keyboard_shortcuts.down": "iri suben en la listo", - "keyboard_shortcuts.enter": "malfermi mesaĝon", + "keyboard_shortcuts.down": "Movu malsupren en la listo", + "keyboard_shortcuts.enter": "Malfermi afiŝon", "keyboard_shortcuts.favourite": "Stelumi afiŝon", "keyboard_shortcuts.favourites": "Malfermi la liston de la stelumoj", "keyboard_shortcuts.federated": "Malfermi la frataran templinion", - "keyboard_shortcuts.heading": "Klavaraj mallongigoj", + "keyboard_shortcuts.heading": "Fulmoklavoj", "keyboard_shortcuts.home": "Malfermi la hejman templinion", "keyboard_shortcuts.hotkey": "Rapidklavo", - "keyboard_shortcuts.legend": "montri ĉi tiun noton", - "keyboard_shortcuts.local": "Malfermi la lokan templinion", - "keyboard_shortcuts.mention": "mencii la aŭtoron", - "keyboard_shortcuts.muted": "malfermi la liston de silentigitaj uzantoj", - "keyboard_shortcuts.my_profile": "malfermi vian profilon", - "keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj", - "keyboard_shortcuts.open_media": "Malfermi plurmedion", - "keyboard_shortcuts.pinned": "malfermi la liston de alpinglitaj mesaĝoj", - "keyboard_shortcuts.profile": "malfermi la profilon de la aŭtoro", - "keyboard_shortcuts.reply": "respondi", + "keyboard_shortcuts.legend": "Montru ĉi tiun legendon", + "keyboard_shortcuts.local": "Malfermu la lokan templinion", + "keyboard_shortcuts.mention": "Menciu aŭtoron", + "keyboard_shortcuts.muted": "Malfermu la liston de silentigitaj uzantoj", + "keyboard_shortcuts.my_profile": "Malfermu vian profilon", + "keyboard_shortcuts.notifications": "Malfermu la sciigajn kolumnon", + "keyboard_shortcuts.open_media": "Malfermi vidaŭdaĵon", + "keyboard_shortcuts.pinned": "Malfermu alpinglitajn afiŝojn-liston", + "keyboard_shortcuts.profile": "Malfermu la profilon de aŭtoroprofilo", + "keyboard_shortcuts.reply": "Respondu al afiŝo", "keyboard_shortcuts.requests": "Malfermi la liston de petoj por sekvado", - "keyboard_shortcuts.search": "enfokusigi la serĉilon", - "keyboard_shortcuts.spoilers": "Montri/kaŝi la kampon de averto de enhavo (\"CW\")", - "keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»", - "keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ la averto de enhavo (\"CW\")", - "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi plurmedion", - "keyboard_shortcuts.toot": "Krei novan mesaĝon", - "keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon", - "keyboard_shortcuts.up": "iri supren en la listo", + "keyboard_shortcuts.search": "Enfokusigi la serĉbreton", + "keyboard_shortcuts.spoilers": "Montri/kaŝi CW-kampon", + "keyboard_shortcuts.start": "Malfermu \"por komenci\" kolumnon", + "keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ CW", + "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi vidaŭdaĵojn", + "keyboard_shortcuts.toot": "Komencu novan afiŝon", + "keyboard_shortcuts.unfocus": "Senfokusigi verki tekstareon/serĉon", + "keyboard_shortcuts.up": "Movu supren en la listo", "lightbox.close": "Fermi", "lightbox.next": "Antaŭen", "lightbox.previous": "Malantaŭen", @@ -476,9 +477,9 @@ "navigation_bar.blocks": "Blokitaj uzantoj", "navigation_bar.bookmarks": "Legosignoj", "navigation_bar.community_timeline": "Loka templinio", - "navigation_bar.compose": "Skribi novan mesaĝon", + "navigation_bar.compose": "Redakti novan afiŝon", "navigation_bar.direct": "Privataj mencioj", - "navigation_bar.discover": "Esplori", + "navigation_bar.discover": "Malkovri", "navigation_bar.domain_blocks": "Blokitaj domajnoj", "navigation_bar.explore": "Esplori", "navigation_bar.favourites": "Stelumoj", @@ -487,12 +488,12 @@ "navigation_bar.followed_tags": "Sekvataj kradvortoj", "navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj", "navigation_bar.lists": "Listoj", - "navigation_bar.logout": "Adiaŭi", + "navigation_bar.logout": "Elsaluti", "navigation_bar.moderation": "Modereco", "navigation_bar.mutes": "Silentigitaj uzantoj", "navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.", "navigation_bar.personal": "Persone", - "navigation_bar.pins": "Alpinglitaj mesaĝoj", + "navigation_bar.pins": "Alpinglitaj afiŝoj", "navigation_bar.preferences": "Preferoj", "navigation_bar.public_timeline": "Fratara templinio", "navigation_bar.search": "Serĉi", @@ -505,10 +506,10 @@ "notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.sign_up": "{name} kreis konton", "notification.admin.sign_up.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} kreis konton", - "notification.favourite": "{name} stelumis vian afiŝon", + "notification.favourite": "{name} ŝatis vian afiŝon", "notification.favourite.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} ŝatis vian afiŝon", "notification.follow": "{name} eksekvis vin", - "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", + "notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin", "notification.follow_request": "{name} petis sekvi vin", "notification.follow_request.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} petis sekvi vin", "notification.label.mention": "Mencii", @@ -516,16 +517,17 @@ "notification.label.private_reply": "Privata respondo", "notification.label.reply": "Respondi", "notification.mention": "Mencii", + "notification.mentioned_you": "{name} menciis vin", "notification.moderation-warning.learn_more": "Lerni pli", - "notification.moderation_warning": "Vi ricevis moderigan averton", + "notification.moderation_warning": "Vi ricevis reguligan averton", "notification.moderation_warning.action_delete_statuses": "Kelkaj el viaj afiŝoj estis forigitaj.", "notification.moderation_warning.action_disable": "Via konto estas malŝaltita.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Kelkaj el viaj afiŝoj estis markitaj kiel sentemaj.", - "notification.moderation_warning.action_none": "Via konto ricevis moderigan averton.", + "notification.moderation_warning.action_none": "Via konto ricevis reguligan averton.", "notification.moderation_warning.action_sensitive": "Viaj afiŝoj estos markitaj kiel sentemaj ekde nun.", "notification.moderation_warning.action_silence": "Via konto estis limigita.", "notification.moderation_warning.action_suspend": "Via konto estas malakceptita.", - "notification.own_poll": "Via enketo finiĝis", + "notification.own_poll": "Via balotenketo finiĝitis", "notification.poll": "Balotenketo, en kiu vi voĉdonis, finiĝis", "notification.reblog": "{name} diskonigis vian afiŝon", "notification.reblog.name_and_others_with_link": "{name} kaj {count, plural, one {# alia} other {# aliaj}} diskonigis vian afiŝon", @@ -548,8 +550,8 @@ "notification_requests.dismiss_multiple": "{count, plural, one {Malakcepti # peton…} other {# Malakcepti # petojn…}}", "notification_requests.edit_selection": "Redakti", "notification_requests.exit_selection": "Farita", - "notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de moderanto.", - "notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de moderanto.", + "notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de reguligisto.", + "notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de reguligisto.", "notification_requests.maximize": "Maksimumigi", "notification_requests.minimize_banner": "Minimumigi filtritajn sciigojn-rubandon", "notification_requests.notifications_from": "Sciigoj de {name}", @@ -566,13 +568,14 @@ "notifications.column_settings.filter_bar.category": "Rapida filtrila breto", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", + "notifications.column_settings.group": "Grupigi", "notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.poll": "Balotenketaj rezultoj:", "notifications.column_settings.push": "Puŝsciigoj", "notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.sound": "Eligi sonon", - "notifications.column_settings.status": "Novaj mesaĝoj:", + "notifications.column_settings.status": "Novaj afiŝoj:", "notifications.column_settings.unread_notifications.category": "Nelegitaj sciigoj", "notifications.column_settings.unread_notifications.highlight": "Marki nelegitajn sciigojn", "notifications.column_settings.update": "Redaktoj:", @@ -595,8 +598,8 @@ "notifications.policy.drop_hint": "Sendi al la malpleno, por neniam esti vidita denove", "notifications.policy.filter": "Filtri", "notifications.policy.filter_hint": "Sendi al filtritaj sciigoj-enirkesto", - "notifications.policy.filter_limited_accounts_hint": "Limigita de servilaj moderigantoj", - "notifications.policy.filter_limited_accounts_title": "Moderigitaj kontoj", + "notifications.policy.filter_limited_accounts_hint": "Limigita de servilaj reguligistoj", + "notifications.policy.filter_limited_accounts_title": "Reguligitaj kontoj", "notifications.policy.filter_new_accounts.hint": "Kreite en la {days, plural, one {lasta tago} other {# lastaj tagoj}}", "notifications.policy.filter_new_accounts_title": "Novaj kontoj", "notifications.policy.filter_not_followers_hint": "Inkluzive de homoj, kiuj sekvis vin malpli ol {days, plural, one {unu tago} other {# tagoj}}", @@ -611,8 +614,8 @@ "notifications_permission_banner.title": "Neniam preterlasas iun ajn", "onboarding.action.back": "Prenu min reen", "onboarding.actions.back": "Prenu min reen", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.actions.go_to_explore": "Konduku min al tendenco", + "onboarding.actions.go_to_home": "Konduku min al mia hejma fluo", "onboarding.compose.template": "Saluton #Mastodon!", "onboarding.follows.empty": "Bedaŭrinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aŭ foliumi la esploran paĝon por trovi kontojn por sekvi, aŭ retrovi baldaŭ.", "onboarding.follows.lead": "Via hejma fluo estas la ĉefa maniero sperti Mastodon. Ju pli da homoj vi sekvas, des pli aktiva kaj interesa ĝi estos. Por komenci, jen kelkaj sugestoj:", @@ -632,17 +635,17 @@ "onboarding.share.message": "Mi estas {username} en #Mastodon! Sekvu min ĉe {url}", "onboarding.share.next_steps": "Eblaj malantauaj paŝoj:", "onboarding.share.title": "Disvastigi vian profilon", - "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.lead": "Vi nun estas parto de Mastodon, unika, malcentralizita socia amaskomunikilara platformo, kie vi—ne algoritmo—zorgas vian propran sperton. Ni komencu vin sur ĉi tiu nova socia limo:", + "onboarding.start.skip": "Ĉu vi ne bezonas helpon por komenci?", "onboarding.start.title": "Vi atingas ĝin!", "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.follow_people.title": "Agordu vian hejman fluon", "onboarding.steps.publish_status.body": "Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj {emoji}", "onboarding.steps.publish_status.title": "Fari vian unuan afiŝon", - "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", + "onboarding.steps.setup_profile.body": "Diskonigu viajn interagojn havante ampleksan profilon.", + "onboarding.steps.setup_profile.title": "Agordu vian profilon", + "onboarding.steps.share_profile.body": "Sciigu viajn amikojn kiel trovi vin sur Mastodon", + "onboarding.steps.share_profile.title": "Kunhavigu vian Mastodon-profilon", "onboarding.tips.2fa": "Ĉu vi scias? Vi povas sekurigi vian konton per efektivigi dufaktora autentigo en via kontoagordoj.", "onboarding.tips.accounts_from_other_servers": "Ĉu vi scias? Ĉar Mastodon estas sencentra, kelkaj profiloj kiujn vi trovi estas gastigitaj ĉe aliaj serviloj kiuj ne estas via.", "onboarding.tips.migration": "Ĉu vi scias? Se vi sentas ke {domain} ne estas bona servilelekto por vi en la estonteco, vi povas translokiĝi al alia servilo de Mastodon sen malgajni viajn sekvantojn.", @@ -656,11 +659,11 @@ "poll.total_people": "{count, plural, one {# homo} other {# homoj}}", "poll.total_votes": "{count, plural, one {# voĉdono} other {# voĉdonoj}}", "poll.vote": "Voĉdoni", - "poll.voted": "Vi elektis por ĉi tiu respondo", + "poll.voted": "Vi voĉdonis por ĉi tiu respondo", "poll.votes": "{votes, plural, one {# voĉdono} other {# voĉdonoj}}", "poll_button.add_poll": "Aldoni balotenketon", "poll_button.remove_poll": "Forigi balotenketon", - "privacy.change": "Agordi mesaĝan privatecon", + "privacy.change": "Ŝanĝu afiŝan privatecon", "privacy.direct.long": "Ĉiuj menciitaj en la afiŝo", "privacy.direct.short": "Specifaj homoj", "privacy.private.long": "Nur viaj sekvantoj", @@ -746,7 +749,7 @@ "search.quick_action.go_to_account": "Iri al profilo {x}", "search.quick_action.go_to_hashtag": "Iri al kradvorto {x}", "search.quick_action.open_url": "Malfermi URL en Mastodono", - "search.quick_action.status_search": "Afiŝoj kiuj kongruas kun {x}", + "search.quick_action.status_search": "Afiŝoj kiuj konformas kun {x}", "search.search_or_paste": "Serĉu aŭ algluu URL-on", "search_popout.full_text_search_disabled_message": "Ne havebla sur {domain}.", "search_popout.full_text_search_logged_out_message": "Disponebla nur kiam ensalutinte.", @@ -760,7 +763,7 @@ "search_results.all": "Ĉiuj", "search_results.hashtags": "Kradvortoj", "search_results.nothing_found": "Povis trovi nenion por ĉi tiuj serĉaj terminoj", - "search_results.see_all": "Vidu ĉiujn", + "search_results.see_all": "Vidi ĉiujn", "search_results.statuses": "Afiŝoj", "search_results.title": "Serĉ-rezultoj por {q}", "server_banner.about_active_users": "Personoj uzantaj ĉi tiun servilon dum la lastaj 30 tagoj (Aktivaj Uzantoj Monate)", @@ -769,19 +772,19 @@ "server_banner.is_one_of_many": "{domain} estas unu el la multaj sendependaj Mastodon-serviloj, kiujn vi povas uzi por partopreni en la fediverso.", "server_banner.server_stats": "Statistikoj de la servilo:", "sign_in_banner.create_account": "Krei konton", - "sign_in_banner.follow_anyone": "Sekvi iun ajn tra la fediverso kaj vidi ĉion en kronologia ordo. Neniuj algoritmoj, reklamoj aŭ klakbetoj videblas.", - "sign_in_banner.mastodon_is": "Mastodonto estas la plej bona maniero por resti flank-al-flanke kun kio okazas.", - "sign_in_banner.sign_in": "Saluti", + "sign_in_banner.follow_anyone": "Sekvu iun ajn tra la fediverso kaj vidu ĉion laŭ templinio. Nul algoritmo, reklamo aŭ kliklogilo ĉeestas.", + "sign_in_banner.mastodon_is": "Mastodon estas la plej bona maniero resti ĝisdata pri aktualaĵoj.", + "sign_in_banner.sign_in": "Ensaluti", "sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi", - "status.admin_account": "Malfermi fasadon de moderigado por @{name}", - "status.admin_domain": "Malfermu moderigan interfacon por {domain}", - "status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco", + "status.admin_account": "Malfermi fasadon de la reguligado por @{name}", + "status.admin_domain": "Malfermi fasadon de la reguligado por {domain}", + "status.admin_status": "Malfermi ĉi tiun afiŝon en la fasado de la reguligado", "status.block": "Bloki @{name}", "status.bookmark": "Aldoni al la legosignoj", "status.cancel_reblog_private": "Ne plu diskonigi", "status.cannot_reblog": "Ĉi tiun afiŝon ne eblas diskonigi", "status.continued_thread": "Daŭrigis fadenon", - "status.copy": "Kopii la ligilon al la mesaĝo", + "status.copy": "Kopii la ligilon al la afiŝo", "status.delete": "Forigi", "status.detailed_status": "Detala konversacia vido", "status.direct": "Private mencii @{name}", @@ -798,14 +801,14 @@ "status.load_more": "Ŝargi pli", "status.media.open": "Alklaki por malfermi", "status.media.show": "Alklaki por montri", - "status.media_hidden": "Plurmedio kaŝita", + "status.media_hidden": "Vidaŭdaĵo kaŝita", "status.mention": "Mencii @{name}", "status.more": "Pli", "status.mute": "Silentigi @{name}", "status.mute_conversation": "Silentigi konversacion", - "status.open": "Disvolvi la mesaĝon", + "status.open": "Pligrandigu ĉi tiun afiŝon", "status.pin": "Alpingli al la profilo", - "status.pinned": "Alpinglita mesaĝo", + "status.pinned": "Alpinglita afiŝo", "status.read_more": "Legi pli", "status.reblog": "Diskonigi", "status.reblog_private": "Diskonigi kun la sama videbleco", @@ -824,7 +827,7 @@ "status.show_less_all": "Montri malpli ĉiun", "status.show_more_all": "Montri pli ĉiun", "status.show_original": "Montru originalon", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.title.with_attachments": "{user} afiŝis {attachmentCount, plural, one {aldonaĵon} other {{attachmentCount} aldonaĵojn}}", "status.translate": "Traduki", "status.translated_from_with": "Tradukita el {lang} per {provider}", "status.uncached_media_warning": "Antaŭrigardo ne disponebla", @@ -847,7 +850,7 @@ "units.short.million": "{count}M", "units.short.thousand": "{count}K", "upload_area.title": "Altreni kaj lasi por alŝuti", - "upload_button.label": "Aldoni aŭdovidaĵon (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Aldonu bildojn, filmeton aŭ sondosieron", "upload_error.limit": "Limo de dosiera alŝutado transpasita.", "upload_error.poll": "Alŝuto de dosiero ne permesita kun balotenketo.", "upload_form.audio_description": "Priskribi por homoj kiuj malfacile aŭdi", @@ -866,21 +869,21 @@ "upload_modal.choose_image": "Elekti bildon", "upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj", "upload_modal.detect_text": "Detekti tekston de la bildo", - "upload_modal.edit_media": "Redakti la plurmedion", + "upload_modal.edit_media": "Redakti la vidaŭdaĵojn", "upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.", "upload_modal.preparing_ocr": "Preparante OSR…", "upload_modal.preview_label": "Antaŭvido ({ratio})", - "upload_progress.label": "Alŝutado…", + "upload_progress.label": "Alŝutante...", "upload_progress.processing": "Traktante…", "username.taken": "La uzantnomo estas jam posedita. Provu alion", - "video.close": "Fermi la videon", + "video.close": "Fermu la filmeton", "video.download": "Elŝuti dosieron", "video.exit_fullscreen": "Eksigi plenekrana", "video.expand": "Pligrandigi la videon", "video.fullscreen": "Igi plenekrana", - "video.hide": "Kaŝi la videon", + "video.hide": "Kaŝu la filmeton", "video.mute": "Silentigi", - "video.pause": "Paŭzi", + "video.pause": "Paŭzigi", "video.play": "Ekigi", "video.unmute": "Malsilentigi" } diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 609175d94f..ad02f27daf 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "content_warning.hide": "Ocultar mensaje", "content_warning.show": "Mostrar de todos modos", + "content_warning.show_more": "Mostrar más", "conversation.delete": "Eliminar conversación", "conversation.mark_as_read": "Marcar como leída", "conversation.open": "Ver conversación", @@ -249,7 +250,7 @@ "emoji_button.nature": "Naturaleza", "emoji_button.not_found": "No se encontraron emojis coincidentes", "emoji_button.objects": "Objetos", - "emoji_button.people": "Cuentas", + "emoji_button.people": "Gente", "emoji_button.recent": "Usados frecuentemente", "emoji_button.search": "Buscar...", "emoji_button.search_results": "Resultados de búsqueda", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar este mensaje", "filter_modal.title.status": "Filtrar un mensaje", - "filter_warning.matches_filter": "Coincide con el filtro “{title}”", + "filter_warning.matches_filter": "Coincide con el filtro “{title}”", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer", "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todos", @@ -508,7 +509,7 @@ "notification.favourite": "{name} marcó tu mensaje como favorito", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} marcaron tu mensaje como favorito", "notification.follow": "{name} te empezó a seguir", - "notification.follow.name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} te están siguiendo", + "notification.follow.name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} te están siguiendo", "notification.follow_request": "{name} solicitó seguirte", "notification.follow_request.name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}} solicitaron seguirte", "notification.label.mention": "Mención", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Respuesta privada", "notification.label.reply": "Respuesta", "notification.mention": "Mención", + "notification.mentioned_you": "{name} te mencionó", "notification.moderation-warning.learn_more": "Aprendé más", "notification.moderation_warning": "Recibiste una advertencia de moderación", "notification.moderation_warning.action_delete_statuses": "Se eliminaron algunos de tus mensajes.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la encuesta:", "notifications.column_settings.push": "Notificaciones push", @@ -791,7 +794,7 @@ "status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}", "status.embed": "Obtener código para insertar", "status.favourite": "Marcar como favorito", - "status.favourites": "{count, plural, one {# voto} other {# votos}}", + "status.favourites": "{count, plural, one {# vez marcado como favorito} other {# veces marcado como favorito}}", "status.filter": "Filtrar este mensaje", "status.history.created": "Creado por {name}, {date}", "status.history.edited": "Editado por {name}, {date}", @@ -854,7 +857,7 @@ "upload_form.description": "Agregá una descripción para personas con dificultades visuales", "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsá la barra espaciadora o la tecla Enter. Mientras arrastrás, usá las teclas de flecha para mover el archivo multimedia en cualquier dirección. Volvé a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsá la tecla Escape para cancelar.", "upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.", - "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.", + "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue soltado.", "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.", "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.", "upload_form.edit": "Editar", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 7c2e400338..eb732b51a9 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -13,13 +13,13 @@ "about.rules": "Reglas del servidor", "account.account_note_header": "Nota personal", "account.add_or_remove_from_list": "Agregar o eliminar de las listas", - "account.badges.bot": "Bot", + "account.badges.bot": "Automatizada", "account.badges.group": "Grupo", "account.block": "Bloquear a @{name}", "account.block_domain": "Bloquear dominio {domain}", "account.block_short": "Bloquear", "account.blocked": "Bloqueado", - "account.cancel_follow_request": "Retirar solicitud de seguimiento", + "account.cancel_follow_request": "Cancelar seguimiento", "account.copy": "Copiar enlace al perfil", "account.direct": "Mención privada @{name}", "account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo", @@ -33,11 +33,11 @@ "account.follow": "Seguir", "account.follow_back": "Seguir también", "account.followers": "Seguidores", - "account.followers.empty": "Todavía nadie sigue a este usuario.", + "account.followers.empty": "Nadie sigue a este usuario todavía.", "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", "account.following": "Siguiendo", "account.following_counter": "{count, plural, one {{counter} siguiendo} other {{counter} siguiendo}}", - "account.follows.empty": "Este usuario todavía no sigue a nadie.", + "account.follows.empty": "Este usuario no sigue a nadie todavía.", "account.go_to_profile": "Ir al perfil", "account.hide_reblogs": "Ocultar impulsos de @{name}", "account.in_memoriam": "En memoria.", @@ -58,7 +58,7 @@ "account.posts": "Publicaciones", "account.posts_with_replies": "Publicaciones y respuestas", "account.report": "Denunciar a @{name}", - "account.requested": "Esperando aprobación. Haga clic para cancelar la solicitud de seguimiento", + "account.requested": "Esperando aprobación. Haz clic para cancelar la solicitud de seguimiento", "account.requested_follow": "{name} ha solicitado seguirte", "account.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}", @@ -81,15 +81,15 @@ "admin.impact_report.instance_followers": "Seguidores que nuestros usuarios perderían", "admin.impact_report.instance_follows": "Seguidores que perderían sus usuarios", "admin.impact_report.title": "Resumen de impacto", - "alert.rate_limited.message": "Por favor reintente después de {retry_time, time, medium}.", + "alert.rate_limited.message": "Por favor, intenta después de las {retry_time, time, medium}.", "alert.rate_limited.title": "Tarifa limitada", "alert.unexpected.message": "Hubo un error inesperado.", - "alert.unexpected.title": "¡Ups!", + "alert.unexpected.title": "¡Uy!", "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", - "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado ya que algunos servidores pueden manejar bloques de forma diferente. Las publicaciones públicas pueden ser todavía visibles para los usuarios no conectados.", + "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar bloques de forma diferente. Las publicaciones públicas pueden ser todavía visibles para los usuarios no conectados.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar más", "block_modal.they_cant_mention": "No pueden mencionarte ni seguirte.", @@ -120,7 +120,7 @@ "column.about": "Acerca de", "column.blocks": "Usuarios bloqueados", "column.bookmarks": "Marcadores", - "column.community": "Línea de tiempo local", + "column.community": "Cronología local", "column.direct": "Menciones privadas", "column.directory": "Buscar perfiles", "column.domain_blocks": "Dominios ocultados", @@ -159,13 +159,13 @@ "compose_form.poll.multiple": "Selección múltiple", "compose_form.poll.option_placeholder": "Opción {number}", "compose_form.poll.single": "Seleccione uno", - "compose_form.poll.switch_to_multiple": "Modificar encuesta para permitir múltiples opciones", - "compose_form.poll.switch_to_single": "Modificar encuesta para permitir una única opción", + "compose_form.poll.switch_to_multiple": "Cambiar la encuesta para permitir múltiples opciones", + "compose_form.poll.switch_to_single": "Cambiar la encuesta para permitir una única opción", "compose_form.poll.type": "Estilo", - "compose_form.publish": "Publicación", - "compose_form.publish_form": "Publicar", + "compose_form.publish": "Publicar", + "compose_form.publish_form": "Nueva publicación", "compose_form.reply": "Respuesta", - "compose_form.save_changes": "Actualización", + "compose_form.save_changes": "Actualizar", "compose_form.spoiler.marked": "Quitar advertencia de contenido", "compose_form.spoiler.unmarked": "Añadir advertencia de contenido", "compose_form.spoiler_placeholder": "Advertencia de contenido (opcional)", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "content_warning.hide": "Ocultar publicación", "content_warning.show": "Mostrar de todos modos", + "content_warning.show_more": "Mostrar más", "conversation.delete": "Borrar conversación", "conversation.mark_as_read": "Marcar como leído", "conversation.open": "Ver conversación", @@ -247,7 +248,7 @@ "emoji_button.food": "Comida y bebida", "emoji_button.label": "Insertar emoji", "emoji_button.nature": "Naturaleza", - "emoji_button.not_found": "Sin emojis coincidentes", + "emoji_button.not_found": "No se han encontrado emojis que coincidan", "emoji_button.objects": "Objetos", "emoji_button.people": "Gente", "emoji_button.recent": "Usados frecuentemente", @@ -270,8 +271,8 @@ "empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.", "empty_column.followed_tags": "No estás siguiendo ninguna etiqueta todavía. Cuando lo hagas, aparecerá aquí.", "empty_column.hashtag": "No hay nada en esta etiqueta aún.", - "empty_column.home": "No estás siguiendo a nadie aún. Visita {public} o haz búsquedas para empezar y conocer gente nueva.", - "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", + "empty_column.home": "¡Tu cronología está vacía! Sigue a más gente para llenarla.", + "empty_column.list": "Aún no hay nada en esta lista. Cuando los miembros de esta lista publiquen nuevos contenidos, aparecerán aquí.", "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", "empty_column.mutes": "Aún no has silenciado a ningún usuario.", "empty_column.notification_requests": "¡Todo limpio! No hay nada aquí. Cuando recibas nuevas notificaciones, aparecerán aquí conforme a tu configuración.", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar una publicación", - "filter_warning.matches_filter": "Coincide con el filtro “{title}”", + "filter_warning.matches_filter": "Coincide con el filtro “{title}”", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# people}} que puede que tú conozcas", "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todas", @@ -399,40 +400,40 @@ "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", - "keyboard_shortcuts.back": "volver atrás", - "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", + "keyboard_shortcuts.back": "Volver atrás", + "keyboard_shortcuts.blocked": "Abrir la lista de usuarios bloqueados", "keyboard_shortcuts.boost": "Impulsar publicación", - "keyboard_shortcuts.column": "enfocar un estado en una de las columnas", - "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", + "keyboard_shortcuts.column": "Enfocar columna", + "keyboard_shortcuts.compose": "Enfocar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas", - "keyboard_shortcuts.down": "mover hacia abajo en la lista", + "keyboard_shortcuts.down": "Descender en la lista", "keyboard_shortcuts.enter": "Abrir publicación", "keyboard_shortcuts.favourite": "Marcar como favorita la publicación", "keyboard_shortcuts.favourites": "Abrir lista de favoritos", - "keyboard_shortcuts.federated": "abrir el timeline federado", - "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "abrir el timeline propio", - "keyboard_shortcuts.hotkey": "Tecla caliente", - "keyboard_shortcuts.legend": "para mostrar esta leyenda", - "keyboard_shortcuts.local": "abrir el timeline local", - "keyboard_shortcuts.mention": "para mencionar al autor", - "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", - "keyboard_shortcuts.my_profile": "abrir tu perfil", - "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", - "keyboard_shortcuts.open_media": "para abrir archivos multimedia", + "keyboard_shortcuts.federated": "Abrir cronología federada", + "keyboard_shortcuts.heading": "Atajos de teclado", + "keyboard_shortcuts.home": "Abrir cronología principal", + "keyboard_shortcuts.hotkey": "Tecla de acceso rápido", + "keyboard_shortcuts.legend": "Mostrar esta leyenda", + "keyboard_shortcuts.local": "Abrir cronología local", + "keyboard_shortcuts.mention": "Mencionar al autor", + "keyboard_shortcuts.muted": "Abrir la lista de usuarios silenciados", + "keyboard_shortcuts.my_profile": "Abrir tu perfil", + "keyboard_shortcuts.notifications": "Abrir la columna de notificaciones", + "keyboard_shortcuts.open_media": "Abrir multimedia", "keyboard_shortcuts.pinned": "Abrir la lista de publicaciones fijadas", - "keyboard_shortcuts.profile": "abrir el perfil del autor", + "keyboard_shortcuts.profile": "Abrir perfil del autor", "keyboard_shortcuts.reply": "Responder a la publicación", - "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", - "keyboard_shortcuts.search": "para poner el foco en la búsqueda", - "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW", - "keyboard_shortcuts.start": "abrir la columna \"comenzar\"", - "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", - "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", + "keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento", + "keyboard_shortcuts.search": "Enfocar la barra de búsqueda", + "keyboard_shortcuts.spoilers": "Mostrar/ocultar el campo AC", + "keyboard_shortcuts.start": "Abrir la columna “empezar”", + "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto detrás de AC", + "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar multimedia", "keyboard_shortcuts.toot": "Comenzar una nueva publicación", - "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", - "keyboard_shortcuts.up": "para ir hacia arriba en la lista", + "keyboard_shortcuts.unfocus": "Desenfocar área de redacción/búsqueda", + "keyboard_shortcuts.up": "Ascender en la lista", "lightbox.close": "Cerrar", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", @@ -508,7 +509,7 @@ "notification.favourite": "{name} marcó como favorita tu publicación", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# otro} other {# otros}} marcaron tu publicación como favorita", "notification.follow": "{name} te empezó a seguir", - "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te siguieron", + "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te han seguido", "notification.follow_request": "{name} ha solicitado seguirte", "notification.follow_request.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} han solicitado seguirte", "notification.label.mention": "Mención", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Respuesta privada", "notification.label.reply": "Respuesta", "notification.mention": "Mención", + "notification.mentioned_you": "{name} te mencionó", "notification.moderation-warning.learn_more": "Saber más", "notification.moderation_warning": "Has recibido una advertencia de moderación", "notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la votación:", "notifications.column_settings.push": "Notificaciones push", @@ -586,7 +589,7 @@ "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificaciones", "notifications.mark_as_read": "Marcar todas las notificaciones como leídas", - "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", + "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio, ya que se denegó el permiso", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", "notifications.policy.accept": "Aceptar", @@ -643,7 +646,7 @@ "onboarding.steps.setup_profile.title": "Personaliza tu perfil", "onboarding.steps.share_profile.body": "Dile a tus amigos cómo encontrarte en Mastodon", "onboarding.steps.share_profile.title": "Comparte tu perfil", - "onboarding.tips.2fa": "¿Sabías que? Puedes proteger tu cuenta configurando la autenticación de dos factores en la configuración de su cuenta. Funciona con cualquier aplicación TOTP de su elección, ¡no necesitas número de teléfono!", + "onboarding.tips.2fa": "¿Sabías que? Puedes proteger tu cuenta configurando la autenticación de dos factores en los ajustes de su cuenta. Funciona con cualquier aplicación TOTP que elijas, ¡sin necesidad de número de teléfono!", "onboarding.tips.accounts_from_other_servers": "¿Sabías que? Como Mastodon es descentralizado, algunos perfiles que encuentras están alojados en servidores distintos del tuyo. Y sin embargo, ¡puedes interactuar con ellos! ¡Su servidor corresponde a la segunda mitad de su nombre de usuario!", "onboarding.tips.migration": "¿Sabías que? Si sientes que {domain} no es una gran elección de servidor para ti en el futuro, puedes moverte a otro servidor de Mastodon sin perder a tus seguidores. ¡Incluso puedes alojar tu propio servidor!", "onboarding.tips.verification": "¿Sabías que? Puedes verificar tu cuenta poniendo un enlace a tu perfil de Mastodon en su propio sitio web y añadiendo el sitio web a su perfil. ¡Sin necesidad de comisiones ni documentos!", @@ -799,7 +802,7 @@ "status.media.open": "Click para abrir", "status.media.show": "Click para mostrar", "status.media_hidden": "Contenido multimedia oculto", - "status.mention": "Mencionar", + "status.mention": "Mencionar @{name}", "status.more": "Más", "status.mute": "Silenciar @{name}", "status.mute_conversation": "Silenciar conversación", @@ -818,7 +821,7 @@ "status.replied_to": "Respondió a {name}", "status.reply": "Responder", "status.replyAll": "Responder al hilo", - "status.report": "Reportar", + "status.report": "Reportar @{name}", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", "status.show_less_all": "Mostrar menos para todo", @@ -842,21 +845,21 @@ "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", "trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en los últimos {days, plural, one {días} other {{days} días}}", "trends.trending_now": "Tendencia ahora", - "ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.", + "ui.beforeunload": "Tu borrador se perderá si abandonas Mastodon.", "units.short.billion": "{count} MM", "units.short.million": "{count} M", "units.short.thousand": "{count} K", "upload_area.title": "Arrastra y suelta para subir", "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "Límite de subida de archivos excedido.", - "upload_error.poll": "Subida de archivos no permitida con encuestas.", + "upload_error.poll": "No se permite subir archivos con las encuestas.", "upload_form.audio_description": "Describir para personas con problemas auditivos", "upload_form.description": "Describir para los usuarios con dificultad visual", - "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.", - "upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.", - "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.", - "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.", - "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.", + "upload_form.drag_and_drop.instructions": "Para recoger un archivo adjunto, pulsa la barra espaciadora o la tecla Intro. Mientras arrastras, usa las teclas de flecha para mover el archivo adjunto en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Intro para soltar el archivo adjunto en su nueva posición, o pulsa la tecla Escape para cancelar.", + "upload_form.drag_and_drop.on_drag_cancel": "Arrastre cancelado. El archivo adjunto {item} fue eliminado.", + "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue eliminado.", + "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.", + "upload_form.drag_and_drop.on_drag_start": "Recogidos los archivos adjuntos {item}.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Cambiar miniatura", "upload_form.video_description": "Describir para personas con problemas auditivos o visuales", @@ -870,7 +873,7 @@ "upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Vista previa ({ratio})", - "upload_progress.label": "Subiendo…", + "upload_progress.label": "Subiendo...", "upload_progress.processing": "Procesando…", "username.taken": "Ese nombre de usuario está ocupado. Prueba con otro", "video.close": "Cerrar video", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index b841489338..4391660397 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -56,9 +56,9 @@ "account.no_bio": "Sin biografía.", "account.open_original_page": "Abrir página original", "account.posts": "Publicaciones", - "account.posts_with_replies": "Pub. y respuestas", + "account.posts_with_replies": "Publicaciones y respuestas", "account.report": "Reportar a @{name}", - "account.requested": "Esperando aprobación. Clica para cancelar la solicitud de seguimiento", + "account.requested": "Esperando aprobación. Haz clic para cancelar la solicitud de seguimiento", "account.requested_follow": "{name} ha solicitado seguirte", "account.share": "Compartir el perfil de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}", @@ -71,7 +71,7 @@ "account.unmute": "Dejar de silenciar a @{name}", "account.unmute_notifications_short": "Dejar de silenciar notificaciones", "account.unmute_short": "Dejar de silenciar", - "account_note.placeholder": "Clic para añadir nota", + "account_note.placeholder": "Haz clic para añadir nota", "admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después del registro", "admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después del registro", "admin.dashboard.retention.average": "Media", @@ -81,12 +81,12 @@ "admin.impact_report.instance_followers": "Seguidores que nuestros usuarios perderían", "admin.impact_report.instance_follows": "Seguidores que perderían sus usuarios", "admin.impact_report.title": "Resumen de impacto", - "alert.rate_limited.message": "Por favor, vuelve a intentarlo después de la(s) {retry_time, time, medium}.", + "alert.rate_limited.message": "Por favor, vuelve a intentarlo después de {retry_time, time, medium}.", "alert.rate_limited.title": "Tráfico limitado", "alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.title": "¡Ups!", "alt_text_badge.title": "Texto alternativo", - "announcement.announcement": "Anuncio", + "announcement.announcement": "Comunicación", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", "block_modal.remote_users_caveat": "Le pediremos al servidor {domain} que respete tu decisión. Sin embargo, el cumplimiento no está garantizado, ya que algunos servidores pueden manejar bloqueos de forma distinta. Los mensajes públicos pueden ser todavía visibles para los usuarios que no hayan iniciado sesión.", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "¿Dejar de seguir al usuario?", "content_warning.hide": "Ocultar publicación", "content_warning.show": "Mostrar de todos modos", + "content_warning.show_more": "Mostrar más", "conversation.delete": "Borrar conversación", "conversation.mark_as_read": "Marcar como leído", "conversation.open": "Ver conversación", @@ -205,7 +206,7 @@ "copypaste.copied": "Copiado", "copypaste.copy_to_clipboard": "Copiar al portapapeles", "directory.federated": "Desde el fediverso conocido", - "directory.local": "Solo de {domain}", + "directory.local": "Solo desde {domain}", "directory.new_arrivals": "Recién llegados", "directory.recently_active": "Recientemente activo", "disabled_account_banner.account_settings": "Ajustes de la cuenta", @@ -247,7 +248,7 @@ "emoji_button.food": "Comida y bebida", "emoji_button.label": "Insertar emoji", "emoji_button.nature": "Naturaleza", - "emoji_button.not_found": "No se encontró ningún emoji coincidente", + "emoji_button.not_found": "No se encontró ningún emoji que coincida", "emoji_button.objects": "Objetos", "emoji_button.people": "Personas", "emoji_button.recent": "Usados frecuentemente", @@ -279,7 +280,7 @@ "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", "error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.", - "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.", + "error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, quizás puedas usar Mastodon desde otro navegador o aplicación nativa.", "error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.", "errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles", "errors.unexpected_crash.report_issue": "Informar de un problema/error", @@ -294,7 +295,7 @@ "filter_modal.added.expired_explanation": "Esta categoría de filtro ha caducado, tendrás que cambiar la fecha de caducidad para que se aplique.", "filter_modal.added.expired_title": "¡Filtro caducado!", "filter_modal.added.review_and_configure": "Para revisar y configurar esta categoría de filtros, vaya a {settings_link}.", - "filter_modal.added.review_and_configure_title": "Ajustes de filtro", + "filter_modal.added.review_and_configure_title": "Ajustes de filtros", "filter_modal.added.settings_link": "página de ajustes", "filter_modal.added.short_explanation": "Esta publicación ha sido añadida a la siguiente categoría de filtros: {title}.", "filter_modal.added.title": "¡Filtro añadido!", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar una publicación", - "filter_warning.matches_filter": "Coincide con el filtro “{title}”", + "filter_warning.matches_filter": "Coincide con el filtro “{title}”", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas", "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todas", @@ -316,7 +317,7 @@ "follow_requests.unlocked_explanation": "A pesar de que tu cuenta no es privada, el personal de {domain} ha pensado que quizás deberías revisar manualmente las solicitudes de seguimiento de estas cuentas.", "follow_suggestions.curated_suggestion": "Recomendaciones del equipo", "follow_suggestions.dismiss": "No mostrar de nuevo", - "follow_suggestions.featured_longer": "Escogidos por el equipo de {domain}", + "follow_suggestions.featured_longer": "Sugerencias del equipo de {domain}", "follow_suggestions.friends_of_friends_longer": "Populares entre las personas a las que sigues", "follow_suggestions.hints.featured": "Este perfil ha sido elegido a mano por el equipo de {domain}.", "follow_suggestions.hints.friends_of_friends": "Este perfil es popular entre las personas que sigues.", @@ -343,11 +344,11 @@ "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", - "hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias", + "hashtag.column_settings.select.no_options_message": "No se han encontrado sugerencias", "hashtag.column_settings.select.placeholder": "Introduce etiquetas…", - "hashtag.column_settings.tag_mode.all": "Todos estos", - "hashtag.column_settings.tag_mode.any": "Cualquiera de estos", - "hashtag.column_settings.tag_mode.none": "Ninguno de estos", + "hashtag.column_settings.tag_mode.all": "Todas estas", + "hashtag.column_settings.tag_mode.any": "Cualquiera de estas", + "hashtag.column_settings.tag_mode.none": "Ninguna de estas", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionales en esta columna", "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", @@ -365,12 +366,12 @@ "hints.threads.see_more": "Ver más respuestas en {domain}", "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respuestas", - "home.hide_announcements": "Ocultar anuncios", + "home.hide_announcements": "Ocultar comunicaciones", "home.pending_critical_update.body": "Por favor, ¡actualiza tu servidor Mastodon lo antes posible!", "home.pending_critical_update.link": "Ver actualizaciones", "home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!", - "home.show_announcements": "Mostrar anuncios", - "ignore_notifications_modal.disclaimer": "Mastodon no puede informar a los usuarios que has ignorado sus notificaciones. Ignorar notificaciones no impedirá que se sigan enviando los mensajes.", + "home.show_announcements": "Mostrar comunicaciones", + "ignore_notifications_modal.disclaimer": "Mastodon no puede informar a los usuarios de que has ignorado sus notificaciones. Ignorar notificaciones no impedirá que se sigan enviando los mensajes.", "ignore_notifications_modal.filter_instead": "Filtrar en vez de ignorar", "ignore_notifications_modal.filter_to_act_users": "Aún podrás aceptar, rechazar o reportar usuarios", "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar ayuda a evitar confusiones potenciales", @@ -382,7 +383,7 @@ "ignore_notifications_modal.not_following_title": "¿Ignorar notificaciones de personas a las que no sigues?", "ignore_notifications_modal.private_mentions_title": "¿Ignorar notificaciones de menciones privadas no solicitadas?", "interaction_modal.description.favourite": "Con una cuenta en Mastodon, puedes marcar como favorita esta publicación para que el autor sepa que te gusta, y guardala para más adelante.", - "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu línea temporal de inicio.", + "interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu página de inicio.", "interaction_modal.description.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.", "interaction_modal.description.reply": "Con una cuenta en Mastodon, puedes responder a esta publicación.", "interaction_modal.login.action": "Ir a Inicio", @@ -399,14 +400,14 @@ "intervals.full.days": "{number, plural, one {# día} other {# días}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", - "keyboard_shortcuts.back": "volver atrás", - "keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados", + "keyboard_shortcuts.back": "Navegar hacia atrás", + "keyboard_shortcuts.blocked": "Abrir lista de usuarios bloqueados", "keyboard_shortcuts.boost": "Impulsar", "keyboard_shortcuts.column": "Enfocar columna", - "keyboard_shortcuts.compose": "enfocar el área de texto de redacción", + "keyboard_shortcuts.compose": "Focalizar el área de texto de redacción", "keyboard_shortcuts.description": "Descripción", "keyboard_shortcuts.direct": "para abrir la columna de menciones privadas", - "keyboard_shortcuts.down": "mover hacia abajo en la lista", + "keyboard_shortcuts.down": "Moverse hacia abajo en la lista", "keyboard_shortcuts.enter": "Abrir publicación", "keyboard_shortcuts.favourite": "Marcar como favorita la publicación", "keyboard_shortcuts.favourites": "Abrir lista de favoritos", @@ -416,23 +417,23 @@ "keyboard_shortcuts.hotkey": "Tecla rápida", "keyboard_shortcuts.legend": "Mostrar esta leyenda", "keyboard_shortcuts.local": "Abrir cronología local", - "keyboard_shortcuts.mention": "mencionar al autor", - "keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados", - "keyboard_shortcuts.my_profile": "abrir tu perfil", - "keyboard_shortcuts.notifications": "abrir la columna de notificaciones", - "keyboard_shortcuts.open_media": "para abrir archivos multimedia", + "keyboard_shortcuts.mention": "Mencionar autor", + "keyboard_shortcuts.muted": "Abrir lista de usuarios silenciados", + "keyboard_shortcuts.my_profile": "Abrir tu perfil", + "keyboard_shortcuts.notifications": "Abrir columna de notificaciones", + "keyboard_shortcuts.open_media": "Abrir multimedia", "keyboard_shortcuts.pinned": "Abrir la lista de publicaciones destacadas", - "keyboard_shortcuts.profile": "abrir el perfil del autor", - "keyboard_shortcuts.reply": "para responder", - "keyboard_shortcuts.requests": "abrir la lista de peticiones de seguidores", - "keyboard_shortcuts.search": "para poner el foco en la búsqueda", - "keyboard_shortcuts.spoilers": "para mostrar/ocultar el campo CW", - "keyboard_shortcuts.start": "abrir la columna \"comenzar\"", - "keyboard_shortcuts.toggle_hidden": "mostrar/ocultar texto tras aviso de contenido (CW)", - "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar medios", - "keyboard_shortcuts.toot": "Comienza una nueva publicación", - "keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda", - "keyboard_shortcuts.up": "para ir hacia arriba en la lista", + "keyboard_shortcuts.profile": "Abrir perfil del autor", + "keyboard_shortcuts.reply": "Responder a una publicación", + "keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento", + "keyboard_shortcuts.search": "Focalizar barra de búsqueda", + "keyboard_shortcuts.spoilers": "Mostrar/ocultar el campo de CW", + "keyboard_shortcuts.start": "Abrir la columna \"comenzar\"", + "keyboard_shortcuts.toggle_hidden": "Mostrar/ocultar texto tras aviso de contenido (CW)", + "keyboard_shortcuts.toggle_sensitivity": "Mostrar/ocultar multimedia", + "keyboard_shortcuts.toot": "Comenzar una nueva publicación", + "keyboard_shortcuts.unfocus": "Quitar el foco de la caja de redacción/búsqueda", + "keyboard_shortcuts.up": "Moverse hacia arriba en la lista", "lightbox.close": "Cerrar", "lightbox.next": "Siguiente", "lightbox.previous": "Anterior", @@ -508,7 +509,7 @@ "notification.favourite": "{name} marcó como favorita tu publicación", "notification.favourite.name_and_others_with_link": "{name} y {count, plural, one {# más} other {# más}} marcaron tu publicación como favorita", "notification.follow": "{name} te empezó a seguir", - "notification.follow.name_and_others": "{name} y {count, plural, one {# más} other {# más}} te siguieron", + "notification.follow.name_and_others": "{name} y {count, plural, one {# otro} other {# otros}} te siguieron", "notification.follow_request": "{name} ha solicitado seguirte", "notification.follow_request.name_and_others": "{name} y {count, plural, one {# más} other {# más}} han solicitado seguirte", "notification.label.mention": "Mención", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Respuesta privada", "notification.label.reply": "Respuesta", "notification.mention": "Mención", + "notification.mentioned_you": "{name} te ha mencionado", "notification.moderation-warning.learn_more": "Saber más", "notification.moderation_warning": "Has recibido una advertencia de moderación", "notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Menciones:", "notifications.column_settings.poll": "Resultados de la votación:", "notifications.column_settings.push": "Notificaciones push", @@ -586,7 +589,7 @@ "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificaciones", "notifications.mark_as_read": "Marcar todas las notificaciones como leídas", - "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", + "notifications.permission_denied": "Las notificaciones de escritorio no están disponibles porque se denegó el permiso del navegador previamente", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", "notifications.policy.accept": "Aceptar", @@ -612,11 +615,11 @@ "onboarding.action.back": "Llévame atrás", "onboarding.actions.back": "Llévame atrás", "onboarding.actions.go_to_explore": "Llévame a tendencias", - "onboarding.actions.go_to_home": "Ir a mi inicio", + "onboarding.actions.go_to_home": "Ir a mi página de inicio", "onboarding.compose.template": "¡Hola #Mastodon!", "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar personas a las que seguir, o inténtalo de nuevo más tarde.", - "onboarding.follows.lead": "Tu línea de inicio es la forma principal de experimentar Mastodon. Cuanta más personas sigas, más activa e interesante será. Para empezar, aquí hay algunas sugerencias:", - "onboarding.follows.title": "Personaliza tu línea de inicio", + "onboarding.follows.lead": "Tu página de inicio es la forma principal de experimentar Mastodon. Cuanta más personas sigas, más activa e interesante será. Para empezar, aquí hay algunas sugerencias:", + "onboarding.follows.title": "Personaliza tu página de inicio", "onboarding.profile.discoverable": "Hacer que mi perfil aparezca en búsquedas", "onboarding.profile.discoverable_hint": "Cuando permites que tu perfil aparezca en búsquedas en Mastodon, tus publicaciones podrán aparecer en los resultados de búsqueda y en tendencias, y tu perfil podrá recomendarse a gente con intereses similares a los tuyos.", "onboarding.profile.display_name": "Nombre para mostrar", @@ -636,7 +639,7 @@ "onboarding.start.skip": "¿No necesitas ayuda para empezar?", "onboarding.start.title": "¡Lo has logrado!", "onboarding.steps.follow_people.body": "Seguir personas interesante es de lo que trata Mastodon.", - "onboarding.steps.follow_people.title": "Personaliza tu línea de inicio", + "onboarding.steps.follow_people.title": "Personaliza tu página de inicio", "onboarding.steps.publish_status.body": "Di hola al mundo con texto, fotos, vídeos o encuestas {emoji}", "onboarding.steps.publish_status.title": "Escribe tu primera publicación", "onboarding.steps.setup_profile.body": "Aumenta tus interacciones con un perfil completo.", @@ -675,7 +678,7 @@ "recommended": "Recomendado", "refresh": "Actualizar", "regeneration_indicator.label": "Cargando…", - "regeneration_indicator.sublabel": "¡Tu historia de inicio se está preparando!", + "regeneration_indicator.sublabel": "¡Tu página de inicio se está preparando!", "relative_time.days": "{number} d", "relative_time.full.days": "hace {number, plural, one {# día} other {# días}}", "relative_time.full.hours": "hace {number, plural, one {# hora} other {# horas}}", @@ -729,7 +732,7 @@ "report.thanks.title": "¿No quieres esto?", "report.thanks.title_actionable": "Gracias por informar, estudiaremos esto.", "report.unfollow": "Dejar de seguir a @{name}", - "report.unfollow_explanation": "Estás siguiendo esta cuenta. Para no ver sus publicaciones en tu muro de inicio, deja de seguirla.", + "report.unfollow_explanation": "Estás siguiendo esta cuenta. Para dejar de ver sus publicaciones en tu página de inicio, deja de seguirla.", "report_notification.attached_statuses": "{count, plural, one {{count} publicación} other {{count} publicaciones}} adjunta(s)", "report_notification.categories.legal": "Legal", "report_notification.categories.legal_sentence": "contenido ilegal", @@ -799,7 +802,7 @@ "status.media.open": "Pulsa para abrir", "status.media.show": "Pulsa para mostrar", "status.media_hidden": "Contenido multimedia oculto", - "status.mention": "Mencionar", + "status.mention": "Mencionar a @{name}", "status.more": "Más", "status.mute": "Silenciar @{name}", "status.mute_conversation": "Silenciar conversación", @@ -818,7 +821,7 @@ "status.replied_to": "Respondió a {name}", "status.reply": "Responder", "status.replyAll": "Responder al hilo", - "status.report": "Reportar", + "status.report": "Reportar a @{name}", "status.sensitive_warning": "Contenido sensible", "status.share": "Compartir", "status.show_less_all": "Mostrar menos para todo", @@ -847,7 +850,7 @@ "units.short.million": "{count} M", "units.short.thousand": "{count} K", "upload_area.title": "Arrastra y suelta para subir", - "upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_button.label": "Añadir imágenes, un fichero de vídeo o de audio", "upload_error.limit": "Límite de subida de archivos excedido.", "upload_error.poll": "No se permite la subida de archivos con encuestas.", "upload_form.audio_description": "Describir para personas con problemas auditivos", @@ -870,7 +873,7 @@ "upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.", "upload_modal.preparing_ocr": "Preparando OCR…", "upload_modal.preview_label": "Vista previa ({ratio})", - "upload_progress.label": "Subiendo…", + "upload_progress.label": "Subiendo...", "upload_progress.processing": "Procesando…", "username.taken": "Ese nombre de usuario ya está en uso. Prueba con otro", "video.close": "Cerrar video", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 69df3c4140..20f1e6d79f 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -12,7 +12,7 @@ "about.powered_by": "Hajutatud sotsiaalmeedia, mille taga on {mastodon}", "about.rules": "Serveri reeglid", "account.account_note_header": "Isiklik märge", - "account.add_or_remove_from_list": "Lisa või Eemalda nimekirjadest", + "account.add_or_remove_from_list": "Lisa või Eemalda loeteludest", "account.badges.bot": "Robot", "account.badges.group": "Grupp", "account.block": "Blokeeri @{name}", @@ -52,7 +52,7 @@ "account.mute_notifications_short": "Vaigista teavitused", "account.mute_short": "Vaigista", "account.muted": "Vaigistatud", - "account.mutual": "Ühine", + "account.mutual": "Jälgite", "account.no_bio": "Kirjeldust pole lisatud.", "account.open_original_page": "Ava algne leht", "account.posts": "Postitused", @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Kiiruspiirang", "alert.unexpected.message": "Tekkis ootamatu viga.", "alert.unexpected.title": "Oih!", + "alt_text_badge.title": "Alternatiivtekst", "announcement.announcement": "Teadaanne", "attachments_list.unprocessed": "(töötlemata)", "audio.hide": "Peida audio", @@ -127,7 +128,7 @@ "column.firehose": "Laiv lõimed", "column.follow_requests": "Jälgimistaotlused", "column.home": "Kodu", - "column.lists": "Nimekirjad", + "column.lists": "Loetelud", "column.mutes": "Vaigistatud kasutajad", "column.notifications": "Teated", "column.pins": "Kinnitatud postitused", @@ -145,7 +146,7 @@ "community.column_settings.remote_only": "Ainult kaug", "compose.language.change": "Muuda keelt", "compose.language.search": "Otsi keeli...", - "compose.published.body": "Postitus avaldatud.", + "compose.published.body": "Postitus tehtud.", "compose.published.open": "Ava", "compose.saved.body": "Postitus salvestatud.", "compose_form.direct_message_warning_learn_more": "Vaata lisa", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Ei jälgi enam kasutajat?", "content_warning.hide": "Peida postitus", "content_warning.show": "Näita ikkagi", + "content_warning.show_more": "Näita rohkem", "conversation.delete": "Kustuta vestlus", "conversation.mark_as_read": "Märgi loetuks", "conversation.open": "Vaata vestlust", @@ -221,6 +223,8 @@ "domain_block_modal.they_cant_follow": "Sellest serverist ei saa keegi sind jälgida.", "domain_block_modal.they_wont_know": "Nad ei tea, et nad on blokeeritud.", "domain_block_modal.title": "Blokeerida domeen?", + "domain_block_modal.you_will_lose_num_followers": "Sult kaob {followersCount, plural, one {{followersCountDisplay} jälgija} other {{followersCountDisplay} jälgijat}} ja {followingCount, plural, one {{followingCountDisplay} inimene} other {{followingCountDisplay} inimest}}, keda sa ise jälgid.", + "domain_block_modal.you_will_lose_relationships": "Sa kaotad kõik oma jälgijad ja inimesed, kes sind jälgivad sellest serverist.", "domain_block_modal.you_wont_see_posts": "Sa ei näe selle serveri kasutajate postitusi ega teavitusi.", "domain_pill.activitypub_lets_connect": "See võimaldab sul ühenduda inimestega ja nendega suhelda mitte ainult Mastodonis, vaid ka teistes suhtlusrakendustes.", "domain_pill.activitypub_like_language": "ActivityPub on nagu keel, mida Mastodon räägib teiste suhtlusvõrgustikega.", @@ -269,7 +273,7 @@ "empty_column.hashtag": "Selle sildi all ei ole ühtegi postitust.", "empty_column.home": "Su koduajajoon on tühi. Jälgi rohkemaid inimesi, et seda täita {suggestions}", "empty_column.list": "Siin loetelus pole veel midagi. Kui loetelu liikmed teevad uusi postitusi, näed neid siin.", - "empty_column.lists": "Pole veel ühtegi nimekirja. Kui lood mõne, näed neid siin.", + "empty_column.lists": "Pole veel ühtegi loetelu. Kui lood mõne, näed neid siin.", "empty_column.mutes": "Sa pole veel ühtegi kasutajat vaigistanud.", "empty_column.notification_requests": "Kõik tühi! Siin pole mitte midagi. Kui saad uusi teavitusi, ilmuvad need siin vastavalt sinu seadistustele.", "empty_column.notifications": "Ei ole veel teateid. Kui keegi suhtleb sinuga, näed seda siin.", @@ -302,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Kasuta olemasolevat kategooriat või loo uus", "filter_modal.select_filter.title": "Filtreeri seda postitust", "filter_modal.title.status": "Postituse filtreerimine", - "filter_warning.matches_filter": "Sobib filtriga “{title}”", + "filter_warning.matches_filter": "Sobib filtriga “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Mitte üheltki inimeselt} one {Ühelt inimeselt} other {# inimeselt}}, keda võid teada", "filtered_notifications_banner.title": "Filtreeritud teavitused", "firehose.all": "Kõik", @@ -321,7 +325,7 @@ "follow_suggestions.hints.most_interactions": "See kasutajaprofiil on viimasel ajal {domain} saanud palju tähelepanu.", "follow_suggestions.hints.similar_to_recently_followed": "See kasutajaprofiil sarnaneb neile, mida oled hiljuti jälgima asunud.", "follow_suggestions.personalized_suggestion": "Isikupärastatud soovitus", - "follow_suggestions.popular_suggestion": "Popuplaarne soovitus", + "follow_suggestions.popular_suggestion": "Populaarne soovitus", "follow_suggestions.popular_suggestion_longer": "Populaarne kohas {domain}", "follow_suggestions.similar_to_recently_followed_longer": "Sarnane profiilile, mida hiljuti jälgima hakkasid", "follow_suggestions.view_all": "Vaata kõiki", @@ -397,7 +401,7 @@ "intervals.full.hours": "{number, plural, one {# tund} other {# tundi}}", "intervals.full.minutes": "{number, plural, one {# minut} other {# minutit}}", "keyboard_shortcuts.back": "Liigu tagasi", - "keyboard_shortcuts.blocked": "avamaks blokeeritud kasutajate nimistut", + "keyboard_shortcuts.blocked": "Ava blokeeritud kasutajate nimistu", "keyboard_shortcuts.boost": "Jaga", "keyboard_shortcuts.column": "Fookus veerule", "keyboard_shortcuts.compose": "Fookus teksti koostamise alale", @@ -433,25 +437,27 @@ "lightbox.close": "Sulge", "lightbox.next": "Järgmine", "lightbox.previous": "Eelmine", + "lightbox.zoom_in": "Näita algsuuruses", + "lightbox.zoom_out": "Näita kõik", "limited_account_hint.action": "Näita profilli sellegipoolest", "limited_account_hint.title": "See profiil on peidetud {domain} moderaatorite poolt.", "link_preview.author": "{name} poolt", "link_preview.more_from_author": "Veel kasutajalt {name}", "link_preview.shares": "{count, plural, one {{counter} postitus} other {{counter} postitust}}", - "lists.account.add": "Lisa nimekirja", - "lists.account.remove": "Eemalda nimekirjast", - "lists.delete": "Kustuta nimekiri", - "lists.edit": "Muuda nimekirja", + "lists.account.add": "Lisa loetellu", + "lists.account.remove": "Eemalda loetelust", + "lists.delete": "Kustuta loetelu", + "lists.edit": "Muuda loetelu", "lists.edit.submit": "Pealkirja muutmine", "lists.exclusive": "Peida koduvaatest need postitused", - "lists.new.create": "Lisa nimekiri", - "lists.new.title_placeholder": "Uue nimekirja pealkiri", + "lists.new.create": "Lisa loetelu", + "lists.new.title_placeholder": "Uue loetelu pealkiri", "lists.replies_policy.followed": "Igalt jälgitud kasutajalt", - "lists.replies_policy.list": "Listi liikmetelt", + "lists.replies_policy.list": "Loetelu liikmetelt", "lists.replies_policy.none": "Mitte kelleltki", "lists.replies_policy.title": "Näita vastuseid nendele:", "lists.search": "Otsi enda jälgitavate inimeste hulgast", - "lists.subheading": "Sinu nimekirjad", + "lists.subheading": "Sinu loetelud", "load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}", "loading_indicator.label": "Laadimine…", "media_gallery.hide": "Peida", @@ -481,7 +487,7 @@ "navigation_bar.follow_requests": "Jälgimistaotlused", "navigation_bar.followed_tags": "Jälgitavad märksõnad", "navigation_bar.follows_and_followers": "Jälgitavad ja jälgijad", - "navigation_bar.lists": "Nimekirjad", + "navigation_bar.lists": "Loetelud", "navigation_bar.logout": "Logi välja", "navigation_bar.moderation": "Modereerimine", "navigation_bar.mutes": "Vaigistatud kasutajad", @@ -503,7 +509,7 @@ "notification.favourite": "{name} märkis su postituse lemmikuks", "notification.favourite.name_and_others_with_link": "{name} ja {count, plural, one {# veel} other {# teist}} märkis su postituse lemmikuks", "notification.follow": "{name} alustas su jälgimist", - "notification.follow.name_and_others": "{name} ja {count, plural, one {# veel} other {# teist}} hakkas sind jälgima", + "notification.follow.name_and_others": "{name} ja veel {count, plural, one {# kasutaja} other {# kasutajat}} hakkas sind jälgima", "notification.follow_request": "{name} soovib sind jälgida", "notification.follow_request.name_and_others": "{name} ja {count, plural, one {# veel} other {# teist}} taotles sinu jälgimist", "notification.label.mention": "Mainimine", @@ -511,6 +517,7 @@ "notification.label.private_reply": "Privaatne vastus", "notification.label.reply": "Vastus", "notification.mention": "Mainimine", + "notification.mentioned_you": "{name} mainis sind", "notification.moderation-warning.learn_more": "Vaata lisa", "notification.moderation_warning": "Said modereerimise hoiatuse", "notification.moderation_warning.action_delete_statuses": "Mõni su postitus on eemaldatud.", @@ -561,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Kiirfiltri riba", "notifications.column_settings.follow": "Uued jälgijad:", "notifications.column_settings.follow_request": "Uued jälgimistaotlused:", + "notifications.column_settings.group": "Grupp", "notifications.column_settings.mention": "Mainimised:", "notifications.column_settings.poll": "Küsitluse tulemused:", "notifications.column_settings.push": "Push teated", @@ -847,6 +855,11 @@ "upload_error.poll": "Küsitlustes pole faili üleslaadimine lubatud.", "upload_form.audio_description": "Kirjelda kuulmispuudega inimeste jaoks", "upload_form.description": "Kirjelda vaegnägijatele", + "upload_form.drag_and_drop.instructions": "Vajuta tühikut või enterit, et tõsta manus. Lohistamise ajal kasuta nooleklahve, et manust liigutada teatud suunas. Vajuta tühikut või enterit uuesti, et paigutada manus oma uuele kohale, või escape tühistamiseks.", + "upload_form.drag_and_drop.on_drag_cancel": "Lohistamine tühistati. Manus {item} on asetatud.", + "upload_form.drag_and_drop.on_drag_end": "Manus {item} on asetatud.", + "upload_form.drag_and_drop.on_drag_over": "Manus {item} on liigutatud.", + "upload_form.drag_and_drop.on_drag_start": "Tõstetud on manus {item}.", "upload_form.edit": "Muuda", "upload_form.thumbnail": "Muuda pisipilti", "upload_form.video_description": "Kirjelda kuulmis- või nägemispuudega inimeste jaoks", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 63449e9342..464468d0a6 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Erabiltzailea jarraitzeari utzi?", "content_warning.hide": "Tuta ezkutatu", "content_warning.show": "Erakutsi hala ere", + "content_warning.show_more": "Erakutsi gehiago", "conversation.delete": "Ezabatu elkarrizketa", "conversation.mark_as_read": "Markatu irakurrita bezala", "conversation.open": "Ikusi elkarrizketa", @@ -268,7 +269,7 @@ "empty_column.follow_requests": "Ez duzu jarraitzeko eskaerarik oraindik. Baten bat jasotzen duzunean, hemen agertuko da.", "empty_column.followed_tags": "Oraindik ez duzu traolik jarraitzen. Egiterakoan, hemen agertuko dira.", "empty_column.hashtag": "Ez dago ezer traola honetan oraindik.", - "empty_column.home": "Zure hasierako denbora-lerroa hutsik dago! Ikusi {public} edo erabili bilaketa lehen urratsak eman eta beste batzuk aurkitzeko.", + "empty_column.home": "Zure hasierako denbora-lerroa hutsik dago! Jarraitu jende gehiago betetzeko.", "empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek bidalketa berriak argitaratzean, hemen agertuko dira.", "empty_column.lists": "Ez duzu zerrendarik oraindik. Baten bat sortzen duzunean hemen agertuko da.", "empty_column.mutes": "Ez duzu erabiltzailerik mututu oraindik.", @@ -303,7 +304,7 @@ "filter_modal.select_filter.subtitle": "Hautatu lehendik dagoen kategoria bat edo sortu berria", "filter_modal.select_filter.title": "Iragazi bidalketa hau", "filter_modal.title.status": "Iragazi bidalketa bat", - "filter_warning.matches_filter": "“{title}” iragazkiarekin bat dator", + "filter_warning.matches_filter": "“{title}” iragazkiarekin bat dator", "filtered_notifications_banner.pending_requests": "Ezagutu dezakezun {count, plural, =0 {inoren} one {pertsona baten} other {# pertsonen}}", "filtered_notifications_banner.title": "Iragazitako jakinarazpenak", "firehose.all": "Guztiak", @@ -504,7 +505,6 @@ "notification.favourite": "{name}(e)k zure bidalketa gogoko du", "notification.favourite.name_and_others_with_link": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} zure bidalketa gogoko dute", "notification.follow": "{name}(e)k jarraitzen dizu", - "notification.follow.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} jarraitu dizute", "notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du", "notification.follow_request.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} zu jarraitzeko eskaera egin dute", "notification.label.mention": "Aipamena", @@ -597,7 +597,7 @@ "notifications.policy.filter_not_following_title": "Jarraitzen ez duzun jendea", "notifications.policy.filter_private_mentions_hint": "Iragazita, baldin eta zure aipamenaren erantzuna bada edo bidaltzailea jarraitzen baduzu", "notifications.policy.filter_private_mentions_title": "Eskatu gabeko aipamen pribatuak", - "notifications.policy.title": "Kudeatu honen jakinarazpaenak…", + "notifications.policy.title": "Kudeatu honen jakinarazpenak…", "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak", "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.", "notifications_permission_banner.title": "Ez galdu ezer inoiz", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index d510c2a6a4..f01db61e73 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -145,7 +145,7 @@ "community.column_settings.media_only": "فقط رسانه", "community.column_settings.remote_only": "تنها دوردست", "compose.language.change": "تغییر زبان", - "compose.language.search": "جست‌وجوی زبان‌ها…", + "compose.language.search": "جست‌وجوی زبان‌ها...", "compose.published.body": "فرسته منتشر شد.", "compose.published.open": "گشودن", "compose.saved.body": "فرسته ذخیره شد.", @@ -196,7 +196,8 @@ "confirmations.unfollow.message": "مطمئنید که می‌خواهید به پی‌گیری از {name} پایان دهید؟", "confirmations.unfollow.title": "ناپی‌گیری کاربر؟", "content_warning.hide": "نهفتن فرسته", - "content_warning.show": "نمایش به هر روی", + "content_warning.show": "در هر صورت نشان داده شود", + "content_warning.show_more": "نمایش بیش‌تر", "conversation.delete": "حذف گفتگو", "conversation.mark_as_read": "علامت‌گذاری به عنوان خوانده شده", "conversation.open": "دیدن گفتگو", @@ -222,6 +223,7 @@ "domain_block_modal.they_cant_follow": "هیچ‌کسی از این کارساز نمی‌تواند پیتان بگیرد.", "domain_block_modal.they_wont_know": "نخواهند دانست که مسدود شده‌اند.", "domain_block_modal.title": "انسداد دامنه؟", + "domain_block_modal.you_will_lose_num_followers": "شما {followersCount, plural, one {{followersCountDisplay} پی‌گیرنده} other {{followersCountDisplay} پی‌گیرنده}} و {followingCount, plural, one {{followingCountDisplay} فرد پی‌گرفته‌شده} other {{followingCountDisplay} فرد پی‌گرفته‌شده}} را از دست خواهید داد.", "domain_block_modal.you_will_lose_relationships": "شما تمام پیگیرکنندگان و افرادی که از این کارساز پیگیری می‌کنید را از دست خواهید داد.", "domain_block_modal.you_wont_see_posts": "فرسته‌ها یا آگاهی‌ها از کاربران روی این کارساز را نخواهید دید.", "domain_pill.activitypub_lets_connect": "این به شما اجازه می‌دهد تا نه تنها در ماستودون، بلکه در برنامه‌های اجتماعی مختلف نیز با افراد ارتباط برقرار کرده و تعامل داشته باشید.", @@ -269,10 +271,11 @@ "empty_column.follow_requests": "شما هنوز هیچ درخواست پی‌گیری‌ای ندارید. هنگامی که چنین درخواستی بگیرید، این‌جا نشان داده خواهد شد.", "empty_column.followed_tags": "شما هیچ برچسبی را پی‌نگرفتید. هنگامی که برچسبی را پی‌گیری کنید اینجا نمایان می‌شوند.", "empty_column.hashtag": "هنوز هیچ چیزی در این برچسب نیست.", - "empty_column.home": "خط زمانی خانگیتان خالی است! برای پر کردنش، افراد بیشتری را پی بگیرید. {suggestions}", + "empty_column.home": "خط زمانی خانگیتان خالی است! برای پر کردنش، افراد بیشتری را پی بگیرید.", "empty_column.list": "هنوز چیزی در این سیاهه نیست. هنگامی که اعضایش فرسته‌های جدیدی بفرستند، این‌جا ظاهر خواهند شد.", "empty_column.lists": "هنوز هیچ سیاهه‌ای ندارید. هنگامی که یکی بسازید، این‌جا نشان داده خواهد شد.", "empty_column.mutes": "هنوز هیچ کاربری را خموش نکرده‌اید.", + "empty_column.notification_requests": "همه چیز تمیز است! هیچ‌چیزی این‌جا نیست. هنگامی که آگاهی‌های جدیدی دریافت کنید، بسته به تنظیماتتان این‌جا ظاهر خواهند شد.", "empty_column.notifications": "هنوز هیچ آگاهی‌آی ندارید. هنگامی که دیگران با شما برهم‌کنش داشته باشند،‌این‌حا خواهید دیدش.", "empty_column.public": "این‌جا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی‌گیری کنید تا این‌جا پُر شود", "error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.", @@ -303,7 +306,7 @@ "filter_modal.select_filter.subtitle": "استفاده از یک دستهً موجود یا ایجاد دسته‌ای جدید", "filter_modal.select_filter.title": "پالایش این فرسته", "filter_modal.title.status": "پالایش یک فرسته", - "filter_warning.matches_filter": "مطابق با پالایهٔ «{title}»", + "filter_warning.matches_filter": "مطابق با پالایهٔ «{title}»", "filtered_notifications_banner.pending_requests": "از {count, plural, =0 {هیچ‌کسی} one {فردی} other {# نفر}} که ممکن است بشناسید", "filtered_notifications_banner.title": "آگاهی‌های پالوده", "firehose.all": "همه", @@ -368,11 +371,17 @@ "home.pending_critical_update.link": "دیدن به‌روز رسانی‌ها", "home.pending_critical_update.title": "به‌روز رسانی امنیتی بحرانی موجود است!", "home.show_announcements": "نمایش اعلامیه‌ها", + "ignore_notifications_modal.disclaimer": "ماستودون نمی تواند به کاربران اطلاع دهد که اعلان های آنها را نادیده گرفته اید. نادیده گرفتن اعلان ها مانع از ارسال خود پیام ها نمی شود.", + "ignore_notifications_modal.filter_instead": "به جایش پالوده شود", + "ignore_notifications_modal.filter_to_act_users": "همچنان می‌توانید کاربران را بپذیرید، رد کنید یا گزارش دهید", + "ignore_notifications_modal.filter_to_avoid_confusion": "فیلتر کردن به جلوگیری از سردرگمی احتمالی کمک می کند", + "ignore_notifications_modal.filter_to_review_separately": "می توانید اعلان های فیلتر شده را به طور جداگانه بررسی کنید", "ignore_notifications_modal.ignore": "چشم‌پوشی از آگاهی‌ها", "ignore_notifications_modal.limited_accounts_title": "چشم‌پوشی از آگاهی‌های حساب‌های نظارت شده؟", "ignore_notifications_modal.new_accounts_title": "چشم‌پوشی از آگاهی‌های حساب‌های جدید؟", "ignore_notifications_modal.not_followers_title": "چشم‌پوشی از آگاهی‌های افرادی که پیتان نمی‌گیرند؟", "ignore_notifications_modal.not_following_title": "چشم‌پوشی از آگاهی‌های افرادی که پیشان نمی‌گیرید؟", + "ignore_notifications_modal.private_mentions_title": "چشم‌پوشی از نام‌بری‌های خصوصی ناخواسته؟", "interaction_modal.description.favourite": "با حسابی روی ماستودون می‌توانید این فرسته را برگزیده تا نگارنده بداند قدردانش هستید و برای آینده ذخیره‌اش می‌کنید.", "interaction_modal.description.follow": "با حسابی روی ماستودون می‌توانید {name} را برای دریافت فرسته‌هایش در خوراک خانگیتان دنبال کنید.", "interaction_modal.description.reblog": "با حسابی روی ماستودون می‌توانید این فرسته را با پی‌گیران خودتان هم‌رسانی کنید.", @@ -383,7 +392,7 @@ "interaction_modal.on_another_server": "روی کارسازی دیگر", "interaction_modal.on_this_server": "روی این کارساز", "interaction_modal.sign_in": "شما در این کارساز وارد نشده‌اید. حسابتان کجا میزبانی شده؟", - "interaction_modal.sign_in_hint": "نکته: میزبانتان، پایگاه وبیست که رویش ثبت‌نام کرده‌اید. اگر به خاطر نمی‌آورید، به رایانامهٔ خوش‌آمد در صندوق ورودیتان بنگرید. همچنین می‌توانید نام کاربری کاملتان (چون ‪@Mastodon@mastodon.social‬) را وارد کنید!", + "interaction_modal.sign_in_hint": "نکته: میزبانتان، پایگاه وبیست که رویش ثبت‌نام کرده‌اید. اگر به خاطر نمی‌آورید، به رایانامهٔ خوش‌آمد در صندوق ورودیتان بنگرید. همچنین می‌توانید نام کاربری کاملتان را وارد کنید! (مانند ‪@Mastodon@mastodon.social‬)", "interaction_modal.title.favourite": "فرسته‌های برگزیدهٔ {name}", "interaction_modal.title.follow": "پیگیری {name}", "interaction_modal.title.reblog": "تقویت فرستهٔ {name}", @@ -428,6 +437,8 @@ "lightbox.close": "بستن", "lightbox.next": "بعدی", "lightbox.previous": "قبلی", + "lightbox.zoom_in": "بزرگ‌نمایی به اندازهٔ اصلی", + "lightbox.zoom_out": "بزرگ نمایی برای برازش", "limited_account_hint.action": "به هر روی نمایه نشان داده شود", "limited_account_hint.title": "این نمایه از سوی ناظم‌های {domain} پنهان شده.", "link_preview.author": "از {name}", @@ -455,6 +466,7 @@ "mute_modal.hide_options": "گزینه‌های نهفتن", "mute_modal.indefinite": "تا وقتی ناخموشش کنم", "mute_modal.show_options": "نمایش گزینه‌ها", + "mute_modal.they_can_mention_and_follow": "می‌توانند به شما اشاره کرده و پیتان بگیرند، ولی نخواهید دیدشان.", "mute_modal.they_wont_know": "نخواهند دانست که خموش شده‌اند.", "mute_modal.title": "خموشی کاربر؟", "mute_modal.you_wont_see_mentions": "فرسته‌هایی که به او اشاره کرده‌اند را نخواهید دید.", @@ -488,13 +500,16 @@ "navigation_bar.security": "امنیت", "not_signed_in_indicator.not_signed_in": "برای دسترسی به این منبع باید وارد شوید.", "notification.admin.report": "{name}، {target} را گزارش داد", + "notification.admin.report_account": "{name} {count, plural, one {یک پست} other {پست}} از {target} برای {category} را گزارش داد", + "notification.admin.report_account_other": "{name} {count, plural, one {یک پست} other {پست}} از {target} را گزارش داد", + "notification.admin.report_statuses": "{name} {target} برای {category} را گزارش داد", "notification.admin.report_statuses_other": "{name}، {target} را گزارش داد", "notification.admin.sign_up": "{name} ثبت نام کرد", "notification.admin.sign_up.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} ثبت‌نام کردند", "notification.favourite": "{name} فرسته‌تان را برگزید", "notification.favourite.name_and_others_with_link": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} فرسته‌تان را برگزیدند", "notification.follow": "‫{name}‬ پی‌گیرتان شد", - "notification.follow.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} پیتان گرفتند", + "notification.follow.name_and_others": "{name} و {count, plural, other {#}} نفر دیگر پیتان گرفتند", "notification.follow_request": "{name} درخواست پی‌گیریتان را داد", "notification.follow_request.name_and_others": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} درخواست پی‌گیریتان را دادند", "notification.label.mention": "اشاره", @@ -502,6 +517,7 @@ "notification.label.private_reply": "پاسخ خصوصی", "notification.label.reply": "پاسخ", "notification.mention": "اشاره", + "notification.mentioned_you": "‫{name}‬ از شما نام برد", "notification.moderation-warning.learn_more": "بیشتر بدانید", "notification.moderation_warning": "هشداری مدیریتی گرفته‌اید", "notification.moderation_warning.action_delete_statuses": "برخی از فرسته‌هایتان برداشته شدند.", @@ -516,15 +532,26 @@ "notification.reblog": "‫{name}‬ فرسته‌تان را تقویت کرد", "notification.reblog.name_and_others_with_link": "{name} و {count, plural, one {# نفر دیگر} other {# نفر دیگر}} فرسته‌تان را تقویت کردند", "notification.relationships_severance_event": "قطع ارتباط با {name}", + "notification.relationships_severance_event.account_suspension": "یک سرپرست از {from} {target} را به حالت تعلیق درآورده است، به این معنی که دیگر نمی‌توانید به‌روزرسانی‌ها را از آنها دریافت کنید یا با آنها تعامل داشته باشید.", + "notification.relationships_severance_event.domain_block": "یک سرپرست از {from} {target} را مسدود کرده است، از جمله {followersCount} از دنبال‌کنندگان شما و {followingCount, plural, one {حساب} other {حساب‌}} که دنبال می‌کنید.", "notification.relationships_severance_event.learn_more": "بیشتر بدانید", + "notification.relationships_severance_event.user_domain_block": "شما {target} را مسدود کرده‌اید، {followersCount} از دنبال‌کنندگان خود و {followingCount, plural, one {حساب} other {حساب}} که دنبال می‌کنید را حذف کرده‌اید.", "notification.status": "{name} چیزی فرستاد", "notification.update": "{name} فرسته‌ای را ویرایش کرد", "notification_requests.accept": "پذیرش", + "notification_requests.accept_multiple": "{count, plural, one {پذیرش درخواست…} other {پذیرش درخواست‌ها…}}", + "notification_requests.confirm_accept_multiple.button": "پذیرش {count, plural,one {درخواست} other {درخواست‌ها}}", + "notification_requests.confirm_accept_multiple.message": "در حال پذیرش {count, plural,one {یک}other {#}} درخواست آگاهی هستید. مطمئنید که می‌خواهید ادامه دهید؟", "notification_requests.confirm_accept_multiple.title": "پذیرش درخواست‌های آگاهی؟", + "notification_requests.confirm_dismiss_multiple.button": "رد {count, plural,one {درخواست} other {درخواست‌ها}}", + "notification_requests.confirm_dismiss_multiple.message": "شما در شرف رد کردن {count, plural, one {یک درخواست آگاهی} other {درخواست آگاهی}} هستید. دیگر نمی توانید به راحتی به {count, plural, one {آن} other {آن‌ها}} دسترسی پیدا کنید. آیا مطمئن هستید که می خواهید ادامه دهید؟", "notification_requests.confirm_dismiss_multiple.title": "رد کردن درخواست‌های آگاهی؟", "notification_requests.dismiss": "دورانداختن", + "notification_requests.dismiss_multiple": "{count, plural, one {دورانداختن درخواست…} other {دورانداختن درخواست‌ها…}}", "notification_requests.edit_selection": "ویرایش", "notification_requests.exit_selection": "انجام شد", + "notification_requests.explainer_for_limited_account": "اعلان‌های این حساب فیلتر شده‌اند زیرا حساب توسط یک ناظر محدود شده است.", + "notification_requests.explainer_for_limited_remote_account": "اعلان‌های این حساب فیلتر شده‌اند زیرا حساب یا سرور آن توسط ناظر محدود شده است.", "notification_requests.maximize": "بیشنه", "notification_requests.minimize_banner": "کمینه کردن بیرق آگاهی‌های پالوده", "notification_requests.notifications_from": "آگاهی‌ها از {name}", @@ -541,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "نوار پالایش سریع", "notifications.column_settings.follow": "پی‌گیرندگان جدید:", "notifications.column_settings.follow_request": "درخواست‌های جدید پی‌گیری:", + "notifications.column_settings.group": "گروه", "notifications.column_settings.mention": "اشاره‌ها:", "notifications.column_settings.poll": "نتایج نظرسنجی:", "notifications.column_settings.push": "آگاهی‌های ارسالی", @@ -554,7 +582,7 @@ "notifications.filter.all": "همه", "notifications.filter.boosts": "تقویت‌ها", "notifications.filter.favourites": "برگزیده‌ها", - "notifications.filter.follows": "پی‌گرفتگان", + "notifications.filter.follows": "پی‌گرفتن‌ها", "notifications.filter.mentions": "اشاره‌ها", "notifications.filter.polls": "نتایج نظرسنجی", "notifications.filter.statuses": "به‌روز رسانی‌ها از کسانی که پی‌گیرشانید", @@ -572,10 +600,14 @@ "notifications.policy.filter_hint": "فرستادن به صندوق آگاهی‌های پالوده", "notifications.policy.filter_limited_accounts_hint": "محدود شده به دست ناظم‌های کارساز", "notifications.policy.filter_limited_accounts_title": "حساب‌های مدیریت شده", + "notifications.policy.filter_new_accounts.hint": "ساخته شده در {days, plural, one {یک} other {#}} روز اخیر", "notifications.policy.filter_new_accounts_title": "حساب‌های جدید", + "notifications.policy.filter_not_followers_hint": "از جمله کسانی که کم‌تر از {days, plural, one {یک} other {#}} روز است پی‌تان می‌گیرند", "notifications.policy.filter_not_followers_title": "کسانی که شما را دنبال میکنند", - "notifications.policy.filter_not_following_hint": "", + "notifications.policy.filter_not_following_hint": "تا به صورت دستی تأییدشان کنید", "notifications.policy.filter_not_following_title": "کسانی که پی نمی‌گیرید", + "notifications.policy.filter_private_mentions_hint": "پالوده مگر این که به نام‌بری خودتان پاسخ داده یا پی‌گیر فرستنده باشید", + "notifications.policy.filter_private_mentions_title": "نام‌بری‌های خصوصی ناخواسته", "notifications.policy.title": "مدیریت آگاهی‌ها از…", "notifications_permission_banner.enable": "به کار انداختن آگاهی‌های میزکار", "notifications_permission_banner.how_to_control": "برای دریافت آگاهی‌ها هنگام باز نبودن ماستودون، آگاهی‌های میزکار را به کار بیندازید. پس از به کار افتادنشان می‌توانید گونه‌های دقیق برهم‌کنش‌هایی که آگاهی‌های میزکار تولید می‌کنند را از {icon} بالا واپایید.", @@ -586,13 +618,13 @@ "onboarding.actions.go_to_home": "Go to your home feed", "onboarding.compose.template": "سلام #ماستودون!", "onboarding.follows.empty": "متأسفانه هم‌اکنون نتیجه‌ای قابل نمایش نیست. می‌توانید استفاده از جست‌وجو یا مرور صفحهٔ کاوش را برای یافتن افرادی برای پی‌گیری آزموده یا دوباره تلاش کنید.", - "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.follows.lead": "فید خانگی شما اولین راه برای تجربه ماستودون است. هرچه افراد بیشتری را دنبال کنید، فعال تر و جالب تر خواهد بود. برای شروع، در اینجا چند پیشنهاد وجود دارد:", + "onboarding.follows.title": "فید خانه خود را شخصی کنید", "onboarding.profile.discoverable": "نمایه خود را قابل نمایش کنید", "onboarding.profile.discoverable_hint": "خواسته‌اید روی ماستودون کشف شوید. ممکن است فرسته‌هایتان در نتیحهٔ جست‌وجوها و فرسته‌های داغ ظاهر شده و نمایه‌تان به افرادی با علایق مشابهتان پیشنهاد شود.", "onboarding.profile.display_name": "نام نمایشی", "onboarding.profile.display_name_hint": "نام کامل یا نام باحالتان…", - "onboarding.profile.lead": "همواره می‌توانید این مورد را در تنظیمات که گزینه‌ّای شخصی سازی بیش‌تری نیز دارد کامل کنید.", + "onboarding.profile.lead": "همواره می‌توانید این مورد را در تنظیمات که گزینه‌های شخصی سازی بیش‌تری نیز دارد کامل کنید.", "onboarding.profile.note": "درباره شما", "onboarding.profile.note_hint": "می‌توانید افراد دیگر را @نام‌بردن یا #برچسب بزنید…", "onboarding.profile.save_and_continue": "ذخیره کن و ادامه بده", @@ -603,17 +635,17 @@ "onboarding.share.message": "من {username} روی #ماستودون هستم! مرا در {url} پی‌بگیرید", "onboarding.share.next_steps": "گام‌های ممکن بعدی:", "onboarding.share.title": "هم‌رسانی نمایه‌تان", - "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.lead": "شما اکنون بخشی از ماستودون هستید، یک پلتفرم رسانه اجتماعی منحصر به فرد و غیرمتمرکز که در آن شما - نه یک الگوریتم - تجربه خود را مدیریت می کنید. بیایید شما را در این مرز اجتماعی جدید شروع کنیم:", + "onboarding.start.skip": "برای شروع به کمک نیاز ندارید؟", "onboarding.start.title": "انجامش دادید!", - "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.follow_people.body": "دنبال کردن افراد جالب هدف ماستودون است.", + "onboarding.steps.follow_people.title": "فید خانه خود را شخصی کنید", + "onboarding.steps.publish_status.body": "با متن، عکس، ویدیو یا نظرسنجی به دنیا سلام کنید {emoji}", "onboarding.steps.publish_status.title": "نخستین فرسته‌تان را بنویسید", - "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", + "onboarding.steps.setup_profile.body": "با داشتن یک نمایه جامع، تعاملات خود را تقویت کنید.", + "onboarding.steps.setup_profile.title": "پروفایل خود را شخصی سازی کنید", + "onboarding.steps.share_profile.body": "به دوستان خود اطلاع دهید که چگونه شما را در ماستودون پیدا کنند", + "onboarding.steps.share_profile.title": "نمایه ماستودون خود را به اشتراک بگذارید", "onboarding.tips.2fa": "آیا می‌دانستید؟ می‌توانید با پریایی هویت‌سنجی دو عاملی در تنظیمات حساب، حسابتان را ایمن کنید؟ این قابلیت با هر نرم‌افزار TOTP دلخواه کار کرده و نیازی به شماره تلفن ندارد!", "onboarding.tips.accounts_from_other_servers": "آیا می‌دانستید؟ از آن‌جا که ماستودون نامتمرکز است، برخی نمایه‌ها که به آن‌ها برمی‌خورید روی کارسازهایی متفاوت از شما میزبانی می‌شوند و باز هم می‌توانید بدون مشکل با آن‌ها تعامل داشته باشید! کارسازشان در نیمه دوم نام کاربریشان است!", "onboarding.tips.migration": "آیا می‌دانستید؟ اگر احساس می‌کنید {domain} انتخاب کارساز خوبی برای آینده‌تان نیست، می‌توانید بدون از دست دادن پیگیرهایتان به کارساز ماستودون دیگری مهاجرت کنید. حتا می‌توانید کارساز خودتان را میزبانی کنید!", @@ -737,8 +769,11 @@ "server_banner.about_active_users": "افرادی که در ۳۰ روز گذشته از این کارساز استفاده کرده‌اند (کاربران فعّال ماهانه)", "server_banner.active_users": "کاربر فعّال", "server_banner.administered_by": "به مدیریت:", + "server_banner.is_one_of_many": "{domain} یکی از بسیاری از سرورهای مستقل ماستودون است که می توانید از آن برای شرکت در fediverse استفاده کنید.", "server_banner.server_stats": "آمار کارساز:", "sign_in_banner.create_account": "ایجاد حساب", + "sign_in_banner.follow_anyone": "هر کسی را در سراسر فدیورس دنبال کنید و همه را به ترتیب زمانی ببینید. هیچ الگوریتم، تبلیغات یا طعمه کلیکی در چشم نیست.", + "sign_in_banner.mastodon_is": "ماستودون بهترین راه برای پیگیری اتفاقات است.", "sign_in_banner.sign_in": "ورود", "sign_in_banner.sso_redirect": "ورود یا ثبت نام", "status.admin_account": "گشودن واسط مدیریت برای ‎@{name}", @@ -757,6 +792,7 @@ "status.edit": "ویرایش", "status.edited": "آخرین ویرایش {date}", "status.edited_x_times": "{count, plural, one {{count} مرتبه} other {{count} مرتبه}} ویرایش شد", + "status.embed": "گرفتن کد تعبیه", "status.favourite": "برگزیده‌", "status.favourites": "{count, plural, one {برگزیده} other {برگزیده}}", "status.filter": "پالایش این فرسته", @@ -789,7 +825,7 @@ "status.sensitive_warning": "محتوای حساس", "status.share": "هم‌رسانی", "status.show_less_all": "نمایش کمتر همه", - "status.show_more_all": "نمایش بیشتر همه", + "status.show_more_all": "نمایش بیش‌تر همه", "status.show_original": "نمایش اصلی", "status.title.with_attachments": "{user} {attachmentCount, plural, one {یک پیوست} other {{attachmentCount} پیوست}} فرستاد", "status.translate": "ترجمه", @@ -819,6 +855,11 @@ "upload_error.poll": "بارگذاری پرونده در نظرسنجی‌ها مجاز نیست.", "upload_form.audio_description": "برای ناشنوایان توصیفش کنید", "upload_form.description": "برای کم‌بینایان توصیفش کنید", + "upload_form.drag_and_drop.instructions": "برای دریافت پیوست رسانه، space را فشار دهید یا وارد کنید. در حین کشیدن، از کلیدهای جهت دار برای حرکت دادن پیوست رسانه در هر جهت معین استفاده کنید. برای رها کردن ضمیمه رسانه در موقعیت جدید خود، مجدداً space یا enter را فشار دهید، یا برای لغو، escape را فشار دهید.", + "upload_form.drag_and_drop.on_drag_cancel": "کشیدن لغو شد. پیوست رسانه {item} حذف شد.", + "upload_form.drag_and_drop.on_drag_end": "پیوست رسانه {item} حذف شد.", + "upload_form.drag_and_drop.on_drag_over": "پیوست رسانه {item} منتقل شد.", + "upload_form.drag_and_drop.on_drag_start": "پیوست رسانه {item} برداشته شد.", "upload_form.edit": "ویرایش", "upload_form.thumbnail": "تغییر بندانگشتی", "upload_form.video_description": "برای کم‌بینایان یا ناشنوایان توصیفش کنید", @@ -832,7 +873,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/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 2e4cd661d5..45b1a1afc8 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -12,7 +12,7 @@ "about.powered_by": "Hajautetun sosiaalisen median tarjoaa {mastodon}", "about.rules": "Palvelimen säännöt", "account.account_note_header": "Henkilökohtainen muistiinpano", - "account.add_or_remove_from_list": "Lisää tai poista listoilta", + "account.add_or_remove_from_list": "Lisää tai poista listoista", "account.badges.bot": "Botti", "account.badges.group": "Ryhmä", "account.block": "Estä @{name}", @@ -35,10 +35,10 @@ "account.followers": "Seuraajat", "account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.", "account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajaa}}", - "account.following": "Seuratut", - "account.following_counter": "{count, plural, one {{counter} seurattu} other {{counter} seurattua}}", + "account.following": "Seurattavat", + "account.following_counter": "{count, plural, one {{counter} seurattava} other {{counter} seurattavaa}}", "account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.", - "account.go_to_profile": "Mene profiiliin", + "account.go_to_profile": "Siirry profiiliin", "account.hide_reblogs": "Piilota käyttäjän @{name} tehostukset", "account.in_memoriam": "Muistoissamme.", "account.joined_short": "Liittynyt", @@ -110,7 +110,7 @@ "bundle_column_error.routing.body": "Pyydettyä sivua ei löytynyt. Oletko varma, että osoitepalkin URL-osoite on oikein?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Sulje", - "bundle_modal_error.message": "Jotain meni pieleen komponenttia ladattaessa.", + "bundle_modal_error.message": "Jotain meni pieleen tätä komponenttia ladattaessa.", "bundle_modal_error.retry": "Yritä uudelleen", "closed_registrations.other_server_instructions": "Koska Mastodon on hajautettu, voit luoda tilin toiselle palvelimelle ja olla silti vuorovaikutuksessa tämän kanssa.", "closed_registrations_modal.description": "Tilin luonti palvelimelle {domain} ei tällä hetkellä ole mahdollista, mutta ota huomioon, ettei Mastodonin käyttö edellytä juuri kyseisen palvelimen tiliä.", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Lopetetaanko käyttäjän seuraaminen?", "content_warning.hide": "Piilota julkaisu", "content_warning.show": "Näytä kuitenkin", + "content_warning.show_more": "Näytä lisää", "conversation.delete": "Poista keskustelu", "conversation.mark_as_read": "Merkitse luetuksi", "conversation.open": "Näytä keskustelu", @@ -222,8 +223,8 @@ "domain_block_modal.they_cant_follow": "Kukaan tältä palvelimelta ei voi seurata sinua.", "domain_block_modal.they_wont_know": "Hän ei saa tietää tulleensa estetyksi.", "domain_block_modal.title": "Estetäänkö verkkotunnus?", - "domain_block_modal.you_will_lose_num_followers": "Menetät {followersCount, plural, one {{followersCountDisplay} seuraajasi} other {{followersCountDisplay} seuraajaasi}} ja {followingCount, plural, one {{followingCountDisplay} seurattusi} other {{followingCountDisplay} seurattuasi}}.", - "domain_block_modal.you_will_lose_relationships": "Menetät kaikki tämän palvelimen seuraajasi ja seurattusi.", + "domain_block_modal.you_will_lose_num_followers": "Menetät {followersCount, plural, one {{followersCountDisplay} seuraajasi} other {{followersCountDisplay} seuraajaasi}} ja {followingCount, plural, one {{followingCountDisplay} seurattavasi} other {{followingCountDisplay} seurattavaasi}}.", + "domain_block_modal.you_will_lose_relationships": "Menetät kaikki tämän palvelimen seuraajasi ja seurattavasi.", "domain_block_modal.you_wont_see_posts": "Et enää näe julkaisuja etkä ilmoituksia tämän palvelimen käyttäjiltä.", "domain_pill.activitypub_lets_connect": "Sen avulla voit muodostaa yhteyden ja olla vuorovaikutuksessa ihmisten kanssa, ei vain Mastodonissa vaan myös muissa sosiaalisissa sovelluksissa.", "domain_pill.activitypub_like_language": "ActivityPub on kuin kieli, jota Mastodon puhuu muiden sosiaalisten verkostojen kanssa.", @@ -271,7 +272,7 @@ "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 löydy vielä sisältöä.", "empty_column.home": "Kotiaikajanasi on tyhjä! Seuraa useampia käyttäjiä, niin näet enemmän sisältöä.", - "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.list": "Tässä listassa 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.notification_requests": "Olet ajan tasalla! Täällä ei ole mitään uutta kerrottavaa. Kun saat uusia ilmoituksia, ne näkyvät täällä asetustesi mukaisesti.", @@ -305,7 +306,7 @@ "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", - "filter_warning.matches_filter": "Vastaa suodatinta ”{title}”", + "filter_warning.matches_filter": "Vastaa suodatinta ”{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Ei keneltäkään, jonka} one {Yhdeltä käyttäjältä, jonka} other {# käyttäjältä, jotka}} saatat tuntea", "filtered_notifications_banner.title": "Suodatetut ilmoitukset", "firehose.all": "Kaikki", @@ -329,7 +330,7 @@ "follow_suggestions.similar_to_recently_followed_longer": "Samankaltainen kuin äskettäin seuraamasi profiilit", "follow_suggestions.view_all": "Näytä kaikki", "follow_suggestions.who_to_follow": "Ehdotuksia seurattavaksi", - "followed_tags": "Seuratut aihetunnisteet", + "followed_tags": "Seurattavat aihetunnisteet", "footer.about": "Tietoja", "footer.directory": "Profiilihakemisto", "footer.get_app": "Hanki sovellus", @@ -356,10 +357,10 @@ "hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen", "hashtags.and_other": "…ja {count, plural, other {# lisää}}", "hints.profiles.followers_may_be_missing": "Tämän profiilin seuraajia saattaa puuttua.", - "hints.profiles.follows_may_be_missing": "Tämän profiilin seurattuja saattaa puuttua.", + "hints.profiles.follows_may_be_missing": "Tämän profiilin seurattavia saattaa puuttua.", "hints.profiles.posts_may_be_missing": "Tämän profiilin julkaisuja saattaa puuttua.", "hints.profiles.see_more_followers": "Näytä lisää seuraajia palvelimella {domain}", - "hints.profiles.see_more_follows": "Näytä lisää seurattuja palvelimella {domain}", + "hints.profiles.see_more_follows": "Näytä lisää seurattavia palvelimella {domain}", "hints.profiles.see_more_posts": "Näytä lisää julkaisuja palvelimella {domain}", "hints.threads.replies_may_be_missing": "Muiden palvelinten vastauksia saattaa puuttua.", "hints.threads.see_more": "Näytä lisää vastauksia palvelimella {domain}", @@ -436,22 +437,22 @@ "lightbox.close": "Sulje", "lightbox.next": "Seuraava", "lightbox.previous": "Edellinen", - "lightbox.zoom_in": "Zoomaa todelliseen kokoon", - "lightbox.zoom_out": "Zoomaa mahtumaan", + "lightbox.zoom_in": "Näytä todellisen kokoisena", + "lightbox.zoom_out": "Näytä sovitettuna", "limited_account_hint.action": "Näytä profiili joka tapauksessa", "limited_account_hint.title": "Palvelimen {domain} moderaattorit ovat piilottaneet tämän profiilin.", "link_preview.author": "Tehnyt {name}", "link_preview.more_from_author": "Lisää tekijältä {name}", "link_preview.shares": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}", - "lists.account.add": "Lisää listalle", - "lists.account.remove": "Poista listalta", + "lists.account.add": "Lisää listaan", + "lists.account.remove": "Poista listasta", "lists.delete": "Poista lista", "lists.edit": "Muokkaa listaa", "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": "Jokaiselle seuratulle käyttäjälle", + "lists.replies_policy.followed": "Jokaiselle seurattavalle käyttäjälle", "lists.replies_policy.list": "Listan jäsenille", "lists.replies_policy.none": "Ei kellekään", "lists.replies_policy.title": "Näytä vastaukset:", @@ -484,8 +485,8 @@ "navigation_bar.favourites": "Suosikit", "navigation_bar.filters": "Mykistetyt sanat", "navigation_bar.follow_requests": "Seurantapyynnöt", - "navigation_bar.followed_tags": "Seuratut aihetunnisteet", - "navigation_bar.follows_and_followers": "Seuratut ja seuraajat", + "navigation_bar.followed_tags": "Seurattavat aihetunnisteet", + "navigation_bar.follows_and_followers": "Seurattavat ja seuraajat", "navigation_bar.lists": "Listat", "navigation_bar.logout": "Kirjaudu ulos", "navigation_bar.moderation": "Moderointi", @@ -508,7 +509,7 @@ "notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa", "notification.favourite.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} lisäsivät julkaisusi suosikkeihinsa", "notification.follow": "{name} seurasi sinua", - "notification.follow.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} seurasivat sinua", + "notification.follow.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} seurasivat sinua", "notification.follow_request": "{name} on pyytänyt lupaa seurata sinua", "notification.follow_request.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} pyysivät saada seurata sinua", "notification.label.mention": "Maininta", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Yksityinen vastaus", "notification.label.reply": "Vastaus", "notification.mention": "Maininta", + "notification.mentioned_you": "{name} mainitsi sinut", "notification.moderation-warning.learn_more": "Lue lisää", "notification.moderation_warning": "Olet saanut moderointivaroituksen", "notification.moderation_warning.action_delete_statuses": "Julkaisujasi on poistettu.", @@ -531,9 +533,9 @@ "notification.reblog.name_and_others_with_link": "{name} ja {count, plural, one {# muu} other {# muuta}} tehostivat julkaisuasi", "notification.relationships_severance_event": "Menetettiin yhteydet palvelimeen {name}", "notification.relationships_severance_event.account_suspension": "Palvelimen {from} ylläpitäjä on jäädyttänyt palvelimen {target} vuorovaikutuksen. Enää et voi siis vastaanottaa päivityksiä heiltä tai olla yhteyksissä heidän kanssaan.", - "notification.relationships_severance_event.domain_block": "Palvelimen {from} ylläpitäjä on estänyt palvelimen {target} vuorovaikutuksen – mukaan lukien {followersCount} seuraajistasi ja {followingCount, plural, one {# seuratuistasi} other {# seuratuistasi}}.", + "notification.relationships_severance_event.domain_block": "Palvelimen {from} ylläpitäjä on estänyt palvelimen {target} vuorovaikutuksen – mukaan lukien {followersCount} seuraajistasi ja {followingCount, plural, one {# seurattavistasi} other {# seurattavistasi}}.", "notification.relationships_severance_event.learn_more": "Lue lisää", - "notification.relationships_severance_event.user_domain_block": "Olet estänyt verkkotunnuksen {target}, mikä poisti {followersCount} seuraajistasi ja {followingCount, plural, one {# seuratuistasi} other {# seuratuistasi}}.", + "notification.relationships_severance_event.user_domain_block": "Olet estänyt palvelimen {target}, mikä poisti {followersCount} seuraajistasi ja {followingCount, plural, one {# seurattavistasi} other {# seurattavistasi}}.", "notification.status": "{name} julkaisi juuri", "notification.update": "{name} muokkasi julkaisua", "notification_requests.accept": "Hyväksy", @@ -566,8 +568,9 @@ "notifications.column_settings.filter_bar.category": "Pikasuodatuspalkki", "notifications.column_settings.follow": "Uudet seuraajat:", "notifications.column_settings.follow_request": "Uudet seurantapyynnöt:", + "notifications.column_settings.group": "Ryhmitä", "notifications.column_settings.mention": "Maininnat:", - "notifications.column_settings.poll": "Äänestyksen tulokset:", + "notifications.column_settings.poll": "Äänestystulokset:", "notifications.column_settings.push": "Puskuilmoitukset", "notifications.column_settings.reblog": "Tehostukset:", "notifications.column_settings.show": "Näytä sarakkeessa", @@ -581,7 +584,7 @@ "notifications.filter.favourites": "Suosikit", "notifications.filter.follows": "Seuraamiset", "notifications.filter.mentions": "Maininnat", - "notifications.filter.polls": "Äänestyksen tulokset", + "notifications.filter.polls": "Äänestystulokset", "notifications.filter.statuses": "Päivitykset seuraamiltasi käyttäjiltä", "notifications.grant_permission": "Myönnä käyttöoikeus.", "notifications.group": "{count} ilmoitusta", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 40292c2691..7b8a5e8f6b 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -34,7 +34,9 @@ "account.follow_back": "Sundan pabalik", "account.followers": "Mga tagasunod", "account.followers.empty": "Wala pang sumusunod sa tagagamit na ito.", + "account.followers_counter": "{count, plural, one {{counter} tagasunod} other {{counter} tagasunod}}", "account.following": "Sinusundan", + "account.following_counter": "{count, plural, one {{counter} sinusundan} other {{counter} sinusundan}}", "account.follows.empty": "Wala pang sinusundan ang tagagamit na ito.", "account.go_to_profile": "Pumunta sa profile", "account.hide_reblogs": "Itago ang mga pagpapalakas mula sa {name}", @@ -46,17 +48,31 @@ "account.media": "Medya", "account.mention": "Banggitin si @{name}", "account.moved_to": "Ipinahihiwatig ni {name} na ang kanilang bagong account ngayon ay:", + "account.mute": "I-mute si @{name}", + "account.mute_notifications_short": "I-mute ang mga abiso", + "account.mute_short": "I-mute", + "account.muted": "Naka-mute", + "account.mutual": "Ka-mutual", + "account.no_bio": "Walang nakalaan na paglalarawan.", "account.open_original_page": "Buksan ang pinagmulang pahina", + "account.posts": "Mga post", "account.report": "I-ulat si/ang @{name}", + "account.requested": "Naghihintay ng pag-apruba. I-click upang ikansela ang hiling sa pagsunod", "account.requested_follow": "Hinihiling ni {name} na sundan ka", + "account.share": "Ibahagi ang profile ni @{name}", "account.show_reblogs": "Ipakita ang mga pagpapalakas mula sa/kay {name}", "account.unendorse": "Huwag itampok sa profile", + "account.unfollow": "Huwag nang sundan", "admin.dashboard.retention.cohort_size": "Mga bagong tagagamit", "alert.rate_limited.message": "Mangyaring subukan muli pagkatapos ng {retry_time, time, medium}.", "audio.hide": "Itago ang tunog", "block_modal.show_less": "Magpakita ng mas kaunti", "block_modal.show_more": "Magpakita ng higit pa", + "block_modal.they_cant_mention": "Hindi sila makakabanggit sa iyo o sundan ka.", + "block_modal.they_will_know": "Makita nila na hinarangan sila.", "block_modal.title": "Harangan ang tagagamit?", + "block_modal.you_wont_see_mentions": "Hindi ka makakakita ng mga post na nagbanggit sa kanila.", + "boost_modal.combo": "Maari mong pindutin ang {combo} upang laktawan ito sa susunod na oras", "bundle_column_error.error.title": "Naku!", "bundle_column_error.network.body": "Nagkaroon ng kamalian habang sinusubukang i-karga ang pahinang ito. Maaaring dahil ito sa pansamantalang problema ng iyong koneksyon sa internet o ang server na ito.", "bundle_column_error.network.title": "Kamaliang network", @@ -107,6 +123,8 @@ "compose_form.direct_message_warning_learn_more": "Matuto pa", "compose_form.encryption_warning": "Ang mga post sa Mastodon ay hindi naka-encrypt nang dulo-dulo. Huwag magbahagi ng anumang sensitibong impormasyon sa Mastodon.", "compose_form.hashtag_warning": "Hindi maililista ang post na ito sa anumang hashtag dahil hindi ito nakapubliko. Mga nakapublikong post lamang ang mahahanap ayon sa hashtag.", + "compose_form.lock_disclaimer": "Hindi {locked} ang iyong account. Maaaring susundan ka ng sinuman upang tingnan ang iyong mga post na para sa mga tagasunod lamang.", + "compose_form.lock_disclaimer.lock": "nakakandado", "compose_form.placeholder": "Anong nangyari?", "compose_form.poll.duration": "Tagal ng botohan", "compose_form.poll.multiple": "Maraming pagpipilian", @@ -122,7 +140,9 @@ "confirmations.discard_edit_media.confirm": "Ipagpaliban", "confirmations.edit.confirm": "Baguhin", "confirmations.reply.confirm": "Tumugon", + "content_warning.show_more": "Magpakita ng higit pa", "conversation.mark_as_read": "Markahan bilang nabasa na", + "conversation.open": "Tingnan ang pag-uusap", "copy_icon_button.copied": "Sinipi sa clipboard", "copypaste.copied": "Sinipi", "copypaste.copy_to_clipboard": "I-sipi sa clipboard", @@ -139,7 +159,10 @@ "dismissable_banner.explore_tags": "Ito ang mga sumisikat na mga hashtag sa iba't ibang bahagi ng social web ngayon. Ang mga hashtag ginagamit ng mas maraming mga iba't ibang tao ay tinataasan ng antas.", "dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.", "domain_block_modal.block": "Harangan ang serbiro", + "domain_block_modal.they_wont_know": "Hindi nila malalaman na hinarang sila.", "domain_block_modal.title": "Harangan ang domain?", + "domain_block_modal.you_will_lose_relationships": "Mawawala ang lahat ng mga tagasunod at mga taong sinusindan mo mula sa serbirong ito.", + "domain_block_modal.you_wont_see_posts": "Hindi mo makikita ang mga post o mga abiso mula sa mga tagagamit sa serbirong ito.", "domain_pill.server": "Serbiro", "embed.instructions": "I-embed ang post na ito sa iyong pook-sapot sa pamamagitan ng pagsipi ng kodigo sa ilalim.", "embed.preview": "Ito ang magiging itsura:", @@ -176,17 +199,21 @@ "empty_column.home": "Walang laman ang timeline ng tahanan mo! Sumunod sa marami pang tao para mapunan ito.", "empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.", "empty_column.lists": "Wala ka pang mga listahan. Kapag gumawa ka ng isa, makikita yun dito.", + "empty_column.notification_requests": "Malinis na lahat! Walang anuman dito. Kapag nakatanggap ka ng mga bagong abiso, makikita sila dito na batay sa iyong mga setting.", + "errors.unexpected_crash.report_issue": "Iulat ang isyu", "explore.search_results": "Mga resulta ng paghahanap", "explore.suggested_follows": "Mga tao", "explore.title": "Tuklasin", "explore.trending_links": "Mga balita", "filter_modal.select_filter.search": "Hanapin o gumawa", + "filter_warning.matches_filter": "Tinutugma ang pangsala \"{title}\"", "firehose.all": "Lahat", "firehose.local": "Itong serbiro", "firehose.remote": "Ibang mga serbiro", "follow_request.authorize": "Tanggapin", "follow_request.reject": "Tanggihan", "follow_suggestions.dismiss": "Huwag nang ipakita muli", + "follow_suggestions.popular_suggestion": "Sikat na mungkahi", "follow_suggestions.popular_suggestion_longer": "Sikat sa {domain}", "follow_suggestions.view_all": "Tingnan lahat", "follow_suggestions.who_to_follow": "Sinong maaaring sundan", @@ -196,6 +223,7 @@ "generic.saved": "Nakaimbak", "hashtag.column_header.tag_mode.all": "at {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", + "hashtag.column_settings.select.no_options_message": "Walang mungkahing nakita", "hashtag.column_settings.tag_mode.all": "Lahat ng nandito", "hashtag.column_settings.tag_mode.any": "Ilan dito", "hashtag.column_settings.tag_mode.none": "Wala dito", @@ -223,11 +251,14 @@ "lists.account.add": "Idagdag sa talaan", "lists.account.remove": "Tanggalin mula sa talaan", "lists.delete": "Burahin ang listahan", + "lists.edit.submit": "Baguhin ang pamagat", "lists.new.create": "Idagdag sa talaan", "lists.new.title_placeholder": "Bagong pangalan ng talaan", + "lists.replies_policy.none": "Walang simuman", "lists.replies_policy.title": "Ipakita ang mga tugon sa:", "lists.subheading": "Iyong mga talaan", "loading_indicator.label": "Kumakarga…", + "media_gallery.hide": "Itago", "mute_modal.hide_from_notifications": "Itago mula sa mga abiso", "navigation_bar.about": "Tungkol dito", "navigation_bar.blocks": "Nakaharang na mga tagagamit", @@ -241,24 +272,37 @@ "navigation_bar.public_timeline": "Pinagsamang timeline", "navigation_bar.search": "Maghanap", "notification.admin.report": "Iniulat ni {name} si {target}", + "notification.admin.report_statuses_other": "Iniulat ni {name} si {target}", "notification.follow": "Sinundan ka ni {name}", + "notification.follow.name_and_others": "Sinundan ka ng/nina {name} at {count, plural, one {# iba pa} other {# na iba pa}}", "notification.follow_request": "Hinihiling ni {name} na sundan ka", + "notification.label.private_mention": "Palihim na banggit", + "notification.mentioned_you": "Binanggit ka ni {name}", + "notification.moderation-warning.learn_more": "Matuto nang higit pa", "notification.moderation_warning": "Mayroong kang natanggap na babala sa pagtitimpi", "notification.relationships_severance_event.learn_more": "Matuto nang higit pa", "notification_requests.accept": "Tanggapin", + "notification_requests.maximize": "Palakihin", "notification_requests.notifications_from": "Mga abiso mula kay/sa {name}", "notifications.clear": "Burahin mga abiso", + "notifications.clear_title": "Linisin ang mga abiso?", "notifications.column_settings.admin.report": "Mga bagong ulat:", "notifications.column_settings.alert": "Mga abiso sa Desktop", "notifications.column_settings.favourite": "Mga paborito:", "notifications.column_settings.follow": "Mga bagong tagasunod:", + "notifications.column_settings.group": "Pangkat", "notifications.column_settings.poll": "Resulta ng botohan:", "notifications.column_settings.unread_notifications.category": "Hindi Nabasang mga Abiso", "notifications.column_settings.update": "Mga pagbago:", "notifications.filter.all": "Lahat", + "notifications.filter.boosts": "Mga pagpalakas", "notifications.filter.favourites": "Mga paborito", + "notifications.filter.follows": "Mga sinusundan", + "notifications.filter.mentions": "Mga pagbanggit", "notifications.filter.polls": "Resulta ng botohan", "notifications.mark_as_read": "Markahan lahat ng abiso bilang nabasa na", + "notifications.policy.accept": "Tanggapin", + "notifications.policy.accept_hint": "Ipakita sa mga abiso", "notifications.policy.filter_not_followers_title": "Mga taong hindi ka susundan", "notifications.policy.filter_not_following_title": "Mga taong hindi mo sinusundan", "onboarding.action.back": "Ibalik mo ako", @@ -275,6 +319,10 @@ "privacy.private.long": "Mga tagasunod mo lamang", "privacy.private.short": "Mga tagasunod", "privacy.public.long": "Sinumang nasa loob at labas ng Mastodon", + "privacy.public.short": "Pampubliko", + "privacy.unlisted.short": "Hindi nakalista", + "privacy_policy.last_updated": "Huling nabago noong {date}", + "recommended": "Inirekomenda", "regeneration_indicator.label": "Kumakarga…", "relative_time.days": "{number}a", "relative_time.full.days": "{number, plural, one {# araw} other {# na araw}} ang nakalipas", @@ -286,6 +334,7 @@ "relative_time.just_now": "ngayon", "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", + "relative_time.today": "ngayon", "reply_indicator.cancel": "Ipagpaliban", "report.block": "Harangan", "report.categories.other": "Iba pa", @@ -293,9 +342,11 @@ "report.category.subtitle": "Piliin ang pinakamahusay na tugma", "report.category.title": "Sabihin mo sa amin kung anong nangyari sa {type} na ito", "report.close": "Tapos na", + "report.comment.title": "Mayroon pa bang dapat naming malaman?", "report.next": "Sunod", "report.placeholder": "Mga Karagdagang Puna", "report.reasons.dislike": "Hindi ko gusto ito", + "report.reasons.legal": "Labag ito sa batas", "report.reasons.violation": "Lumalabag ito sa mga panuntunan ng serbiro", "report.reasons.violation_description": "Alam mo na lumalabag ito sa mga partikular na panuntunan", "report.rules.title": "Aling mga patakaran ang nilabag?", @@ -305,8 +356,12 @@ "report.thanks.title": "Ayaw mo bang makita ito?", "report.thanks.title_actionable": "Salamat sa pag-uulat, titingnan namin ito.", "report_notification.categories.other": "Iba pa", + "report_notification.categories.other_sentence": "iba pa", "report_notification.categories.violation": "Paglabag sa patakaran", + "report_notification.categories.violation_sentence": "paglabag sa patakaran", "report_notification.open": "Buksan ang ulat", + "search.placeholder": "Maghanap", + "search.quick_action.go_to_account": "Pumunta sa profile {x}", "search.quick_action.open_url": "Buksan ang URL sa Mastodon", "search.search_or_paste": "Maghanap o ilagay ang URL", "search_popout.full_text_search_disabled_message": "Hindi magagamit sa {domain}.", @@ -342,5 +397,8 @@ "time_remaining.days": "{number, plural, one {# araw} other {# na araw}} ang natitira", "time_remaining.hours": "{number, plural, one {# oras} other {# na oras}} ang natitira", "time_remaining.minutes": "{number, plural, one {# minuto} other {# na minuto}} ang natitira", - "time_remaining.seconds": "{number, plural, one {# segundo} other {# na segundo}} ang natitira" + "time_remaining.seconds": "{number, plural, one {# segundo} other {# na segundo}} ang natitira", + "upload_modal.apply": "Ilapat", + "upload_modal.applying": "Nilalapat…", + "upload_modal.choose_image": "Pumili ng larawan" } diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index c7e752d378..f1170d21ec 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Gevst at fylgja brúkara?", "content_warning.hide": "Fjal post", "content_warning.show": "Vís kortini", + "content_warning.show_more": "Vís meiri", "conversation.delete": "Strika samrøðu", "conversation.mark_as_read": "Merk sum lisið", "conversation.open": "Vís samrøðu", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan", "filter_modal.select_filter.title": "Filtrera hendan postin", "filter_modal.title.status": "Filtrera ein post", - "filter_warning.matches_filter": "Samsvarar við filtrið “{title}”", + "filter_warning.matches_filter": "Samsvarar við filtrið “{title}”", "filtered_notifications_banner.pending_requests": "Frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú kanska kennir", "filtered_notifications_banner.title": "Filtreraðar fráboðanir", "firehose.all": "Allar", @@ -508,7 +509,7 @@ "notification.favourite": "{name} dámdi postin hjá tær", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} yndisfrámerktu postin hjá tær", "notification.follow": "{name} fylgdi tær", - "notification.follow.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} fylgdu tær", + "notification.follow.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} fylgdu tær", "notification.follow_request": "{name} biður um at fylgja tær", "notification.follow_request.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} hava biðið um at fylgja tær", "notification.label.mention": "Umrøða", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Privat svar", "notification.label.reply": "Svara", "notification.mention": "Umrøð", + "notification.mentioned_you": "{name} nevndi teg", "notification.moderation-warning.learn_more": "Lær meira", "notification.moderation_warning": "Tú hevur móttikið eina umsjónarávaring", "notification.moderation_warning.action_delete_statuses": "Onkrir av tínum postum eru strikaðir.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Skjótfilturbjálki", "notifications.column_settings.follow": "Nýggir fylgjarar:", "notifications.column_settings.follow_request": "Nýggjar umbønir um at fylgja:", + "notifications.column_settings.group": "Bólkur", "notifications.column_settings.mention": "Umrøður:", "notifications.column_settings.poll": "Úrslit frá atkvøðugreiðslu:", "notifications.column_settings.push": "Trýstifráboðanir", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index bdceb9bd30..ae84d2b61e 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -1,6 +1,6 @@ { "about.blocks": "Serveurs modérés", - "about.contact": "Contact:", + "about.contact": "Contact :", "about.disclaimer": "Mastodon est un logiciel open-source gratuit et une marque déposée de Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Raison non disponible", "about.domain_blocks.preamble": "Mastodon vous permet généralement de visualiser le contenu et d'interagir avec des comptes de n'importe quel serveur dans le fediverse. Voici les exceptions qui ont été faites sur ce serveur en particulier.", @@ -31,7 +31,7 @@ "account.featured_tags.last_status_never": "Aucune publication", "account.featured_tags.title": "Hashtags inclus de {name}", "account.follow": "Suivre", - "account.follow_back": "S'abonner en retour", + "account.follow_back": "Suivre en retour", "account.followers": "abonné·e·s", "account.followers.empty": "Personne ne suit ce compte pour l'instant.", "account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}", @@ -85,18 +85,18 @@ "alert.rate_limited.title": "Débit limité", "alert.unexpected.message": "Une erreur inattendue s’est produite.", "alert.unexpected.title": "Oups!", - "alt_text_badge.title": "Texte Alt", + "alt_text_badge.title": "Texte alternatif", "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", - "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateurs non connectés.", + "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", "block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.", - "block_modal.they_cant_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.", + "block_modal.they_cant_see_posts": "Il ne peut plus voir vos messages et vous ne verrez plus les siens.", "block_modal.they_will_know": "Il peut voir qu'il est bloqué.", - "block_modal.title": "Bloquer l'utilisateur·rice ?", - "block_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.", + "block_modal.title": "Bloquer le compte ?", + "block_modal.you_wont_see_mentions": "Vous ne verrez pas les messages qui le mentionne.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour sauter ceci la prochaine fois", "boost_modal.reblog": "Booster le message ?", "boost_modal.undo_reblog": "Annuler le boost du message ?", @@ -173,7 +173,7 @@ "confirmations.block.confirm": "Bloquer", "confirmations.delete.confirm": "Supprimer", "confirmations.delete.message": "Voulez-vous vraiment supprimer cette publication?", - "confirmations.delete.title": "Supprimer la publication ?", + "confirmations.delete.title": "Supprimer le message ?", "confirmations.delete_list.confirm": "Supprimer", "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste?", "confirmations.delete_list.title": "Supprimer la liste ?", @@ -194,9 +194,10 @@ "confirmations.reply.title": "Remplacer le message ?", "confirmations.unfollow.confirm": "Ne plus suivre", "confirmations.unfollow.message": "Voulez-vous vraiment arrêter de suivre {name}?", - "confirmations.unfollow.title": "Se désabonner de l'utilisateur ?", + "confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?", "content_warning.hide": "Masquer le message", - "content_warning.show": "Afficher quand même", + "content_warning.show": "Montrer quand même", + "content_warning.show_more": "Montrer plus", "conversation.delete": "Supprimer cette conversation", "conversation.mark_as_read": "Marquer comme lu", "conversation.open": "Afficher cette conversation", @@ -218,13 +219,13 @@ "dismissable_banner.public_timeline": "Ce sont les messages publics les plus récents de personnes sur le web social que les gens de {domain} suivent.", "domain_block_modal.block": "Bloquer le serveur", "domain_block_modal.block_account_instead": "Bloquer @{name} à la place", - "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.", + "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciens messages.", "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", "domain_block_modal.you_will_lose_num_followers": "Vous allez perdre {followersCount, plural, one {{followersCountDisplay} abonné·e} other {{followersCountDisplay} abonné·e·s}} et {followingCount, plural, one {{followingCountDisplay} personne que vous suivez} other {{followingCountDisplay} personnes que vous suivez}}.", "domain_block_modal.you_will_lose_relationships": "Vous allez perdre tous les abonné·e·s et les personnes que vous suivez sur ce serveur.", - "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", + "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les messages ou les notifications des utilisateur·rice·s de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", "domain_pill.server": "Serveur", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou en créer une nouvelle", "filter_modal.select_filter.title": "Filtrer cette publication", "filter_modal.title.status": "Filtrer une publication", - "filter_warning.matches_filter": "Correspond au filtre « {title} »", + "filter_warning.matches_filter": "Correspond au filtre « {title} »", "filtered_notifications_banner.pending_requests": "De la part {count, plural, =0 {d’aucune personne} one {d'une personne} other {de # personnes}} que vous pourriez connaître", "filtered_notifications_banner.title": "Notifications filtrées", "firehose.all": "Tout", @@ -508,7 +509,7 @@ "notification.favourite": "{name} a ajouté votre publication à ses favoris", "notification.favourite.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre message en favori", "notification.follow": "{name} vous suit", - "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont abonné à votre compte", + "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} vous suivent", "notification.follow_request": "{name} a demandé à vous suivre", "notification.follow_request.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} ont demandé à vous suivre", "notification.label.mention": "Mention", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Répondre en privé", "notification.label.reply": "Réponse", "notification.mention": "Mention", + "notification.mentioned_you": "{name} vous a mentionné·e", "notification.moderation-warning.learn_more": "En savoir plus", "notification.moderation_warning": "Vous avez reçu un avertissement de modération", "notification.moderation_warning.action_delete_statuses": "Certains de vos messages ont été supprimés.", @@ -542,12 +544,12 @@ "notification_requests.confirm_accept_multiple.message": "Vous êtes sur le point d'accepter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Êtes-vous sûr de vouloir continuer ?", "notification_requests.confirm_accept_multiple.title": "Accepter les requêtes de notification ?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Ignorer la requête} other {Ignorer les requêtes}}", - "notification_requests.confirm_dismiss_multiple.message": "Vous êtes sur le point de rejeter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Vous ne serez plus en mesure d’{count, plural, one {y} other {y}} accéder facilement, ultérieurement. Êtes-vous sûr de vouloir continuer ?", + "notification_requests.confirm_dismiss_multiple.message": "Vous êtes sur le point de rejeter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Vous ne pourrez plus {count, plural, one {y} other {y}} accéder facilement plus tard. Voulez-vous vraiment continuer ?", "notification_requests.confirm_dismiss_multiple.title": "Rejeter les requêtes de notification ?", "notification_requests.dismiss": "Rejeter", "notification_requests.dismiss_multiple": "{count, plural, one {Rejeter # requête …} other {Rejeter # requêtes …}}", "notification_requests.edit_selection": "Modifier", - "notification_requests.exit_selection": "Fait", + "notification_requests.exit_selection": "Terminé", "notification_requests.explainer_for_limited_account": "Les notifications en provenance de ce compte ont été filtrées car le compte a été limité par un modérateur.", "notification_requests.explainer_for_limited_remote_account": "Les notifications en provenance de ce compte ont été filtrées car le compte ou le serveur dont il est issu a été limité par un modérateur.", "notification_requests.maximize": "Agrandir", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barre de filtre rapide", "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e⋅s:", "notifications.column_settings.follow_request": "Nouvelles demandes d’abonnement:", + "notifications.column_settings.group": "Grouper", "notifications.column_settings.mention": "Mentions:", "notifications.column_settings.poll": "Résultats des sondages:", "notifications.column_settings.push": "Notifications push", @@ -852,6 +855,11 @@ "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", "upload_form.description": "Décrire pour les malvoyants", + "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.", + "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.", + "upload_form.drag_and_drop.on_drag_end": "La pièce jointe du média {item} a été déplacée.", + "upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.", + "upload_form.drag_and_drop.on_drag_start": "A récupéré la pièce jointe {item}.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 2acad02093..95cbf3939d 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -3,7 +3,7 @@ "about.contact": "Contact :", "about.disclaimer": "Mastodon est un logiciel libre, open-source et une marque déposée de Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Raison non disponible", - "about.domain_blocks.preamble": "Mastodon vous permet généralement de visualiser le contenu et d'interagir avec les utilisateur⋅rice⋅s de n'importe quel autre serveur dans le fédiverse. Voici les exceptions qui ont été faites sur ce serveur en particulier.", + "about.domain_blocks.preamble": "Mastodon vous permet généralement de visualiser le contenu et d'interagir avec les utilisateur⋅rices de n'importe quel autre serveur dans le fédivers. Voici les exceptions qui ont été faites sur ce serveur-là.", "about.domain_blocks.silenced.explanation": "Vous ne verrez généralement pas les profils et le contenu de ce serveur, à moins que vous ne les recherchiez explicitement ou que vous ne choisissiez de les suivre.", "about.domain_blocks.silenced.title": "Limité", "about.domain_blocks.suspended.explanation": "Aucune donnée de ce serveur ne sera traitée, enregistrée ou échangée, rendant impossible toute interaction ou communication avec les comptes de ce serveur.", @@ -19,7 +19,7 @@ "account.block_domain": "Bloquer le domaine {domain}", "account.block_short": "Bloquer", "account.blocked": "Bloqué·e", - "account.cancel_follow_request": "Annuler le suivi", + "account.cancel_follow_request": "Annuler l'abonnement", "account.copy": "Copier le lien vers le profil", "account.direct": "Mention privée @{name}", "account.disable_notifications": "Ne plus me notifier quand @{name} publie quelque chose", @@ -31,18 +31,18 @@ "account.featured_tags.last_status_never": "Aucun message", "account.featured_tags.title": "Les hashtags en vedette de {name}", "account.follow": "Suivre", - "account.follow_back": "S'abonner en retour", + "account.follow_back": "Suivre en retour", "account.followers": "Abonné·e·s", "account.followers.empty": "Personne ne suit cet·te utilisateur·rice pour l’instant.", "account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}", "account.following": "Abonnements", "account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}", "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", - "account.go_to_profile": "Aller au profil", + "account.go_to_profile": "Voir le profil", "account.hide_reblogs": "Masquer les partages de @{name}", "account.in_memoriam": "En mémoire de.", "account.joined_short": "Ici depuis", - "account.languages": "Changer les langues abonnées", + "account.languages": "Modifier les langues d'abonnements", "account.link_verified_on": "La propriété de ce lien a été vérifiée le {date}", "account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.", "account.media": "Médias", @@ -79,24 +79,24 @@ "admin.dashboard.retention.cohort_size": "Nouveaux comptes", "admin.impact_report.instance_accounts": "Profils de comptes que cela supprimerait", "admin.impact_report.instance_followers": "Abonnées que nos utilisateurs perdraient", - "admin.impact_report.instance_follows": "Abonnées que leurs utilisateurs perdraient", + "admin.impact_report.instance_follows": "Abonné·e·s que leurs utilisateur·rice·s perdraient", "admin.impact_report.title": "Résumé de l'impact", "alert.rate_limited.message": "Veuillez réessayer après {retry_time, time, medium}.", "alert.rate_limited.title": "Nombre de requêtes limité", "alert.unexpected.message": "Une erreur inattendue s’est produite.", "alert.unexpected.title": "Oups !", - "alt_text_badge.title": "Texte Alt", + "alt_text_badge.title": "Texte alternatif", "announcement.announcement": "Annonce", "attachments_list.unprocessed": "(non traité)", "audio.hide": "Masquer l'audio", - "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateurs non connectés.", + "block_modal.remote_users_caveat": "Nous allons demander au serveur {domain} de respecter votre décision. Cependant, ce respect n'est pas garanti, car certains serveurs peuvent gérer différemment les blocages. Les messages publics peuvent rester visibles par les utilisateur·rice·s non connecté·e·s.", "block_modal.show_less": "Afficher moins", "block_modal.show_more": "Afficher plus", "block_modal.they_cant_mention": "Il ne peut pas vous mentionner ou vous suivre.", - "block_modal.they_cant_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.", + "block_modal.they_cant_see_posts": "Il ne peut plus voir vos messages et vous ne verrez plus les siens.", "block_modal.they_will_know": "Il peut voir qu'il est bloqué.", - "block_modal.title": "Bloquer l'utilisateur·rice ?", - "block_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.", + "block_modal.title": "Bloquer le compte ?", + "block_modal.you_wont_see_mentions": "Vous ne verrez pas les messages qui le mentionne.", "boost_modal.combo": "Vous pouvez appuyer sur {combo} pour passer ceci la prochaine fois", "boost_modal.reblog": "Booster le message ?", "boost_modal.undo_reblog": "Annuler le boost du message ?", @@ -163,7 +163,7 @@ "compose_form.poll.switch_to_single": "Modifier le sondage pour autoriser qu'un seul choix", "compose_form.poll.type": "Style", "compose_form.publish": "Publier", - "compose_form.publish_form": "Nouvelle publication", + "compose_form.publish_form": "Nouveau message", "compose_form.reply": "Répondre", "compose_form.save_changes": "Mettre à jour", "compose_form.spoiler.marked": "Enlever l’avertissement de contenu", @@ -173,7 +173,7 @@ "confirmations.block.confirm": "Bloquer", "confirmations.delete.confirm": "Supprimer", "confirmations.delete.message": "Voulez-vous vraiment supprimer ce message ?", - "confirmations.delete.title": "Supprimer la publication ?", + "confirmations.delete.title": "Supprimer le message ?", "confirmations.delete_list.confirm": "Supprimer", "confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?", "confirmations.delete_list.title": "Supprimer la liste ?", @@ -187,16 +187,17 @@ "confirmations.logout.title": "Se déconnecter ?", "confirmations.mute.confirm": "Masquer", "confirmations.redraft.confirm": "Supprimer et ré-écrire", - "confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer cette publication pour la réécrire ? Ses partages ainsi que ses mises en favori seront perdus et ses réponses seront orphelines.", + "confirmations.redraft.message": "Voulez-vous vraiment supprimer le message pour le réécrire ? Ses partages ainsi que ses mises en favori seront perdues, et ses réponses seront orphelines.", "confirmations.redraft.title": "Supprimer et réécrire le message ?", "confirmations.reply.confirm": "Répondre", "confirmations.reply.message": "Répondre maintenant écrasera votre message en cours de rédaction. Voulez-vous vraiment continuer ?", "confirmations.reply.title": "Remplacer le message ?", "confirmations.unfollow.confirm": "Ne plus suivre", "confirmations.unfollow.message": "Voulez-vous vraiment vous désabonner de {name} ?", - "confirmations.unfollow.title": "Se désabonner de l'utilisateur ?", + "confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?", "content_warning.hide": "Masquer le message", - "content_warning.show": "Afficher quand même", + "content_warning.show": "Montrer quand même", + "content_warning.show_more": "Montrer plus", "conversation.delete": "Supprimer la conversation", "conversation.mark_as_read": "Marquer comme lu", "conversation.open": "Afficher la conversation", @@ -218,13 +219,13 @@ "dismissable_banner.public_timeline": "Il s'agit des messages publics les plus récents publiés par des gens sur le web social et que les utilisateurs de {domain} suivent.", "domain_block_modal.block": "Bloquer le serveur", "domain_block_modal.block_account_instead": "Bloquer @{name} à la place", - "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciennes publications.", + "domain_block_modal.they_can_interact_with_old_posts": "Les personnes de ce serveur peuvent interagir avec vos anciens messages.", "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", "domain_block_modal.you_will_lose_num_followers": "Vous allez perdre {followersCount, plural, one {{followersCountDisplay} abonné·e} other {{followersCountDisplay} abonné·e·s}} et {followingCount, plural, one {{followingCountDisplay} personne que vous suivez} other {{followingCountDisplay} personnes que vous suivez}}.", "domain_block_modal.you_will_lose_relationships": "Vous allez perdre tous les abonné·e·s et les personnes que vous suivez sur ce serveur.", - "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", + "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les messages ou les notifications des utilisateur·rice·s de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", "domain_pill.server": "Serveur", @@ -262,7 +263,7 @@ "empty_column.blocks": "Vous n’avez bloqué aucun compte pour le moment.", "empty_column.bookmarked_statuses": "Vous n'avez pas de message en marque-page. Lorsque vous en ajouterez un, il apparaîtra ici.", "empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !", - "empty_column.direct": "Vous n'avez pas encore de mentions privées. Quand vous en envoyez ou en recevez, elles apparaîtront ici.", + "empty_column.direct": "Vous n'avez pas encore de mentions privées. Quand vous en enverrez ou recevrez, elles apparaîtront ici.", "empty_column.domain_blocks": "Il n’y a aucun domaine bloqué pour le moment.", "empty_column.explore_statuses": "Rien n'est en tendance pour le moment. Revenez plus tard !", "empty_column.favourited_statuses": "Vous n’avez pas encore de message en favori. Lorsque vous en ajouterez un, il apparaîtra ici.", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Utilisez une catégorie existante ou créez-en une nouvelle", "filter_modal.select_filter.title": "Filtrer ce message", "filter_modal.title.status": "Filtrer un message", - "filter_warning.matches_filter": "Correspond au filtre « {title} »", + "filter_warning.matches_filter": "Correspond au filtre « {title} »", "filtered_notifications_banner.pending_requests": "De la part {count, plural, =0 {d’aucune personne} one {d'une personne} other {de # personnes}} que vous pourriez connaître", "filtered_notifications_banner.title": "Notifications filtrées", "firehose.all": "Tout", @@ -503,12 +504,12 @@ "notification.admin.report_account_other": "{name} a signalé {count, plural, one {un message} other {# messages}} depuis {target}", "notification.admin.report_statuses": "{name} a signalé {target} pour {category}", "notification.admin.report_statuses_other": "{name} a signalé {target}", - "notification.admin.sign_up": "{name} s'est inscrit", + "notification.admin.sign_up": "{name} s'est inscrit·e", "notification.admin.sign_up.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont inscrit", "notification.favourite": "{name} a ajouté votre message à ses favoris", "notification.favourite.name_and_others_with_link": "{name} et {count, plural, one {# autre} other {# autres}} ont mis votre message en favori", "notification.follow": "{name} vous suit", - "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} se sont abonné à votre compte", + "notification.follow.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} vous suivent", "notification.follow_request": "{name} a demandé à vous suivre", "notification.follow_request.name_and_others": "{name} et {count, plural, one {# autre} other {# autres}} ont demandé à vous suivre", "notification.label.mention": "Mention", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Répondre en privé", "notification.label.reply": "Réponse", "notification.mention": "Mention", + "notification.mentioned_you": "{name} vous a mentionné·e", "notification.moderation-warning.learn_more": "En savoir plus", "notification.moderation_warning": "Vous avez reçu un avertissement de modération", "notification.moderation_warning.action_delete_statuses": "Certains de vos messages ont été supprimés.", @@ -542,12 +544,12 @@ "notification_requests.confirm_accept_multiple.message": "Vous êtes sur le point d'accepter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Êtes-vous sûr de vouloir continuer ?", "notification_requests.confirm_accept_multiple.title": "Accepter les requêtes de notification ?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Ignorer la requête} other {Ignorer les requêtes}}", - "notification_requests.confirm_dismiss_multiple.message": "Vous êtes sur le point de rejeter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Vous ne serez plus en mesure d’{count, plural, one {y} other {y}} accéder facilement, ultérieurement. Êtes-vous sûr de vouloir continuer ?", + "notification_requests.confirm_dismiss_multiple.message": "Vous êtes sur le point de rejeter {count, plural, one {une requête de notification} other {# requêtes de notification}}. Vous ne pourrez plus {count, plural, one {y} other {y}} accéder facilement plus tard. Voulez-vous vraiment continuer ?", "notification_requests.confirm_dismiss_multiple.title": "Rejeter les requêtes de notification ?", "notification_requests.dismiss": "Rejeter", "notification_requests.dismiss_multiple": "{count, plural, one {Rejeter # requête …} other {Rejeter # requêtes …}}", "notification_requests.edit_selection": "Modifier", - "notification_requests.exit_selection": "Fait", + "notification_requests.exit_selection": "Terminé", "notification_requests.explainer_for_limited_account": "Les notifications en provenance de ce compte ont été filtrées car le compte a été limité par un modérateur.", "notification_requests.explainer_for_limited_remote_account": "Les notifications en provenance de ce compte ont été filtrées car le compte ou le serveur dont il est issu a été limité par un modérateur.", "notification_requests.maximize": "Agrandir", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barre de filtre rapide", "notifications.column_settings.follow": "Nouveaux·elles abonné·e·s :", "notifications.column_settings.follow_request": "Nouvelles demandes d’abonnement :", + "notifications.column_settings.group": "Grouper", "notifications.column_settings.mention": "Mentions :", "notifications.column_settings.poll": "Résultats des sondages :", "notifications.column_settings.push": "Notifications push", @@ -729,7 +732,7 @@ "report.thanks.title": "Vous ne voulez pas voir cela ?", "report.thanks.title_actionable": "Merci pour votre signalement, nous allons investiguer.", "report.unfollow": "Ne plus suivre @{name}", - "report.unfollow_explanation": "Vous êtes abonné à ce compte. Pour ne plus voir ses publications dans votre fil principal, retirez-le de votre liste d'abonnements.", + "report.unfollow_explanation": "Vous êtes abonné à ce compte. Pour ne plus voir ses messages dans votre fil principal, retirez-le de votre liste d'abonnements.", "report_notification.attached_statuses": "{count, plural, one {{count} message lié} other {{count} messages liés}}", "report_notification.categories.legal": "Légal", "report_notification.categories.legal_sentence": "contenu illégal", @@ -746,7 +749,7 @@ "search.quick_action.go_to_account": "Aller au profil {x}", "search.quick_action.go_to_hashtag": "Aller au hashtag {x}", "search.quick_action.open_url": "Ouvrir l'URL dans Mastodon", - "search.quick_action.status_search": "Publications correspondant à {x}", + "search.quick_action.status_search": "Messages correspondant à {x}", "search.search_or_paste": "Rechercher ou saisir une URL", "search_popout.full_text_search_disabled_message": "Non disponible sur {domain}.", "search_popout.full_text_search_logged_out_message": "Disponible uniquement lorsque vous êtes connecté.", @@ -852,6 +855,11 @@ "upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.", "upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition", "upload_form.description": "Décrire pour les malvoyant·e·s", + "upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.", + "upload_form.drag_and_drop.on_drag_cancel": "Le glissement a été annulé. La pièce jointe {item} n'a pas été ajoutée.", + "upload_form.drag_and_drop.on_drag_end": "La pièce jointe du média {item} a été déplacée.", + "upload_form.drag_and_drop.on_drag_over": "La pièce jointe du média {item} a été déplacée.", + "upload_form.drag_and_drop.on_drag_start": "A récupéré la pièce jointe {item}.", "upload_form.edit": "Modifier", "upload_form.thumbnail": "Changer la vignette", "upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 1d71ef36c6..a799b65acc 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Dataferkear beheind", "alert.unexpected.message": "Der is in ûnferwachte flater bard.", "alert.unexpected.title": "Oepsy!", + "alt_text_badge.title": "Alternative tekst", "announcement.announcement": "Oankundiging", "attachments_list.unprocessed": "(net ferwurke)", "audio.hide": "Audio ferstopje", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Brûker net mear folgje?", "content_warning.hide": "Berjocht ferstopje", "content_warning.show": "Dochs toane", + "content_warning.show_more": "Mear toane", "conversation.delete": "Petear fuortsmite", "conversation.mark_as_read": "As lêzen markearje", "conversation.open": "Petear toane", @@ -221,6 +223,8 @@ "domain_block_modal.they_cant_follow": "Net ien op dizze server kin jo folgje.", "domain_block_modal.they_wont_know": "Se krije net te witten dat se blokkearre wurde.", "domain_block_modal.title": "Domein blokkearje?", + "domain_block_modal.you_will_lose_num_followers": "Jo ferlieze {followersCount, plural, one {{followersCountDisplay} folger} other {{followersCountDisplay} folgers}} en {followingCount, plural, one {{followingCountDisplay} persoan dy’t jo folgje} other {{followingCountDisplay} persoanen dy’t jo folgje}}.", + "domain_block_modal.you_will_lose_relationships": "Jo ferlieze alle folgers en minsken dy’t jo folgje fan dizze server.", "domain_block_modal.you_wont_see_posts": "Jo sjogge gjin berjochten of meldingen mear fan brûkers op dizze server.", "domain_pill.activitypub_lets_connect": "It soarget derfoar dat jo net allinnich mar ferbine en kommunisearje kinne mei minsken op Mastodon, mar ek mei oare sosjale apps.", "domain_pill.activitypub_like_language": "ActivityPub is de taal dy’t Mastodon mei oare sosjale netwurken sprekt.", @@ -302,7 +306,7 @@ "filter_modal.select_filter.subtitle": "In besteande kategory brûke of in nije oanmeitsje", "filter_modal.select_filter.title": "Dit berjocht filterje", "filter_modal.title.status": "In berjocht filterje", - "filter_warning.matches_filter": "Komt oerien mei filter ‘{title}’", + "filter_warning.matches_filter": "Komt oerien mei filter ‘{title}’", "filtered_notifications_banner.pending_requests": "Fan {count, plural, =0 {net ien} one {ien persoan} other {# persoanen}} dy’t jo mooglik kinne", "filtered_notifications_banner.title": "Filtere meldingen", "firehose.all": "Alles", @@ -433,6 +437,8 @@ "lightbox.close": "Slute", "lightbox.next": "Folgjende", "lightbox.previous": "Foarige", + "lightbox.zoom_in": "Oarspronklike grutte toane", + "lightbox.zoom_out": "Passend toane", "limited_account_hint.action": "Profyl dochs besjen", "limited_account_hint.title": "Dit profyl is troch de behearders fan {domain} ferstoppe.", "link_preview.author": "Troch {name}", @@ -454,6 +460,7 @@ "lists.subheading": "Jo listen", "load_pending": "{count, plural, one {# nij item} other {# nije items}}", "loading_indicator.label": "Lade…", + "media_gallery.hide": "Ferstopje", "moved_to_account_banner.text": "Omdat jo nei {movedToAccount} ferhuze binne is jo account {disabledAccount} op dit stuit útskeakele.", "mute_modal.hide_from_notifications": "Meldingen ferstopje", "mute_modal.hide_options": "Opsjes ferstopje", @@ -502,7 +509,7 @@ "notification.favourite": "{name} hat jo berjocht as favoryt markearre", "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe jo berjocht as favoryt markearre", "notification.follow": "{name} folget dy", - "notification.follow.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe jo folge", + "notification.follow.name_and_others": "{name} en {count, plural, one {# oar persoan} other {# oare persoanen}} folgje jo no", "notification.follow_request": "{name} hat dy in folchfersyk stjoerd", "notification.follow_request.name_and_others": "{name} en {count, plural, one {# oar} other {# oaren}} hawwe frege om jo te folgjen", "notification.label.mention": "Fermelding", @@ -510,6 +517,7 @@ "notification.label.private_reply": "Priveereaksje", "notification.label.reply": "Beäntwurdzje", "notification.mention": "Fermelding", + "notification.mentioned_you": "{name} hat dy fermeld", "notification.moderation-warning.learn_more": "Mear ynfo", "notification.moderation_warning": "Jo hawwe in moderaasje-warskôging ûntfongen", "notification.moderation_warning.action_delete_statuses": "Guon fan jo berjochten binne fuortsmiten.", @@ -560,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Flugge filterbalke", "notifications.column_settings.follow": "Nije folgers:", "notifications.column_settings.follow_request": "Nij folchfersyk:", + "notifications.column_settings.group": "Groepearje", "notifications.column_settings.mention": "Fermeldingen:", "notifications.column_settings.poll": "Enkêteresultaten:", "notifications.column_settings.push": "Pushmeldingen", @@ -774,6 +783,7 @@ "status.bookmark": "Blêdwizer tafoegje", "status.cancel_reblog_private": "Net langer booste", "status.cannot_reblog": "Dit berjocht kin net boost wurde", + "status.continued_thread": "Ferfolgje it petear", "status.copy": "Copy link to status", "status.delete": "Fuortsmite", "status.detailed_status": "Detaillearre petearoersjoch", @@ -782,6 +792,7 @@ "status.edit": "Bewurkje", "status.edited": "Lêst bywurke op {date}", "status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke", + "status.embed": "Koade om op te nimmen", "status.favourite": "Favoryt", "status.favourites": "{count, plural, one {favoryt} other {favoriten}}", "status.filter": "Dit berjocht filterje", @@ -806,6 +817,7 @@ "status.reblogs.empty": "Net ien hat dit berjocht noch boost. Wannear’t ien dit docht, falt dat hjir te sjen.", "status.redraft": "Fuortsmite en opnij opstelle", "status.remove_bookmark": "Blêdwizer fuortsmite", + "status.replied_in_thread": "Antwurde yn petear", "status.replied_to": "Antwurde op {name}", "status.reply": "Beäntwurdzje", "status.replyAll": "Alle beäntwurdzje", @@ -843,6 +855,11 @@ "upload_error.poll": "It opladen fan bestannen is yn enkêten net tastien.", "upload_form.audio_description": "Describe for people with hearing loss", "upload_form.description": "Describe for the visually impaired", + "upload_form.drag_and_drop.instructions": "Druk op spaasje of Enter om in mediabylage op te pakken. Bruk de pylktoetsen om de bylage yn in bepaalde rjochting te ferpleatsen. Druk opnij op de spaasjebalke of Enter om de mediabylage op de nije posysje te pleatsen, of druk op Esc om te annulearjen.", + "upload_form.drag_and_drop.on_drag_cancel": "Slepen is annulearre. Mediabylage {item} is net ferpleatst.", + "upload_form.drag_and_drop.on_drag_end": "Mediabylage {item} is net ferpleatst.", + "upload_form.drag_and_drop.on_drag_over": "Mediabylage {item} is ferpleatst.", + "upload_form.drag_and_drop.on_drag_start": "Mediabylage {item} is oppakt.", "upload_form.edit": "Bewurkje", "upload_form.thumbnail": "Miniatuerôfbylding wizigje", "upload_form.video_description": "Describe for people with hearing loss or visual impairment", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 84c76478d1..db1ccd3a3c 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Dílean ​​an t-úsáideoir?", "content_warning.hide": "Folaigh postáil", "content_warning.show": "Taispeáin ar aon nós", + "content_warning.show_more": "Taispeáin níos mó", "conversation.delete": "Scrios comhrá", "conversation.mark_as_read": "Marcáil mar léite", "conversation.open": "Féach ar comhrá", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Bain úsáid as catagóir reatha nó cruthaigh ceann nua", "filter_modal.select_filter.title": "Déan scagadh ar an bpostáil seo", "filter_modal.title.status": "Déan scagadh ar phostáil", - "filter_warning.matches_filter": "Meaitseálann an scagaire “{title}”", + "filter_warning.matches_filter": "Meaitseálann an scagaire “{title}”", "filtered_notifications_banner.pending_requests": "Ó {count, plural, =0 {duine ar bith} one {duine amháin} two {# daoine} few {# daoine} many {# daoine} other {# daoine}} b’fhéidir go bhfuil aithne agat orthu", "filtered_notifications_banner.title": "Fógraí scagtha", "firehose.all": "Gach", @@ -508,7 +509,7 @@ "notification.favourite": "Is fearr le {name} do phostáil", "notification.favourite.name_and_others_with_link": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} thaitin le do phost", "notification.follow": "Lean {name} thú", - "notification.follow.name_and_others": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} a lean tú", + "notification.follow.name_and_others": "{name} agus {count, plural, one {# other} two {# eile} few {# eile} many {# eile} other {# others}} lean tú", "notification.follow_request": "D'iarr {name} ort do chuntas a leanúint", "notification.follow_request.name_and_others": "{name} agus {count, plural, one {# duine eile} other {# daoine eile}} iarratas a dhéanamh chun tú a leanúint", "notification.label.mention": "Luaigh", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Freagra príobháideach", "notification.label.reply": "Freagra", "notification.mention": "Luaigh", + "notification.mentioned_you": "Luaigh {name} tú", "notification.moderation-warning.learn_more": "Foghlaim níos mó", "notification.moderation_warning": "Tá rabhadh modhnóireachta faighte agat", "notification.moderation_warning.action_delete_statuses": "Baineadh cuid de do phostálacha.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra scagairí tapa", "notifications.column_settings.follow": "Leantóirí nua:", "notifications.column_settings.follow_request": "Iarratais leanúnaí nua:", + "notifications.column_settings.group": "Grúpa", "notifications.column_settings.mention": "Tráchtanna:", "notifications.column_settings.poll": "Torthaí suirbhéanna:", "notifications.column_settings.push": "Brúfhógraí", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index ecbc11f3a2..c8614b2143 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Cuingeachadh ùine", "alert.unexpected.message": "Thachair mearachd ris nach robh dùil.", "alert.unexpected.title": "Oich!", + "alt_text_badge.title": "Roghainn teacsa", "announcement.announcement": "Brath-fios", "attachments_list.unprocessed": "(gun phròiseasadh)", "audio.hide": "Falaich an fhuaim", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "A bheil thu airson sgur de leantainn a chleachdaiche?", "content_warning.hide": "Falaich am post", "content_warning.show": "Seall e co-dhiù", + "content_warning.show_more": "Seall barrachd dheth", "conversation.delete": "Sguab às an còmhradh", "conversation.mark_as_read": "Cuir comharra gun deach a leughadh", "conversation.open": "Seall an còmhradh", @@ -221,6 +223,8 @@ "domain_block_modal.they_cant_follow": "Chan urrainn do neach sam bith a th’ air an fhrithealaiche seo do leantainn.", "domain_block_modal.they_wont_know": "Cha bhi fios aca gun deach am bacadh.", "domain_block_modal.title": "A bheil thu airson an àrainn a bhacadh?", + "domain_block_modal.you_will_lose_num_followers": "Caillidh tu {followersCount, plural, one {{followersCountDisplay} neach-leantainn} two {{followersCountDisplay} luchd-leantainn} few {{followersCountDisplay} luchd-leantainn} other {{followersCountDisplay} luchd-leantainn}} ’s {followingCount, plural, one {{followingCountDisplay} neach a tha thu a’ leantainn} two {{followingCountDisplay} daoine a tha thu a’ leantainn} few {{followingCountDisplay} daoine a tha thu a’ leantainn} other {{followingCountDisplay} daoine a tha thu a’ leantainn}}.", + "domain_block_modal.you_will_lose_relationships": "Caillidh tu a h-uile luchd-leantainn ’s neach a leanas tu air an fhrithealaiche seo.", "domain_block_modal.you_wont_see_posts": "Chan fhaic thu postaichean no brathan o chleachdaichean a th’ air an fhrithealaiche seo.", "domain_pill.activitypub_lets_connect": "Leigidh e leat ceangal a dhèanamh ri daoine chan ann air Mastodon a-mhàin ach air feadh aplacaidean sòisealta eile cuideachd agus conaltradh leotha.", "domain_pill.activitypub_like_language": "Tha ActivityPub coltach ri cànan a bhruidhneas Mastodon ri lìonraidhean sòisealta eile.", @@ -302,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Cleachd roinn-seòrsa a tha ann no cruthaich tè ùr", "filter_modal.select_filter.title": "Criathraich am post seo", "filter_modal.title.status": "Criathraich post", - "filter_warning.matches_filter": "A’ maidseadh na criathraige “{title}”", + "filter_warning.matches_filter": "A’ maidseadh na criathraige “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil gin ann} one {O # neach} two {O # neach} few {O # daoine} other {O # duine}} air a bheil thu eòlach ’s dòcha", "filtered_notifications_banner.title": "Brathan criathraichte", "firehose.all": "Na h-uile", @@ -330,7 +334,7 @@ "footer.about": "Mu dhèidhinn", "footer.directory": "Eòlaire nam pròifil", "footer.get_app": "Faigh an aplacaid", - "footer.invite": "Thoir cuireadh do dhaoine", + "footer.invite": "Thoir cuireadh", "footer.keyboard_shortcuts": "Ath-ghoiridean a’ mheur-chlàir", "footer.privacy_policy": "Poileasaidh prìobhaideachd", "footer.source_code": "Seall am bun-tùs", @@ -459,7 +463,7 @@ "media_gallery.hide": "Falaich", "moved_to_account_banner.text": "Tha an cunntas {disabledAccount} agad à comas on a rinn thu imrich gu {movedToAccount}.", "mute_modal.hide_from_notifications": "Falaich o na brathan", - "mute_modal.hide_options": "Roghainnean falaich", + "mute_modal.hide_options": "Falaich na roghainnean", "mute_modal.indefinite": "Gus an dì-mhùch mi iad", "mute_modal.show_options": "Seall na roghainnean", "mute_modal.they_can_mention_and_follow": "’S urrainn dhaibh iomradh a thoirt ort agus do leantainn ach chan fhaic thu iad-san.", @@ -505,7 +509,7 @@ "notification.favourite": "Is annsa le {name} am post agad", "notification.favourite.name_and_others_with_link": "Is annsa le {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} am post agad", "notification.follow": "Tha {name} ’gad leantainn a-nis", - "notification.follow.name_and_others": "Lean {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} thu", + "notification.follow.name_and_others": "Lean {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} thu", "notification.follow_request": "Dh’iarr {name} ’gad leantainn", "notification.follow_request.name_and_others": "Dh’iarr {name} ’s {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}} ’gad leantainn", "notification.label.mention": "Iomradh", @@ -513,6 +517,7 @@ "notification.label.private_reply": "Freagairt phrìobhaideach", "notification.label.reply": "Freagairt", "notification.mention": "Iomradh", + "notification.mentioned_you": "Thug {name} iomradh ort", "notification.moderation-warning.learn_more": "Barrachd fiosrachaidh", "notification.moderation_warning": "Fhuair thu rabhadh on mhaorsainneachd", "notification.moderation_warning.action_delete_statuses": "Chaidh cuid dhe na postaichean agad a thoirt air falbh.", @@ -563,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Bàr-criathraidh luath", "notifications.column_settings.follow": "Luchd-leantainn ùr:", "notifications.column_settings.follow_request": "Iarrtasan leantainn ùra:", + "notifications.column_settings.group": "Buidheann", "notifications.column_settings.mention": "Iomraidhean:", "notifications.column_settings.poll": "Toraidhean cunntais-bheachd:", "notifications.column_settings.push": "Brathan putaidh", @@ -849,6 +855,11 @@ "upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.", "upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag", "upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne", + "upload_form.drag_and_drop.instructions": "Airson ceanglachan meadhain a thogail, brùth air space no enter. Fhad ’ a bhios tu ’ga shlaodadh, cleachd na h-iuchraichean-saighde airson an ceanglachan meadhain a ghluasad gu comhair sam bith. Brùth air space no enter a-rithist airson an ceanglachen meadhain a leigeil às air an ionad ùr aige no brùth air escape airson sgur dheth.", + "upload_form.drag_and_drop.on_drag_cancel": "Chaidh sgur dhen t-slaodadh. Chaidh an ceanglachan meadhain {item} a leigeil às.", + "upload_form.drag_and_drop.on_drag_end": "Chaidh an ceanglachan meadhain {item} a leigeil às.", + "upload_form.drag_and_drop.on_drag_over": "Chaidh an ceanglachan meadhain {item} a ghluasad.", + "upload_form.drag_and_drop.on_drag_start": "Chaidh an ceanglachan meadhain {item} a thogail.", "upload_form.edit": "Deasaich", "upload_form.thumbnail": "Atharraich an dealbhag", "upload_form.video_description": "Mìnich e dhan fheadhainn le èisteachd bheag no cion-lèirsinne", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 3bc9e1ee59..a39af3bc15 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -193,10 +193,11 @@ "confirmations.reply.message": "Ao responder sobrescribirás a mensaxe que estás a compor. Tes a certeza de que queres continuar?", "confirmations.reply.title": "Editar a publicación?", "confirmations.unfollow.confirm": "Deixar de seguir", - "confirmations.unfollow.message": "Desexas deixar de seguir a {name}?", + "confirmations.unfollow.message": "Tes certeza de querer deixar de seguir a {name}?", "confirmations.unfollow.title": "Deixar de seguir á usuaria?", "content_warning.hide": "Agochar publicación", "content_warning.show": "Mostrar igualmente", + "content_warning.show_more": "Mostrar máis", "conversation.delete": "Eliminar conversa", "conversation.mark_as_read": "Marcar como lido", "conversation.open": "Ver conversa", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usar unha categoría existente ou crear unha nova", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar unha publicación", - "filter_warning.matches_filter": "Debido ao filtro “{title}”", + "filter_warning.matches_filter": "Concorda co filtro «{title}»", "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {ninguén} one {unha persoa} other {# persoas}} que igual coñeces", "filtered_notifications_banner.title": "Notificacións filtradas", "firehose.all": "Todo", @@ -385,7 +386,7 @@ "interaction_modal.description.follow": "Cunha conta en Mastodon, poderás seguir a {name} e recibir as súas publicacións na túa cronoloxía de inicio.", "interaction_modal.description.reblog": "Cunha conta en Mastodon, poderás promover esta publicación para compartila con quen te siga.", "interaction_modal.description.reply": "Cunha conta en Mastodon, poderás responder a esta publicación.", - "interaction_modal.login.action": "Lévame ao inicio", + "interaction_modal.login.action": "Seguir desde alá", "interaction_modal.login.prompt": "Dominio do teu servidor de inicio, ex. mastodon.social", "interaction_modal.no_account_yet": "Aínda non tes unha conta?", "interaction_modal.on_another_server": "Nun servidor diferente", @@ -451,7 +452,7 @@ "lists.exclusive": "Agocha estas publicacións no Inicio", "lists.new.create": "Engadir listaxe", "lists.new.title_placeholder": "Título da nova listaxe", - "lists.replies_policy.followed": "Toda usuaria seguida", + "lists.replies_policy.followed": "Calquera usuaria que siga", "lists.replies_policy.list": "Membros da lista", "lists.replies_policy.none": "Ninguén", "lists.replies_policy.title": "Mostrar respostas a:", @@ -508,7 +509,7 @@ "notification.favourite": "{name} marcou como favorita a túa publicación", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# máis} other {# máis}} favoreceron a túa publicación", "notification.follow": "{name} comezou a seguirte", - "notification.follow.name_and_others": "{name} e {count, plural, one {# máis} other {# máis}} seguíronte", + "notification.follow.name_and_others": "{name} e {count, plural, one {# mais} other {# mais}} seguíronte", "notification.follow_request": "{name} solicitou seguirte", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# máis} other {# máis}} solicitaron seguirte", "notification.label.mention": "Mención", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Resposta privada", "notification.label.reply": "Resposta", "notification.mention": "Mención", + "notification.mentioned_you": "{name} mencionoute", "notification.moderation-warning.learn_more": "Saber máis", "notification.moderation_warning": "Recibiches unha advertencia da moderación", "notification.moderation_warning.action_delete_statuses": "Algunha das túas publicacións foron eliminadas.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", "notifications.column_settings.follow": "Novas seguidoras:", "notifications.column_settings.follow_request": "Novas peticións de seguimento:", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Mencións:", "notifications.column_settings.poll": "Resultados da enquisa:", "notifications.column_settings.push": "Notificacións emerxentes", @@ -582,7 +585,7 @@ "notifications.filter.follows": "Seguimentos", "notifications.filter.mentions": "Mencións", "notifications.filter.polls": "Resultados da enquisa", - "notifications.filter.statuses": "Actualizacións de xente á que segues", + "notifications.filter.statuses": "Actualizacións de persoas que segues", "notifications.grant_permission": "Conceder permiso.", "notifications.group": "{count} notificacións", "notifications.mark_as_read": "Marcar todas as notificacións como lidas", @@ -662,7 +665,7 @@ "poll_button.remove_poll": "Eliminar enquisa", "privacy.change": "Axustar privacidade", "privacy.direct.long": "Todas as mencionadas na publicación", - "privacy.direct.short": "Persoas concretas", + "privacy.direct.short": "Persoas mencionadas", "privacy.private.long": "Só para seguidoras", "privacy.private.short": "Seguidoras", "privacy.public.long": "Para todas dentro e fóra de Mastodon", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 4ce0d41620..527b0a5ac5 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -1,5 +1,5 @@ { - "about.blocks": "שרתים שנחסמו על ידי המנהלים", + "about.blocks": "שרתים תחת פיקוח תוכן", "about.contact": "יצירת קשר:", "about.disclaimer": "מסטודון היא תוכנת קוד פתוח חינמית וסימן מסחרי של Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "הסיבה אינה זמינה", @@ -34,9 +34,9 @@ "account.follow_back": "לעקוב בחזרה", "account.followers": "עוקבים", "account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.", - "account.followers_counter": "{count, plural,one {עוקב אחד} other {{count} עוקבים}}", + "account.followers_counter": "{count, plural,one {עוקב אחד} other {{counter} עוקבים}}", "account.following": "נעקבים", - "account.following_counter": "{count, plural,one {עוקב אחרי {count}}other {עוקב אחרי {count}}}", + "account.following_counter": "{count, plural,one {עוקב אחרי {count}}other {עוקב אחרי {counter}}}", "account.follows.empty": "משתמש זה עדיין לא עוקב אחרי אף אחד.", "account.go_to_profile": "מעבר לפרופיל", "account.hide_reblogs": "להסתיר הידהודים מאת @{name}", @@ -62,7 +62,7 @@ "account.requested_follow": "{name} ביקשו לעקוב אחריך", "account.share": "שתף את הפרופיל של @{name}", "account.show_reblogs": "הצג הדהודים מאת @{name}", - "account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}", + "account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", "account.unblock": "להסיר חסימה ל- @{name}", "account.unblock_domain": "הסירי את החסימה של קהילת {domain}", "account.unblock_short": "הסר חסימה", @@ -85,6 +85,7 @@ "alert.rate_limited.title": "חלה הגבלה על קצב התעבורה", "alert.unexpected.message": "אירעה שגיאה בלתי צפויה.", "alert.unexpected.title": "אופס!", + "alt_text_badge.title": "כיתוב חלופי", "announcement.announcement": "הכרזה", "attachments_list.unprocessed": "(לא מעובד)", "audio.hide": "השתק", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "לבטל מעקב אחר המשתמש.ת?", "content_warning.hide": "הסתרת חיצרוץ", "content_warning.show": "להציג בכל זאת", + "content_warning.show_more": "הצג עוד", "conversation.delete": "מחיקת שיחה", "conversation.mark_as_read": "סמן כנקרא", "conversation.open": "צפו בשיחה", @@ -221,6 +223,8 @@ "domain_block_modal.they_cant_follow": "משתמש משרת זה לא יכול לעקוב אחריך.", "domain_block_modal.they_wont_know": "הם לא ידעו כי נחסמו.", "domain_block_modal.title": "לחסום שרת?", + "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural,one {יאבד לך עוקב אחד}other {יאבדו לך {followersCountDisplay} עוקבים}} {followingCount, plural,one {ונעקב אחד}other {ו־{followingCountDisplay} נעקבים}}.", + "domain_block_modal.you_will_lose_relationships": "יאבדו לך כל העוקבים והנעקבים משרת זה.", "domain_block_modal.you_wont_see_posts": "לא תוכלו לראות הודעות ממשתמשים על שרת זה.", "domain_pill.activitypub_lets_connect": "מאפשר לך להתחבר ולהתרועע עם אחרים לא רק במסטודון, אלא גם ביישומים חברתיים שונים אחרים.", "domain_pill.activitypub_like_language": "אקטיביטיפאב היא למעשה השפה בה מסטודון מדבר עם רשתות חברתיות אחרות.", @@ -302,7 +306,7 @@ "filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה", "filter_modal.select_filter.title": "סינון ההודעה הזו", "filter_modal.title.status": "סנן הודעה", - "filter_warning.matches_filter": "תואם לסנן “{title}”", + "filter_warning.matches_filter": "תואם לסנן “{title}”", "filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין בקשות ממשתמשים }one {בקשה אחת ממישהו/מישהי }two {יש בקשותיים ממשתמשים }other {יש # בקשות ממשתמשים }}שאולי מוכרים לך", "filtered_notifications_banner.title": "התראות מסוננות", "firehose.all": "הכל", @@ -346,9 +350,9 @@ "hashtag.column_settings.tag_mode.any": "לפחות אחד מאלה", "hashtag.column_settings.tag_mode.none": "אף אחד מאלה", "hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה", - "hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{count} משתתפיםות}}", - "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}", - "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}} היום", + "hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{counter} משתתפיםות}}", + "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", + "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}} היום", "hashtag.follow": "לעקוב אחרי תגית", "hashtag.unfollow": "להפסיק לעקוב אחרי תגית", "hashtags.and_other": "…{count, plural,other {ועוד #}}", @@ -373,7 +377,7 @@ "ignore_notifications_modal.filter_to_avoid_confusion": "סינון מסייע למניעת בלבולים אפשריים", "ignore_notifications_modal.filter_to_review_separately": "ניתן לסקור התראות מפולטרות בנפרד", "ignore_notifications_modal.ignore": "להתעלם מהתראות", - "ignore_notifications_modal.limited_accounts_title": "להתעלם מהתראות מחשבונות תחת פיקוח?", + "ignore_notifications_modal.limited_accounts_title": "להתעלם מהתראות מחשבונות תחת פיקוח דיון?", "ignore_notifications_modal.new_accounts_title": "להתעלם מהתראות מחשבונות חדשים?", "ignore_notifications_modal.not_followers_title": "להתעלם מהתראות מא.נשים שאינם עוקביך?", "ignore_notifications_modal.not_following_title": "להתעלם מהתראות מא.נשים שאינם נעקביך?", @@ -436,10 +440,10 @@ "lightbox.zoom_in": "הגדלה לגודל מלא", "lightbox.zoom_out": "התאמה לגודל המסך", "limited_account_hint.action": "הצג חשבון בכל זאת", - "limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי המנחים של {domain}.", + "limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי מנחי הדיון של {domain}.", "link_preview.author": "מאת {name}", "link_preview.more_from_author": "עוד מאת {name}", - "link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}", + "link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", "lists.account.add": "הוסף לרשימה", "lists.account.remove": "הסר מרשימה", "lists.delete": "מחיקת רשימה", @@ -485,7 +489,7 @@ "navigation_bar.follows_and_followers": "נעקבים ועוקבים", "navigation_bar.lists": "רשימות", "navigation_bar.logout": "התנתקות", - "navigation_bar.moderation": "פיקוח", + "navigation_bar.moderation": "הנחיית דיונים", "navigation_bar.mutes": "משתמשים בהשתקה", "navigation_bar.opened_in_classic_interface": "הודעות, חשבונות ושאר עמודי רשת יפתחו כברירת מחדל בדפדפן רשת קלאסי.", "navigation_bar.personal": "אישי", @@ -505,7 +509,7 @@ "notification.favourite": "הודעתך חובבה על ידי {name}", "notification.favourite.name_and_others_with_link": "{name} ועוד {count, plural,one {אחד נוסף}other {# נוספים}} חיבבו את הודעתך", "notification.follow": "{name} במעקב אחרייך", - "notification.follow.name_and_others": "{name} ועוד {count, plural,one {אחד אחר}other {# אחרים}} עקבו אחריך", + "notification.follow.name_and_others": "{name} ועוד {count, plural,one {מישהו} other {# אחרים}} החלו לעקוב אחריך", "notification.follow_request": "{name} ביקשו לעקוב אחריך", "notification.follow_request.name_and_others": "{name} ועוד {count, plural,one {אחד אחר}other {# אחרים}} ביקשו לעקוב אחריך", "notification.label.mention": "אזכור", @@ -513,6 +517,7 @@ "notification.label.private_reply": "תשובה בפרטי", "notification.label.reply": "תשובה", "notification.mention": "אזכור", + "notification.mentioned_you": "אוזכרת על ידי {name}", "notification.moderation-warning.learn_more": "למידע נוסף", "notification.moderation_warning": "קיבלת אזהרה מצוות ניהול התוכן", "notification.moderation_warning.action_delete_statuses": "חלק מהודעותיך הוסרו.", @@ -563,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "שורת סינון מהיר", "notifications.column_settings.follow": "עוקבים חדשים:", "notifications.column_settings.follow_request": "בקשות מעקב חדשות:", + "notifications.column_settings.group": "קבוצה", "notifications.column_settings.mention": "פניות:", "notifications.column_settings.poll": "תוצאות סקר:", "notifications.column_settings.push": "התראות בדחיפה", @@ -593,7 +599,7 @@ "notifications.policy.filter": "מסנן", "notifications.policy.filter_hint": "שליחה לתיבה נכנסת מסוננת", "notifications.policy.filter_limited_accounts_hint": "הוגבל על ידי מנהלי הדיונים", - "notifications.policy.filter_limited_accounts_title": "חשבון מוגבל", + "notifications.policy.filter_limited_accounts_title": "חשבומות תחת ניהול תוכן", "notifications.policy.filter_new_accounts.hint": "נוצר {days, plural,one {ביום האחרון} two {ביומיים האחרונים} other {ב־# הימים האחרונים}}", "notifications.policy.filter_new_accounts_title": "חשבונות חדשים", "notifications.policy.filter_not_followers_hint": "כולל משתמשים שעקבו אחריך פחות מ{days, plural,one {יום} two {יומיים} other {־# ימים}}", @@ -770,9 +776,9 @@ "sign_in_banner.mastodon_is": "מסטודון הוא הדרך הטובה ביותר לעקוב אחרי מה שקורה.", "sign_in_banner.sign_in": "התחברות", "sign_in_banner.sso_redirect": "התחברות/הרשמה", - "status.admin_account": "פתח/י ממשק ניהול עבור @{name}", - "status.admin_domain": "פתיחת ממשק ניהול עבור {domain}", - "status.admin_status": "Open this status in the moderation interface", + "status.admin_account": "פתח/י ממשק פיקוח דיון עבור @{name}", + "status.admin_domain": "פתיחת ממשק פיקוח דיון עבור {domain}", + "status.admin_status": "לפתוח הודעה זו במסך ניהול הדיונים", "status.block": "חסימת @{name}", "status.bookmark": "סימניה", "status.cancel_reblog_private": "הסרת הדהוד", @@ -837,7 +843,7 @@ "time_remaining.minutes": "נותרו {number, plural, one {# דקה} other {# דקות}}", "time_remaining.moments": "רגעים נותרו", "time_remaining.seconds": "נותרו {number, plural, one {# שניה} other {# שניות}}", - "trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{count} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}", + "trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{counter} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}", "trends.trending_now": "נושאים חמים", "ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.", "units.short.billion": "{count} מליארד", @@ -849,6 +855,11 @@ "upload_error.poll": "לא ניתן להעלות קובץ עם סקר.", "upload_form.audio_description": "תאר/י עבור לקויי שמיעה", "upload_form.description": "תיאור לכבדי ראיה", + "upload_form.drag_and_drop.instructions": "כדי לבחור קובץ מוצמד, יש ללחוץ על מקש רווח או אנטר. בעת הגרירה, השתמשו במקשי החיצים כדי להזיז את הקובץ המוצמד בכל כיוון. לחצו רווח או אנטר בשנית כדי לעזוב את הקובץ במקומו החדש, או לחצו אסקייפ לביטול.", + "upload_form.drag_and_drop.on_drag_cancel": "הגרירה בוטלה. קובץ המדיה {item} נעזב.", + "upload_form.drag_and_drop.on_drag_end": "קובץ המדיה {item} נעזב.", + "upload_form.drag_and_drop.on_drag_over": "קובץ המדיה {item} הוזז.", + "upload_form.drag_and_drop.on_drag_start": "קובץ המדיה {item} נבחר.", "upload_form.edit": "עריכה", "upload_form.thumbnail": "שנה/י תמונה ממוזערת", "upload_form.video_description": "תאר/י עבור לקויי שמיעה ולקויי ראייה", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 34a9949afd..40fc3b905c 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Adatforgalom korlátozva", "alert.unexpected.message": "Váratlan hiba történt.", "alert.unexpected.title": "Hoppá!", + "alt_text_badge.title": "Helyettesítő szöveg", "announcement.announcement": "Közlemény", "attachments_list.unprocessed": "(feldolgozatlan)", "audio.hide": "Hang elrejtése", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Megszünteted a felhasználó követését?", "content_warning.hide": "Bejegyzés elrejtése", "content_warning.show": "Megjelenítés mindenképp", + "content_warning.show_more": "Több megjelenítése", "conversation.delete": "Beszélgetés törlése", "conversation.mark_as_read": "Megjelölés olvasottként", "conversation.open": "Beszélgetés megtekintése", @@ -304,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat", "filter_modal.select_filter.title": "E bejegyzés szűrése", "filter_modal.title.status": "Egy bejegyzés szűrése", - "filter_warning.matches_filter": "Megfelel a szűrőnek: „{title}”", + "filter_warning.matches_filter": "Megfelel a szűrőnek: „{title}”", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {senkitől} one {egy valószínűleg ismerős személytől} other {# valószínűleg ismerős személytől}}", "filtered_notifications_banner.title": "Szűrt értesítések", "firehose.all": "Összes", @@ -413,7 +415,7 @@ "keyboard_shortcuts.heading": "Gyorsbillentyűk", "keyboard_shortcuts.home": "Saját idővonal megnyitása", "keyboard_shortcuts.hotkey": "Gyorsbillentyű", - "keyboard_shortcuts.legend": "jelmagyarázat megjelenítése", + "keyboard_shortcuts.legend": "Jelmagyarázat megjelenítése", "keyboard_shortcuts.local": "Helyi idővonal megnyitása", "keyboard_shortcuts.mention": "Szerző megemlítése", "keyboard_shortcuts.muted": "Némított felhasználók listájának megnyitása", @@ -426,7 +428,7 @@ "keyboard_shortcuts.requests": "Követési kérések listájának megnyitása", "keyboard_shortcuts.search": "Fókuszálás a keresősávra", "keyboard_shortcuts.spoilers": "Tartalmi figyelmeztetés mező megjelenítése/elrejtése", - "keyboard_shortcuts.start": "\"Első lépések\" oszlop megnyitása", + "keyboard_shortcuts.start": "„Első lépések” oszlop megnyitása", "keyboard_shortcuts.toggle_hidden": "Tartalmi figyelmeztetéssel ellátott szöveg megjelenítése/elrejtése", "keyboard_shortcuts.toggle_sensitivity": "Média megjelenítése/elrejtése", "keyboard_shortcuts.toot": "Új bejegyzés írása", @@ -507,7 +509,7 @@ "notification.favourite": "{name} kedvencnek jelölte a bejegyzésedet", "notification.favourite.name_and_others_with_link": "{name} és {count, plural, one {# másik} other {# másik}} kedvencnek jelölte a bejegyzésedet", "notification.follow": "{name} követ téged", - "notification.follow.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} követni kezdett", + "notification.follow.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} követni kezdett", "notification.follow_request": "{name} követni szeretne téged", "notification.follow_request.name_and_others": "{name} és {count, plural, one {# másik} other {# másik}} kérte, hogy követhessen", "notification.label.mention": "Említés", @@ -515,6 +517,7 @@ "notification.label.private_reply": "Privát válasz", "notification.label.reply": "Válasz", "notification.mention": "Említés", + "notification.mentioned_you": "{name} megemlített", "notification.moderation-warning.learn_more": "További információ", "notification.moderation_warning": "Moderációs figyelmeztetést kaptál", "notification.moderation_warning.action_delete_statuses": "Néhány bejegyzésedet eltávolították.", @@ -565,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Gyorsszűrő sáv", "notifications.column_settings.follow": "Új követők:", "notifications.column_settings.follow_request": "Új követési kérések:", + "notifications.column_settings.group": "Csoportosítás", "notifications.column_settings.mention": "Megemlítések:", "notifications.column_settings.poll": "Szavazási eredmények:", "notifications.column_settings.push": "Leküldéses értesítések", @@ -611,7 +615,7 @@ "onboarding.action.back": "Vissza", "onboarding.actions.back": "Vissza", "onboarding.actions.go_to_explore": "Felkapottak megtekintése", - "onboarding.actions.go_to_home": "Ugrás a saját hírfolyamra", + "onboarding.actions.go_to_home": "Ugrás a kezdőlapod hírfolyamára", "onboarding.compose.template": "Üdvözlet, #Mastodon!", "onboarding.follows.empty": "Sajnos jelenleg nem jeleníthető meg eredmény. Kipróbálhatod a keresést vagy böngészheted a felfedező oldalon a követni kívánt személyeket, vagy próbáld meg később.", "onboarding.follows.lead": "A kezdőlapod a Mastodon használatának elsődleges módja. Minél több embert követsz, annál aktívabbak és érdekesebbek lesznek a dolgok. Az induláshoz itt van néhány javaslat:", @@ -674,7 +678,7 @@ "recommended": "Ajánlott", "refresh": "Frissítés", "regeneration_indicator.label": "Betöltés…", - "regeneration_indicator.sublabel": "A saját idővonalad épp készül!", + "regeneration_indicator.sublabel": "A kezdőlapod hírfolyama épp készül!", "relative_time.days": "{number}n", "relative_time.full.days": "{number, plural, one {# napja} other {# napja}}", "relative_time.full.hours": "{number, plural, one {# órája} other {# órája}}", @@ -728,7 +732,7 @@ "report.thanks.title": "Nem akarod ezt látni?", "report.thanks.title_actionable": "Köszönjük, hogy jelentetted, megnézzük.", "report.unfollow": "@{name} követésének leállítása", - "report.unfollow_explanation": "Követed ezt a fiókot. Hogy ne lásd a bejegyzéseit a saját idővonaladon, szüntesd meg a követését.", + "report.unfollow_explanation": "Követed ezt a fiókot. Hogy ne lásd a bejegyzéseit a kezdőlapi hírfolyamban, szüntesd meg a követését.", "report_notification.attached_statuses": "{count} bejegyzés mellékelve", "report_notification.categories.legal": "Jogi", "report_notification.categories.legal_sentence": "illegális tartalom", @@ -832,7 +836,7 @@ "subscribed_languages.lead": "A változtatás után csak a kiválasztott nyelvű bejegyzések fognak megjelenni a kezdőlapon és az idővonalakon. Ha egy sincs kiválasztva, akkor minden nyelven megjelennek a bejegyzések.", "subscribed_languages.save": "Változások mentése", "subscribed_languages.target": "Feliratkozott nyelvek módosítása {target} esetében", - "tabs_bar.home": "Kezdőoldal", + "tabs_bar.home": "Kezdőlap", "tabs_bar.notifications": "Értesítések", "time_remaining.days": "{number, plural, one {# nap} other {# nap}} van hátra", "time_remaining.hours": "{number, plural, one {# óra} other {# óra}} van hátra", @@ -851,6 +855,11 @@ "upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.", "upload_form.audio_description": "Leírás siket vagy hallássérült emberek számára", "upload_form.description": "Leírás vak vagy gyengénlátó emberek számára", + "upload_form.drag_and_drop.instructions": "Egy médiamelléklet kiválasztásához nyomj Szóközt vagy Entert. Húzás közben használd a nyílgombokat a médiamelléklet adott irányba történő mozgatásához. A médiamelléklet új pozícióba helyezéséhez nyomd meg a Szóközt vagy az Entert, vagy a megszakításhoz nyomd meg az Esc gombot.", + "upload_form.drag_and_drop.on_drag_cancel": "Az áthúzás megszakítva. A(z) {item} médiamelléklet el lett dobva.", + "upload_form.drag_and_drop.on_drag_end": "A(z) {item} médiamelléklet el lett dobva.", + "upload_form.drag_and_drop.on_drag_over": "A(z) {item} médiamelléklet át lett helyezve.", + "upload_form.drag_and_drop.on_drag_start": "A(z) {item} médiamelléklet fel lett véve.", "upload_form.edit": "Szerkesztés", "upload_form.thumbnail": "Bélyegkép megváltoztatása", "upload_form.video_description": "Leírás siket, hallássérült, vak vagy gyengénlátó emberek számára", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 35482297f0..410b3768f3 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Excesso de requestas", "alert.unexpected.message": "Un error inexpectate ha occurrite.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Texto alternative", "announcement.announcement": "Annuncio", "attachments_list.unprocessed": "(non processate)", "audio.hide": "Celar audio", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Cessar de sequer le usator?", "content_warning.hide": "Celar le message", "content_warning.show": "Monstrar in omne caso", + "content_warning.show_more": "Monstrar plus", "conversation.delete": "Deler conversation", "conversation.mark_as_read": "Marcar como legite", "conversation.open": "Vider conversation", @@ -221,9 +223,11 @@ "domain_block_modal.they_cant_follow": "Necuno de iste servitor pote sequer te.", "domain_block_modal.they_wont_know": "Ille non sapera que ille ha essite blocate.", "domain_block_modal.title": "Blocar dominio?", + "domain_block_modal.you_will_lose_num_followers": "Tu perdera {followersCount, plural, one {{followersCountDisplay} sequitor} other {{followersCountDisplay} sequitores}} e {followingCount, plural, one {{followingCountDisplay} persona que tu seque} other {{followingCountDisplay} personas que tu seque}}.", + "domain_block_modal.you_will_lose_relationships": "Tu perdera tote le sequitores e personas que tu seque de iste servitor.", "domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes de usatores sur iste servitor.", "domain_pill.activitypub_lets_connect": "Illo te permitte connecter e interager con personas non solmente sur Mastodon, ma tamben sur altere applicationes social.", - "domain_pill.activitypub_like_language": "ActivityPub es como le linguage commun que Mastodon parla con altere retes social.", + "domain_pill.activitypub_like_language": "ActivityPub es le linguage commun que Mastodon parla con altere retes social.", "domain_pill.server": "Servitor", "domain_pill.their_handle": "Su pseudonymo:", "domain_pill.their_server": "Su casa digital, ubi vive tote su messages.", @@ -265,7 +269,7 @@ "empty_column.favourited_statuses": "Tu non ha alcun message favorite ancora. Quando tu marca un message como favorite, illo apparera hic.", "empty_column.favourites": "Necuno ha ancora marcate iste message como favorite. Quando alcuno lo face, ille apparera hic.", "empty_column.follow_requests": "Tu non ha ancora requestas de sequimento. Quando tu recipe un, illo apparera hic.", - "empty_column.followed_tags": "Tu non ha ancora sequite alcun hashtags. Quando tu lo face, illos apparera hic.", + "empty_column.followed_tags": "Tu non seque ancora alcun hashtags. Quando tu lo face, illos apparera hic.", "empty_column.hashtag": "Il non ha ancora alcun cosa in iste hashtag.", "empty_column.home": "Tu chronologia de initio es vacue! Seque plus personas pro plenar lo.", "empty_column.list": "Iste lista es ancora vacue. Quando le membros de iste lista publica nove messages, illos apparera hic.", @@ -302,7 +306,8 @@ "filter_modal.select_filter.subtitle": "Usa un categoria existente o crea un nove", "filter_modal.select_filter.title": "Filtrar iste message", "filter_modal.title.status": "Filtrar un message", - "filter_warning.matches_filter": "Corresponde al filtro “{title}”", + "filter_warning.matches_filter": "Corresponde al filtro “{title}”", + "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {necuno} one {un persona} other {# personas}} que tu pote cognoscer", "filtered_notifications_banner.title": "Notificationes filtrate", "firehose.all": "Toto", "firehose.local": "Iste servitor", @@ -318,11 +323,11 @@ "follow_suggestions.hints.friends_of_friends": "Iste profilo es popular inter le gente que tu seque.", "follow_suggestions.hints.most_followed": "Iste profilo es un del plus sequites sur {domain}.", "follow_suggestions.hints.most_interactions": "Iste profilo ha recentemente recipite multe attention sur {domain}.", - "follow_suggestions.hints.similar_to_recently_followed": "Iste profilo es similar al profilos que tu ha recentemente sequite.", + "follow_suggestions.hints.similar_to_recently_followed": "Iste profilo es similar al profilos que tu ha recentemente comenciate a sequer.", "follow_suggestions.personalized_suggestion": "Suggestion personalisate", "follow_suggestions.popular_suggestion": "Suggestion personalisate", "follow_suggestions.popular_suggestion_longer": "Popular sur {domain}", - "follow_suggestions.similar_to_recently_followed_longer": "Similar al profilos que tu ha sequite recentemente", + "follow_suggestions.similar_to_recently_followed_longer": "Similar al profilos que tu ha recentemente comenciate a sequer", "follow_suggestions.view_all": "Vider toto", "follow_suggestions.who_to_follow": "Qui sequer", "followed_tags": "Hashtags sequite", @@ -350,11 +355,14 @@ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} hodie", "hashtag.follow": "Sequer hashtag", "hashtag.unfollow": "Non sequer plus le hashtag", - "hashtags.and_other": "…e {count, plural, one {}other {# plus}}", + "hashtags.and_other": "…e {count, plural, one {un altere} other {# alteres}}", + "hints.profiles.followers_may_be_missing": "Le sequitores de iste profilo pote mancar.", + "hints.profiles.follows_may_be_missing": "Le profilos sequite per iste profilo pote mancar.", + "hints.profiles.posts_may_be_missing": "Alcun messages de iste profilo pote mancar.", "hints.profiles.see_more_followers": "Vider plus de sequitores sur {domain}", "hints.profiles.see_more_follows": "Vider plus de sequites sur {domain}", "hints.profiles.see_more_posts": "Vider plus de messages sur {domain}", - "hints.threads.replies_may_be_missing": "Responsas de altere servitores pote esser perdite.", + "hints.threads.replies_may_be_missing": "Responsas de altere servitores pote mancar.", "hints.threads.see_more": "Vider plus de responsas sur {domain}", "home.column_settings.show_reblogs": "Monstrar impulsos", "home.column_settings.show_replies": "Monstrar responsas", @@ -363,6 +371,11 @@ "home.pending_critical_update.link": "Vider actualisationes", "home.pending_critical_update.title": "Actualisation de securitate critic disponibile!", "home.show_announcements": "Monstrar annuncios", + "ignore_notifications_modal.disclaimer": "Mastodon non pote informar al usatores que tu ha ignorate lor notificationes. Ignorar le notificationes non impedira le invio del messages.", + "ignore_notifications_modal.filter_instead": "Filtrar in vice", + "ignore_notifications_modal.filter_to_act_users": "Tu ancora potera acceptar, rejectar, o reportar usatores", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar adjuta a evitar confusion potential", + "ignore_notifications_modal.filter_to_review_separately": "Tu pote revider separatemente le notificationes filtrate", "ignore_notifications_modal.ignore": "Ignorar le notificationes", "ignore_notifications_modal.limited_accounts_title": "Ignorar le notificationes de contos moderate?", "ignore_notifications_modal.new_accounts_title": "Ignorar le notificationes de nove contos?", @@ -424,6 +437,8 @@ "lightbox.close": "Clauder", "lightbox.next": "Sequente", "lightbox.previous": "Precedente", + "lightbox.zoom_in": "Aggrandir al dimension real", + "lightbox.zoom_out": "Diminuer pro adaptar", "limited_account_hint.action": "Monstrar profilo in omne caso", "limited_account_hint.title": "Iste profilo ha essite celate per le moderatores de {domain}.", "link_preview.author": "Per {name}", @@ -490,14 +505,19 @@ "notification.admin.report_statuses": "{name} ha reportate {target} pro {category}", "notification.admin.report_statuses_other": "{name} ha reportate {target}", "notification.admin.sign_up": "{name} se ha inscribite", + "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# altere persona} other {# altere personas}} se ha inscribite", "notification.favourite": "{name} ha marcate tu message como favorite", - "notification.follow": "{name} te ha sequite", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} ha marcate tu message como favorite", + "notification.follow": "{name} te seque", + "notification.follow.name_and_others": "{name} e {count, plural, one {# other} other {# alteres}} te seque", "notification.follow_request": "{name} ha requestate de sequer te", + "notification.follow_request.name_and_others": "{name} e {count, plural, one {# altere} other {# alteres}} ha demandate de sequer te", "notification.label.mention": "Mention", "notification.label.private_mention": "Mention private", "notification.label.private_reply": "Responsa private", "notification.label.reply": "Responder", "notification.mention": "Mention", + "notification.mentioned_you": "{name} te ha mentionate", "notification.moderation-warning.learn_more": "Apprender plus", "notification.moderation_warning": "Tu ha recipite un advertimento de moderation", "notification.moderation_warning.action_delete_statuses": "Alcunes de tu messages ha essite removite.", @@ -510,6 +530,7 @@ "notification.own_poll": "Tu sondage ha finite", "notification.poll": "Un sondage in le qual tu ha votate ha finite", "notification.reblog": "{name} ha impulsate tu message", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# altere} other {# alteres}} ha impulsate tu message", "notification.relationships_severance_event": "Connexiones perdite con {name}", "notification.relationships_severance_event.account_suspension": "Un administrator de {from} ha suspendiute {target}. Isto significa que tu non pote plus reciper actualisationes de iste persona o interager con ille.", "notification.relationships_severance_event.domain_block": "Un administrator de {from} ha blocate {target}, includente {followersCount} de tu sequitores e {followingCount, plural, one {# conto} other {# contos}} que tu seque.", @@ -518,11 +539,21 @@ "notification.status": "{name} ha justo ora publicate", "notification.update": "{name} ha modificate un message", "notification_requests.accept": "Acceptar", + "notification_requests.accept_multiple": "{count, plural, one {Acceptar # requesta…} other {Acceptar # requestas…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Acceptar le requesta} other {Acceptar le requestas}}", + "notification_requests.confirm_accept_multiple.message": "Tu es sur le puncto de acceptar {count, plural, one {un requesta de notification} other {# requestas de notification}}. Es tu secur de voler continuar?", "notification_requests.confirm_accept_multiple.title": "Acceptar petitiones de notification?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Rejectar le requesta} other {Rejectar le requestas}}", + "notification_requests.confirm_dismiss_multiple.message": "Tu es sur le puncto de rejectar {count, plural, one {un requesta} other {# requestas}} de notification. Tu non potera facilemente acceder a {count, plural, one {illo} other {illos}} plus tarde. Es tu secur de voler continuar?", "notification_requests.confirm_dismiss_multiple.title": "Dimitter petitiones de notification?", "notification_requests.dismiss": "Clauder", + "notification_requests.dismiss_multiple": "{count, plural, one {Rejectar # requesta…} other {Rejectar # requestas…}}", "notification_requests.edit_selection": "Modificar", "notification_requests.exit_selection": "Facite", + "notification_requests.explainer_for_limited_account": "Le notificationes de iste conto ha essite filtrate perque le conto ha essite limitate per un moderator.", + "notification_requests.explainer_for_limited_remote_account": "Le notificationes de iste conto ha essite filtrate perque le conto o su servitor ha essite limitate per un moderator.", + "notification_requests.maximize": "Maximisar", + "notification_requests.minimize_banner": "Minimisar le bandiera de notificationes filtrate", "notification_requests.notifications_from": "Notificationes de {name}", "notification_requests.title": "Notificationes filtrate", "notification_requests.view": "Vider notificationes", @@ -537,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtro rapide", "notifications.column_settings.follow": "Nove sequitores:", "notifications.column_settings.follow_request": "Nove requestas de sequimento:", + "notifications.column_settings.group": "Gruppo", "notifications.column_settings.mention": "Mentiones:", "notifications.column_settings.poll": "Resultatos del sondage:", "notifications.column_settings.push": "Notificationes push", @@ -562,12 +594,15 @@ "notifications.permission_required": "Le notificationes de scriptorio es indisponibile perque le permission necessari non ha essite concedite.", "notifications.policy.accept": "Acceptar", "notifications.policy.accept_hint": "Monstrar in le notificationes", + "notifications.policy.drop": "Ignorar", + "notifications.policy.drop_hint": "Inviar al vacuo, pro non esser jammais plus vidite", "notifications.policy.filter": "Filtrar", "notifications.policy.filter_hint": "Inviar al cassa de notificationes filtrate", + "notifications.policy.filter_limited_accounts_hint": "Limitate per le moderatores del servitor", "notifications.policy.filter_limited_accounts_title": "Contos moderate", "notifications.policy.filter_new_accounts.hint": "Create in le ultime {days, plural, one {die} other {# dies}}", "notifications.policy.filter_new_accounts_title": "Nove contos", - "notifications.policy.filter_not_followers_hint": "Includente le personas que te ha sequite durante minus de {days, plural, one {un die} other {# dies}}", + "notifications.policy.filter_not_followers_hint": "Includente le personas que te seque desde minus de {days, plural, one {un die} other {# dies}}", "notifications.policy.filter_not_followers_title": "Personas qui non te seque", "notifications.policy.filter_not_following_hint": "Usque tu les approba manualmente", "notifications.policy.filter_not_following_title": "Personas que tu non seque", @@ -700,6 +735,7 @@ "report.unfollow_explanation": "Tu seque iste conto. Pro non plus vider su messages in tu fluxo de initio, cessa de sequer lo.", "report_notification.attached_statuses": "{count, plural, one {{count} message} other {{count} messages}} annexate", "report_notification.categories.legal": "Juridic", + "report_notification.categories.legal_sentence": "contento illegal", "report_notification.categories.other": "Alteres", "report_notification.categories.other_sentence": "alteres", "report_notification.categories.spam": "Spam", @@ -747,6 +783,7 @@ "status.bookmark": "Adder al marcapaginas", "status.cancel_reblog_private": "Disfacer impulso", "status.cannot_reblog": "Iste message non pote esser impulsate", + "status.continued_thread": "Continuation del discussion", "status.copy": "Copiar ligamine a message", "status.delete": "Deler", "status.detailed_status": "Vista detaliate del conversation", @@ -755,6 +792,7 @@ "status.edit": "Modificar", "status.edited": "Ultime modification le {date}", "status.edited_x_times": "Modificate {count, plural, one {{count} vice} other {{count} vices}}", + "status.embed": "Obtener codice de incorporation", "status.favourite": "Adder al favorites", "status.favourites": "{count, plural, one {favorite} other {favorites}}", "status.filter": "Filtrar iste message", @@ -763,7 +801,7 @@ "status.load_more": "Cargar plus", "status.media.open": "Clicca pro aperir", "status.media.show": "Clicca pro monstrar", - "status.media_hidden": "Medios celate", + "status.media_hidden": "Contento multimedial celate", "status.mention": "Mentionar @{name}", "status.more": "Plus", "status.mute": "Silentiar @{name}", @@ -817,6 +855,11 @@ "upload_error.poll": "Incargamento de files non permittite con sondages.", "upload_form.audio_description": "Describe lo pro le gente con difficultates auditive", "upload_form.description": "Describe lo pro le gente con difficultates visual", + "upload_form.drag_and_drop.instructions": "Pro prender un annexo multimedial, preme sur le barra de spatios o Enter. Trahente lo, usa le claves de flecha pro displaciar le annexo multimedial in un certe direction. Preme le barra de spatios o Enter de novo pro deponer le annexo multimedial in su nove position, o preme sur Escape pro cancellar.", + "upload_form.drag_and_drop.on_drag_cancel": "Le displaciamento ha essite cancellate. Le annexo multimedial {item} ha essite deponite.", + "upload_form.drag_and_drop.on_drag_end": "Le annexo multimedial {item} ha essite deponite.", + "upload_form.drag_and_drop.on_drag_over": "Le annexo multimedial {item} ha essite displaciate.", + "upload_form.drag_and_drop.on_drag_start": "Le annexo multimedial {item} ha essite prendite.", "upload_form.edit": "Modificar", "upload_form.thumbnail": "Cambiar le miniatura", "upload_form.video_description": "Describe lo pro le gente con difficultates auditive o visual", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index f5c71d4a36..8707c08dd3 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Jumlah akses dibatasi", "alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Teks Alternatif", "announcement.announcement": "Pengumuman", "attachments_list.unprocessed": "(tidak diproses)", "audio.hide": "Sembunyikan audio", @@ -97,6 +98,8 @@ "block_modal.title": "Blokir pengguna?", "block_modal.you_wont_see_mentions": "Anda tidak akan melihat kiriman yang menyebutkan mereka.", "boost_modal.combo": "Anda dapat menekan {combo} untuk melewati ini", + "boost_modal.reblog": "Pacu kiriman?", + "boost_modal.undo_reblog": "Jangan pacu kiriman?", "bundle_column_error.copy_stacktrace": "Salin laporan kesalahan", "bundle_column_error.error.body": "Laman yang diminta tidak dapat ditampilkan. Mungkin karena sebuah kutu dalam kode kami, atau masalah kompatibilitas peramban.", "bundle_column_error.error.title": "Oh, tidak!", @@ -219,6 +222,7 @@ "domain_block_modal.they_cant_follow": "Tidak ada seorangpun dari server ini yang dapat mengikuti anda.", "domain_block_modal.they_wont_know": "Mereka tidak akan tahu bahwa mereka diblokir.", "domain_block_modal.title": "Blokir domain?", + "domain_block_modal.you_will_lose_relationships": "Kamu akan kehilangan semua pengikut dan orang yang kamu ikuti dari server ini.", "domain_block_modal.you_wont_see_posts": "Anda tidak akan melihat postingan atau notifikasi dari pengguna di server ini.", "domain_pill.activitypub_lets_connect": "Ini memungkinkan anda terhubung dan berinteraksi dengan orang-orang tidak hanya di Mastodon, tetapi juga di berbagai aplikasi sosial.", "domain_pill.activitypub_like_language": "ActivityPub seperti bahasa yang digunakan Mastodon dengan jejaring sosial lainnya.", @@ -232,6 +236,7 @@ "domain_pill.who_you_are": ".", "domain_pill.your_handle": "Nama pengguna anda:", "domain_pill.your_server": "Your digital home, where all of your posts live. Don’t like this one? Transfer servers at any time and bring your followers, too.", + "domain_pill.your_username": "Pengenal unik anda di server ini. Itu memungkinkan dapat mencari pengguna dengan nama yang sama di server lain.", "embed.instructions": "Sematkan kiriman ini di situs web Anda dengan menyalin kode di bawah ini.", "embed.preview": "Tampilan akan seperti ini nantinya:", "emoji_button.activity": "Aktivitas", @@ -294,6 +299,7 @@ "filter_modal.select_filter.subtitle": "Gunakan kategori yang sudah ada atau buat yang baru", "filter_modal.select_filter.title": "Saring kiriman ini", "filter_modal.title.status": "Saring sebuah kiriman", + "filtered_notifications_banner.title": "Notifikasi yang disaring", "firehose.all": "Semua", "firehose.local": "Server Ini", "firehose.remote": "Server Lain", @@ -302,6 +308,7 @@ "follow_requests.unlocked_explanation": "Meskipun akun Anda tidak dikunci, staf {domain} menyarankan Anda untuk meninjau permintaan mengikuti dari akun-akun ini secara manual.", "follow_suggestions.curated_suggestion": "Pilihan staf", "follow_suggestions.dismiss": "Jangan tampilkan lagi", + "follow_suggestions.friends_of_friends_longer": "Populer di antara orang yang anda ikuti", "follow_suggestions.hints.featured": "Profil ini telah dipilih sendiri oleh tim {domain}.", "follow_suggestions.hints.friends_of_friends": "Profil ini populer di kalangan orang yang anda ikuti.", "follow_suggestions.personalized_suggestion": "Saran yang dipersonalisasi", @@ -309,6 +316,7 @@ "follow_suggestions.popular_suggestion_longer": "Populer di {domain}", "follow_suggestions.similar_to_recently_followed_longer": "Serupa dengan profil yang baru Anda ikuti", "follow_suggestions.view_all": "Lihat semua", + "follow_suggestions.who_to_follow": "Siapa yang harus diikuti", "followed_tags": "Tagar yang diikuti", "footer.about": "Tentang", "footer.directory": "Direktori profil", diff --git a/app/javascript/mastodon/locales/ig.json b/app/javascript/mastodon/locales/ig.json index 8a8d043a6b..852fc68b4e 100644 --- a/app/javascript/mastodon/locales/ig.json +++ b/app/javascript/mastodon/locales/ig.json @@ -6,7 +6,10 @@ "account.follow": "Soro", "account.followers": "Ndị na-eso", "account.following": "Na-eso", + "account.go_to_profile": "Jee na profaịlụ", "account.mute": "Mee ogbi @{name}", + "account.posts": "Edemede", + "account.posts_with_replies": "Edemede na nzaghachị", "account.unfollow": "Kwụsị iso", "account_note.placeholder": "Click to add a note", "admin.dashboard.retention.cohort_size": "Ojiarụ ọhụrụ", @@ -47,6 +50,7 @@ "confirmations.reply.confirm": "Zaa", "confirmations.unfollow.confirm": "Kwụsị iso", "conversation.delete": "Hichapụ nkata", + "conversation.open": "Lelee nkata", "disabled_account_banner.account_settings": "Mwube akaụntụ", "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.", @@ -63,8 +67,10 @@ "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "errors.unexpected_crash.report_issue": "Kpesa nsogbu", "explore.trending_links": "Akụkọ", + "filter_modal.added.review_and_configure_title": "Mwube myọ", "firehose.all": "Ha niine", "follow_request.authorize": "Nye ikike", + "follow_suggestions.view_all": "Lelee ha ncha", "footer.privacy_policy": "Iwu nzuzu", "getting_started.heading": "Mbido", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", @@ -86,7 +92,7 @@ "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "to mention author", "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.my_profile": "Mepe profaịlụ gị", "keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.open_media": "to open media", "keyboard_shortcuts.pinned": "to open pinned posts list", @@ -113,6 +119,7 @@ "navigation_bar.lists": "Ndepụta", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "notification.reblog": "{name} boosted your status", + "notifications.column_settings.status": "Edemede ọhụrụ:", "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!", @@ -125,7 +132,7 @@ "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", + "onboarding.steps.share_profile.title": "Kekọrịta profaịlụ Mastọdọnụ gị", "privacy.change": "Adjust status privacy", "relative_time.full.just_now": "kịta", "relative_time.just_now": "kịta", @@ -133,6 +140,7 @@ "reply_indicator.cancel": "Kagbuo", "report.categories.other": "Ọzọ", "report.categories.spam": "Nzipụ Ozièlètrọniìk Nkeāchọghị", + "report.category.title_account": "profaịlụ", "report.mute": "Mee ogbi", "report.placeholder": "Type or paste additional comments", "report.submit": "Submit report", @@ -140,6 +148,7 @@ "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.other": "Ọzọ", "search.placeholder": "Chọọ", + "search_results.accounts": "Profaịlụ", "server_banner.active_users": "ojiarụ dị ìrè", "sign_in_banner.sign_in": "Sign in", "status.admin_status": "Open this status in the moderation interface", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index bfc248a845..a5de979da2 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -4,7 +4,7 @@ "about.disclaimer": "Mastodon esas libera, publikfonta e komercmarko di Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Expliko nedisponebla", "about.domain_blocks.preamble": "Mastodon generale permisas on vidar kontenajo e interagar kun uzanti de irga altra servilo en fediverso. Existas eceptioni quo facesis che ca partikulara servilo.", - "about.domain_blocks.silenced.explanation": "On generale ne vidar profili e kontenajo de ca servilo, se on ne reale trovar o voluntale juntar per sequar.", + "about.domain_blocks.silenced.explanation": "On generale ne vidar profili e enhavajo de ca servilo, se on ne intence serchar o voleskar per sequar.", "about.domain_blocks.silenced.title": "Limitizita", "about.domain_blocks.suspended.explanation": "Nula informi de ca servili procedagesos o retenesos o interchanjesos, do irga interago o komuniko kun uzanti de ca servili esas neposibla.", "about.domain_blocks.suspended.title": "Restriktita", @@ -12,7 +12,7 @@ "about.powered_by": "Necentraligita sociala ret quo povigesas da {mastodon}", "about.rules": "Servilreguli", "account.account_note_header": "Personala noto", - "account.add_or_remove_from_list": "Insertez o removez de listi", + "account.add_or_remove_from_list": "Adjuntar o forigar de listi", "account.badges.bot": "Boto", "account.badges.group": "Grupo", "account.block": "Blokusar @{name}", @@ -24,12 +24,12 @@ "account.direct": "Private mencionez @{name}", "account.disable_notifications": "Cesez avizar me kande @{name} postas", "account.domain_blocked": "Domain hidden", - "account.edit_profile": "Modifikar profilo", + "account.edit_profile": "Redaktar profilo", "account.enable_notifications": "Avizez me kande @{name} postas", "account.endorse": "Traito di profilo", "account.featured_tags.last_status_at": "Antea posto ye {date}", "account.featured_tags.last_status_never": "Nula posti", - "account.featured_tags.title": "Estalita hashtagi di {name}", + "account.featured_tags.title": "Ekstaca gretvorti di {name}", "account.follow": "Sequar", "account.follow_back": "Anke sequez", "account.followers": "Sequanti", @@ -45,7 +45,7 @@ "account.languages": "Chanjez abonita lingui", "account.link_verified_on": "Proprieteso di ca ligilo kontrolesis ye {date}", "account.locked_info": "La privatesostaco di ca konto fixesas quale lokata. Proprietato manue kontrolas personi qui povas sequar.", - "account.media": "Medio", + "account.media": "Audvidaji", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} indikis ke lua nova konto es nune:", "account.mute": "Celar @{name}", @@ -56,7 +56,7 @@ "account.no_bio": "Deskriptajo ne provizesis.", "account.open_original_page": "Apertez originala pagino", "account.posts": "Mesaji", - "account.posts_with_replies": "Posti e respondi", + "account.posts_with_replies": "Afishi e respondi", "account.report": "Denuncar @{name}", "account.requested": "Vartante aprobo", "account.requested_follow": "{name} demandis sequar tu", @@ -91,7 +91,7 @@ "audio.hide": "Celez audio", "block_modal.remote_users_caveat": "Ni questionos {domain} di la servilo por respektar vua decido. Publika posti forsan ankore estas videbla a neenirinta uzanti.", "block_modal.show_less": "Montrar mine", - "block_modal.show_more": "Montrar plue", + "block_modal.show_more": "Montrar plu", "block_modal.they_cant_mention": "Oli ne povas mencionar o sequar vu.", "block_modal.they_cant_see_posts": "Oli ne povas vidar vua mesaji e vu ne vidos vidar olia.", "block_modal.they_will_know": "Oli povas vidar ke oli esas blokusita.", @@ -119,11 +119,11 @@ "closed_registrations_modal.title": "Krear konto che Mastodon", "column.about": "Pri co", "column.blocks": "Blokusita uzeri", - "column.bookmarks": "Libromarki", + "column.bookmarks": "Lektosigni", "column.community": "Lokala tempolineo", "column.direct": "Privata mencioni", "column.directory": "Videz profili", - "column.domain_blocks": "Hidden domains", + "column.domain_blocks": "Blokusita domeni", "column.favourites": "Favoriziti", "column.firehose": "Nuna flui", "column.follow_requests": "Demandi di sequado", @@ -131,7 +131,7 @@ "column.lists": "Listi", "column.mutes": "Celita uzeri", "column.notifications": "Savigi", - "column.pins": "Pinned toot", + "column.pins": "Adpinglita afishi", "column.public": "Federata tempolineo", "column_back_button.label": "Retro", "column_header.hide_settings": "Celez ajusti", @@ -142,25 +142,25 @@ "column_header.unpin": "Depinglagez", "column_subheading.settings": "Ajusti", "community.column_settings.local_only": "Lokala nur", - "community.column_settings.media_only": "Media only", + "community.column_settings.media_only": "Nur audvidaji", "community.column_settings.remote_only": "Fora nur", "compose.language.change": "Chanjez linguo", "compose.language.search": "Trovez linguo...", "compose.published.body": "Posto publikigita.", "compose.published.open": "Apertez", "compose.saved.body": "Posto konservita.", - "compose_form.direct_message_warning_learn_more": "Lernez pluse", + "compose_form.direct_message_warning_learn_more": "Lernez plu", "compose_form.encryption_warning": "Posti en Mastodon ne intersequante chifrigesas. Ne partigez irga privata informo che 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.hashtag_warning": "Ca afisho ne listigesos kun irga gretvorto pro ke ol ne es publika.", "compose_form.lock_disclaimer": "Vua konto ne esas {locked}. Irgu povas sequar vu por vidar vua sequanto-nura posti.", "compose_form.lock_disclaimer.lock": "klefagesas", - "compose_form.placeholder": "Quo esas en tua spirito?", - "compose_form.poll.duration": "Votpostoduro", + "compose_form.placeholder": "Quon vu pensas?", + "compose_form.poll.duration": "Votinquestoduro", "compose_form.poll.multiple": "Multopla selekteso", "compose_form.poll.option_placeholder": "Selektato {number}", "compose_form.poll.single": "Selektez un", - "compose_form.poll.switch_to_multiple": "Chanjez votposto por permisar multiselektaji", - "compose_form.poll.switch_to_single": "Chanjez votposto por permisar una selektajo", + "compose_form.poll.switch_to_multiple": "Chanjar votinquesto por permisar multopla selektati", + "compose_form.poll.switch_to_single": "Chanjez votinquesto por permisar unopla selektato", "compose_form.poll.type": "Stilo", "compose_form.publish": "Posto", "compose_form.publish_form": "Publish", @@ -177,8 +177,8 @@ "confirmations.delete_list.confirm": "Efacez", "confirmations.delete_list.message": "Ka vu certe volas netempale efacar ca listo?", "confirmations.delete_list.title": "Ka efacar listo?", - "confirmations.discard_edit_media.confirm": "Efacez", - "confirmations.discard_edit_media.message": "Vu havas nesparita chanji di mediodeskript o prevido, vu volas jus efacar?", + "confirmations.discard_edit_media.confirm": "Forigar", + "confirmations.discard_edit_media.message": "Vu havas nekonservita chanji di audvidajpriskribo o prevido, ka forigas ili irgakaze?", "confirmations.edit.confirm": "Modifikez", "confirmations.edit.message": "Modifikar nun remplasos la mesajo quon vu nune skribas. Ka vu certe volas procedar?", "confirmations.edit.title": "Ka remplasar posto?", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Ka dessequar uzanto?", "content_warning.hide": "Celez posto", "content_warning.show": "Montrez nur", + "content_warning.show_more": "Montrar plu", "conversation.delete": "Efacez konverso", "conversation.mark_as_read": "Markizez quale lektita", "conversation.open": "Videz konverso", @@ -245,7 +246,7 @@ "emoji_button.custom": "Kustumizato", "emoji_button.flags": "Flagi", "emoji_button.food": "Manjajo & Drinkajo", - "emoji_button.label": "Insertar emoji", + "emoji_button.label": "Enpozar emocimajo", "emoji_button.nature": "Naturo", "emoji_button.not_found": "Nula tala parigata emojii", "emoji_button.objects": "Kozi", @@ -263,14 +264,14 @@ "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", "empty_column.community": "La lokala tempolineo esas vakua. Skribez ulo publike por iniciar la agiveso!", "empty_column.direct": "Vu ankore ne havas irga direta mesaji. Kande vu sendos o recevos un, ol montresos hike.", - "empty_column.domain_blocks": "There are no hidden domains yet.", - "empty_column.explore_statuses": "Nulo esas tendenca nun. Videz itere pose!", + "empty_column.domain_blocks": "Ne havas blokusita domeni ankore.", + "empty_column.explore_statuses": "Nulo populareskas nun.", "empty_column.favourited_statuses": "Vu ankore ne havas irga posti favorizita. Kande vu favorizos un, ol montresos hike.", "empty_column.favourites": "Nulu favorizis ca posto. Kande ulu favorizis ol, lu montresos hike.", "empty_column.follow_requests": "Vu ne havas irga sequodemandi til nun. Kande vu ganas talo, ol montresos hike.", "empty_column.followed_tags": "Vu ankore ne sequis irga hashtago. Kande vu sequos un, ol montresos hike.", "empty_column.hashtag": "Esas ankore nulo en ta gretovorto.", - "empty_column.home": "Vua hemtempolineo esas vakua! Sequez plu multa personi por plenigar lu. {suggestions}", + "empty_column.home": "Vua hemtempolineo esas desplena!", "empty_column.list": "There is nothing in this list yet.", "empty_column.lists": "Vu ne havas irga listi til nun. Kande vu kreas talo, ol montresos hike.", "empty_column.mutes": "Vu ne silencigis irga uzanti til nun.", @@ -280,7 +281,7 @@ "error.unexpected_crash.explanation": "Pro eroro en nia kodexo o vidilkonciliebloproblemo, ca pagino ne povas korekte montresar.", "error.unexpected_crash.explanation_addons": "Ca pagino ne povas korekte montresar. Ca eroro posible kauzigesas vidilplusajo o automata tradukutensili.", "error.unexpected_crash.next_steps": "Probez rifreshar pagino. Se to ne helpas, vu forsan ankore povas uzar Mastodon per diferenta vidilo o provizita softwaro.", - "error.unexpected_crash.next_steps_addons": "Probez desaktivigar e rifreshar pagino. Se to ne helpas, vu forsan ankore povas uzar Mastodon per diferenta vidilo o provizita softwaro.", + "error.unexpected_crash.next_steps_addons": "Probez desebligar ili e rifreshar la pagino.", "errors.unexpected_crash.copy_stacktrace": "Kopiez amastraso a klipplanko", "errors.unexpected_crash.report_issue": "Reportigez problemo", "explore.search_results": "Trovuri", @@ -289,13 +290,13 @@ "explore.trending_links": "Novaji", "explore.trending_statuses": "Posti", "explore.trending_tags": "Hashtagi", - "filter_modal.added.context_mismatch_explanation": "Ca filtrilgrupo ne relatesas kun informo de ca acesesita posto. Se vu volas posto filtresar kun ca informo anke, vu bezonas modifikar filtrilo.", + "filter_modal.added.context_mismatch_explanation": "Ca filtrilgrupo ne uzesis ad informo di ca adirita afisho.", "filter_modal.added.context_mismatch_title": "Kontenajneparigeso!", "filter_modal.added.expired_explanation": "Ca filtrilgrupo expiris, vu bezonas chanjar expirtempo por apliko.", "filter_modal.added.expired_title": "Expirinta filtrilo!", - "filter_modal.added.review_and_configure": "Por kontrolar e plue ajustar ca filtrilgrupo, irez a {settings_link}.", - "filter_modal.added.review_and_configure_title": "Filtrilopcioni", - "filter_modal.added.settings_link": "opcionpagino", + "filter_modal.added.review_and_configure": "Por kontrolar e plu ajustar ca filtrilgrupo, irez a {settings_link}.", + "filter_modal.added.review_and_configure_title": "Filtrilpreferaji", + "filter_modal.added.settings_link": "preferajpagino", "filter_modal.added.short_explanation": "Ca posto adjuntesas a ca filtrilgrupo: {title}.", "filter_modal.added.title": "Filtrilo adjuntesas!", "filter_modal.select_filter.context_mismatch": "ne relatesas kun ca informo", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usez disponebla grupo o kreez novajo", "filter_modal.select_filter.title": "Filtragez ca posto", "filter_modal.title.status": "Filtragez posto", - "filter_warning.matches_filter": "Sama kam filtrilo \"{title}\"", + "filter_warning.matches_filter": "Samas kam filtrilo \"{title}\"", "filtered_notifications_banner.pending_requests": "De {count, plural,=0 {nulu} one {1 persono} other {# personi}} quan vu forsan konocas", "filtered_notifications_banner.title": "Filtrilita savigi", "firehose.all": "Omno", @@ -315,7 +316,7 @@ "follow_request.reject": "Refuzar", "follow_requests.unlocked_explanation": "Quankam vua konto ne klefklozesis, la {domain} laborero pensas ke vu forsan volas kontralar sequodemandi de ca konti manuale.", "follow_suggestions.curated_suggestion": "Selektato de jeranto", - "follow_suggestions.dismiss": "Ne montrez pluse", + "follow_suggestions.dismiss": "Ne montrez denove", "follow_suggestions.featured_longer": "Selektesis da la grupo di {domain}", "follow_suggestions.friends_of_friends_longer": "Populara inter personi quan vu sequas", "follow_suggestions.hints.featured": "Ca profilo selektesis da la grupo di {domain}.", @@ -344,7 +345,7 @@ "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", "hashtag.column_settings.select.no_options_message": "Nula sugestati", - "hashtag.column_settings.select.placeholder": "Insertez hashtagi…", + "hashtag.column_settings.select.placeholder": "Insertez gretvorti…", "hashtag.column_settings.tag_mode.all": "Omna co", "hashtag.column_settings.tag_mode.any": "Irga co", "hashtag.column_settings.tag_mode.none": "Nula co", @@ -352,8 +353,8 @@ "hashtag.counter_by_accounts": "{count, plural, one {{counter} partoprenanto} other {{counter} partoprenanti}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} posto} other {{counter} posti}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} posto} other {{counter} posti}} hodie", - "hashtag.follow": "Sequez hashtago", - "hashtag.unfollow": "Desequez hashtago", + "hashtag.follow": "Sequar gretvorto", + "hashtag.unfollow": "Dessequar gretvorto", "hashtags.and_other": "…e {count, plural, one {# plusa}other {# plusa}}", "hints.profiles.followers_may_be_missing": "Sequanti di ca profilo forsan ne esas hike.", "hints.profiles.follows_may_be_missing": "Sequati di ca profilo forsan ne esas hike.", @@ -420,8 +421,8 @@ "keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.open_media": "Desklozar audvidaji", + "keyboard_shortcuts.pinned": "Desklozar listo di adpinglita afishi", "keyboard_shortcuts.profile": "to open author's profile", "keyboard_shortcuts.reply": "to reply", "keyboard_shortcuts.requests": "to open follow requests list", @@ -429,7 +430,7 @@ "keyboard_shortcuts.spoilers": "to show/hide CW field", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", + "keyboard_shortcuts.toggle_sensitivity": "Montrar/celar audvidaji", "keyboard_shortcuts.toot": "to start a brand new toot", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.up": "to move up in the list", @@ -443,13 +444,13 @@ "link_preview.author": "Da {name}", "link_preview.more_from_author": "Plua de {name}", "link_preview.shares": "{count, plural,one {{counter} posto} other {{counter} posti}}", - "lists.account.add": "Insertez a listo", + "lists.account.add": "Adjuntar ad listo", "lists.account.remove": "Efacez de listo", "lists.delete": "Efacez listo", - "lists.edit": "Modifikez listo", + "lists.edit": "Redaktar listo", "lists.edit.submit": "Chanjez titulo", "lists.exclusive": "Celar ca posti del hemo", - "lists.new.create": "Insertez listo", + "lists.new.create": "Adjuntar listo", "lists.new.title_placeholder": "Nova listotitulo", "lists.replies_policy.followed": "Irga sequita uzanto", "lists.replies_policy.list": "Membro di listo", @@ -459,7 +460,7 @@ "lists.subheading": "Vua listi", "load_pending": "{count, plural, one {# nova kozo} other {# nova kozi}}", "loading_indicator.label": "Kargante…", - "media_gallery.hide": "Celez", + "media_gallery.hide": "Celar", "moved_to_account_banner.text": "Vua konto {disabledAccount} es nune desaktiva pro ke vu movis a {movedToAccount}.", "mute_modal.hide_from_notifications": "Celez de savigi", "mute_modal.hide_options": "Celez preferaji", @@ -474,12 +475,12 @@ "navigation_bar.administration": "Administro", "navigation_bar.advanced_interface": "Apertez per retintervizajo", "navigation_bar.blocks": "Blokusita uzeri", - "navigation_bar.bookmarks": "Libromarki", + "navigation_bar.bookmarks": "Lektosigni", "navigation_bar.community_timeline": "Lokala tempolineo", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Privata mencioni", "navigation_bar.discover": "Deskovrez", - "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.domain_blocks": "Blokusita domeni", "navigation_bar.explore": "Explorez", "navigation_bar.favourites": "Favoriziti", "navigation_bar.filters": "Silencigita vorti", @@ -492,7 +493,7 @@ "navigation_bar.mutes": "Celita uzeri", "navigation_bar.opened_in_classic_interface": "Posti, konti e altra pagini specifika apertesas en la retovidilo klasika.", "navigation_bar.personal": "Personala", - "navigation_bar.pins": "Pinned toots", + "navigation_bar.pins": "Adpinglita afishi", "navigation_bar.preferences": "Preferi", "navigation_bar.public_timeline": "Federata tempolineo", "navigation_bar.search": "Serchez", @@ -506,9 +507,9 @@ "notification.admin.sign_up": "{name} registresis", "notification.admin.sign_up.name_and_others": "{name} e {count, plural,one {# altru} other {#altri}} enrejistris", "notification.favourite": "{name} favorizis tua mesajo", - "notification.favourite.name_and_others_with_link": "{name} e {count, plural,one {# altru} other {# altri}} favorizis vua posto", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural,one {# altru} other {# altri}} stelumis vua afisho", "notification.follow": "{name} sequeskis tu", - "notification.follow.name_and_others": "{name} e {count, plural,one {# altru} other {#altri}} sequis vu", + "notification.follow.name_and_others": "{name} e {count, plural,one {# altro} other {# altri}} sequis vu", "notification.follow_request": "{name} demandas sequar vu", "notification.follow_request.name_and_others": "{name} e {count, plural,one {# altru} other {# altri}} volas sequar vu", "notification.label.mention": "Mencionez", @@ -516,37 +517,38 @@ "notification.label.private_reply": "Privata respondo", "notification.label.reply": "Respondez", "notification.mention": "Mencionez", - "notification.moderation-warning.learn_more": "Lernez pluse", + "notification.mentioned_you": "{name} mencionis vu", + "notification.moderation-warning.learn_more": "Lernez plu", "notification.moderation_warning": "Vu recevis jeraverto", "notification.moderation_warning.action_delete_statuses": "Kelka vua posti efacesis.", - "notification.moderation_warning.action_disable": "Vua konto estas desaktivigita.", + "notification.moderation_warning.action_disable": "Vua konto es desaktivigita.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Kelka vua posti markizesis quale sentoza.", "notification.moderation_warning.action_none": "Vua konto recevis jeraverto.", "notification.moderation_warning.action_sensitive": "Vua posti markizesos quale sentoza pos nun.", "notification.moderation_warning.action_silence": "Vua konto limitizesis.", "notification.moderation_warning.action_suspend": "Vua konto restriktesis.", - "notification.own_poll": "Vua votposto finigis", - "notification.poll": "Votposto quan vu partoprenis finis", + "notification.own_poll": "Vua votinquesto fineskis", + "notification.poll": "Votinquesto ube vu votis fineskis", "notification.reblog": "{name} repetis tua mesajo", "notification.reblog.name_and_others_with_link": "{name} e {count, plural,one {# altru} other {#altri}} repetis vua posto", "notification.relationships_severance_event": "Desganis konekteso kun {name}", "notification.relationships_severance_event.account_suspension": "Administranto de {from} restriktis {target}, do vu ne povas plue recevar novaji de lu o interagar kun lu.", "notification.relationships_severance_event.domain_block": "Administranto de {from} blokusis {target}, e anke {followersCount} de vua sequanti e {followingCount, plural, one {# konto} other {# konti}} quan vu sequas.", - "notification.relationships_severance_event.learn_more": "Lernez pluse", + "notification.relationships_severance_event.learn_more": "Lernez plu", "notification.relationships_severance_event.user_domain_block": "Vu blokusis {target}, do efacis {followersCount} de vua sequanti e {followingCount, plural, one {# konto} other {#konti}} quan vu sequis.", "notification.status": "{name} nove postigis", - "notification.update": "{name} modifikis posto", + "notification.update": "{name} redaktis afisho", "notification_requests.accept": "Aceptez", "notification_requests.accept_multiple": "{count, plural, one {Aceptar # demando…} other {Aceptar # demandi…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceptar demando} other {Aceptar demandi}}", "notification_requests.confirm_accept_multiple.message": "Vu aceptos {count, plural, one {1 savigdemando} other {# savigdemandi}}. Ka vu certe volas durar?", "notification_requests.confirm_accept_multiple.title": "Ka aceptar savigdemandi?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Ignorez demando} other {Ignorez demandi}}", - "notification_requests.confirm_dismiss_multiple.message": "Vu ignoros {count, plural, one {1 savigdemando} other {# savigdemandi}}. Vu ne povas facile ganar {count, plural, one {ol} other {oli}} pluse. Ka vu esas certe ke vu volas durar?", + "notification_requests.confirm_dismiss_multiple.message": "Vu ignoros {count, plural, one {1 savigdemando} other {# savigdemandi}}. Vu ne povas facile ganar {count, plural, one {ol} other {oli}} denove. Ka vu esas certe ke vu volas durar?", "notification_requests.confirm_dismiss_multiple.title": "Ka ignorar savigdemandi?", "notification_requests.dismiss": "Ignorez", "notification_requests.dismiss_multiple": "{count, plural,one {Ignorez # demando…} other {Ignorez # demandi…}}", - "notification_requests.edit_selection": "Modifikez", + "notification_requests.edit_selection": "Redaktar", "notification_requests.exit_selection": "Finas", "notification_requests.explainer_for_limited_account": "Savigi de ca konto filtresis pro ke la konto limitizesis da jeranto.", "notification_requests.explainer_for_limited_remote_account": "Savigi de ca konto filtresis pro ke la konto o olua servilo limitizesis da jeranto.", @@ -566,8 +568,9 @@ "notifications.column_settings.filter_bar.category": "Rapidfiltrilbaro", "notifications.column_settings.follow": "Nova sequanti:", "notifications.column_settings.follow_request": "Nova sequodemandi:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Mencioni:", - "notifications.column_settings.poll": "Votpostorezulti:", + "notifications.column_settings.poll": "Votinquestorezulti:", "notifications.column_settings.push": "Pulsavizi", "notifications.column_settings.reblog": "Repeti:", "notifications.column_settings.show": "Montrar en kolumno", @@ -575,19 +578,19 @@ "notifications.column_settings.status": "New toots:", "notifications.column_settings.unread_notifications.category": "Nelektita avizi", "notifications.column_settings.unread_notifications.highlight": "Briligez nelektita avizi", - "notifications.column_settings.update": "Modifikati:", + "notifications.column_settings.update": "Redaktati:", "notifications.filter.all": "Omna", "notifications.filter.boosts": "Repeti", "notifications.filter.favourites": "Favoriziti", "notifications.filter.follows": "Sequati", "notifications.filter.mentions": "Mencioni", - "notifications.filter.polls": "Votpostorezulti", + "notifications.filter.polls": "Votinquestorezulti", "notifications.filter.statuses": "Novaji de personi quon vu sequas", "notifications.grant_permission": "Donez permiso.", "notifications.group": "{count} avizi", "notifications.mark_as_read": "Markizez singla avizi quale lektita", "notifications.permission_denied": "Desktopavizi esas nedisplonebla pro antea refuzita vidilpermisdemando", - "notifications.permission_denied_alert": "Desktopavizi ne povas aktivigesar pro ke vidilpermiso refuzesis", + "notifications.permission_denied_alert": "Komputilsavigi ne povas ebligesar, pro ke retumilpermiso desaceptesis antee", "notifications.permission_required": "Desktopavizi esas nedisplonebla pro ke bezonata permiso ne donesis.", "notifications.policy.accept": "Aceptez", "notifications.policy.accept_hint": "Montrez en savigi", @@ -606,8 +609,8 @@ "notifications.policy.filter_private_mentions_hint": "Filtrita se ol ne esas respondo a vua sua menciono o se vu sequas la sendanto", "notifications.policy.filter_private_mentions_title": "Nekonocita privata mencioni", "notifications.policy.title": "Regular savigi de…", - "notifications_permission_banner.enable": "Aktivigez desktopavizi", - "notifications_permission_banner.how_to_control": "Por ganar avizi kande Mastodon ne esas apertita, aktivigez dekstopavizi. Vu povas precize regularar quale interakti facas deskstopavizi tra la supera {icon} butono pos oli aktivigesis.", + "notifications_permission_banner.enable": "Ebligar komputilsavigi", + "notifications_permission_banner.how_to_control": "Por ganar savigi kande Mastodon ne es desklozita, ebligez komputilsavigi.", "notifications_permission_banner.title": "Irga kozo ne pasas vu", "onboarding.action.back": "Retroirez", "onboarding.actions.back": "Retroirez", @@ -632,12 +635,12 @@ "onboarding.share.message": "Me esas {username} che #Mastodon! Venez e sequez me ye {url}", "onboarding.share.next_steps": "Kozi quin vu darfas volar facar sequante:", "onboarding.share.title": "Partigez vua profilo", - "onboarding.start.lead": "Your new Mastodon account is ready to go. Here's how you can make the most of it:", + "onboarding.start.lead": "Vu nun es ano di Mastodon, quo es unika descentra socia reteyo.", "onboarding.start.skip": "Want to skip right ahead?", "onboarding.start.title": "Vu facis lo!", "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.publish_status.body": "Salutez per texto, fotografi, videi o votinquesti {emoji}", "onboarding.steps.publish_status.title": "Facar vua unesma posto", "onboarding.steps.setup_profile.body": "Vu interagos plue kun profilo detalizita.", "onboarding.steps.setup_profile.title": "Customize your profile", @@ -646,20 +649,20 @@ "onboarding.tips.2fa": "Ka vu savas? Vu povas sekurigar vua konto per pozar 2-faktora verifiko en preferaji de vua konto. Telefonilnombro ne bezonesis!", "onboarding.tips.accounts_from_other_servers": "Ka vu savas? Vu povas interagar kun profili sur altra servili senrupte!", "onboarding.tips.migration": "Ka vu savas? Se vu sentas ke {domain} ne esas apta por vu en la futuro, vu povas transferar a altra servilo di Mastodon sen malganar vua sequanti!", - "onboarding.tips.verification": "Ka vu savas? Vu povas verifikar vua konto per pozi ligilo a vua profilo di Mastodon sur vua sua retsituo e adjuntar la retsituo a vua profilo. Senpage!", + "onboarding.tips.verification": "Ka vu savas? Senpaga e dosieri es nebezonita!", "password_confirmation.exceeds_maxlength": "La konfirmo dil pasvorto superesas la limito pri longeso di pasvorti", "password_confirmation.mismatching": "La konfirmo dil pasvorto ne egalesas", "picture_in_picture.restore": "Retropozez", "poll.closed": "Klozita", - "poll.refresh": "Rifreshez", + "poll.refresh": "Rifreshar", "poll.reveal": "Vidar rezultaji", "poll.total_people": "{count, plural, one {# persono} other {# personi}}", "poll.total_votes": "{count, plural, one {# voto} other {# voti}}", - "poll.vote": "Votez", + "poll.vote": "Votar", "poll.voted": "Vu ja votis ca respondo", "poll.votes": "{votes, plural, one {# voto} other {# voti}}", - "poll_button.add_poll": "Insertez votposto", - "poll_button.remove_poll": "Efacez votposto", + "poll_button.add_poll": "Adjuntar votinquesto", + "poll_button.remove_poll": "Forigar votinquesto", "privacy.change": "Aranjar privateso di mesaji", "privacy.direct.long": "Omnu quan mencionesis en la posto", "privacy.direct.short": "Specifika personi", @@ -667,7 +670,7 @@ "privacy.private.short": "Sequanti", "privacy.public.long": "Ulu de e ne de Mastodon", "privacy.public.short": "Publike", - "privacy.unlisted.additional": "Co kondutas exakte kam publika, escepte la posto ne aparos en viva novajari o gretiketi, exploro, o sercho di Mastodon, mem se vu esas volunta totkonte.", + "privacy.unlisted.additional": "Co kondutas exakte kam publika, ecepte la posto ne aparos en nuna flui o gretvorti, exploro, o sercho di Mastodon, mem se vu esas volunta totkonte.", "privacy.unlisted.long": "Min multa algoritmoridikuli", "privacy.unlisted.short": "Deslauta publiko", "privacy_policy.last_updated": "Antea novajo ye {date}", @@ -687,9 +690,9 @@ "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "hodie", - "reply_indicator.attachments": "{count, plural, one {# atachajo} other {# atachaji}}", + "reply_indicator.attachments": "{count, plural, one {# addonajo} other {# addonaji}}", "reply_indicator.cancel": "Nihiligar", - "reply_indicator.poll": "Votposto", + "reply_indicator.poll": "Votinquesto", "report.block": "Restriktez", "report.block_explanation": "Vu ne vidos olia posti. Oli ne povas vidar vua posti o sequar vu. Oli savos ke oli restriktesis.", "report.categories.legal": "Legala", @@ -724,13 +727,13 @@ "report.statuses.title": "Ka existas irga posti quo suportas ca raporto?", "report.submit": "Sendar", "report.target": "Denuncante", - "report.thanks.take_action": "Co esas vua opcioni por regularar quo vu vidas che Mastodon:", + "report.thanks.take_action": "Yen vua preferaji por regularar quon vu vidas sur Mastodon:", "report.thanks.take_action_actionable": "Dum ke ni kontrolas co, vu povas demarshar kontra @{name}:", "report.thanks.title": "Ka vu ne volas vidar co?", "report.thanks.title_actionable": "Danko por raportizar, ni kontrolos co.", "report.unfollow": "Desequez @{name}", - "report.unfollow_explanation": "Vu sequas ca konto. Por ne vidar olia posti en vua hemniuzeto pluse, desequez oli.", - "report_notification.attached_statuses": "{count, plural,one {{count} posti} other {{count} posti}} adjuntesas", + "report.unfollow_explanation": "Vu sequas ca konto.", + "report_notification.attached_statuses": "{count, plural,one {{count} posti} other {{count} posti}} addonita", "report_notification.categories.legal": "Legala", "report_notification.categories.legal_sentence": "deslegala kontenajo", "report_notification.categories.other": "Altra", @@ -758,7 +761,7 @@ "search_popout.user": "uzanto", "search_results.accounts": "Profili", "search_results.all": "Omna", - "search_results.hashtags": "Hashtagi", + "search_results.hashtags": "Gretvorti", "search_results.nothing_found": "Ne povas ganar irgo per ca trovvorti", "search_results.see_all": "Videz omni", "search_results.statuses": "Posti", @@ -777,7 +780,7 @@ "status.admin_domain": "Apertez jerintervizajo por {domain}", "status.admin_status": "Open this status in the moderation interface", "status.block": "Restriktez @{name}", - "status.bookmark": "Libromarko", + "status.bookmark": "Lektosigno", "status.cancel_reblog_private": "Desrepetez", "status.cannot_reblog": "Ca posto ne povas repetesar", "status.continued_thread": "Durigita postaro", @@ -786,34 +789,34 @@ "status.detailed_status": "Detala konversvido", "status.direct": "Private mencionez @{name}", "status.direct_indicator": "Privata menciono", - "status.edit": "Modifikez", - "status.edited": "Recente modifikesis ye {date}", - "status.edited_x_times": "Modifikesis {count, plural, one {{count} foyo} other {{count} foyi}}", + "status.edit": "Redaktar", + "status.edited": "Lastatempe redaktesar ye {date}", + "status.edited_x_times": "Redaktesis ye {count, plural, one {{count} foyo} other {{count} foyi}}", "status.embed": "Ganez adherkodexo", "status.favourite": "Favorizar", - "status.favourites": "{count, plural, one {favorizo} other {favorizi}}", + "status.favourites": "{count, plural, one {stelumo} other {stelumi}}", "status.filter": "Filtragez ca posto", "status.history.created": "{name} kreis ye {date}", - "status.history.edited": "{name} modifikis ye {date}", - "status.load_more": "Kargar pluse", + "status.history.edited": "{name} redaktis ye {date}", + "status.load_more": "Kargar plu", "status.media.open": "Klikez por apertar", "status.media.show": "Klikez por montrar", - "status.media_hidden": "Kontenajo celita", + "status.media_hidden": "Audvidaji es celita", "status.mention": "Mencionar @{name}", - "status.more": "Pluse", + "status.more": "Plu", "status.mute": "Silencigez @{name}", "status.mute_conversation": "Silencigez konverso", "status.open": "Detaligar ca mesajo", "status.pin": "Pinglagez che profilo", - "status.pinned": "Pinned toot", - "status.read_more": "Lektez pluse", + "status.pinned": "Adpinglita afisho", + "status.read_more": "Lektez plu", "status.reblog": "Repetez", "status.reblog_private": "Repetez kun originala videbleso", "status.reblogged_by": "{name} repetis", "status.reblogs": "{count, plural, one {repeto} other {repeti}}", "status.reblogs.empty": "Nulu ja repetis ca posto. Kande ulu facas lo, lu montresos hike.", "status.redraft": "Efacez e riskisigez", - "status.remove_bookmark": "Efacez libromarko", + "status.remove_bookmark": "Forigar lektosigno", "status.replied_in_thread": "Respondesis en postaro", "status.replied_to": "Respondis a {name}", "status.reply": "Respondar", @@ -822,9 +825,9 @@ "status.sensitive_warning": "Trubliva kontenajo", "status.share": "Partigez", "status.show_less_all": "Montrez min por omno", - "status.show_more_all": "Montrez pluse por omno", + "status.show_more_all": "Montrez plu por omno", "status.show_original": "Montrez originalo", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.title.with_attachments": "{user} afishis {attachmentCount, plural, one {addonajo} other {{attachmentCount} addonaji}}", "status.translate": "Tradukez", "status.translated_from_with": "Tradukita de {lang} per {provider}", "status.uncached_media_warning": "Previdajo nedisponebla", @@ -841,40 +844,40 @@ "time_remaining.moments": "Poka sekundi restas", "time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundi}} restas", "trends.counter_by_accounts": "{count, plural,one {{counter} persono} other {{counter} personi}} en antea {days, plural,one {dio} other {{days} dii}}", - "trends.trending_now": "Tendencigas nun", + "trends.trending_now": "Populareskas nun", "ui.beforeunload": "Vua skisato perdesos se vu ekiras Mastodon.", "units.short.billion": "{count}G", "units.short.million": "{count}M", "units.short.thousand": "{count}K", - "upload_area.title": "Tranar faligar por kargar", - "upload_button.label": "Adjuntar kontenajo", - "upload_error.limit": "Failadcharglimito ecesesis.", - "upload_error.poll": "Failadchargo ne permisesas kun votposti.", - "upload_form.audio_description": "Deskriptez por personi kun audnekapableso", - "upload_form.description": "Deskriptez por personi kun vidnekapableso", - "upload_form.drag_and_drop.instructions": "Por tenar mediatachajo, presez spaco o eniro. Presez spaco o eniro itere por destenar la mediatachajo en olua nova loko, o presez eskapo por anular.", - "upload_form.drag_and_drop.on_drag_cancel": "Tiro anulesis. Mediatachajo {item} destenesis.", - "upload_form.drag_and_drop.on_drag_end": "Mediatachajo {item} destenesis.", - "upload_form.drag_and_drop.on_drag_over": "Mediatachajo {item} movigesis.", - "upload_form.drag_and_drop.on_drag_start": "Tenis mediatachajo {item}.", - "upload_form.edit": "Modifikez", - "upload_form.thumbnail": "Chanjez imajeto", - "upload_form.video_description": "Deskriptez por personi kun audnekapableso o vidnekapableso", + "upload_area.title": "Tenar e destenar por adkargar", + "upload_button.label": "Adjuntar imaji, video o sondosiero", + "upload_error.limit": "Dosieradkarglimito ecesesis.", + "upload_error.poll": "Dosieradkargo ne permisesas kun votinquesti.", + "upload_form.audio_description": "Priskribez por personi kun auddeskapableso", + "upload_form.description": "Priskribez por personi kun viddeskapableso", + "upload_form.drag_and_drop.instructions": "Por tenar audvidajaddonajo, presez spaco o eniro. Presez spaco o eniro denove por destenar la audvidajatachajo en olua nova loko, o presez eskapo por nuligar.", + "upload_form.drag_and_drop.on_drag_cancel": "Tiro nuligesis.", + "upload_form.drag_and_drop.on_drag_end": "Audvidajaddonajo {item} destenesis.", + "upload_form.drag_and_drop.on_drag_over": "Audvidajaddonajo {item} movigesis.", + "upload_form.drag_and_drop.on_drag_start": "Tenis audvidajaddonajo {item}.", + "upload_form.edit": "Redaktar", + "upload_form.thumbnail": "Chanjar imajeto", + "upload_form.video_description": "Priskribez por personi kun auddeskapableso o viddeskapableso", "upload_modal.analyzing_picture": "Analizas imajo…", - "upload_modal.apply": "Aplikez", + "upload_modal.apply": "Aplikar", "upload_modal.applying": "Aplikas…", - "upload_modal.choose_image": "Selektez imajo", - "upload_modal.description_placeholder": "Rapida bruna foxo saltas super la indolenta hundo", - "upload_modal.detect_text": "Deskovrez texto de imajo", - "upload_modal.edit_media": "Modifikez medii", - "upload_modal.hint": "Kliktez o tirez cirklo che prevido por selektar centrala punto quo sempre montresas kun omna imajeti.", + "upload_modal.choose_image": "Selektar imajo", + "upload_modal.description_placeholder": "Rapida bruna foxo saltas super la mallaborema hundo", + "upload_modal.detect_text": "Deskovrar texto de imajo", + "upload_modal.edit_media": "Redaktar audvidajo", + "upload_modal.hint": "Klikez o tirez cirklo che prevido por selektar centra punto qua omnatempe montresas kun omna imajeti.", "upload_modal.preparing_ocr": "Preparas OCR…", - "upload_modal.preview_label": "Previdez ({ratio})", - "upload_progress.label": "Kargante...", + "upload_modal.preview_label": "Previdar ({ratio})", + "upload_progress.label": "Adkargas...", "upload_progress.processing": "Traktante…", "username.taken": "Ta uzantnomo ja es posedita. Provez altro", "video.close": "Klozez video", - "video.download": "Deschargez failo", + "video.download": "Deschargar dosiero", "video.exit_fullscreen": "Ekirez plena skreno", "video.expand": "Expansez video", "video.fullscreen": "Plena skreno", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index c78c5d7842..849ab461e3 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Með takmörkum", "alert.unexpected.message": "Upp kom óvænt villa.", "alert.unexpected.title": "Úbbs!", + "alt_text_badge.title": "Hjálpartexti mynda", "announcement.announcement": "Auglýsing", "attachments_list.unprocessed": "(óunnið)", "audio.hide": "Fela hljóð", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Hætta að fylgjast með viðkomandi?", "content_warning.hide": "Fela færslu", "content_warning.show": "Birta samt", + "content_warning.show_more": "Sýna meira", "conversation.delete": "Eyða samtali", "conversation.mark_as_read": "Merkja sem lesið", "conversation.open": "Skoða samtal", @@ -221,6 +223,8 @@ "domain_block_modal.they_cant_follow": "Enginn frá þessum netþjóni getur fylgst með þér.", "domain_block_modal.they_wont_know": "Viðkomandi mun ekki vita að hann hafi verið útilokaður.", "domain_block_modal.title": "Útiloka lén?", + "domain_block_modal.you_will_lose_num_followers": "Þú munt missa {followersCount, plural, one {{followersCountDisplay} fylgjanda} other {{followersCountDisplay} fylgjendur}} og {followingCount, plural, one {{followingCountDisplay} aðila sem þú fylgist með} other {{followingCountDisplay} aðila sem þú fylgist með}}.", + "domain_block_modal.you_will_lose_relationships": "Þú munt missa alla fylgjendur og þá sem þú fylgist með á þessum netþjóni.", "domain_block_modal.you_wont_see_posts": "Þú munt ekki sjá neinar færslur eða tilkynningar frá notendum á þessum netþjóni.", "domain_pill.activitypub_lets_connect": "Það gerir þér kleift að tengjast og eiga í samskiptum við fólk, ekki bara á Mastodon, heldur einnig á mörgum öðrum mismunandi samfélagsmiðlum.", "domain_pill.activitypub_like_language": "ActivityPub er eins og tungumál sem Mastodon notar til að tala við önnur samfélagsnet.", @@ -302,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Notaðu fyrirliggjandi flokk eða útbúðu nýjan", "filter_modal.select_filter.title": "Sía þessa færslu", "filter_modal.title.status": "Sía færslu", - "filter_warning.matches_filter": "Samsvarar síunni“{title}”", + "filter_warning.matches_filter": "Samsvarar síunni “{title}”", "filtered_notifications_banner.pending_requests": "Frá {count, plural, =0 {engum} one {einum aðila} other {# manns}} sem þú gætir þekkt", "filtered_notifications_banner.title": "Síaðar tilkynningar", "firehose.all": "Allt", @@ -433,6 +437,8 @@ "lightbox.close": "Loka", "lightbox.next": "Næsta", "lightbox.previous": "Fyrra", + "lightbox.zoom_in": "Renna að raunstærð", + "lightbox.zoom_out": "Renna að svo passi", "limited_account_hint.action": "Birta notandasniðið samt", "limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.", "link_preview.author": "Frá {name}", @@ -503,7 +509,7 @@ "notification.favourite": "{name} setti færsluna þína í eftirlæti", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# í viðbót hefur} other {# í viðbót hafa}} sett færsluna þína í eftirlæti", "notification.follow": "{name} fylgist með þér", - "notification.follow.name_and_others": "{name} og {count, plural, one {# í viðbót fylgdist} other {# í viðbót fylgdust}} með þér", + "notification.follow.name_and_others": "{name} og {count, plural, one {# í viðbót fylgdist} other {# í viðbót fylgdust}} með þér", "notification.follow_request": "{name} hefur beðið um að fylgjast með þér", "notification.follow_request.name_and_others": "{name} og {count, plural, one {# í viðbót hefur} other {# í viðbót hafa}} beðið um að fylgjast með þér", "notification.label.mention": "Minnst á", @@ -511,6 +517,7 @@ "notification.label.private_reply": "Einkasvar", "notification.label.reply": "Svara", "notification.mention": "Minnst á", + "notification.mentioned_you": "{name} minntist á þig", "notification.moderation-warning.learn_more": "Kanna nánar", "notification.moderation_warning": "Þú hefur fengið aðvörun frá umsjónarmanni", "notification.moderation_warning.action_delete_statuses": "Sumar færslurnar þínar hafa verið fjarlægðar.", @@ -536,11 +543,11 @@ "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Samþykkja beiðni} other {Samþykkja beiðnir}}", "notification_requests.confirm_accept_multiple.message": "Þú ert að fara að samþykkja {count, plural, one {eina beiðni um tilkynningar} other {# beiðnir um tilkynningar}}. Ertu viss um að þú viljir halda áfram?", "notification_requests.confirm_accept_multiple.title": "Samþykkja beiðnir um tilkynningar?", - "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Afgreiða beiðni} other {Afgreiða beiðnir}}", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Hafna beiðni} other {Hafna beiðnum}}", "notification_requests.confirm_dismiss_multiple.message": "Þú ert að fara að hunsa {count, plural, one {eina beiðni um tilkynningar} other {# beiðnir um tilkynningar}}. Þú munt ekki eiga auðvelt með að skoða {count, plural, one {hana} other {þær}} aftur síðar. Ertu viss um að þú viljir halda áfram?", "notification_requests.confirm_dismiss_multiple.title": "Hunsa beiðnir um tilkynningar?", - "notification_requests.dismiss": "Afgreiða", - "notification_requests.dismiss_multiple": "{count, plural, one {Afgreiða # beiðni…} other {Afgreiða # beiðnir…}}", + "notification_requests.dismiss": "Hafna", + "notification_requests.dismiss_multiple": "{count, plural, one {Hafna # beiðni…} other {Hafna # beiðnum…}}", "notification_requests.edit_selection": "Breyta", "notification_requests.exit_selection": "Lokið", "notification_requests.explainer_for_limited_account": "Tilkynningar frá þessum notanda hafa verið síaðar þar sem aðgangur hans hefur verið takmarkaður af umsjónarmanni.", @@ -561,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Skyndisíustika", "notifications.column_settings.follow": "Nýir fylgjendur:", "notifications.column_settings.follow_request": "Nýjar beiðnir um að fylgjast með:", + "notifications.column_settings.group": "Hópur", "notifications.column_settings.mention": "Tilvísanir:", "notifications.column_settings.poll": "Niðurstöður könnunar:", "notifications.column_settings.push": "Ýti-tilkynningar", @@ -847,6 +855,11 @@ "upload_error.poll": "Innsending skráa er ekki leyfð í könnunum.", "upload_form.audio_description": "Lýstu þessu fyrir heyrnarskerta", "upload_form.description": "Lýstu þessu fyrir sjónskerta", + "upload_form.drag_and_drop.instructions": "Til að taka í myndefnisviðhengi skaltu ýta á bilslána eða Enter. Til að draga geturðu notað örvalyklana til að færa viðhengið í samsvarandi áttir. Ýttu aftur á bilslána eða Enter til að sleppa viðhenginu á nýja staðinn, eða ýttu á Escape til að hætta við.", + "upload_form.drag_and_drop.on_drag_cancel": "Hætt var við að draga. Myndefnisviðhenginu {item} var sleppt.", + "upload_form.drag_and_drop.on_drag_end": "Myndefnisviðhenginu {item} var sleppt.", + "upload_form.drag_and_drop.on_drag_over": "Myndefnisviðhengið {item} var fært.", + "upload_form.drag_and_drop.on_drag_start": "Tók í myndefnisviðhengið {item}.", "upload_form.edit": "Breyta", "upload_form.thumbnail": "Skipta um smámynd", "upload_form.video_description": "Lýstu þessu fyrir fólk sem heyrir illa eða er með skerta sjón", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index ef709516c2..b6de7de5a7 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -1,6 +1,6 @@ { "about.blocks": "Server moderati", - "about.contact": "Contatto:", + "about.contact": "Contatti:", "about.disclaimer": "Mastodon è un software libero e open-source e un marchio di Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Motivo non disponibile", "about.domain_blocks.preamble": "Mastodon, generalmente, ti consente di visualizzare i contenuti e interagire con gli utenti da qualsiasi altro server nel fediverso. Queste sono le eccezioni che sono state fatte su questo particolare server.", @@ -36,10 +36,10 @@ "account.followers.empty": "Ancora nessuno segue questo utente.", "account.followers_counter": "{count, plural, one {{counter} seguace} other {{counter} seguaci}}", "account.following": "Seguiti", - "account.following_counter": "{count, plural, one {{counter} segui} other {{counter} segui}}", + "account.following_counter": "{count, plural, one {{counter} segui} other {{counter} seguiti}}", "account.follows.empty": "Questo utente non segue ancora nessuno.", "account.go_to_profile": "Vai al profilo", - "account.hide_reblogs": "Nascondi potenziamenti da @{name}", + "account.hide_reblogs": "Nascondi condivisioni da @{name}", "account.in_memoriam": "In memoria.", "account.joined_short": "Iscritto", "account.languages": "Modifica le lingue d'iscrizione", @@ -61,7 +61,7 @@ "account.requested": "In attesa d'approvazione. Clicca per annullare la richiesta di seguire", "account.requested_follow": "{name} ha richiesto di seguirti", "account.share": "Condividi il profilo di @{name}", - "account.show_reblogs": "Mostra potenziamenti da @{name}", + "account.show_reblogs": "Mostra condivisioni da @{name}", "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} post}}", "account.unblock": "Sblocca @{name}", "account.unblock_domain": "Sblocca il dominio {domain}", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Smettere di seguire l'utente?", "content_warning.hide": "Nascondi post", "content_warning.show": "Mostra comunque", + "content_warning.show_more": "Mostra di più", "conversation.delete": "Elimina conversazione", "conversation.mark_as_read": "Segna come letto", "conversation.open": "Visualizza conversazione", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova", "filter_modal.select_filter.title": "Filtra questo post", "filter_modal.title.status": "Filtra un post", - "filter_warning.matches_filter": "Corrisponde al filtro \"{title}\"", + "filter_warning.matches_filter": "Corrisponde al filtro “{title}”", "filtered_notifications_banner.pending_requests": "Da {count, plural, =0 {nessuno} one {una persona} other {# persone}} che potresti conoscere", "filtered_notifications_banner.title": "Notifiche filtrate", "firehose.all": "Tutto", @@ -405,11 +406,11 @@ "keyboard_shortcuts.column": "Focalizza alla colonna", "keyboard_shortcuts.compose": "Focalizza l'area di composizione testuale", "keyboard_shortcuts.description": "Descrizione", - "keyboard_shortcuts.direct": "per aprire la colonna menzioni private", + "keyboard_shortcuts.direct": "Apre la colonna \"menzioni private\"", "keyboard_shortcuts.down": "Scorri in basso nell'elenco", "keyboard_shortcuts.enter": "Apre il post", "keyboard_shortcuts.favourite": "Contrassegna il post come preferito", - "keyboard_shortcuts.favourites": "Apri l'elenco dei preferiti", + "keyboard_shortcuts.favourites": "Apre l'elenco dei preferiti", "keyboard_shortcuts.federated": "Apre la cronologia federata", "keyboard_shortcuts.heading": "Scorciatoie da tastiera", "keyboard_shortcuts.home": "Apre la cronologia domestica", @@ -508,7 +509,7 @@ "notification.favourite": "{name} ha aggiunto il tuo post ai preferiti", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# altro} other {altri #}} hanno aggiunto il tuo post ai preferiti", "notification.follow": "{name} ha iniziato a seguirti", - "notification.follow.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno iniziato a seguirti", + "notification.follow.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno iniziato a seguirti", "notification.follow_request": "{name} ha richiesto di seguirti", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno richiesto di seguirti", "notification.label.mention": "Menziona", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Rispondi in privato", "notification.label.reply": "Rispondi", "notification.mention": "Menziona", + "notification.mentioned_you": "{name} ti ha menzionato", "notification.moderation-warning.learn_more": "Scopri di più", "notification.moderation_warning": "Hai ricevuto un avviso di moderazione", "notification.moderation_warning.action_delete_statuses": "Alcuni dei tuoi post sono stati rimossi.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra del filtro veloce", "notifications.column_settings.follow": "Nuovi seguaci:", "notifications.column_settings.follow_request": "Nuove richieste di seguirti:", + "notifications.column_settings.group": "Gruppo", "notifications.column_settings.mention": "Menzioni:", "notifications.column_settings.poll": "Risultati del sondaggio:", "notifications.column_settings.push": "Notifiche push", @@ -637,11 +640,11 @@ "onboarding.start.title": "Ce l'hai fatta!", "onboarding.steps.follow_people.body": "Gestisci la tua cronologia. Riempila di persone interessanti.", "onboarding.steps.follow_people.title": "Segui {count, plural, one {una persona} other {# persone}}", - "onboarding.steps.publish_status.body": "Dì ciao al mondo.", + "onboarding.steps.publish_status.body": "", "onboarding.steps.publish_status.title": "Scrivi il tuo primo post", "onboarding.steps.setup_profile.body": "Gli altri hanno maggiori probabilità di interagire con te se completi il tuo profilo.", "onboarding.steps.setup_profile.title": "Personalizza il tuo profilo", - "onboarding.steps.share_profile.body": "Fai sapere ai tuoi amici come trovarti su Mastodon!", + "onboarding.steps.share_profile.body": "Fai sapere ai tuoi amici come trovarti su Mastodonte", "onboarding.steps.share_profile.title": "Condividi il tuo profilo", "onboarding.tips.2fa": "Lo sapevi? Puoi proteggere il tuo account impostando l'autenticazione a due fattori nelle impostazioni del tuo account. Funziona con qualsiasi app TOTP di tua scelta, nessun numero di telefono necessario!", "onboarding.tips.accounts_from_other_servers": "Lo sapevi? Dal momento che Mastodon è decentralizzato, alcuni profili che incontrerai sono ospitati su server diversi dal tuo. Ma puoi interagire con loro senza problemi! Il loro server è nella seconda metà del loro nome utente!", @@ -661,7 +664,7 @@ "poll_button.add_poll": "Aggiungi un sondaggio", "poll_button.remove_poll": "Rimuovi il sondaggio", "privacy.change": "Modifica privacy del post", - "privacy.direct.long": "Tutti quelli menzioniati nel post", + "privacy.direct.long": "Tutti quelli menzionati nel post", "privacy.direct.short": "Persone specifiche", "privacy.private.long": "Solo i tuoi follower", "privacy.private.short": "Follower", @@ -852,6 +855,11 @@ "upload_error.poll": "Caricamento del file non consentito con i sondaggi.", "upload_form.audio_description": "Descrizione per persone con deficit uditivi", "upload_form.description": "Descrizione per ipovedenti", + "upload_form.drag_and_drop.instructions": "Per selezionare un allegato multimediale, premi Spazio o Invio. Mentre trascini, usa i tasti con le frecce per spostare l'allegato multimediale in una qualsiasi direzione. Premi di nuovo Spazio o Invio per rilasciare l'allegato multimediale nella sua nuova posizione, oppure premi Esc per annullare.", + "upload_form.drag_and_drop.on_drag_cancel": "Il trascinamento è stato annullato. L'allegato multimediale {item} è stato eliminato.", + "upload_form.drag_and_drop.on_drag_end": "L'allegato multimediale {item} è stato eliminato.", + "upload_form.drag_and_drop.on_drag_over": "L'allegato multimediale {item} è stato spostato.", + "upload_form.drag_and_drop.on_drag_start": "L'allegato multimediale {item} è stato ricevuto.", "upload_form.edit": "Modifica", "upload_form.thumbnail": "Cambia la miniatura", "upload_form.video_description": "Descrizione per persone con deficit uditivi o ipovedenti", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 5426ad0b87..e05c320d1f 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -97,6 +97,7 @@ "alert.rate_limited.title": "制限に達しました", "alert.unexpected.message": "不明なエラーが発生しました。", "alert.unexpected.title": "エラー!", + "alt_text_badge.title": "代替テキスト", "announcement.announcement": "お知らせ", "antennas.account.add": "アンテナに追加", "antennas.account.remove": "アンテナから外す", @@ -148,7 +149,7 @@ "bookmark_categories.status.add": "分類に追加", "bookmark_categories.status.remove": "分類から削除", "bookmark_categories.subheading": "あなたの分類", - "block_modal.remote_users_caveat": "このサーバーはあなたのブロックの意思を尊重するように {domain} へ通知します。しかしながら、ブロックの扱い方はサーバーによってさまざまで、相手のサーバーは必ずしもこのブロックを適切に取り扱うものではないことに留意が必要です。また、あなたの公開投稿はサーバーからログアウトすれば誰からも見ることができます。", + "block_modal.remote_users_caveat": "このサーバーはあなたのブロックの意思を尊重するように {domain} へ通知します。しかし、サーバーによってはブロック機能の扱いが異なる場合もありえるため、相手のサーバー側で求める通りの処理が行われる確証はありません。また、公開投稿はユーザーがログアウト状態であれば閲覧できる可能性があります。", "block_modal.show_less": "注意事項を閉じる", "block_modal.show_more": "注意事項", "block_modal.they_cant_mention": "相手はあなたへの返信やフォローができなくなります。", @@ -283,7 +284,8 @@ "confirmations.unfollow.message": "本当に{name}さんのフォローを解除しますか?", "confirmations.unfollow.title": "フォローを解除しようとしています", "content_warning.hide": "内容を隠す", - "content_warning.show": "承知の上で表示", + "content_warning.show": "承知して表示", + "content_warning.show_more": "続きを表示", "conversation.delete": "会話を削除", "conversation.mark_as_read": "既読にする", "conversation.open": "会話を表示", @@ -309,18 +311,20 @@ "domain_block_modal.they_cant_follow": "このサーバーのユーザーはあなたをフォローできなくなります。", "domain_block_modal.they_wont_know": "ドメインブロックは相手からはわかりません。", "domain_block_modal.title": "ドメインをブロックしますか?", + "domain_block_modal.you_will_lose_num_followers": "「{followingCount, plural, other {{followingCountDisplay}フォロー}}」、「{followersCount, plural, other {{followersCountDisplay}フォロワー}}」を失うことになります。", + "domain_block_modal.you_will_lose_relationships": "このサーバーにいるすべてのフォローとフォロワーを失うことになります。", "domain_block_modal.you_wont_see_posts": "このサーバーのユーザーからの投稿や通知が閲覧できなくなります。", - "domain_pill.activitypub_lets_connect": "Mastodonからほかのソーシャルアプリのユーザーへ、そのまた別のアプリのユーザーへと、それぞれが互いにつながり関わり合うことをこのActivityPubの仕組みが実現しています。", + "domain_pill.activitypub_lets_connect": "この仕組みによって、Mastodonはもちろん、他のさまざまなソーシャルアプリも含めたユーザーとのつながりや交流が実現しています。", "domain_pill.activitypub_like_language": "ActivityPubとは、Mastodonがほかのサーバーと会話をするときにしゃべる「言葉」のようなものです。", "domain_pill.server": "サーバー", - "domain_pill.their_handle": "このユーザーのユーザーID:", + "domain_pill.their_handle": "このユーザーのハンドル:", "domain_pill.their_server": "ユーザーの仮想の住所です。そのユーザーIDによるすべての投稿を保持しています。", "domain_pill.their_username": "ユーザーを識別する名前です。ユーザー名はひとつのサーバー内においては唯一無二の名前ですが、ほかのサーバーには同名のユーザーがいることもあります。", "domain_pill.username": "ユーザー名", - "domain_pill.whats_in_a_handle": "ユーザーIDについて", - "domain_pill.who_they_are": "そのユーザーが「誰であるか」「どこに住んでいるか」はユーザーIDから知ることができます。これによりの集まりからなるネットワークを介してそれぞれのユーザーと関わり合うことができます。", - "domain_pill.who_you_are": "ほかのユーザーはあなたが「誰であるか」「どこに住んでいるか」をユーザーIDから認識でき、これによりの集まりからなるネットワークを介してあなたと関わり合うことができます。", - "domain_pill.your_handle": "あなたのユーザーID:", + "domain_pill.whats_in_a_handle": "ユーザーハンドルについて", + "domain_pill.who_they_are": "ユーザーハンドルには相手の「名前」と「住所」の情報が書いてあるため、が連合してつくるソーシャルネットワークのユーザーであれば交流が可能です。", + "domain_pill.who_you_are": "ユーザーハンドルにはあなたの「名前」と「住所」の情報が書いてあるため、が連合してつくるソーシャルネットワークのユーザーであればあなたと交流が可能です。", + "domain_pill.your_handle": "あなたのハンドル:", "domain_pill.your_server": "あなたの仮想の住所です。投稿した内容はすべてここに保持されます。もし今いるサーバーが気に入っていない場合は、フォロワーを引き継いで別のサーバーに引っ越すこともできます。", "domain_pill.your_username": "あなたを識別する名前です。ユーザー名はひとつのサーバー内においては唯一無二の名前ですが、ほかのサーバーには同名のユーザーがいることもあります。", "embed.instructions": "下記のコードをコピーしてウェブサイトに埋め込みます。", @@ -397,7 +401,7 @@ "filter_modal.select_filter.subtitle": "既存のカテゴリーを使用するか新規作成します", "filter_modal.select_filter.title": "この投稿をフィルターする", "filter_modal.title.status": "投稿をフィルターする", - "filter_warning.matches_filter": "フィルター「{title}」に一致する投稿です", + "filter_warning.matches_filter": "フィルター「{title}」に一致する投稿", "filtered_notifications_banner.pending_requests": "{count, plural, =0 {すべて完了しました} other {#人の通知がブロックされています}}", "filtered_notifications_banner.title": "保留中の通知", "firehose.all": "すべて", @@ -605,21 +609,22 @@ "notification.admin.report_statuses": "{name}さんが{target}さんを「{category}」として通報しました", "notification.admin.report_statuses_other": "{name}さんが{target}さんを通報しました", "notification.admin.sign_up": "{name}さんがサインアップしました", - "notification.admin.sign_up.name_and_others": "{name}さんほか{count, plural, other {#人}}がサインアップしました", + "notification.admin.sign_up.name_and_others": "{name}さんとほか{count, plural, other {#人}}がサインアップしました", "notification.emoji_reaction": "{name}さんがあなたの投稿に絵文字をつけました", "notification.emoji_reaction.name_and_others_with_link": "{name}さんと{count, plural, other {他#名}}があなたの投稿に絵文字をつけました", "notification.favourite": "{name}さんがお気に入りしました", - "notification.favourite.name_and_others_with_link": "{name}さんほか{count, plural, other {#人}}がお気に入りしました", + "notification.favourite.name_and_others_with_link": "{name}さんとほか{count, plural, other {#人}}がお気に入りしました", "notification.follow": "{name}さんにフォローされました", - "notification.follow.name_and_others": "{name}さんほか{count, plural, other {#人}}にフォローされました", + "notification.follow.name_and_others": "{name}さんとほか{count, plural, other {#人}}にフォローされました", "notification.follow_request": "{name}さんがあなたにフォローリクエストしました", - "notification.follow_request.name_and_others": "{name}さんほか{count, plural, other {#人}}があなたにフォローリクエストしました", + "notification.follow_request.name_and_others": "{name}さんとほか{count, plural, other {#人}}があなたにフォローリクエストしました", "notification.label.mention": "メンション", "notification.label.private_mention": "非公開の返信 (メンション)", "notification.label.private_reply": "非公開の返信", "notification.label.reply": "返信", "notification.list_status": "{name}さんの投稿が{listName}に追加されました", "notification.mention": "メンション", + "notification.mentioned_you": "{name} さんがあなたに返信しました", "notification.moderation-warning.learn_more": "さらに詳しく", "notification.moderation_warning": "管理者から警告が来ています", "notification.moderation_warning.action_delete_statuses": "あなたによるいくつかの投稿が削除されました。", @@ -632,7 +637,7 @@ "notification.own_poll": "アンケートが終了しました", "notification.poll": "投票したアンケートが終了しました", "notification.reblog": "{name}さんがあなたの投稿をブーストしました", - "notification.reblog.name_and_others_with_link": "{name}さんほか{count, plural, other {#人}}にブーストされました", + "notification.reblog.name_and_others_with_link": "{name}さんとほか{count, plural, other {#人}}がブーストしました", "notification.relationships_severance_event": "{name} との関係が失われました", "notification.relationships_severance_event.account_suspension": "{from} の管理者が {target} さんを停止したため、今後このユーザーとの交流や新しい投稿の受け取りができなくなりました。", "notification.relationships_severance_event.domain_block": "{from} の管理者が {target} をブロックしました。これにより{followersCount}フォロワーと{followingCount, plural, other {#フォロー}}が失われました。", @@ -672,6 +677,7 @@ "notifications.column_settings.filter_bar.category": "クイックフィルターバー:", "notifications.column_settings.follow": "新しいフォロワー:", "notifications.column_settings.follow_request": "新しいフォローリクエスト:", + "notifications.column_settings.group": "グループ", "notifications.column_settings.mention": "返信:", "notifications.column_settings.poll": "アンケート結果:", "notifications.column_settings.push": "プッシュ通知", @@ -920,6 +926,7 @@ "status.cancel_reblog": "ブースト解除", "status.cancel_reblog_private": "ブースト解除", "status.cannot_reblog": "この投稿はブーストできません", + "status.continued_thread": "続きのスレッド", "status.copy": "投稿へのリンクをコピー", "status.delete": "削除", "status.detailed_status": "詳細な会話ビュー", @@ -970,6 +977,7 @@ "status.redraft": "削除して下書きに戻す", "status.reference": "ひかえめな引用", "status.remove_bookmark": "ブックマークを削除", + "status.replied_in_thread": "ほかのユーザーへ", "status.replied_to": "{name}さんへの返信", "status.reply": "返信", "status.replyAll": "全員に返信", @@ -1007,6 +1015,11 @@ "upload_error.poll": "アンケートではファイルをアップロードできません。", "upload_form.audio_description": "聴き取りが難しいユーザーへの説明", "upload_form.description": "視覚的に閲覧が難しいユーザーへの説明", + "upload_form.drag_and_drop.instructions": "メディア添付ファイルを選択するには、スペースキーまたはエンターキーを押してください。ドラッグ中は、矢印キーを使ってメディア添付ファイルを任意の方向に移動できます。再度スペースキーまたはエンターキーを押すと新しい位置にメディア添付ファイルをドロップできます。キャンセルするにはエスケープキーを押してください。", + "upload_form.drag_and_drop.on_drag_cancel": "ドラッグがキャンセルされました。メディア添付ファイル {item} がドロップされました。", + "upload_form.drag_and_drop.on_drag_end": "メディア添付ファイル {item} がドロップされました。", + "upload_form.drag_and_drop.on_drag_over": "メディア添付ファイル {item} が移動されました。", + "upload_form.drag_and_drop.on_drag_start": "メディア添付ファイル {item} を選択しました。", "upload_form.edit": "編集", "upload_form.thumbnail": "サムネイルを変更", "upload_form.video_description": "聴き取りや視覚的に閲覧が難しいユーザーへの説明", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index fc0ed0730d..bdd99fc8f7 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -6,20 +6,20 @@ "account.badges.group": "ჯგუფი", "account.block": "დაბლოკე @{name}", "account.block_domain": "დაიმალოს ყველაფერი დომენიდან {domain}", - "account.blocked": "დაიბლოკა", + "account.blocked": "დაბლოკილია", "account.cancel_follow_request": "Withdraw follow request", "account.domain_blocked": "დომენი დამალულია", "account.edit_profile": "პროფილის ცვლილება", "account.endorse": "გამორჩევა პროფილზე", - "account.featured_tags.last_status_never": "პოსტები არ არის", + "account.featured_tags.last_status_never": "პოსტების გარეშე", "account.follow": "გაყოლა", "account.followers": "მიმდევრები", "account.hide_reblogs": "დაიმალოს ბუსტები @{name}-სგან", "account.media": "მედია", "account.mention": "ასახელეთ @{name}", "account.mute": "გააჩუმე @{name}", - "account.muted": "გაჩუმებული", - "account.posts": "ტუტები", + "account.muted": "დადუმებულია", + "account.posts": "პოსტები", "account.posts_with_replies": "ტუტები და პასუხები", "account.report": "დაარეპორტე @{name}", "account.requested": "დამტკიცების მოლოდინში. დააწკაპუნეთ რომ უარყოთ დადევნების მოთხონვა", @@ -43,7 +43,7 @@ "column.community": "ლოკალური თაიმლაინი", "column.domain_blocks": "დამალული დომენები", "column.follow_requests": "დადევნების მოთხოვნები", - "column.home": "სახლი", + "column.home": "საწყისი", "column.lists": "სიები", "column.mutes": "გაჩუმებული მომხმარებლები", "column.notifications": "შეტყობინებები", @@ -53,9 +53,9 @@ "column_header.hide_settings": "პარამეტრების დამალვა", "column_header.moveLeft_settings": "სვეტის მარცხნივ გადატანა", "column_header.moveRight_settings": "სვეტის მარჯვნივ გადატანა", - "column_header.pin": "აპინვა", + "column_header.pin": "მიმაგრება", "column_header.show_settings": "პარამეტრების ჩვენება", - "column_header.unpin": "პინის მოხსნა", + "column_header.unpin": "მოხსნა", "column_subheading.settings": "პარამეტრები", "community.column_settings.media_only": "მხოლოდ მედია", "compose_form.direct_message_warning_learn_more": "გაიგე მეტი", @@ -67,13 +67,13 @@ "compose_form.publish_form": "Publish", "compose_form.spoiler.marked": "გაფრთხილების უკან ტექსტი დამალულია", "compose_form.spoiler.unmarked": "ტექსტი არაა დამალული", - "confirmation_modal.cancel": "უარყოფა", + "confirmation_modal.cancel": "გაუქმება", "confirmations.block.confirm": "ბლოკი", - "confirmations.delete.confirm": "გაუქმება", + "confirmations.delete.confirm": "წაშლა", "confirmations.delete.message": "დარწმუნებული ხართ, გსურთ გააუქმოთ ეს სტატუსი?", - "confirmations.delete_list.confirm": "გაუქმება", + "confirmations.delete_list.confirm": "წაშლა", "confirmations.delete_list.message": "დარწმუნებული ხართ, გსურთ სამუდამოდ გააუქმოთ ეს სია?", - "confirmations.mute.confirm": "გაჩუმება", + "confirmations.mute.confirm": "დადუმება", "confirmations.redraft.confirm": "გაუქმება და გადანაწილება", "confirmations.unfollow.confirm": "ნუღარ მიჰყვები", "confirmations.unfollow.message": "დარწმუნებული ხართ, აღარ გსურთ მიჰყვებოდეთ {name}-ს?", @@ -82,8 +82,8 @@ "embed.instructions": "ეს სტატუსი ჩასვით თქვენს ვებ-საიტზე შემდეგი კოდის კოპირებით.", "embed.preview": "ესაა თუ როგორც გამოჩნდება:", "emoji_button.activity": "აქტივობა", - "emoji_button.custom": "პერსონალიზირებული", - "emoji_button.flags": "დროშები", + "emoji_button.custom": "მომხმარებლის", + "emoji_button.flags": "ალმები", "emoji_button.food": "საჭმელი და სასლმელი", "emoji_button.label": "ემოჯის ჩასმა", "emoji_button.nature": "ბუმება", @@ -122,7 +122,7 @@ "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "კლავიატურის სწრაფი ბმულები", "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.hotkey": "ცხელი კლავიში", + "keyboard_shortcuts.hotkey": "მალსახმობი ღილაკი", "keyboard_shortcuts.legend": "ამ ლეგენდის გამოსაჩენად", "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "ავტორის დასახელებლად", @@ -204,20 +204,20 @@ "relative_time.just_now": "ახლა", "relative_time.minutes": "{number}წთ", "relative_time.seconds": "{number}წმ", - "reply_indicator.cancel": "უარყოფა", + "reply_indicator.cancel": "გაუქმება", "report.forward": "ფორვარდი {target}-ს", "report.forward_hint": "ანგარიში სხვა სერვერიდანაა. გავაგზავნოთ რეპორტის ანონიმური ასლიც?", "report.placeholder": "დამატებითი კომენტარები", - "report.submit": "დასრულება", + "report.submit": "გადაცემა", "report.target": "არეპორტებთ {target}", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "search.placeholder": "ძებნა", "search_results.hashtags": "ჰეშტეგები", - "search_results.statuses": "ტუტები", - "sign_in_banner.sign_in": "Sign in", + "search_results.statuses": "პოსტები", + "sign_in_banner.sign_in": "შესვლა", "status.admin_status": "Open this status in the moderation interface", "status.block": "დაბლოკე @{name}", - "status.cancel_reblog_private": "ბუსტის მოშორება", + "status.cancel_reblog_private": "ბუსტის მოხსნა", "status.cannot_reblog": "ეს პოსტი ვერ დაიბუსტება", "status.copy": "Copy link to status", "status.delete": "წაშლა", @@ -246,7 +246,7 @@ "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", "status.unmute_conversation": "საუბარზე გაჩუმების მოშორება", "status.unpin": "პროფილიდან პინის მოშორება", - "tabs_bar.home": "სახლი", + "tabs_bar.home": "საწყისი", "tabs_bar.notifications": "შეტყობინებები", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", "ui.beforeunload": "თქვენი დრაფტი გაუქმდება თუ დატოვებთ მასტოდონს.", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 9e2c9f3af8..74d4be9d0d 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -1,11 +1,11 @@ { - "about.blocks": "Ulac agbur", + "about.blocks": "Iqeddacen yettwaɛassen", "about.contact": "Anermis:", "about.disclaimer": "Mastodon d aseɣẓan ilelli, d aseɣẓan n uɣbalu yeldin, d tnezzut n Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Ulac taɣẓint", "about.domain_blocks.preamble": "Maṣṭudun s umata yeḍmen-ak ad teẓreḍ agbur, ad tesdemreḍ akked yimseqdacen-nniḍen seg yal aqeddac deg fedivers. Ha-tent-an ɣur-k tsuraf i yellan deg uqeddac-agi.", "about.domain_blocks.silenced.title": "Ɣur-s talast", - "about.domain_blocks.suspended.title": "Yeḥbes", + "about.domain_blocks.suspended.title": "Yettwaḥbes", "about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.", "about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}", "about.rules": "Ilugan n uqeddac", @@ -167,6 +167,7 @@ "confirmations.unfollow.message": "Tetḥeqqeḍ belli tebɣiḍ ur teṭafaṛeḍ ara {name}?", "content_warning.hide": "Ffer tasuffeɣt", "content_warning.show": "Ssken-d akken tebɣu tili", + "content_warning.show_more": "Sken-d ugar", "conversation.delete": "Kkes adiwenni", "conversation.mark_as_read": "Creḍ yettwaɣṛa", "conversation.open": "Ssken adiwenni", @@ -275,9 +276,11 @@ "hashtag.column_settings.tag_toggle": "Glu-d s yihacṭagen imerna i ujgu-agi", "hashtag.counter_by_accounts": "{count, plural, one {{counter} imtekki} other {{counter} n imtekkiyen}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}}", - "hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} assa", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} ass-a", "hashtag.follow": "Ḍfeṛ ahacṭag", "hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}", + "hints.threads.replies_may_be_missing": "Tiririyin d-yusan deg iqeddacen nniḍen, yezmer ur d-ddant ara.", + "hints.threads.see_more": "Wali ugar n tririt deg {domain}", "home.column_settings.show_reblogs": "Ssken-d beṭṭu", "home.column_settings.show_replies": "Ssken-d tiririyin", "home.hide_announcements": "Ffer ulɣuyen", @@ -423,6 +426,7 @@ "notifications.column_settings.filter_bar.category": "Iri n usizdeg uzrib", "notifications.column_settings.follow": "Imeḍfaṛen imaynuten:", "notifications.column_settings.follow_request": "Isuturen imaynuten n teḍfeṛt:", + "notifications.column_settings.group": "Agraw", "notifications.column_settings.mention": "Abdar:", "notifications.column_settings.poll": "Igemmaḍ n usenqed:", "notifications.column_settings.push": "Alɣuten yettudemmren", @@ -444,6 +448,7 @@ "notifications.mark_as_read": "Creḍ meṛṛa alɣuten am wakken ttwaɣran", "notifications.permission_denied": "D awezɣi ad yili wermad n walɣuten n tnarit axateṛ turagt tettwagdel", "notifications.policy.drop": "Anef-as", + "notifications.policy.filter": "Sizdeg", "notifications.policy.filter_new_accounts.hint": "Imiḍanen imaynuten i d-yennulfan deg {days, plural, one {yiwen n wass} other {# n wussan}} yezrin", "notifications.policy.filter_new_accounts_title": "Imiḍan imaynuten", "notifications.policy.filter_not_followers_hint": "Ula d wid akked tid i k·m-id-iḍefren, ur wwiḍen ara {days, plural, one {yiwen wass} other {# wussan}}", @@ -513,7 +518,7 @@ "relative_time.just_now": "tura", "relative_time.minutes": "{number}tis", "relative_time.seconds": "{number}tas", - "relative_time.today": "assa", + "relative_time.today": "ass-a", "reply_indicator.cancel": "Sefsex", "reply_indicator.poll": "Afmiḍi", "report.block": "Sewḥel", @@ -550,6 +555,7 @@ "report_notification.attached_statuses": "{count, plural, one {{count} n tsuffeɣt} other {{count} n tsuffiɣin}} ttwaqnent", "report_notification.categories.legal": "Azerfan", "report_notification.categories.other": "Ayen nniḍen", + "report_notification.categories.other_sentence": "ayen nniḍen", "report_notification.categories.spam": "Aspam", "report_notification.categories.spam_sentence": "aspam", "report_notification.open": "Ldi aneqqis", @@ -562,6 +568,7 @@ "search.quick_action.status_search": "Tisuffaɣ mṣadan d {x}", "search.search_or_paste": "Nadi neɣ senṭeḍ URL", "search_popout.full_text_search_disabled_message": "Ur yelli ara deg {domain}.", + "search_popout.full_text_search_logged_out_message": "Yella kan mi ara tiliḍ d uqqin.", "search_popout.language_code": "Tangalt ISO n tutlayt", "search_popout.options": "Iwellihen n unadi", "search_popout.quick_actions": "Tigawin tiruradin", @@ -584,11 +591,13 @@ "status.bookmark": "Creḍ", "status.cancel_reblog_private": "Sefsex beṭṭu", "status.cannot_reblog": "Tasuffeɣt-a ur tezmir ara ad tettwabḍu tikelt-nniḍen", + "status.continued_thread": "Asqerdec yettkemmil", "status.copy": "Nɣel assaɣ ɣer tasuffeɣt", "status.delete": "Kkes", "status.direct": "Bder-d @{name} weḥd-s", "status.direct_indicator": "Abdar uslig", "status.edit": "Ẓreg", + "status.edited": "Taẓrigt taneggarut {date}", "status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}", "status.embed": "Awi-d tangalt n weslaɣ", "status.favourite": "Amenyaf", @@ -614,9 +623,10 @@ "status.reblogs.empty": "Ula yiwen ur yebḍi tajewwiqt-agi ar tura. Ticki yebḍa-tt yiwen, ad d-iban da.", "status.redraft": "Kkes tɛiwdeḍ tira", "status.remove_bookmark": "Kkes tacreḍt", + "status.replied_in_thread": "Y·t·erra-d deg usqerdec", "status.replied_to": "Y·terra-yas i {name}", "status.reply": "Err", - "status.replyAll": "Err i lxiḍ", + "status.replyAll": "Err i wesqerdec", "status.report": "Cetki ɣef @{name}", "status.sensitive_warning": "Agbur amḥulfu", "status.share": "Bḍu", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 2054dfc0ff..48b3e3803c 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -113,7 +113,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": "마스토돈에서 가입", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "사용자를 언팔로우 할까요?", "content_warning.hide": "게시물 숨기기", "content_warning.show": "무시하고 보기", + "content_warning.show_more": "더 보기", "conversation.delete": "대화 삭제", "conversation.mark_as_read": "읽은 상태로 표시", "conversation.open": "대화 보기", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다", "filter_modal.select_filter.title": "이 게시물을 필터", "filter_modal.title.status": "게시물 필터", - "filter_warning.matches_filter": "\"{title}\" 필터에 걸림", + "filter_warning.matches_filter": "\"{title}\" 필터에 걸림", "filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터", "filtered_notifications_banner.title": "걸러진 알림", "firehose.all": "모두", @@ -317,7 +318,7 @@ "follow_suggestions.curated_suggestion": "스태프의 추천", "follow_suggestions.dismiss": "다시 보지 않기", "follow_suggestions.featured_longer": "{domain} 팀이 손수 고름", - "follow_suggestions.friends_of_friends_longer": "내가 팔로우 하는 사람들 사이에서 인기", + "follow_suggestions.friends_of_friends_longer": "내가 팔로우한 사람들 사이에서 인기", "follow_suggestions.hints.featured": "이 프로필은 {domain} 팀이 손수 선택했습니다.", "follow_suggestions.hints.friends_of_friends": "이 프로필은 내가 팔로우 하는 사람들에게서 유명합니다.", "follow_suggestions.hints.most_followed": "이 프로필은 {domain}에서 가장 많이 팔로우 된 사람들 중 하나입니다.", @@ -351,7 +352,7 @@ "hashtag.column_settings.tag_toggle": "추가 해시태그를 이 컬럼에 추가합니다", "hashtag.counter_by_accounts": "{count, plural, other {참여자 {counter}명}}", "hashtag.counter_by_uses": "{count, plural, other {게시물 {counter}개}}", - "hashtag.counter_by_uses_today": "금일 {count, plural, other {게시물 {counter}개}}", + "hashtag.counter_by_uses_today": "오늘 {count, plural, other {{counter} 개의 게시물}}", "hashtag.follow": "해시태그 팔로우", "hashtag.unfollow": "해시태그 팔로우 해제", "hashtags.and_other": "…및 {count, plural,other {#개}}", @@ -451,8 +452,8 @@ "lists.exclusive": "홈에서 이 게시물들 숨기기", "lists.new.create": "리스트 추가", "lists.new.title_placeholder": "새 리스트의 이름", - "lists.replies_policy.followed": "팔로우 한 사용자 누구나", - "lists.replies_policy.list": "리스트의 구성원", + "lists.replies_policy.followed": "팔로우 한 사용자 누구나에게", + "lists.replies_policy.list": "리스트의 구성원에게", "lists.replies_policy.none": "모두 제외", "lists.replies_policy.title": "답글 표시:", "lists.search": "팔로우 중인 사람들 중에서 찾기", @@ -499,7 +500,7 @@ "navigation_bar.security": "보안", "not_signed_in_indicator.not_signed_in": "이 정보에 접근하려면 로그인을 해야 합니다.", "notification.admin.report": "{name} 님이 {target}를 신고했습니다", - "notification.admin.report_account": "{name} 님이 {target}의 게시물 {count, plural, other {# 개}}를 {category}로 신고했습니다", + "notification.admin.report_account": "{name} 님이 {target}의 게시물 {count, plural, other {# 개}}를 {category} 사유로 신고했습니다", "notification.admin.report_account_other": "{name} 님이 {target}의 게시물 {count, plural, other {# 개}}를 신고했습니다", "notification.admin.report_statuses": "{name} 님이 {target}을 {category}로 신고했습니다", "notification.admin.report_statuses_other": "{name} 님이 {target}을 신고했습니다", @@ -508,7 +509,7 @@ "notification.favourite": "{name} 님이 내 게시물을 좋아합니다", "notification.favourite.name_and_others_with_link": "{name} 외 {count, plural, other {# 명}}이 내 게시물을 좋아합니다", "notification.follow": "{name} 님이 나를 팔로우했습니다", - "notification.follow.name_and_others": "{name} 외 {count, plural, other {# 명}}이 날 팔로우 했습니다", + "notification.follow.name_and_others": "{name} 외 {count, plural, other {# 명}}이 날 팔로우했습니다", "notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다", "notification.follow_request.name_and_others": "{name} 외 {count, plural, other {# 명}}이 나에게 팔로우 요청을 보냈습니다", "notification.label.mention": "멘션", @@ -516,6 +517,7 @@ "notification.label.private_reply": "개인 답글", "notification.label.reply": "답글", "notification.mention": "멘션", + "notification.mentioned_you": "{name} 님의 멘션", "notification.moderation-warning.learn_more": "더 알아보기", "notification.moderation_warning": "중재 경고를 받았습니다", "notification.moderation_warning.action_delete_statuses": "게시물 몇 개가 삭제되었습니다.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "빠른 필터 막대", "notifications.column_settings.follow": "새 팔로워:", "notifications.column_settings.follow_request": "새 팔로우 요청:", + "notifications.column_settings.group": "그룹화", "notifications.column_settings.mention": "멘션:", "notifications.column_settings.poll": "설문 결과:", "notifications.column_settings.push": "푸시 알림", @@ -595,7 +598,7 @@ "notifications.policy.drop_hint": "공허로 보내고, 다시는 보지 않습니다", "notifications.policy.filter": "필터", "notifications.policy.filter_hint": "걸러진 알림 목록으로 보내기", - "notifications.policy.filter_limited_accounts_hint": "서버 중재자에 의해 제한됨", + "notifications.policy.filter_limited_accounts_hint": "서버 중재자에 의해 제한된 계정들", "notifications.policy.filter_limited_accounts_title": "중재된 계정", "notifications.policy.filter_new_accounts.hint": "{days, plural, one {하루} other {#일}} 안에 만들어진", "notifications.policy.filter_new_accounts_title": "새 계정", @@ -702,7 +705,7 @@ "report.category.title_status": "게시물", "report.close": "완료", "report.comment.title": "우리가 더 알아야 할 내용이 있나요?", - "report.forward": "{target}에 포워드 됨", + "report.forward": "{target}에 전달", "report.forward_hint": "이 계정은 다른 서버에 있습니다. 익명화 된 사본을 해당 서버에도 전송할까요?", "report.mute": "침묵", "report.mute_explanation": "당신은 해당 계정의 게시물을 보지 않게 됩니다. 해당 계정은 여전히 당신을 팔로우 하거나 당신의 게시물을 볼 수 있으며 해당 계정은 자신이 뮤트 되었는지 알지 못합니다.", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 86ecf98446..33ae908796 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -11,13 +11,16 @@ "about.not_available": "Ev zanyarî li ser vê rajekarê nehatine peydakirin.", "about.powered_by": "Medyaya civakî ya nenavendî bi hêzdariya {mastodon}", "about.rules": "Rêbazên rajekar", + "account.account_note_header": "Nîşeyên kesane", "account.add_or_remove_from_list": "Li lîsteyan zêde bike yan jî rake", "account.badges.bot": "Bot", "account.badges.group": "Kom", "account.block": "@{name} asteng bike", "account.block_domain": "Navpera {domain} asteng bike", + "account.block_short": "Asteng bike", "account.blocked": "Astengkirî", "account.cancel_follow_request": "Daxwaza şopandinê vekişîne", + "account.copy": "Girêdanê bo profîlê jê bigire", "account.direct": "Bi taybetî qale @{name} bike", "account.disable_notifications": "Êdî min agahdar neke gava @{name} diweşîne", "account.domain_blocked": "Navper hate astengkirin", @@ -28,9 +31,12 @@ "account.featured_tags.last_status_never": "Şandî tune ne", "account.featured_tags.title": "{name}'s hashtagên taybet", "account.follow": "Bişopîne", + "account.follow_back": "Bişopîne", "account.followers": "Şopîner", "account.followers.empty": "Kesekî hin ev bikarhêner neşopandiye.", + "account.followers_counter": "{count, plural, one {{counter} şopîner} other {{counter} şopîner}}", "account.following": "Dişopîne", + "account.following_counter": "{count, plural, one {{counter} dişopîne} other {{counter} dişopîne}}", "account.follows.empty": "Ev bikarhêner hin kesekî heya niha neşopandiye.", "account.go_to_profile": "Biçe bo profîlê", "account.hide_reblogs": "Bilindkirinên ji @{name} veşêre", @@ -43,7 +49,11 @@ "account.mention": "Qal @{name} bike", "account.moved_to": "{name} diyar kir ku ajimêra nû ya wan niha ev e:", "account.mute": "@{name} bêdeng bike", + "account.mute_notifications_short": "Agahdariyan bêdeng bike", + "account.mute_short": "Bêdeng bike", "account.muted": "Bêdengkirî", + "account.mutual": "Hevpar", + "account.no_bio": "Ti danasîn nehatiye tevlîkirin.", "account.open_original_page": "Rûpela resen veke", "account.posts": "Şandî", "account.posts_with_replies": "Şandî û bersiv", @@ -52,12 +62,14 @@ "account.requested_follow": "{name} dixwaze te bişopîne", "account.share": "Profîla @{name} parve bike", "account.show_reblogs": "Bilindkirinên ji @{name} nîşan bike", + "account.statuses_counter": "{count, plural,one {{counter} şandî}other {{counter} şandî}}", "account.unblock": "Astengê li ser @{name} rake", "account.unblock_domain": "Astengê li ser navperê {domain} rake", "account.unblock_short": "Astengiyê rake", "account.unendorse": "Li ser profîl nîşan neke", "account.unfollow": "Neşopîne", "account.unmute": "@{name} bêdeng neke", + "account.unmute_notifications_short": "Agahdariyan bêdeng bike", "account.unmute_short": "Bêdeng neke", "account_note.placeholder": "Bitikîne bo nîşeyekê tevlî bikî", "admin.dashboard.daily_retention": "Rêjeya ragirtina bikarhêner bi roj piştî tomarkirinê", @@ -72,6 +84,9 @@ "announcement.announcement": "Daxuyanî", "attachments_list.unprocessed": "(bêpêvajo)", "audio.hide": "Dengê veşêre", + "block_modal.show_less": "Kêmtir nîşan bide", + "block_modal.show_more": "Bêtir nîşan bide", + "block_modal.title": "Bikarhêner asteng bike?", "boost_modal.combo": "Ji bo derbas bî carekî din de pêlê {combo} bike", "bundle_column_error.copy_stacktrace": "Rapora çewtiyê jê bigire", "bundle_column_error.error.body": "Rûpela xwestî nehate pêşkêşkirin. Dibe ku ew ji ber şaşetiyeke koda me, an jî pirsgirêkeke lihevhatina gerokê be.", @@ -142,10 +157,12 @@ "confirmations.logout.message": "Ma tu dixwazî ku derkevî?", "confirmations.mute.confirm": "Bêdeng bike", "confirmations.redraft.confirm": "Jê bibe & ji nû ve serrast bike", + "confirmations.redraft.message": "Bi rastî tu dixwazî şandî ye jê bibî û ji nû ve reşnivîsek çê bikî? Bijarte û şandî wê wenda bibin û bersivên ji bo şandiyê resen wê sêwî bimînin.", "confirmations.reply.confirm": "Bersivê bide", "confirmations.reply.message": "Bersiva niha li ser peyama ku tu niha berhev dikî dê binivsîne. Ma pê bawer î ku tu dixwazî bidomînî?", "confirmations.unfollow.confirm": "Neşopîne", "confirmations.unfollow.message": "Ma tu dixwazî ku dev ji şopa {name} berdî?", + "content_warning.show_more": "Bêtir nîşan bide", "conversation.delete": "Axaftinê jê bibe", "conversation.mark_as_read": "Wekî xwendî nîşan bide", "conversation.open": "Axaftinê nîşan bide", @@ -161,6 +178,9 @@ "dismissable_banner.dismiss": "Paşguh bike", "dismissable_banner.explore_links": "Ev çîrokên nûçeyan niha li ser vê û rajekarên din ên tora nenavendî ji aliyê mirovan ve têne axaftin.", "dismissable_banner.explore_tags": "Ev hashtagên ji vê û rajekarên din ên di tora nenavendî de niha li ser vê rajekarê balê dikşînin.", + "domain_block_modal.block": "Rajekar asteng bike", + "domain_pill.server": "Rajekar", + "domain_pill.username": "Navê bikarhêner", "embed.instructions": "Bi jêgirtina koda jêrîn vê şandiyê li ser malpera xwe bi cih bike.", "embed.preview": "Ew ê çawa xuya bibe li vir tê nîşandan:", "emoji_button.activity": "Çalakî", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index ac95b590e3..dba92bd5f5 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -1,18 +1,31 @@ { + "about.blocks": "Servī moderātī", "about.contact": "Ratio:", + "about.disclaimer": "Mastodon est software līberum, apertum fontem, et nōtam commercium Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Ratio abdere est", + "about.domain_blocks.preamble": "Mastodon genērāliter sinit tē contentum ex aliīs servientibus in fedīversō vidēre et cum usoribus ab iīs interāgere. Haē sunt exceptionēs quae in hōc particulārī servientē factae sunt.", "about.domain_blocks.silenced.explanation": "Tua profilia atque tuum contentum ab hac serve praecipue non videbis, nisi explōrēs expresse aut subsequeris et optēs.", + "about.domain_blocks.silenced.title": "Limitātus", + "about.domain_blocks.suspended.explanation": "Nulla data ab hōc servientē processābuntur, servābuntur aut commūtābuntur, faciendumque omnem interactionem aut communicātiōnem cum usoribus ab hōc servientē impossibilem.", + "about.domain_blocks.suspended.title": "suspensus", + "about.not_available": "Haec informātiō in hōc servientē nōn praebita est.", + "about.powered_by": "Nuntii socīālēs decentralizātī ā {mastodon} sustentātī.", + "about.rules": "Servo praecepta", + "account.account_note_header": "Nota personalia", "account.add_or_remove_from_list": "Adde aut ēripe ex tabellīs", "account.badges.bot": "Robotum", "account.badges.group": "Congregatio", "account.block": "Impedire @{name}", "account.block_domain": "Imperire dominium {domain}", + "account.block_short": "Imperire", "account.blocked": "Impeditum est", - "account.cancel_follow_request": "Withdraw follow request", + "account.cancel_follow_request": "Petitio sequī retrāhere", "account.domain_blocked": "Dominium impeditum", "account.edit_profile": "Recolere notionem", "account.featured_tags.last_status_never": "Nulla contributa", "account.featured_tags.title": "Hashtag notātī {name}", + "account.followers_counter": "{count, plural, one {{counter} sectator} other {{counter} sectatores}}", + "account.following_counter": "{count, plural, one {{counter} sectans} other {{counter} sectans}}", "account.moved_to": "{name} significavit eum suam rationem novam nunc esse:", "account.muted": "Confutatus", "account.requested_follow": "{name} postulavit ut te sequeretur", @@ -29,6 +42,7 @@ "bundle_column_error.retry": "Retemptare", "bundle_column_error.routing.title": "CCCCIIII", "bundle_modal_error.close": "Claudere", + "bundle_modal_error.message": "Aliquid pervagātum est dum hunc componentem onerābam.", "bundle_modal_error.retry": "Retemptare", "column.about": "De", "column.bookmarks": "Signa paginales", @@ -44,6 +58,7 @@ "compose_form.lock_disclaimer": "Tua ratio non est {locked}. Quisquis te sequi potest ut visum accipiat nuntios tuos tantum pro sectatoribus.", "compose_form.lock_disclaimer.lock": "clausum", "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.single": "Elige unum", "compose_form.publish_form": "Barrire", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Adde praeconium contentūs", @@ -56,8 +71,10 @@ "confirmations.reply.confirm": "Respondere", "disabled_account_banner.account_settings": "Praeferentiae ratiōnis", "disabled_account_banner.text": "Ratio tua {disabledAccount} debilitata est.", - "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.", + "dismissable_banner.explore_links": "Hae sunt nūminae nūtiārum quā potissimum in rēti socialī hodie communicantur. Nūtiārum recentiorum ab pluribus hominibus diversīs positārum gradūs altiorēs sunt.", + "dismissable_banner.explore_statuses": "Hae sunt nūtiārum ex rēte socialī quā hodie trahunt favorem. Nūtiārum recentiorum cum pluribus auguriīs et favōribus gradūs altiorēs sunt.", + "dismissable_banner.explore_tags": "Hae sunt hashtags quae hodie in rēte socialī favorem trahunt. Hashtags quae ab pluribus diversis hominibus adhibentur gradūs altiorēs sunt.", + "dismissable_banner.public_timeline": "Hae sunt recentissimae nuntii publici ab hominibus in rēte socialī qui ab hominibus in {domain} sequuntur.", "domain_block_modal.you_wont_see_posts": "Nuntios aut notificātiōnēs ab usoribus in hōc servō nōn vidēbis.", "domain_pill.activitypub_like_language": "ActivityPub est velut lingua quam Mastodon cum aliīs sociālibus rētibus loquitur.", "domain_pill.your_handle": "Tuus nominulus:", @@ -79,13 +96,15 @@ "empty_column.followed_tags": "Nōn adhūc aliquem hastāginem secūtus es. Cum id fēceris, hic ostendētur.", "empty_column.home": "Tua linea temporum domesticus vacua est! Sequere plures personas ut eam compleas.", "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", - "empty_column.lists": "Nōn adhūc habēs ullo tabellās. Cum creās, hīc apparēbunt.", + "empty_column.lists": "\"Nūllae adhuc listae tibi sunt. Cum unam creāveris, hic apparēbit.\"", "empty_column.mutes": "Nondum quemquam usorem tacuisti.", "empty_column.notification_requests": "Omnia clara sunt! Nihil hic est. Cum novās notificātiōnēs accipīs, hic secundum tua praecepta apparebunt.", "empty_column.notifications": "Nōn adhūc habēs ullo notificātiōnēs. Cum aliī tē interagunt, hīc videbis.", + "explore.search_results": "Proventus explorationis", "explore.trending_statuses": "Contributa", "firehose.all": "Omnis", "footer.about": "De", + "footer.invite": "invitare populum", "generic.saved": "Servavit", "hashtag.column_header.tag_mode.none": "sine {additional}", "hashtag.column_settings.tag_mode.all": "Haec omnia", @@ -98,8 +117,13 @@ "ignore_notifications_modal.filter_to_review_separately": "Percolantur notificatiōnes separātim recensere potes", "interaction_modal.description.favourite": "Cum accūntū in Mastodon, hanc postem praeferre potes ut auctōrī indicēs tē eam aestimāre et ad posterius servēs.", "interaction_modal.description.follow": "Cum accūntū in Mastodon, {name} sequī potes ut eōrum postēs in tēlā domī tuā recipiās.", + "interaction_modal.description.reblog": "Cum ratione in Mastodon, hunc nuntium augēre potes ut eum cum tuis sectatoribus communicēs.", "interaction_modal.description.reply": "Mastodon de Ratione, huic nuntio respondere potes.", + "interaction_modal.login.action": "Accipe me domum", + "interaction_modal.login.prompt": "Domum tuam dominicum servo, exempli causa mastodon.social", + "interaction_modal.no_account_yet": "Non in Mastodon?", "interaction_modal.sign_in": "Ad hōc servientem nōn dēlūxī. Ubi accūntum tuum hospitātum est?", + "interaction_modal.sign_in_hint": "Consilium: Ille est situs interretialis ubi subscripsisti. Si non meministi, quaere epistulam gratulatoriam in tuis epistolis receptis. Etiam plenam usoris nomen tuum inserere potes! (exempli gratia @Mastodon@mastodon.social)", "intervals.full.days": "{number, plural, one {# die} other {# dies}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horae}}", "intervals.full.minutes": "{number, plural, one {# minutum} other {# minuta}}", @@ -110,35 +134,41 @@ "keyboard_shortcuts.compose": "TextArea Compositi Attendere", "keyboard_shortcuts.description": "Descriptio", "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.down": "In īndice dēscend", "keyboard_shortcuts.enter": "Aperire contributum", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.federated": "Aperī chrōnologiam foederātam", "keyboard_shortcuts.heading": "Keyboard Shortcuts", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", - "keyboard_shortcuts.notifications": "to open notifications column", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned posts list", - "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.home": "Aperī chrōnologiam domesticam", + "keyboard_shortcuts.legend": "Hanc legendam ostende", + "keyboard_shortcuts.local": "Aperī chrōnologiam locālem", + "keyboard_shortcuts.mention": "Memēntō auctōris", + "keyboard_shortcuts.muted": "Aperī indicem ūtentium silentiōrum", + "keyboard_shortcuts.my_profile": "Aperī prōfilum tuum", + "keyboard_shortcuts.notifications": "Aperī columnam nūntiātiōnum", + "keyboard_shortcuts.open_media": "Aperi media", + "keyboard_shortcuts.pinned": "Aperī indicem nūntiōrum affixōrum", + "keyboard_shortcuts.profile": "Aperi auctoris profile", "keyboard_shortcuts.reply": "Respondere ad contributum", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", - "keyboard_shortcuts.start": "to open \"get started\" column", - "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", - "keyboard_shortcuts.toggle_sensitivity": "to show/hide media", - "keyboard_shortcuts.toot": "to start a brand new post", - "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.requests": "Aperī indicem petītiōnum sequendī", + "keyboard_shortcuts.search": "Fōcum in tabellam quaerendī", + "keyboard_shortcuts.spoilers": "Ostende / celare CW agri", + "keyboard_shortcuts.start": "Aperī columnam 'īncipere'", + "keyboard_shortcuts.toggle_hidden": "Monstrare / celare textum post CW", + "keyboard_shortcuts.toggle_sensitivity": "Ostende / celare media", + "keyboard_shortcuts.toot": "Incipe nōvum nūntium.", + "keyboard_shortcuts.unfocus": "Desinēre fōcum in ārēā componendī/inquīrendī", + "keyboard_shortcuts.up": "Sumē sūrsum in īndice", "lightbox.close": "Claudere", "lightbox.next": "Secundum", - "lists.account.add": "Adde ad tabellās", - "lists.new.create": "Addere tabella", - "lists.subheading": "Tuae tabulae", + "lists.account.add": "Adde ad līstā", + "lists.account.remove": "Sūmere ad līstā", + "lists.edit.submit": "Mutare titulum", + "lists.exclusive": "Abscondere haec scripta ab domo", + "lists.new.create": "Addere līstā", + "lists.new.title_placeholder": "Novus titulus līstae", + "lists.replies_policy.title": "Monstra responsa ad:", + "lists.search": "Quaere in hominibus te sequi", + "lists.subheading": "Tuae listae", "load_pending": "{count, plural, one {# novum item} other {# nova itema}}", "moved_to_account_banner.text": "Tua ratione {disabledAccount} interdum reposita est, quod ad {movedToAccount} migrāvisti.", "mute_modal.you_wont_see_mentions": "Non videbis nuntios quī eōs commemorant.", @@ -150,7 +180,7 @@ "notification.favourite": "{name} nuntium tuum favit", "notification.follow": "{name} te secutus est", "notification.follow_request": "{name} postulavit ut te sequeretur", - "notification.moderation_warning": "Accepistī monitionem moderationis.", + "notification.moderation_warning": "Accepistī monitionem moderationis", "notification.moderation_warning.action_disable": "Ratio tua debilitata est.", "notification.moderation_warning.action_none": "Tua ratiō monitum moderātiōnis accēpit.", "notification.moderation_warning.action_sensitive": "Tua nuntia hinc sensibiliter notabuntur.", @@ -168,24 +198,32 @@ "notification_requests.confirm_dismiss_multiple.message": "Tu {count, plural, one {unam petitionem notificationis} other {# petitiones notificationum}} abrogāre prōximum es. {count, plural, one {Illa} other {Eae}} facile accessū nōn erit. Certus es tē procedere velle?", "notifications.filter.all": "Omnia", "notifications.filter.polls": "Eventus electionis", - "notifications.group": "Notificātiōnēs", - "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "notifications.group": "{count} Notificātiōnēs", + "onboarding.action.back": "Accipe me", + "onboarding.actions.back": "Redde me", + "onboarding.actions.go_to_explore": "\"Duc me ad trending\"", + "onboarding.actions.go_to_home": "Duc me ad fluxum domi mei", + "onboarding.compose.template": "Salve #Mastodon!", "onboarding.follows.lead": "Tua domus feed est principalis via Mastodon experīrī. Quō plūrēs persōnas sequeris, eō actīvior et interessantior erit. Ad tē incipiendum, ecce quaedam suāsiones:", - "onboarding.follows.title": "Popular on Mastodon", + "onboarding.follows.title": "Personaliza fluxum domi tui", "onboarding.profile.display_name_hint": "Tuum nomen completum aut tuum nomen ludens…", - "onboarding.profile.lead": "Hoc semper postea in ratiōnibus complērī potest, ubi etiam plūrēs optiōnēs personalizātiōnis praesto sunt.", + "onboarding.profile.lead": "Hoc semper postea per optiones configuratiónum perficere potes, ubi plura personalizandi optiones praesto sunt.", "onboarding.profile.note_hint": "Alios hominēs vel #hashtags @nōmināre potes…", - "onboarding.start.lead": "Nunc pars es Mastodonis, singularis, socialis medii platformae decentralis ubi—non algorismus—tuam ipsius experientiam curas. Incipiāmus in nova hac socialis regione:", - "onboarding.start.skip": "Want to skip right ahead?", + "onboarding.share.lead": "Fac homines scire quomodo te in Mastodon invenire possint!", + "onboarding.share.message": "Ego sum {username} in #Mastodon! Veni, sequere me apud {url}.", + "onboarding.share.next_steps": "Possibiles gradus sequentes:", + "onboarding.share.title": "Communica tuum profilem.", + "onboarding.start.lead": "Nunc pars es Mastodonis, singularis, socialis medii platformae decentralis ubi—non algoritmus—tuam ipsius experientiam curas. Incipiāmus in nova hac socialis regione:", + "onboarding.start.skip": "Non opus est auxilio ad incipiendum?", "onboarding.start.title": "Perfecisti eam!", - "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", + "onboarding.steps.follow_people.body": "Sequens homines interessantes est id quod Mastodon agitur.", + "onboarding.steps.follow_people.title": "Personaliza fluxum domi tui", + "onboarding.steps.publish_status.body": "Dīc 'salvē' mundō per textum, imagines, vīdeōs, aut suffragia {emoji}", + "onboarding.steps.publish_status.title": "Fac tuum primum nuntium.", + "onboarding.steps.setup_profile.body": "Augere interactiones tuas per habens profilem comprehensivum.", + "onboarding.steps.setup_profile.title": "\"Personaliza tuum profilem.\"", + "onboarding.steps.share_profile.body": "Amīcīs tuīs nōscere sinē quō modō tē in Mastodon invenīre possint.", + "onboarding.steps.share_profile.title": "\"Communica tuum profilem Mastodon.\"", "onboarding.tips.2fa": "Scisne? Tūam ratiōnem sēcūrāre potes duōrum elementōrum authentīcātiōnem in ratiōnis tuī praeferentiīs statuendō. Cum ūllā app TOTP ex tuā ēlēctiōne operātur, numerus tēlephōnicus necessārius nōn est!", "onboarding.tips.accounts_from_other_servers": "Scisne? Quoniam Mastodon dēcentrālis est, nōnnulla profīlia quae invenīs in servīs aliīs quam tuōrum erunt hospitāta. Tamen cum eīs sine impedīmentō interāgere potes! Servus eōrum in alterā parte nōminis eōrum est!", "onboarding.tips.migration": "Scisne? Sī sentīs {domain} tibi in futūrō nōn esse optimam servī ēlēctiōnem, ad alium servum Mastodon sine amittendō sectātōribus tuīs migrāre potes. Etiam tuum servum hospitārī potes!", @@ -200,6 +238,7 @@ "poll_button.remove_poll": "Auferre electionem", "privacy.change": "Adjust status privacy", "privacy.public.short": "Coram publico", + "regeneration_indicator.label": "Impendium…", "regeneration_indicator.sublabel": "Tua domus feed praeparātur!", "relative_time.full.days": "{number, plural, one {# ante die} other {# ante dies}}", "relative_time.full.hours": "{number, plural, one {# ante horam} other {# ante horas}}", @@ -219,7 +258,7 @@ "report.mute_explanation": "Non videbis eōrum nuntiōs. Possunt adhuc tē sequī et tuōs nuntiōs vidēre, nec sciēbunt sē tacitōs esse.", "report.next": "Secundum", "report.placeholder": "Commentāriī adiūnctī", - "report.reasons.legal_description": "Putās id legem tuae aut servientis patriae violāre.", + "report.reasons.legal_description": "Putās id legem tuae aut servientis patriae violāre", "report.reasons.violation_description": "Scis quod certa praecepta frangit", "report.submit": "Mittere", "report.target": "Report {target}", @@ -228,8 +267,11 @@ "report_notification.categories.other": "Altera", "search.placeholder": "Quaerere", "search_results.all": "Omnis", - "server_banner.active_users": "Usūrāriī āctīvī", + "search_results.nothing_found": "Nihil inveniri potuit pro his quaestionibus.", + "search_results.title": "Quaere per {q}", + "server_banner.active_users": "usūāriī āctīvī", "server_banner.administered_by": "Administratur:", + "server_banner.is_one_of_many": "{domain} est unum ex multis independentibus servientibus Mastodon quos adhibere potes ut participes in fediverso.", "sign_in_banner.sign_in": "Sign in", "status.admin_status": "Open this status in the moderation interface", "status.block": "Impedire @{name}", @@ -237,7 +279,7 @@ "status.copy": "Copy link to status", "status.delete": "Oblitterare", "status.edit": "Recolere", - "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", + "status.edited_x_times": "Emendatum est {count, plural, one {{count} tempus} other {{count} tempora}}", "status.favourites": "{count, plural, one {favoritum} other {favorita}}", "status.history.created": "{name} creatum {date}", "status.history.edited": "{name} correxit {date}", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index c5026fa33b..cb78b7772f 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Trafiko limitado", "alert.unexpected.message": "Afito un yerro no asperado.", "alert.unexpected.title": "Atyo!", + "alt_text_badge.title": "Teksto alternativo", "announcement.announcement": "Pregon", "attachments_list.unprocessed": "(no prosesado)", "audio.hide": "Eskonde audio", @@ -96,6 +97,7 @@ "block_modal.you_wont_see_mentions": "No veras publikasyones ke lo enmentan.", "boost_modal.combo": "Puedes klikar {combo} para ometer esto la proksima vez", "boost_modal.reblog": "Repartajar puvlikasyon?", + "boost_modal.undo_reblog": "Departajar puvlikasyon?", "bundle_column_error.copy_stacktrace": "Kopia el raporto de yerro", "bundle_column_error.error.body": "La pajina solisitada no pudo ser renderada. Podria ser por un yerro en muestro kodiche o un problem de kompatibilita kon el navigador.", "bundle_column_error.error.title": "Atyo, no!", @@ -191,6 +193,7 @@ "confirmations.unfollow.title": "Desige utilizador?", "content_warning.hide": "Eskonde puvlikasyon", "content_warning.show": "Amostra entanto", + "content_warning.show_more": "Amostra mas", "conversation.delete": "Efasa konversasyon", "conversation.mark_as_read": "Marka komo meldado", "conversation.open": "Ve konversasyon", @@ -212,6 +215,7 @@ "dismissable_banner.public_timeline": "Estas son las publikasyones publikas mas resientes de personas en la red sosyala a las kualas la djente de {domain} sige.", "domain_block_modal.block": "Bloka sirvidor", "domain_block_modal.block_account_instead": "Bloka @{name} en su lugar", + "domain_block_modal.they_can_interact_with_old_posts": "Las personas de este sirvidor pueden enteraktuar kon tus puvlikasyones viejas.", "domain_block_modal.they_cant_follow": "Dingun de este sirvidor puede segirte.", "domain_block_modal.they_wont_know": "No savra ke tiene sido blokado.", "domain_block_modal.title": "Bloka el domeno?", @@ -306,6 +310,7 @@ "follow_suggestions.personalized_suggestion": "Sujestion personalizada", "follow_suggestions.popular_suggestion": "Sujestion populara", "follow_suggestions.popular_suggestion_longer": "Popular en {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Similares a los profils ke tienes segido resyentemente", "follow_suggestions.view_all": "Ve todos", "follow_suggestions.who_to_follow": "A ken segir", "followed_tags": "Etiketas segidas", @@ -334,6 +339,14 @@ "hashtag.follow": "Sige etiketa", "hashtag.unfollow": "Desige etiketa", "hashtags.and_other": "…i {count, plural, one {}other {# mas}}", + "hints.profiles.followers_may_be_missing": "Puede ser ke algunos suivantes de este profil no se amostren.", + "hints.profiles.follows_may_be_missing": "Puede ser ke algunos kuentos segidos por este profil no se amostren.", + "hints.profiles.posts_may_be_missing": "Puede ser ke algunas puvlikasyones de este profil no se amostren.", + "hints.profiles.see_more_followers": "Ve mas suivantes en {domain}", + "hints.profiles.see_more_follows": "Ve mas segidos en {domain}", + "hints.profiles.see_more_posts": "Ve mas puvlikasyones en {domain}", + "hints.threads.replies_may_be_missing": "Puede mankar repuestas de otros sirvidores.", + "hints.threads.see_more": "Ve mas repuestas en {domain}", "home.column_settings.show_reblogs": "Amostra repartajasyones", "home.column_settings.show_replies": "Amostra repuestas", "home.hide_announcements": "Eskonde pregones", @@ -342,6 +355,11 @@ "home.pending_critical_update.title": "Aktualizasyon de seguridad kritika esta desponivle!", "home.show_announcements": "Amostra pregones", "ignore_notifications_modal.ignore": "Inyora avizos", + "ignore_notifications_modal.limited_accounts_title": "Inyorar avizos de kuentos moderados?", + "ignore_notifications_modal.new_accounts_title": "Inyorar avizos de kuentos muevos?", + "ignore_notifications_modal.not_followers_title": "Inyorar avizos de personas a las kualas no te sigen?", + "ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?", + "ignore_notifications_modal.private_mentions_title": "Ignorar avizos de mensyones privadas no solisitadas?", "interaction_modal.description.favourite": "Kon un kuento en Mastodon, puedes markar esta publikasyon komo favorita para ke el autor sepa ke te plaze i para guadrarla para dempues.", "interaction_modal.description.follow": "Kon un kuento en Mastodon, puedes segir a {name} para risivir sus publikasyones en tu linya temporal prinsipala.", "interaction_modal.description.reblog": "Kon un kuento en Mastodon, puedes repartajar esta publikasyon para amostrarla a tus suivantes.", @@ -456,6 +474,7 @@ "navigation_bar.security": "Segurita", "not_signed_in_indicator.not_signed_in": "Nesesitas konektarse kon tu kuento para akseder este rekurso.", "notification.admin.report": "{name} raporto {target}", + "notification.admin.report_statuses": "{name} raporto {target} por {category}", "notification.admin.report_statuses_other": "{name} raporto {target}", "notification.admin.sign_up": "{name} kriyo un konto", "notification.favourite": "A {name} le plaze tu publikasyon", @@ -463,8 +482,10 @@ "notification.follow_request": "{name} tiene solisitado segirte", "notification.label.mention": "Enmenta", "notification.label.private_mention": "Enmentadura privada", + "notification.label.private_reply": "Repuesta privada", "notification.label.reply": "Arisponde", "notification.mention": "Enmenta", + "notification.mentioned_you": "{name} te enmento", "notification.moderation-warning.learn_more": "Ambezate mas", "notification.moderation_warning.action_disable": "Tu kuento tiene sido inkapasitado.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Algunas de tus publikasyones tienen sido markadas komo sensivles.", @@ -482,6 +503,7 @@ "notification_requests.dismiss": "Kita", "notification_requests.edit_selection": "Edita", "notification_requests.exit_selection": "Fecho", + "notification_requests.maximize": "Maksimizar", "notification_requests.notifications_from": "Avizos de {name}", "notification_requests.title": "Avizos filtrados", "notification_requests.view": "Amostra avizos", @@ -496,6 +518,7 @@ "notifications.column_settings.filter_bar.category": "Vara de filtrado rapido", "notifications.column_settings.follow": "Muevos suivantes:", "notifications.column_settings.follow_request": "Muevas solisitudes de segimiento:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Enmentaduras:", "notifications.column_settings.poll": "Rizultados de anketas:", "notifications.column_settings.push": "Avizos arrepushados", @@ -523,6 +546,8 @@ "notifications.policy.accept_hint": "Amostra en avizos", "notifications.policy.drop": "Inyora", "notifications.policy.filter": "Filtra", + "notifications.policy.filter_limited_accounts_hint": "Limitadas por moderadores del sirvidor", + "notifications.policy.filter_limited_accounts_title": "Kuentos moderados", "notifications.policy.filter_new_accounts.hint": "Kriyadas durante {days, plural, one {el ultimo diya} other {los ultimos # diyas}}", "notifications.policy.filter_new_accounts_title": "Muevos kuentos", "notifications.policy.filter_not_followers_title": "Personas ke te no sigen", @@ -655,6 +680,7 @@ "report.unfollow_explanation": "Estas sigiendo este kuento. Para no ver sus publikasyones en tu linya de tiempo, puedes deshar de segirlo.", "report_notification.attached_statuses": "{count, plural, one {{count} publikasyon} other {{count} publikasyones}} atadas", "report_notification.categories.legal": "Legal", + "report_notification.categories.legal_sentence": "kontenido ilegal", "report_notification.categories.other": "Otros", "report_notification.categories.other_sentence": "otros", "report_notification.categories.spam": "Spam", @@ -729,6 +755,7 @@ "status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.", "status.redraft": "Efasa i eskrive de muevo", "status.remove_bookmark": "Kita markador", + "status.replied_in_thread": "Arispondo en filo", "status.replied_to": "Arispondio a {name}", "status.reply": "Arisponde", "status.replyAll": "Arisponde al filo", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 043dcfb05d..ae181c3494 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -69,7 +69,7 @@ "account.unendorse": "Nerodyti profilyje", "account.unfollow": "Nebesekti", "account.unmute": "Atšaukti nutildymą @{name}", - "account.unmute_notifications_short": "Atšaukti nutildymą pranešimams", + "account.unmute_notifications_short": "Atšaukti pranešimų nutildymą", "account.unmute_short": "Atšaukti nutildymą", "account_note.placeholder": "Spustelėk, kad pridėtum pastabą.", "admin.dashboard.daily_retention": "Naudotojų pasilikimo rodiklis pagal dieną po registracijos", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Nebesekti naudotoją?", "content_warning.hide": "Slėpti įrašą", "content_warning.show": "Rodyti vis tiek", + "content_warning.show_more": "Rodyti daugiau", "conversation.delete": "Ištrinti pokalbį", "conversation.mark_as_read": "Žymėti kaip skaitytą", "conversation.open": "Peržiūrėti pokalbį", @@ -264,7 +265,7 @@ "empty_column.community": "Vietinė laiko skalė yra tuščia. Parašyk ką nors viešai, kad pradėtum sąveikauti.", "empty_column.direct": "Dar neturi jokių privačių paminėjimų. Kai išsiųsi arba gausi vieną iš jų, jis bus rodomas čia.", "empty_column.domain_blocks": "Kol kas nėra užblokuotų serverių.", - "empty_column.explore_statuses": "Šiuo metu niekas nėra tendencinga. Patikrink vėliau!", + "empty_column.explore_statuses": "Šiuo metu niekas nėra tendencinga. Patikrinkite vėliau!", "empty_column.favourited_statuses": "Dar neturi mėgstamų įrašų. Kai vieną iš jų pamėgsi, jis bus rodomas čia.", "empty_column.favourites": "Šio įrašo dar niekas nepamėgo. Kai kas nors tai padarys, jie bus rodomi čia.", "empty_column.follow_requests": "Dar neturi jokių sekimo prašymų. Kai gausi tokį prašymą, jis bus rodomas čia.", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Naudok esamą kategoriją arba sukurk naują.", "filter_modal.select_filter.title": "Filtruoti šį įrašą", "filter_modal.title.status": "Filtruoti įrašą", - "filter_warning.matches_filter": "Atitinka filtrą „{title}“", + "filter_warning.matches_filter": "Atitinka filtrą „{title}“", "filtered_notifications_banner.pending_requests": "Iš {count, plural, =0 {nė vieno} one {žmogaus} few {# žmonių} many {# žmonių} other {# žmonių}}, kuriuos galbūt pažįsti", "filtered_notifications_banner.title": "Filtruojami pranešimai", "firehose.all": "Visi", @@ -381,8 +382,8 @@ "ignore_notifications_modal.not_followers_title": "Ignoruoti pranešimus iš žmonių, kurie tave neseka?", "ignore_notifications_modal.not_following_title": "Ignoruoti pranešimus iš žmonių, kuriuos neseki?", "ignore_notifications_modal.private_mentions_title": "Ignoruoti pranešimus iš neprašytų privačių paminėjimų?", - "interaction_modal.description.favourite": "Su Mastodon paskyra gali pamėgti šį įrašą, kad autorius (-ė) žinotų, jog vertinti tai ir išsaugoti jį vėliau.", - "interaction_modal.description.follow": "Su Mastodon paskyra gali sekti {name}, kad gautum jų įrašus į pagrindinį srautą.", + "interaction_modal.description.favourite": "Su „Mastodon“ paskyra galite pamėgti šį įrašą, kad autorius žinotų, jog vertinti tai ir išsaugoti jį vėliau.", + "interaction_modal.description.follow": "Su „Mastodon“ paskyra galite sekti {name}, kad gautumėte jų įrašus pagrindiniame sraute.", "interaction_modal.description.reblog": "Su Mastodon paskyra gali pakelti šią įrašą ir pasidalyti juo su savo sekėjais.", "interaction_modal.description.reply": "Su Mastodon paskyra gali atsakyti į šį įrašą.", "interaction_modal.login.action": "Į pagrindinį puslapį", @@ -504,14 +505,17 @@ "notification.admin.report_statuses": "{name} pranešė {target} kategorijai {category}", "notification.admin.report_statuses_other": "{name} pranešė {target}", "notification.admin.sign_up": "{name} užsiregistravo", + "notification.admin.sign_up.name_and_others": "{name} ir {count, plural, one {# kitas} few {# kiti} many {# kito} other {# kitų}} užsiregistravo", "notification.favourite": "{name} pamėgo tavo įrašą", "notification.follow": "{name} seka tave", + "notification.follow.name_and_others": "{name} ir {count, plural, one {# kitas} few {# kiti} many {# kito} other {# kitų}} seka tave", "notification.follow_request": "{name} paprašė tave sekti", "notification.label.mention": "Paminėjimas", "notification.label.private_mention": "Privatus paminėjimas", "notification.label.private_reply": "Privatus atsakymas", "notification.label.reply": "Atsakymas", "notification.mention": "Paminėjimas", + "notification.mentioned_you": "{name} paminėjo jus", "notification.moderation-warning.learn_more": "Sužinoti daugiau", "notification.moderation_warning": "Gavai prižiūrėjimo įspėjimą", "notification.moderation_warning.action_delete_statuses": "Kai kurie tavo įrašai buvo pašalintos.", @@ -559,6 +563,7 @@ "notifications.column_settings.filter_bar.category": "Spartaus filtro juosta", "notifications.column_settings.follow": "Nauji sekėjai:", "notifications.column_settings.follow_request": "Nauji sekimo prašymai:", + "notifications.column_settings.group": "Grupė", "notifications.column_settings.mention": "Paminėjimai:", "notifications.column_settings.poll": "Balsavimo rezultatai:", "notifications.column_settings.push": "Tiesioginiai pranešimai", @@ -664,8 +669,8 @@ "privacy_policy.title": "Privatumo politika", "recommended": "Rekomenduojama", "refresh": "Atnaujinti", - "regeneration_indicator.label": "Kraunama…", - "regeneration_indicator.sublabel": "Ruošiamas tavo pagrindinis srautas!", + "regeneration_indicator.label": "Įkeliama…", + "regeneration_indicator.sublabel": "Ruošiamas jūsų pagrindinis srautas!", "relative_time.days": "{number} d.", "relative_time.full.days": "prieš {number, plural, one {# dieną} few {# dienas} many {# dienos} other {# dienų}}", "relative_time.full.hours": "prieš {number, plural, one {# valandą} few {# valandas} many {# valandos} other {# valandų}}", @@ -688,7 +693,7 @@ "report.categories.violation": "Turinys pažeidžia vieną ar daugiau serverio taisyklių", "report.category.subtitle": "Pasirink geriausią atitikmenį.", "report.category.title": "Papasakok mums, kas vyksta su šiuo {type}", - "report.category.title_account": "profilis", + "report.category.title_account": "profiliu", "report.category.title_status": "įrašas", "report.close": "Atlikta", "report.comment.title": "Ar yra dar kas nors, ką, tavo manymu, turėtume žinoti?", @@ -752,7 +757,7 @@ "search_results.nothing_found": "Nepavyko rasti nieko pagal šiuos paieškos terminus.", "search_results.see_all": "Žiūrėti viską", "search_results.statuses": "Įrašai", - "search_results.title": "Ieškoti {q}", + "search_results.title": "Paieška užklausai „{q}“", "server_banner.about_active_users": "Žmonės, kurie naudojosi šiuo serveriu per pastarąsias 30 dienų (mėnesio aktyvūs naudotojai)", "server_banner.active_users": "aktyvūs naudotojai", "server_banner.administered_by": "Administruoja:", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 1e973ffd3e..1bef83d7bf 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -3,7 +3,7 @@ "about.contact": "Kontakts:", "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.preamble": "Mastodon parasti ļauj apskatīt saturu un mijiedarboties ar lietotājiem no jebkura cita fediversa servera. Šie ir izņēmumi, kas veikti tieši šajā 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.", "about.domain_blocks.silenced.title": "Ierobežotie", "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.", @@ -36,6 +36,7 @@ "account.followers.empty": "Šim lietotājam vēl nav sekotāju.", "account.followers_counter": "{count, plural, zero {{count} sekotāju} one {{count} sekotājs} other {{count} sekotāji}}", "account.following": "Seko", + "account.following_counter": "{count, plural, one {seko {counter}} other {seko {counter}}}", "account.follows.empty": "Šis lietotājs pagaidām nevienam neseko.", "account.go_to_profile": "Doties uz profilu", "account.hide_reblogs": "Paslēpt @{name} pastiprinātos ierakstus", @@ -51,7 +52,7 @@ "account.mute_notifications_short": "Izslēgt paziņojumu skaņu", "account.mute_short": "Apklusināt", "account.muted": "Apklusināts", - "account.mutual": "Savstarpējs", + "account.mutual": "Abpusēji", "account.no_bio": "Apraksts nav sniegts.", "account.open_original_page": "Atvērt oriģinālo lapu", "account.posts": "Ieraksti", @@ -61,6 +62,7 @@ "account.requested_follow": "{name} nosūtīja Tev sekošanas pieprasījumu", "account.share": "Dalīties ar @{name} profilu", "account.show_reblogs": "Parādīt @{name} pastiprinātos ierakstus", + "account.statuses_counter": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}", "account.unblock": "Atbloķēt @{name}", "account.unblock_domain": "Atbloķēt domēnu {domain}", "account.unblock_short": "Atbloķēt", @@ -83,6 +85,7 @@ "alert.rate_limited.title": "Biežums ierobežots", "alert.unexpected.message": "Radās negaidīta kļūda.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Alt teksts", "announcement.announcement": "Paziņojums", "attachments_list.unprocessed": "(neapstrādāti)", "audio.hide": "Slēpt audio", @@ -141,12 +144,12 @@ "community.column_settings.remote_only": "Tikai attālinātie", "compose.language.change": "Mainīt valodu", "compose.language.search": "Meklēt valodas...", - "compose.published.body": "Ieraksts publicēta.", + "compose.published.body": "Ieraksts izveidots.", "compose.published.open": "Atvērt", "compose.saved.body": "Ziņa saglabāta.", "compose_form.direct_message_warning_learn_more": "Uzzināt vairāk", - "compose_form.encryption_warning": "Mastodon ieraksti nav pilnībā šifrēti. Nedalies ar jebkādu jutīgu informāciju caur Mastodon!", - "compose_form.hashtag_warning": "Šī ziņa netiks norādīta zem nevienas atsauces, jo tā nav publiska. Tikai publiskās ziņās var meklēt pēc atsauces.", + "compose_form.encryption_warning": "Mastodon ieraksti nav pilnībā šifrēti. Nedalies ar jebkādu jūtīgu informāciju caur Mastodon!", + "compose_form.hashtag_warning": "Šis ieraksts netiks uzrādīts nevienā tēmturī, jo tas nav redzams visiem. Tikai visiem redzamos ierakstus var meklēt pēc tēmtura.", "compose_form.lock_disclaimer": "Tavs konts nav {locked}. Ikviens var Tev sekot, lai redzētu tikai sekotājiem paredzētos ierakstus.", "compose_form.lock_disclaimer.lock": "slēgts", "compose_form.placeholder": "Kas Tev padomā?", @@ -157,7 +160,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.poll.type": "Stils", - "compose_form.publish": "Iesūtīt", + "compose_form.publish": "Nosūtīt", "compose_form.publish_form": "Jauns ieraksts", "compose_form.reply": "Atbildēt", "compose_form.save_changes": "Atjaunināt", @@ -192,6 +195,7 @@ "confirmations.unfollow.title": "Pārtraukt sekošanu lietotājam?", "content_warning.hide": "Paslēpt ierakstu", "content_warning.show": "Tomēr rādīt", + "content_warning.show_more": "Rādīt vairāk", "conversation.delete": "Dzēst sarunu", "conversation.mark_as_read": "Atzīmēt kā izlasītu", "conversation.open": "Skatīt sarunu", @@ -199,7 +203,7 @@ "copy_icon_button.copied": "Ievietots starpliktuvē", "copypaste.copied": "Nokopēts", "copypaste.copy_to_clipboard": "Kopēt uz starpliktuvi", - "directory.federated": "No pazīstamas federācijas", + "directory.federated": "No zināma fediversa", "directory.local": "Tikai no {domain}", "directory.new_arrivals": "Jaunpienācēji", "directory.recently_active": "Nesen aktīvi", @@ -209,9 +213,10 @@ "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": "Šie ir ieraksti, kas šodien gūst arvien lielāku ievērību visā sociālajā tīklā. Augstāk tiek kārtoti jaunāki ieraksti, kuri tiek vairāk pastiprināti un ievietoti izlasēs.", - "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.explore_tags": "Šie ir tēmturi, kas šodien gūst uzmanību sabiedriskajā tīmeklī. Tēmturi, kurus izmanto vairāk dažādu cilvēku, tiek vērtēti augstāk.", "dismissable_banner.public_timeline": "Šie ir jaunākie publiskie ieraksti no lietotājiem sociālajā tīmeklī, kuriem {domain} seko cilvēki.", "domain_block_modal.block": "Bloķēt serveri", + "domain_block_modal.block_account_instead": "Tā vietā liegt @{name}", "domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.", "domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši bloķēti.", "domain_block_modal.title": "Bloķēt domēnu?", @@ -247,7 +252,7 @@ "empty_column.favourited_statuses": "Tev vēl nav iecienītāko ierakstu. Kad pievienosi kādu izlasei, tas tiks parādīts šeit.", "empty_column.favourites": "Šo ziņu neviens vēl nav pievienojis izlasei. Kad kāds to izdarīs, tas parādīsies šeit.", "empty_column.follow_requests": "Šobrīd Tev nav sekošanas pieprasījumu. Kad saņemsi kādu, tas 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.followed_tags": "Tu vēl neseko 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 laikjosla ir tukša. Seko vairāk cilvēkiem, lai to piepildītu!", "empty_column.list": "Pagaidām šajā sarakstā nekā nav. Kad šī saraksta dalībnieki ievietos jaunus ierakstus, tie parādīsies šeit.", @@ -283,7 +288,7 @@ "filter_modal.select_filter.subtitle": "Izmanto esošu kategoriju vai izveido jaunu", "filter_modal.select_filter.title": "Filtrēt šo ziņu", "filter_modal.title.status": "Filtrēt ziņu", - "filter_warning.matches_filter": "Atbilst filtram “{title}”", + "filtered_notifications_banner.title": "Filtrētie paziņojumi", "firehose.all": "Visi", "firehose.local": "Šis serveris", "firehose.remote": "Citi serveri", @@ -294,6 +299,8 @@ "follow_suggestions.dismiss": "Vairs nerādīt", "follow_suggestions.friends_of_friends_longer": "Populārs to cilvēku vidū, kuriem tu seko", "follow_suggestions.personalized_suggestion": "Pielāgots ieteikums", + "follow_suggestions.popular_suggestion": "Populārs ieteikums", + "follow_suggestions.popular_suggestion_longer": "Populārs {domain}", "follow_suggestions.similar_to_recently_followed_longer": "Līdzīgi profieliem, kuriem nesen sāki sekot", "follow_suggestions.view_all": "Skatīt visu", "follow_suggestions.who_to_follow": "Kam sekot", @@ -316,14 +323,18 @@ "hashtag.column_settings.tag_mode.all": "Visi no šiem", "hashtag.column_settings.tag_mode.any": "Kāds no šiem", "hashtag.column_settings.tag_mode.none": "Neviens no šiem", - "hashtag.column_settings.tag_toggle": "Pievienot kolonnai papildu tēmturus", - "hashtag.counter_by_accounts": "{count, plural, one {{counter} dalībnieks} other {{counter} dalībnieki}}", + "hashtag.column_settings.tag_toggle": "Iekļaut šajā kolonnā papildu birkas", + "hashtag.counter_by_accounts": "{count, plural, zero{{counter} dalībnieku} one {{counter} dalībnieks} other {{counter} dalībnieki}}", "hashtag.counter_by_uses": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}}", "hashtag.counter_by_uses_today": "{count, plural, zero {{counter} ierakstu} one {{counter} ieraksts} other {{counter} ieraksti}} šodien", "hashtag.follow": "Sekot tēmturim", "hashtag.unfollow": "Pārstāt sekot tēmturim", "hashtags.and_other": "… un {count, plural, other {vēl #}}", - "hints.threads.replies_may_be_missing": "Var trūkt atbildes no citiem serveriem.", + "hints.profiles.see_more_followers": "Skatīt vairāk sekotāju {domain}", + "hints.profiles.see_more_follows": "Skatīt vairāk sekojumu {domain}", + "hints.profiles.see_more_posts": "Skatīt vairāk ierakstu {domain}", + "hints.threads.replies_may_be_missing": "Var trūkt atbilžu no citiem serveriem.", + "hints.threads.see_more": "Skatīt vairāk atbilžu {domain}", "home.column_settings.show_reblogs": "Rādīt pastiprinātos ierakstus", "home.column_settings.show_replies": "Rādīt atbildes", "home.hide_announcements": "Slēpt paziņojumus", @@ -331,6 +342,7 @@ "home.pending_critical_update.link": "Skatīt jauninājumus", "home.pending_critical_update.title": "Ir pieejams būtisks drošības atjauninājums.", "home.show_announcements": "Rādīt paziņojumus", + "ignore_notifications_modal.ignore": "Neņemt vērā 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 lietotāja ierakstus savā mājas plūsmā.", "interaction_modal.description.reblog": "Ar Mastodon kontu Tu vari izvirzīt šo ierakstu, lai kopīgotu to ar saviem sekotājiem.", @@ -388,7 +400,7 @@ "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.", - "link_preview.author": "Pēc {name}", + "link_preview.author": "No {name}", "link_preview.more_from_author": "Vairāk no {name}", "lists.account.add": "Pievienot sarakstam", "lists.account.remove": "Noņemt no saraksta", @@ -404,7 +416,7 @@ "lists.replies_policy.title": "Rādīt atbildes:", "lists.search": "Meklēt starp cilvēkiem, kuriem tu seko", "lists.subheading": "Tavi saraksti", - "load_pending": "{count, plural, one {# jauna lieta} other {# jaunas lietas}}", + "load_pending": "{count, plural, zero{# jaunu vienumu} one {# jauns vienums} other {# jauni vienumi}}", "loading_indicator.label": "Ielādē…", "media_gallery.hide": "Paslēpt", "moved_to_account_banner.text": "Tavs konts {disabledAccount} pašlaik ir atspējots, jo Tu pārcēlies uz kontu {movedToAccount}.", @@ -413,6 +425,7 @@ "mute_modal.show_options": "Parādīt iespējas", "mute_modal.title": "Apklusināt lietotāju?", "navigation_bar.about": "Par", + "navigation_bar.administration": "Pārvaldība", "navigation_bar.advanced_interface": "Atvērt paplašinātā tīmekļa saskarnē", "navigation_bar.blocks": "Bloķētie lietotāji", "navigation_bar.bookmarks": "Grāmatzīmes", @@ -429,6 +442,7 @@ "navigation_bar.follows_and_followers": "Sekojamie un sekotāji", "navigation_bar.lists": "Saraksti", "navigation_bar.logout": "Iziet", + "navigation_bar.moderation": "Satura pārraudzība", "navigation_bar.mutes": "Apklusinātie lietotāji", "navigation_bar.opened_in_classic_interface": "Ieraksti, konti un citas noteiktas lapas pēc noklusējuma tiek atvērtas klasiskajā tīmekļa saskarnē.", "navigation_bar.personal": "Personīgie", @@ -444,10 +458,12 @@ "notification.follow": "{name} uzsāka Tev sekot", "notification.follow_request": "{name} nosūtīja Tev sekošanas pieprasījumu", "notification.moderation-warning.learn_more": "Uzzināt vairāk", + "notification.moderation_warning": "Ir saņemts satura pārraudzības brīdinājums", "notification.moderation_warning.action_delete_statuses": "Daži no Taviem ierakstiem tika noņemti.", "notification.moderation_warning.action_disable": "Tavs konts tika atspējots.", - "notification.moderation_warning.action_mark_statuses_as_sensitive": "Daži no Taviem ierakstiem tika atzīmēti kā jutīgi.", - "notification.moderation_warning.action_sensitive": "Tavi ieraksti turpmāk tiks atzīmēti kā jutīgi.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Daži no Taviem ierakstiem tika atzīmēti kā jūtīgi.", + "notification.moderation_warning.action_none": "Konts ir saņēmis satura pārraudzības brīdinājumu.", + "notification.moderation_warning.action_sensitive": "Tavi ieraksti turpmāk tiks atzīmēti kā jūtīgi.", "notification.moderation_warning.action_silence": "Tavs konts tika ierobežots.", "notification.moderation_warning.action_suspend": "Tava konta darbība tika apturēta.", "notification.own_poll": "Tava aptauja ir noslēgusies", @@ -458,6 +474,8 @@ "notification.update": "{name} laboja ierakstu", "notification_requests.accept": "Pieņemt", "notification_requests.dismiss": "Noraidīt", + "notification_requests.edit_selection": "Labot", + "notification_requests.exit_selection": "Gatavs", "notification_requests.notifications_from": "Paziņojumi no {name}", "notification_requests.title": "Atlasītie paziņojumi", "notifications.clear": "Notīrīt paziņojumus", @@ -470,6 +488,7 @@ "notifications.column_settings.filter_bar.category": "Atrās atlasīšanas josla", "notifications.column_settings.follow": "Jauni sekotāji:", "notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:", + "notifications.column_settings.group": "Grupēt", "notifications.column_settings.mention": "Pieminēšanas:", "notifications.column_settings.poll": "Aptaujas rezultāti:", "notifications.column_settings.push": "Uznirstošie paziņojumi", @@ -493,24 +512,27 @@ "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.", + "notifications.policy.accept": "Pieņemt", + "notifications.policy.drop": "Ignorēt", "notifications.policy.filter_new_accounts_title": "Jauni konti", "notifications.policy.filter_not_followers_title": "Cilvēki, kuri Tev neseko", "notifications.policy.filter_not_following_hint": "Līdz tos pašrocīgi apstiprināsi", "notifications.policy.filter_not_following_title": "Cilvēki, kuriem Tu neseko", "notifications_permission_banner.enable": "Iespējot darbvirsmas paziņojumus", - "notifications_permission_banner.how_to_control": "Lai saņemtu paziņojumus, kad Mastodon nav atvērts, iespējo darbvirsmas paziņojumus. Vari precīzi kontrolēt, kāda veida mijiedarbības rada darbvirsmas paziņojumus, izmantojot augstāk redzamo pogu {icon}, kad tie būs iespējoti.", + "notifications_permission_banner.how_to_control": "Lai saņemtu paziņojumus, kad Mastodon nav atvērts, jāiespējo darbvirsmas paziņojumi. Var pārvaldīt, tieši kāda veida mijiedarbības rada darbvirsmas paziņojumus, izmantojot augstāk redzamo pogu {icon}, tiklīdz tie būs iespējoti.", "notifications_permission_banner.title": "Nekad nepalaid neko garām", "onboarding.action.back": "Aizved mani atpakaļ", "onboarding.actions.back": "Aizved mani atpakaļ", "onboarding.actions.go_to_explore": "Skatīt tendences", - "onboarding.actions.go_to_home": "Dodieties uz manu mājas plūsmu", + "onboarding.actions.go_to_home": "Doties uz manu sākuma 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 cilvēkus, kuriem sekot, vai vēlāk mēģināt vēlreiz.", - "onboarding.follows.lead": "Tava mājas plūsma ir galvenais veids, kā pieredzēt Mastodon. Jo vairāk cilvēkiem sekosi, jo dzīvīgāka un aizraujošāka tā būs. Lai sāktu, šeit ir daži ieteikumi:", + "onboarding.follows.lead": "Tava sākuma plūsma ir galvenais veids, kā pieredzēt Mastodon. Jo vairāk cilvēkiem sekosi, jo dzīvīgāka un aizraujošāka tā būs. Lai sāktu, šeit ir daži ieteikumi:", "onboarding.follows.title": "Pielāgo savu mājas barotni", "onboarding.profile.discoverable": "Padarīt manu profilu atklājamu", "onboarding.profile.display_name": "Attēlojamais vārds", "onboarding.profile.display_name_hint": "Tavs pilnais vārds vai Tavs joku vārds…", + "onboarding.profile.lead": "Šo vienmēr var pabeigt vēlāk iestatījumos, kur ir pieejamas vēl vairāk pielāgošanas iespēju.", "onboarding.profile.note": "Apraksts", "onboarding.profile.note_hint": "Tu vari @pieminēt citus cilvēkus vai #tēmturus…", "onboarding.profile.save_and_continue": "Saglabāt un turpināt", @@ -524,7 +546,7 @@ "onboarding.start.lead": "Tagad Tu esi daļa no Mastodon — vienreizējas, decentralizētas sociālās mediju platformas, kurā Tu, nevis algoritms, veido Tavu 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.body": "Sekošana aizraujošiem cilvēkiem ir tas, par ko ir Mastodon.", "onboarding.steps.follow_people.title": "Pielāgo savu mājas barotni", "onboarding.steps.publish_status.body": "Pasveicini pasauli ar tekstu, attēliem, video vai aptaujām {emoji}", "onboarding.steps.publish_status.title": "Izveido savu pirmo ziņu", @@ -555,7 +577,8 @@ "privacy.private.long": "Tikai Tavi sekotāji", "privacy.private.short": "Sekotāji", "privacy.public.long": "Jebkurš Mastodon un ārpus tā", - "privacy.public.short": "Publiska", + "privacy.public.short": "Redzams visiem", + "privacy.unlisted.additional": "Šis uzvedas tieši kā publisks, izņemot to, ka ieraksts neparādīsies tiešraides barotnēs vai tēmturos, izpētē vai Mastodon meklēšanā, pat ja esi to norādījis visa konta ietvaros.", "privacy.unlisted.long": "Mazāk algoritmisku fanfaru", "privacy_policy.last_updated": "Pēdējo reizi atjaunināta {date}", "privacy_policy.title": "Privātuma politika", @@ -653,13 +676,14 @@ "sign_in_banner.create_account": "Izveidot kontu", "sign_in_banner.sign_in": "Pieteikties", "sign_in_banner.sso_redirect": "Piesakies vai Reģistrējies", - "status.admin_account": "Atvērt @{name} moderēšanas saskarni", - "status.admin_domain": "Atvērt {domain} moderēšanas saskarni", - "status.admin_status": "Atvērt šo ziņu moderācijas saskarnē", + "status.admin_account": "Atvērt @{name} satura pārraudzības saskarni", + "status.admin_domain": "Atvērt {domain} satura pārraudzības saskarni", + "status.admin_status": "Atvērt šo ziņu satura pārraudzības saskarnē", "status.block": "Bloķēt @{name}", "status.bookmark": "Grāmatzīme", "status.cancel_reblog_private": "Nepastiprināt", "status.cannot_reblog": "Šo ziņu nevar izcelt", + "status.continued_thread": "Turpināts pavediens", "status.copy": "Ievietot ieraksta saiti starpliktuvē", "status.delete": "Dzēst", "status.detailed_status": "Detalizēts sarunas skats", @@ -683,7 +707,7 @@ "status.mute_conversation": "Apklusināt sarunu", "status.open": "Paplašināt šo ziņu", "status.pin": "Piespraust profilam", - "status.pinned": "Piespraustais ieraksts", + "status.pinned": "Piesprausts ieraksts", "status.read_more": "Lasīt vairāk", "status.reblog": "Pastiprināt", "status.reblog_private": "Pastiprināt, nemainot redzamību", @@ -696,7 +720,7 @@ "status.reply": "Atbildēt", "status.replyAll": "Atbildēt uz tematu", "status.report": "Ziņot par @{name}", - "status.sensitive_warning": "Sensitīvs saturs", + "status.sensitive_warning": "Jūtīgs saturs", "status.share": "Kopīgot", "status.show_less_all": "Rādīt mazāk visiem", "status.show_more_all": "Rādīt vairāk visiem", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 5ed6f219db..96dd723b82 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -5,19 +5,25 @@ "about.domain_blocks.silenced.title": "പരിമിതമായത്", "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.cancel_follow_request": "Withdraw follow request", + "account.copy": "രൂപരേഖയിന്റെ വിലാസം പകർത്തുക", + "account.direct": "സ്വകാരൃമായിട്ടു് @{name}-ന് സൂചനപിക്കുക", "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.follow_back": "തിരിച്ചു പിന്തുടരുക", "account.followers": "പിന്തുടരുന്നവർ", "account.followers.empty": "ഈ ഉപയോക്താവിനെ ആരും ഇതുവരെ പിന്തുടരുന്നില്ല.", "account.following": "പിന്തുടരുന്നു", @@ -31,7 +37,11 @@ "account.media": "മീഡിയ", "account.mention": "@{name} സൂചിപ്പിക്കുക", "account.mute": "@{name}-നെ(യെ) നിശ്ശബ്ദമാക്കൂ", + "account.mute_notifications_short": "അറിയിപ്പുകൾ മിണ്ടാതാക്കുക", + "account.mute_short": "മിണ്ടാതാക്കുക", "account.muted": "നിശ്ശബ്ദമാക്കിയിരിക്കുന്നു", + "account.no_bio": "വിവരണം നല്കുിയിട്ടില്ല.", + "account.open_original_page": "ആദ്യത്തു് താൾ തുറക്കുക", "account.posts": "പോസ്റ്റുകൾ", "account.posts_with_replies": "പോസ്റ്റുകളും മറുപടികളും", "account.report": "റിപ്പോർട്ട് ചെയ്യുക @{name}", @@ -52,10 +62,16 @@ "alert.rate_limited.title": "തോത് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു", "alert.unexpected.message": "അപ്രതീക്ഷിതമായി എന്തോ സംഭവിച്ചു.", "alert.unexpected.title": "ശ്ശോ!", + "alt_text_badge.title": "പകരമായ വരി", "announcement.announcement": "അറിയിപ്പ്", "attachments_list.unprocessed": "(പ്രോസസ്സ് ചെയ്യാത്തത്)", "audio.hide": "ശബ്ദം ഒഴിവാക്കുക", + "block_modal.show_less": "കുറച്ചു് കാണിക്കുക", + "block_modal.show_more": "ഇനിയും കാണിക്കുക", + "block_modal.title": "ഉപയോക്താവിനു് തടസ്സപെടുത്തുക?", "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": "ഹോം പേജിലേക്ക് മടങ്ങാം", @@ -66,14 +82,16 @@ "closed_registrations.other_server_instructions": "Mastodon വികേന്ദ്രീകൃത സംവിധാനം ആയതിനാൽ, നിങ്ങൾക്ക് മറ്റൊരു സെർവറിൽ ഒരു അക്കൗണ്ട് ഉണ്ടാക്കിയും ഇതുമായി ആശയവിനിമയം നടത്താൻ സാധിക്കുന്നതാണ്.", "closed_registrations_modal.description": "{domain} ഇൽ ഇപ്പോൾ അക്കൗണ്ട് ഉണ്ടാക്കാൻ സാധിക്കുന്നതല്ല, Mastodon ഉപയോഗിക്കുന്നതിനായി നിങ്ങൾക്ക് {domain}-ൽ പ്രത്യേകമായി ഒരു അക്കൗണ്ട് ആവശ്യമില്ല എന്നത് ദയവായി ഓർക്കുക.", "closed_registrations_modal.find_another_server": "മറ്റൊരു സെർവർ കണ്ടെത്തുക", + "closed_registrations_modal.title": "മാസ്റ്റഡോണിൽ ചേർക്കൽ", "column.about": "അപ്ലിക്കേഷനെക്കുറിച്ച്", "column.blocks": "തടയപ്പെട്ട ഉപയോക്താക്കൾ", "column.bookmarks": "ബുക്ക്മാർക്കുകൾ", "column.community": "പ്രാദേശികമായ സമയരേഖ", "column.directory": "പ്രൊഫൈലുകൾ മറിച്ചുനോക്കുക", "column.domain_blocks": "മറയ്ക്കപ്പെട്ട മേഖലകൾ", + "column.favourites": "പ്രിയപ്പെട്ടതു്", "column.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", - "column.home": "ഹോം", + "column.home": "ആമുഖം", "column.lists": "പട്ടികകൾ", "column.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ", "column.notifications": "അറിയിപ്പുകൾ", @@ -89,27 +107,40 @@ "column_subheading.settings": "ക്രമീകരണങ്ങള്‍", "community.column_settings.local_only": "പ്രാദേശികം മാത്രം", "community.column_settings.media_only": "മാധ്യമങ്ങൾ മാത്രം", + "community.column_settings.remote_only": "വിദൂര മാത്രം", "compose.language.change": "ഭാഷ മാറ്റുക", "compose.language.search": "ഭാഷകൾ തിരയുക...", + "compose.published.open": "തുറക്കുക", "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.lock": "ലോക്കുചെയ്തു", "compose_form.placeholder": "നിങ്ങളുടെ മനസ്സിൽ എന്താണ്?", "compose_form.poll.duration": "തിരഞ്ഞെടുപ്പിന്റെ സമയദൈർഖ്യം", + "compose_form.poll.multiple": "ഒരുപാടു് സാധ്യതകൾ", + "compose_form.poll.option_placeholder": "സാധ്യത {number}", "compose_form.poll.switch_to_multiple": "വോട്ടെടുപ്പിൽ ഒന്നിലധികം ചോയ്‌സുകൾ ഉൾപ്പെടുതുക", "compose_form.poll.switch_to_single": "വോട്ടെടുപ്പിൽ ഒരൊറ്റ ചോയ്‌സ്‌ മാത്രം ആക്കുക", + "compose_form.poll.type": "രീതി", + "compose_form.publish": "അയക്കുക", "compose_form.publish_form": "Publish", + "compose_form.reply": "മറുപടി", + "compose_form.save_changes": "കാലാനുസ്യതമാക്കുക", "compose_form.spoiler.marked": "എഴുത്ത് മുന്നറിയിപ്പിനാൽ മറച്ചിരിക്കുന്നു", "compose_form.spoiler.unmarked": "എഴുത്ത് മറയ്ക്കപ്പെട്ടിട്ടില്ല", "confirmation_modal.cancel": "റദ്ദാക്കുക", "confirmations.block.confirm": "തടയുക", "confirmations.delete.confirm": "മായ്ക്കുക", "confirmations.delete.message": "ഈ ടൂട്ട് ഇല്ലാതാക്കണം എന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", + "confirmations.delete.title": "എഴുത്തുൾ മായ്ക്കുക?", "confirmations.delete_list.confirm": "മായ്ക്കുക", "confirmations.delete_list.message": "ഈ പട്ടിക എന്നെന്നേക്കുമായി നീക്കം ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", + "confirmations.delete_list.title": "പട്ടിക കളയുണോ?", + "confirmations.discard_edit_media.confirm": "കളയുക", + "confirmations.edit.confirm": "സംശോധിക്കുക", "confirmations.logout.confirm": "പുറത്തുകടക്കുക", "confirmations.logout.message": "നിങ്ങൾക്ക് ലോഗ് ഔട്ട് ചെയ്യണമെന്ന് ഉറപ്പാണോ?", + "confirmations.logout.title": "പുറത്തിറങ്ങുക?", "confirmations.mute.confirm": "നിശ്ശബ്ദമാക്കുക", "confirmations.redraft.confirm": "മായിച്ച് മാറ്റങ്ങൾ വരുത്തി വീണ്ടും എഴുതുക", "confirmations.reply.confirm": "മറുപടി", @@ -125,9 +156,12 @@ "directory.local": "{domain} ൽ നിന്ന് മാത്രം", "directory.new_arrivals": "പുതിയ വരവുകൾ", "directory.recently_active": "അടുത്തിടെയായി സജീവമായ", + "disabled_account_banner.account_settings": "ഇടപാടു് ക്രമീകരങ്ങൾ", "disabled_account_banner.text": "നിങ്ങളുടെ {disabledAccount} എന്ന അക്കൗണ്ട് ഇപ്പോൾ പ്രവർത്തനരഹിതമാണ്.", "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.", + "domain_block_modal.title": "മേഖല തടസ്സപെടുത്തുക?", + "domain_pill.username": "ഉപയോക്തൃപേരു്", "embed.instructions": "ചുവടെയുള്ള കോഡ് പകർത്തിക്കൊണ്ട് നിങ്ങളുടെ വെബ്‌സൈറ്റിൽ ഈ ടൂട്ട് ഉൾച്ചേർക്കുക.", "embed.preview": "ഇത് ഇങ്ങനെ കാണപ്പെടും:", "emoji_button.activity": "പ്രവര്‍ത്തനം", @@ -158,10 +192,28 @@ "empty_column.notifications": "നിങ്ങൾക്ക് ഇതുവരെ ഒരു അറിയിപ്പുകളും ഇല്ല. മറ്റുള്ളവരുമായി ഇടപെട്ട് സംഭാഷണത്തിന് തുടക്കം കുറിക്കു.", "empty_column.public": "ഇവിടെ ഒന്നുമില്ലല്ലോ! ഇവിടെ നിറയ്ക്കാൻ എന്തെങ്കിലും പരസ്യമായി എഴുതുകയോ മറ്റ് ഉപഭോക്താക്കളെ പിന്തുടരുകയോ ചെയ്യുക", "errors.unexpected_crash.report_issue": "പ്രശ്നം അറിയിക്കുക", + "explore.search_results": "തിരയൽ ഫലങ്ങൾ", + "explore.suggested_follows": "ആൾക്കാർ", "explore.title": "പര്യവേക്ഷണം നടത്തുക", + "explore.trending_links": "വാര്‍ത്ത", + "explore.trending_statuses": "എഴുത്തുകൾ", + "explore.trending_tags": "ചർച്ചാവിഷയങ്ങൾ", + "filter_modal.added.review_and_configure_title": "അരിക്കൽ ക്രമീകരങ്ങൾ", "filter_modal.select_filter.prompt_new": "പുതിയ വിഭാഗം: {name}", + "filter_modal.select_filter.search": "തിരയുക അല്ലെങ്കിൽ നിർമാണിക്കുക", + "firehose.all": "എല്ലാം", "follow_request.authorize": "ചുമതലപ്പെടുത്തുക", "follow_request.reject": "നിരസിക്കുക", + "follow_suggestions.dismiss": "വീണ്ടും കാണിക്കരുതു്", + "follow_suggestions.view_all": "എല്ലാം കാണുക", + "follow_suggestions.who_to_follow": "ആരേ പിന്തുടരണം", + "followed_tags": "പിന്തുടരിയതു് ചർച്ചാവിഷയങ്ങൾ", + "footer.directory": "രൂപരേഖ നാമഗൃഹസൂചി", + "footer.get_app": "ഉപകരണം ലഭിക്കൂ", + "footer.invite": "ആളുകളെ ക്ഷണിക്കുക", + "footer.privacy_policy": "സ്വകാര്യത്തനയം", + "footer.source_code": "ഉറവിടസങ്കേതം കാണുക", + "footer.status": "അവസ്ഥ", "generic.saved": "സംരക്ഷിച്ചു", "getting_started.heading": "തുടക്കം കുറിക്കുക", "hashtag.column_header.tag_mode.all": "{additional} ഉം കൂടെ", @@ -173,11 +225,19 @@ "hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും", "hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല", "hashtag.column_settings.tag_toggle": "ഈ എഴുത്തുപംക്തിക്ക് കൂടുതൽ ഉപനാമങ്ങൾ ചേർക്കുക", + "hashtag.follow": "ചർച്ചാവിഷയം പിന്തുടരുക", + "hashtag.unfollow": "ചർച്ചാവിഷയം പിന്തുടരരുതു്", "home.column_settings.show_reblogs": "ബൂസ്റ്റുകൾ കാണിക്കുക", "home.column_settings.show_replies": "മറുപടികൾ കാണിക്കുക", "home.hide_announcements": "പ്രഖ്യാപനങ്ങൾ മറയ്‌ക്കുക", + "home.pending_critical_update.link": "പുതുകൾ കാണുക", "home.show_announcements": "പ്രഖ്യാപനങ്ങൾ കാണിക്കുക", + "interaction_modal.login.action": "ആമുഖം വരെ എടുത്തോണ്ടു് പോവുക", + "interaction_modal.login.prompt": "ആമുഖപ്രദാനിയുടെ മേഖലപേരു്. ഉദ: mastodon.social", + "interaction_modal.no_account_yet": "മാസ്റ്റഡോണിൽ ഇല്ലേ?", "interaction_modal.on_this_server": "ഈ സെർവറീൽ", + "interaction_modal.title.favourite": "പ്രിയപ്പെട്ട {name}-ന്റെ എഴുതു്", + "interaction_modal.title.follow": "{name}-െ പിന്തുടരുക", "keyboard_shortcuts.back": "തിരികെ പോകുക", "keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.boost": "ബൂസ്റ്റ് ചെയ്യുക", @@ -189,7 +249,7 @@ "keyboard_shortcuts.enter": "ടൂട്ട് എടുക്കാൻ", "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "കീബോർഡ് എളുപ്പവഴികൾ", - "keyboard_shortcuts.home": "ഹോം ടൈംലൈൻ തുറക്കുന്നതിന്", + "keyboard_shortcuts.home": "ആമുഖം സമയരേഖ തുറക്കുക", "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "പ്രാദേശിക സമയരേഖ തുറക്കാൻ", "keyboard_shortcuts.mention": "രചയിതാവിനെ സൂചിപ്പിക്കാൻ", @@ -212,45 +272,62 @@ "lightbox.close": "അടയ്ക്കുക", "lightbox.next": "അടുത്തത്", "lightbox.previous": "പുറകോട്ട്", + "limited_account_hint.action": "എന്നാലും രൂപരേഖ കാണിക്കുക", + "link_preview.author": "{name}-നിന്നു്", "lists.account.add": "പട്ടികയിലേക്ക് ചേർക്കുക", "lists.account.remove": "പട്ടികയിൽ നിന്ന് ഒഴിവാക്കുക", "lists.delete": "പട്ടിക ഒഴിവാക്കുക", "lists.edit": "പട്ടിക തിരുത്തുക", "lists.edit.submit": "തലക്കെട്ട് മാറ്റുക", + "lists.exclusive": "ഈ എഴുത്തുകൾ ആമുഖം നിന്നു് മറയ്ക്കുക", "lists.new.create": "പുതിയ പട്ടിക ചേർക്കുക", + "lists.new.title_placeholder": "പുതിയ പട്ടിക തലക്കെട്ടു്", "lists.replies_policy.none": "ആരുമില്ല", "lists.replies_policy.title": "ഇതിനുള്ള മറുപടികൾ കാണിക്കുക:", "lists.subheading": "എന്റെ പട്ടികകൾ", + "media_gallery.hide": "മറയ്ക്കുക", "navigation_bar.blocks": "തടയപ്പെട്ട ഉപയോക്താക്കൾ", "navigation_bar.bookmarks": "ബുക്ക്മാർക്കുകൾ", "navigation_bar.community_timeline": "പ്രാദേശിക സമയരേഖ", "navigation_bar.compose": "പുതിയ ടൂട്ട് എഴുതുക", "navigation_bar.discover": "കണ്ടെത്തുക", "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.explore": "ആരായുക", + "navigation_bar.favourites": "പ്രിയപ്പെട്ടതു്", "navigation_bar.follow_requests": "പിന്തുടരാനുള്ള അഭ്യർത്ഥനകൾ", "navigation_bar.lists": "ലിസ്റ്റുകൾ", "navigation_bar.logout": "ലോഗൗട്ട്", "navigation_bar.mutes": "നിശബ്ദമാക്കപ്പെട്ട ഉപയോക്താക്കൾ", + "navigation_bar.personal": "സ്വകാര്യ", "navigation_bar.pins": "Pinned toots", "navigation_bar.preferences": "ക്രമീകരണങ്ങൾ", + "navigation_bar.search": "തിരയുക", "navigation_bar.security": "സുരക്ഷ", "not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.", "notification.follow": "{name} നിങ്ങളെ പിന്തുടർന്നു", "notification.follow_request": "{name} നിങ്ങളെ പിന്തുടരാൻ അഭ്യർത്ഥിച്ചു", + "notification.label.reply": "മറുപടി", + "notification.moderation-warning.learn_more": "ഇനീം അറിയുക", + "notification.moderation_warning.action_silence": "താങ്ങളുടെ ഇടപാടു് പരിധിപെട്ടിരിക്കുന്നു.", "notification.own_poll": "നിങ്ങളുടെ പോൾ അവസാനിച്ചു", "notification.reblog": "{name} നിങ്ങളുടെ പോസ്റ്റ് ബൂസ്റ്റ് ചെയ്തു", "notification.status": "{name} ഇപ്പോൾ പോസ്റ്റുചെയ്‌തു", + "notification_requests.accept": "സ്വീകരിക്കുക", + "notification_requests.edit_selection": "പരിഷ്കരിക്കുക", "notifications.clear": "അറിയിപ്പ് മായ്ക്കുക", "notifications.clear_confirmation": "നിങ്ങളുടെ എല്ലാ അറിയിപ്പുകളും ശാശ്വതമായി മായ്‌ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", "notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ", "notifications.column_settings.follow": "പുതിയ പിന്തുടരുന്നവർ:", "notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:", + "notifications.column_settings.group": "കൂട്ടം", "notifications.column_settings.mention": "സൂചനകൾ:", "notifications.column_settings.poll": "പോൾ ഫലങ്ങൾ:", "notifications.column_settings.push": "പുഷ് അറിയിപ്പുകൾ", "notifications.column_settings.reblog": "ബൂസ്റ്റുകൾ:", + "notifications.column_settings.show": "എഴുത്തുപംക്തിയിൽ കാണിക്കുക", "notifications.column_settings.sound": "ശബ്ദം പ്ലേ ചെയ്യുക", "notifications.column_settings.status": "പുതിയ ടൂട്ടുകൾ:", + "notifications.column_settings.update": "പരിഷ്കരണങ്ങൾ:", "notifications.filter.all": "എല്ലാം", "notifications.filter.boosts": "ബൂസ്റ്റുകൾ", "notifications.filter.follows": "പിന്തുടരുന്നു", @@ -260,15 +337,19 @@ "notifications.grant_permission": "അനുമതി നൽകുക.", "notifications.group": "{count} അറിയിപ്പുകൾ", "notifications.mark_as_read": "എല്ലാ അറിയിപ്പുകളും വായിച്ചതായി അടയാളപ്പെടുത്തുക", + "notifications.policy.filter": "അരിക്കൽ", + "notifications.policy.filter_new_accounts_title": "പുതിയ ഇടപാടുകൾ", + "notifications.policy.filter_not_followers_title": "താങ്ങളെ പിന്തുടരാത്തതു് ആൾക്കാർ", "notifications_permission_banner.enable": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ പ്രാപ്തമാക്കുക", "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.actions.go_to_home": "ആമുഖത്താൾ വരെ പോവ്വുക", + "onboarding.follows.lead": "", + "onboarding.follows.title": "താങ്ങളുടെ ആമുഖത്താളിന് വ്യക്തിപരമാക്കുക", + "onboarding.share.title": "താങ്ങളുടെ രൂപരേഖ പങ്കിടുക", "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.follow_people.title": "താങ്ങളുടെ ആമുഖത്താളിന് വ്യക്തിപരമാക്കുക", "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", @@ -277,22 +358,32 @@ "picture_in_picture.restore": "തിരികെ വയ്ക്കുക", "poll.closed": "അടച്ചു", "poll.refresh": "പുതുക്കുക", + "poll.reveal": "ഫലങ്ങൾ കാണുക", "poll.vote": "വോട്ട് ചെയ്യുക", "poll.voted": "ഈ ഉത്തരത്തിനായി നിങ്ങൾ വോട്ട് ചെയ്തു", "poll_button.add_poll": "ഒരു പോൾ ചേർക്കുക", "poll_button.remove_poll": "പോൾ നീക്കംചെയ്യുക", "privacy.change": "ടൂട്ട് സ്വകാര്യത ക്രമീകരിക്കുക", + "privacy.private.long": "താങ്ങളെ പിന്തുടരുന്നവർ മാത്രം", + "privacy.private.short": "പിന്തുടരുന്നവർ", "privacy.public.short": "എല്ലാവര്‍ക്കും", + "privacy_policy.title": "സ്വകാര്യത്തനയം", "refresh": "പുതുക്കുക", "regeneration_indicator.label": "ലഭ്യമാക്കുന്നു…", - "regeneration_indicator.sublabel": "നിങ്ങളുടെ ഹോം ഫീഡ് തയാറാക്കുന്നു!", + "regeneration_indicator.sublabel": "നിങ്ങളുടെ താങ്ങളുടെ ആമുഖത്താളിന് തയാറാക്കുന്നു!", "relative_time.days": "{number}ദിവസം", + "relative_time.full.just_now": "ഇപ്പോൾതന്നെ", "relative_time.hours": "{number}മണി", "relative_time.just_now": "ഇപ്പോൾ", "relative_time.today": "ഇന്ന്", "reply_indicator.cancel": "റദ്ദാക്കുക", + "report.block": "തടസ്സപെടുത്തുക", + "report.category.title_account": "രൂപരേഖ", + "report.close": "ചെയ്തു", "report.forward_hint": "ഈ അക്കൗണ്ട് മറ്റൊരു സെർവറിൽ നിന്നാണ്. റിപ്പോർട്ടിന്റെ അജ്ഞാത പകർപ്പ് അവിടെ അയയ്ക്കണോ?", + "report.next": "അടുത്തതു്", "report.placeholder": "കൂടുതൽ അഭിപ്രായങ്ങൾ", + "report.reasons.spam": "ഇതു് പാഴടക്കമാണു്", "report.submit": "സമർപ്പിക്കുക", "report.target": "Report {target}", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", @@ -327,7 +418,7 @@ "status.share": "പങ്കിടുക", "status.show_more_all": "എല്ലാവർക്കുമായി കൂടുതൽ കാണിക്കുക", "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", - "tabs_bar.home": "ഹോം", + "tabs_bar.home": "ആമുഖം", "tabs_bar.notifications": "അറിയിപ്പുകൾ", "time_remaining.days": "{number, plural, one {# ദിവസം} other {# ദിവസങ്ങൾ}} ബാക്കി", "time_remaining.hours": "{number, plural, one {# മണിക്കൂർ} other {# മണിക്കൂർ}} ശേഷിക്കുന്നു", @@ -351,7 +442,7 @@ "upload_modal.preview_label": "പൂര്‍വ്വദൃശ്യം({ratio})", "upload_progress.label": "Uploading…", "video.close": "വീഡിയോ അടയ്ക്കുക", - "video.download": "ഫയൽ ഡൌൺലോഡ് ചെയ്യുക", + "video.download": "ഫയൽ ഇറക്കുവയ്ക്കുക", "video.exit_fullscreen": "പൂർണ്ണ സ്ക്രീനിൽ നിന്ന് പുറത്തുകടക്കുക", "video.expand": "വീഡിയോ വികസപ്പിക്കൂ", "video.fullscreen": "പൂർണ്ണ സ്ക്രീൻ", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index cbd57ab356..684096e26d 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -3,7 +3,7 @@ "about.contact": "Hubungi:", "about.disclaimer": "Mastodon ialah perisian sumber terbuka percuma, dan merupakan tanda dagangan Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Sebab tidak tersedia", - "about.domain_blocks.preamble": "Secara amnya, Mastodon membenarkan anda melihat kandungan daripada dan berinteraksi dengan pengguna daripada mana-mana pelayan dalam dunia persekutuan. Berikut ialah pengecualian yang telah dibuat pada pelayan ini secara khususnya.", + "about.domain_blocks.preamble": "Secara amnya, Mastodon membenarkan anda melihat kandungan pengguna daripada mana-mana pelayan dalam alam bersekutu dan berinteraksi dengan mereka. Berikut ialah pengecualian yang khusus pada pelayan ini.", "about.domain_blocks.silenced.explanation": "Secara amnya, anda tidak akan melihat profil dan kandungan daripada pelayan ini, kecuali anda mencarinya secara khusus atau ikut serta dengan mengikutinya.", "about.domain_blocks.silenced.title": "Terhad", "about.domain_blocks.suspended.explanation": "Tiada data daripada pelayan ini yang akan diproses, disimpan atau ditukar, menjadikan sebarang interaksi atau perhubungan dengan pengguna daripada pelayan ini adalah mustahil.", @@ -19,7 +19,7 @@ "account.block_domain": "Sekat domain {domain}", "account.block_short": "Malay", "account.blocked": "Disekat", - "account.cancel_follow_request": "Menarik balik permintaan mengikut", + "account.cancel_follow_request": "Batalkan permintaan ikut", "account.copy": "Salin pautan ke profil", "account.direct": "Sebut secara persendirian @{name}", "account.disable_notifications": "Berhenti maklumkan saya apabila @{name} mengirim hantaran", @@ -36,6 +36,7 @@ "account.followers.empty": "Belum ada yang mengikuti pengguna ini.", "account.followers_counter": "{count, plural, one {{counter} Diikuti} other {{counter} Diikuti}}", "account.following": "Mengikuti", + "account.following_counter": "{count, plural, other {{counter} following}}", "account.follows.empty": "Pengguna ini belum mengikuti sesiapa.", "account.go_to_profile": "Pergi ke profil", "account.hide_reblogs": "Sembunyikan galakan daripada @{name}", @@ -61,6 +62,7 @@ "account.requested_follow": "{name} has requested to follow you", "account.share": "Kongsi profil @{name}", "account.show_reblogs": "Tunjukkan galakan daripada @{name}", + "account.statuses_counter": "{count, plural, other {{counter} siaran}}", "account.unblock": "Nyahsekat @{name}", "account.unblock_domain": "Nyahsekat domain {domain}", "account.unblock_short": "Nyahsekat", @@ -83,10 +85,19 @@ "alert.rate_limited.title": "Kadar terhad", "alert.unexpected.message": "Berlaku ralat di luar jangkaan.", "alert.unexpected.title": "Alamak!", + "alt_text_badge.title": "Teks alternatif", "announcement.announcement": "Pengumuman", "attachments_list.unprocessed": "(belum diproses)", "audio.hide": "Sembunyikan audio", + "block_modal.remote_users_caveat": "Kami akan meminta pelayan {domain} untuk menghormati keputusan anda. Bagaimanapun, pematuhan tidak dijamin kerana ada pelayan yang mungkin menangani sekatan dengan cara berbeza. Hantaran awam mungkin masih tampak kepada pengguna yang tidak log masuk.", + "block_modal.they_cant_mention": "Dia tidak boleh menyebut tentang anda atau mengikut anda.", + "block_modal.they_cant_see_posts": "Dia tidak boleh melihat hantaran anda dan sebaliknya.", + "block_modal.they_will_know": "Dia boleh lihat bahawa dia disekat.", + "block_modal.title": "Sekat pengguna?", + "block_modal.you_wont_see_mentions": "Anda tidak akan melihat hantaran yang menyebut tentangnya.", "boost_modal.combo": "Anda boleh tekan {combo} untuk melangkauinya pada waktu lain", + "boost_modal.reblog": "Galakkan hantaran?", + "boost_modal.undo_reblog": "Nyahgalakkan hantaran?", "bundle_column_error.copy_stacktrace": "Salin laporan ralat", "bundle_column_error.error.body": "Halaman yang diminta gagal dipaparkan. Ini mungkin disebabkan oleh pepijat dalam kod kami, atau masalah keserasian pelayar.", "bundle_column_error.error.title": "Alamak!", @@ -111,7 +122,7 @@ "column.direct": "Sebutan peribadi", "column.directory": "Layari profil", "column.domain_blocks": "Domain disekat", - "column.favourites": "Kegemaran", + "column.favourites": "Sukaan", "column.firehose": "Suapan langsung", "column.follow_requests": "Permintaan ikutan", "column.home": "Laman Utama", @@ -160,17 +171,21 @@ "confirmations.block.confirm": "Sekat", "confirmations.delete.confirm": "Padam", "confirmations.delete.message": "Adakah anda pasti anda ingin memadam hantaran ini?", + "confirmations.delete.title": "Padam hantaran?", "confirmations.delete_list.confirm": "Padam", "confirmations.delete_list.message": "Adakah anda pasti anda ingin memadam senarai ini secara kekal?", + "confirmations.delete_list.title": "Padam senarai?", "confirmations.discard_edit_media.confirm": "Singkir", "confirmations.discard_edit_media.message": "Anda belum menyimpan perubahan pada penerangan atau pratonton media. Anda ingin membuangnya?", "confirmations.edit.confirm": "Sunting", "confirmations.edit.message": "Mengedit sekarang akan menimpa mesej yang sedang anda karang. Adakah anda pasti mahu meneruskan?", + "confirmations.edit.title": "Tulis ganti hantaran?", "confirmations.logout.confirm": "Log keluar", "confirmations.logout.message": "Adakah anda pasti anda ingin log keluar?", + "confirmations.logout.title": "Log keluar?", "confirmations.mute.confirm": "Bisukan", "confirmations.redraft.confirm": "Padam & rangka semula", - "confirmations.redraft.message": "Adakah anda pasti anda ingin memadam pos ini dan merangkanya semula? Kegemaran dan galakan akan hilang, dan balasan ke pos asal akan menjadi yatim.", + "confirmations.redraft.message": "Adakah anda pasti anda ingin memadam hantaran ini dan gubal semula? Sukaan dan galakan akan hilang, dan balasan ke hantaran asal akan menjadi yatim.", "confirmations.reply.confirm": "Balas", "confirmations.reply.message": "Membalas sekarang akan menulis ganti mesej yang anda sedang karang. Adakah anda pasti anda ingin teruskan?", "confirmations.unfollow.confirm": "Nyahikut", @@ -182,7 +197,7 @@ "copy_icon_button.copied": "Disalin ke papan klip", "copypaste.copied": "Disalin", "copypaste.copy_to_clipboard": "Salin ke papan klip", - "directory.federated": "Dari fediverse yang diketahui", + "directory.federated": "Dari alam bersekutu yang diketahui", "directory.local": "Dari {domain} sahaja", "directory.new_arrivals": "Ketibaan baharu", "directory.recently_active": "Aktif baru-baru ini", @@ -191,7 +206,7 @@ "dismissable_banner.community_timeline": "Inilah hantaran awam terkini daripada orang yang akaun dihos oleh {domain}.", "dismissable_banner.dismiss": "Ketepikan", "dismissable_banner.explore_links": "Berita-berita ini sedang dibualkan oleh orang di pelayar ini dan pelayar lain dalam rangkaian terpencar sekarang.", - "dismissable_banner.explore_statuses": "Ini adalah pos dari seluruh web sosial yang semakin menarik perhatian hari ini. Pos baharu dengan lebih banyak rangsangan dan kegemaran diberi kedudukan lebih tinggi.", + "dismissable_banner.explore_statuses": "Hantaran-hantaran dari seluruh alam bersekutu ini sedang sohor. Hantaran terbaharu dengan lebih banyak galakan dan sukaan diberi kedudukan lebih tinggi.", "dismissable_banner.explore_tags": "Tanda-tanda pagar ini daripada pelayar ini dan pelayar lain dalam rangkaian terpencar sedang hangat pada pelayar ini sekarang.", "dismissable_banner.public_timeline": "Ini ialah pos awam terbaharu daripada orang di web sosial yang diikuti oleh orang di {domain}.", "embed.instructions": "Benam hantaran ini di laman sesawang anda dengan menyalin kod berikut.", @@ -221,8 +236,8 @@ "empty_column.direct": "Anda belum mempunyai sebarang sebutan peribadi lagi. Apabila anda menghantar atau menerima satu, ia akan dipaparkan di sini.", "empty_column.domain_blocks": "Belum ada domain yang disekat.", "empty_column.explore_statuses": "Tiada apa-apa yang sohor kini sekarang. Semaklah kemudian!", - "empty_column.favourited_statuses": "Anda belum mempunyai sebarang pos kegemaran. Apabila anda kegemaran, ia akan dipaparkan di sini.", - "empty_column.favourites": "Tiada siapa yang menggemari pos ini lagi. Apabila seseorang melakukannya, mereka akan muncul di sini.", + "empty_column.favourited_statuses": "Anda belum mempunyai sebarang hantaran sukaan lagi. Hantaran akan muncul di sini apabila disukai oleh anda.", + "empty_column.favourites": "Hantaran ini belum disukai mana-mana pengguna lagi. Pengguna yang menyukai akan muncul di sini.", "empty_column.follow_requests": "Anda belum mempunyai permintaan ikutan. Ia akan terpapar di sini apabila ada nanti.", "empty_column.followed_tags": "You have not followed any hashtags yet. When you do, they will show up here.", "empty_column.hashtag": "Belum ada apa-apa dengan tanda pagar ini.", @@ -307,7 +322,7 @@ "home.pending_critical_update.link": "Lihat pengemaskinian", "home.pending_critical_update.title": "Kemas kini keselamatan kritikal tersedia!", "home.show_announcements": "Tunjukkan pengumuman", - "interaction_modal.description.favourite": "Dengan akaun di Mastodon, anda boleh menggemari pos ini untuk memberitahu pengarang anda menghargainya dan menyimpannya untuk kemudian.", + "interaction_modal.description.favourite": "Dengan akaun di Mastodon, anda boleh menyukai hantaran ini sebagai tanda penghargaan kepada pencipta dan menyimpannya untuk kemudian.", "interaction_modal.description.follow": "Dengan akaun pada Mastodon, anda boleh mengikut {name} untuk menerima hantaran mereka di suapan rumah anda.", "interaction_modal.description.reblog": "Dengan akaun pada Mastodon, anda boleh menggalakkan hantaran ini untuk dikongsi dengan pengikut anda.", "interaction_modal.description.reply": "Dengan akaun pada Mastodon, anda boleh membalas kepada hantaran ini.", @@ -318,7 +333,7 @@ "interaction_modal.on_this_server": "Pada pelayan ini", "interaction_modal.sign_in": "Anda tidak log masuk ke server ini. Di manakah akaun anda dihoskan?", "interaction_modal.sign_in_hint": "Petua: Itulah tapak web tempat anda mendaftar. Jika anda tidak ingat, cari e-mel alu-aluan dalam peti masuk anda. Anda juga boleh memasukkan nama pengguna penuh anda! (cth. @Mastodon@mastodon.social)", - "interaction_modal.title.favourite": "Pos {name} kegemaran", + "interaction_modal.title.favourite": "Suka hantaran {name}", "interaction_modal.title.follow": "Ikuti {name}", "interaction_modal.title.reblog": "Galak hantaran {name}", "interaction_modal.title.reply": "Balas siaran {name}", @@ -334,8 +349,8 @@ "keyboard_shortcuts.direct": "to open direct messages column", "keyboard_shortcuts.down": "to move down in the list", "keyboard_shortcuts.enter": "Buka hantaran", - "keyboard_shortcuts.favourite": "Pos kegemaran", - "keyboard_shortcuts.favourites": "Buka senarai kegemaran", + "keyboard_shortcuts.favourite": "Suka hantaran", + "keyboard_shortcuts.favourites": "Buka senarai sukaan", "keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.heading": "Pintasan papan kekunci", "keyboard_shortcuts.home": "to open home timeline", @@ -392,7 +407,7 @@ "navigation_bar.discover": "Teroka", "navigation_bar.domain_blocks": "Domain disekat", "navigation_bar.explore": "Teroka", - "navigation_bar.favourites": "Kegemaran", + "navigation_bar.favourites": "Sukaan", "navigation_bar.filters": "Perkataan yang dibisukan", "navigation_bar.follow_requests": "Permintaan ikutan", "navigation_bar.followed_tags": "Ikuti hashtag", @@ -410,11 +425,13 @@ "not_signed_in_indicator.not_signed_in": "Anda perlu daftar masuk untuk mencapai sumber ini.", "notification.admin.report": "{name} melaporkan {target}", "notification.admin.sign_up": "{name} mendaftar", - "notification.favourite": "{name} menggemari pos anda", + "notification.favourite": "{name} menyukai hantaran anda", + "notification.favourite.name_and_others_with_link": "{name} dan {count, plural, other {# orang lain}} telah suka hantaran anda", "notification.follow": "{name} mengikuti anda", "notification.follow_request": "{name} meminta untuk mengikuti anda", "notification.own_poll": "Undian anda telah tamat", "notification.reblog": "{name} menggalak hantaran anda", + "notification.reblog.name_and_others_with_link": "{name} dan {count, plural, other {# orang lain}} telah galakkan hantaran anda", "notification.status": "{name} baru sahaja mengirim hantaran", "notification.update": "{name} menyunting hantaran", "notifications.clear": "Buang pemberitahuan", @@ -422,7 +439,7 @@ "notifications.column_settings.admin.report": "Laporan baru:", "notifications.column_settings.admin.sign_up": "Pendaftaran baru:", "notifications.column_settings.alert": "Pemberitahuan atas meja", - "notifications.column_settings.favourite": "Kegemaran:", + "notifications.column_settings.favourite": "Sukaan:", "notifications.column_settings.follow": "Pengikut baharu:", "notifications.column_settings.follow_request": "Permintaan ikutan baharu:", "notifications.column_settings.mention": "Sebutan:", @@ -437,7 +454,7 @@ "notifications.column_settings.update": "Suntingan:", "notifications.filter.all": "Semua", "notifications.filter.boosts": "Galakan", - "notifications.filter.favourites": "Kegemaran", + "notifications.filter.favourites": "Sukaan", "notifications.filter.follows": "Ikutan", "notifications.filter.mentions": "Sebutan", "notifications.filter.polls": "Keputusan undian", @@ -602,7 +619,7 @@ "status.admin_status": "Buka hantaran ini dalam antara muka penyederhanaan", "status.block": "Sekat @{name}", "status.bookmark": "Tanda buku", - "status.cancel_reblog_private": "Nyahgalak", + "status.cancel_reblog_private": "Nyahgalakkan", "status.cannot_reblog": "Hantaran ini tidak boleh digalakkan", "status.copy": "Salin pautan ke hantaran", "status.delete": "Padam", @@ -611,7 +628,8 @@ "status.direct_indicator": "Sebutan peribadi", "status.edit": "Sunting", "status.edited_x_times": "Disunting {count, plural, other {{count} kali}}", - "status.favourite": "Kegemaran", + "status.favourite": "Suka", + "status.favourites": "{count, plural, other {sukaan}}", "status.filter": "Tapiskan hantaran ini", "status.history.created": "{name} mencipta pada {date}", "status.history.edited": "{name} menyunting pada {date}", @@ -628,9 +646,10 @@ "status.pinned": "Hantaran disemat", "status.read_more": "Baca lagi", "status.reblog": "Galakkan", - "status.reblog_private": "Galakkan dengan kebolehlihatan asal", - "status.reblogged_by": "{name} telah menggalakkan", - "status.reblogs.empty": "Tiada sesiapa yang menggalak hantaran ini. Apabila ada yang menggalak, ia akan muncul di sini.", + "status.reblog_private": "Galakkan dengan ketampakan asal", + "status.reblogged_by": "{name} galakkan", + "status.reblogs": "{count, plural, other {galakan}}", + "status.reblogs.empty": "Tiada sesiapa yang galakkan hantaran ini. Apabila ada yang galakkan, hantaran akan muncul di sini.", "status.redraft": "Padam & rangka semula", "status.remove_bookmark": "Buang tanda buku", "status.replied_to": "Menjawab kepada {name}", @@ -670,6 +689,8 @@ "upload_error.poll": "Tidak boleh memuat naik fail bersama undian.", "upload_form.audio_description": "Jelaskan untuk orang yang ada masalah pendengaran", "upload_form.description": "Jelaskan untuk orang yang ada masalah penglihatan", + "upload_form.drag_and_drop.instructions": "Untuk mengangkat lampiran media, tekan jarak atau enter. Ketika menarik, gunakan kekunci anak panah untuk menggerakkan lampiran media pada mana-mana arah. Tekan jarak atau enter untuk melepaskan lampiran media pada kedudukan baharunya, atau tekan keluar untuk batalkan.", + "upload_form.drag_and_drop.on_drag_cancel": "Seretan dibatalkan. Lampiran media {item} dilepaskan.", "upload_form.edit": "Sunting", "upload_form.thumbnail": "Ubah gambar kecil", "upload_form.video_description": "Jelaskan untuk orang yang ada masalah pendengaran atau penglihatan", diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json new file mode 100644 index 0000000000..c736923c2d --- /dev/null +++ b/app/javascript/mastodon/locales/nan.json @@ -0,0 +1,421 @@ +{ + "about.blocks": "Siū 管制 ê 服侍器", + "about.contact": "聯絡lâng:", + "about.disclaimer": "Mastodon是自由、開放原始碼ê軟體,mā是Mastodon gGmbH ê商標。", + "about.domain_blocks.no_reason_available": "原因bē-tàng用", + "about.domain_blocks.preamble": "Mastodon一般ē允准lí看別ê fediverse 服侍器來ê聯絡人kap hām用者交流。Tsiah ê 是本服侍器建立ê例外。", + "about.domain_blocks.silenced.explanation": "Lí一般buē-tàng tuì tsit ê服侍器看用戶ê紹介kap內容,除非lí明白tshiau-tshuē á是跟tuè伊。", + "about.domain_blocks.silenced.title": "有限制", + "about.domain_blocks.suspended.explanation": "Uì tsit ê服侍器來ê資料lóng bē處理、儲存á是交換,無可能kap tsit ê服侍器ê用者互動á是溝通。.", + "about.domain_blocks.suspended.title": "權限中止", + "about.not_available": "Tsit ê資訊bē-tàng tī tsit ê服侍器使用。", + "about.powered_by": "由 {mastodon} 提供ê非中心化社群媒體", + "about.rules": "服侍器ê規則", + "account.account_note_header": "個人ê註解", + "account.add_or_remove_from_list": "加添kàu列單á是uì列單thâi掉", + "account.badges.bot": "機器lâng", + "account.badges.group": "群組", + "account.block": "封鎖 @{name}", + "account.block_domain": "封鎖網域 {domain}", + "account.block_short": "封鎖", + "account.blocked": "Hőng封鎖", + "account.cancel_follow_request": "取消跟tuè", + "account.copy": "Khóo-pih kàu個人資料ê連結", + "account.direct": "私人提起 @{name}", + "account.disable_notifications": "停止佇 {name} PO文ê時通知我", + "account.domain_blocked": "封鎖ê網域", + "account.edit_profile": "編輯個人資料", + "account.enable_notifications": "佇 {name} PO文ê時通知我", + "account.endorse": "用個人資料推薦對方", + "account.featured_tags.last_status_at": "頂kái tī {date} Po文", + "account.featured_tags.last_status_never": "無PO文", + "account.featured_tags.title": "{name} ê推薦hashtag", + "account.follow": "跟tuè", + "account.follow_back": "Tuè tńg去", + "account.followers": "跟tuè lí ê", + "account.followers.empty": "Tsit ê用者iáu bô lâng跟tuè。", + "account.followers_counter": "Hōo {count, plural, other {{count} ê lâng}}跟tuè", + "account.following": "Lí跟tuè ê", + "account.following_counter": "Teh跟tuè {count,plural,other {{count} ê lâng}}", + "account.follows.empty": "Tsit ê用者iáu buē跟tuè別lâng。", + "account.go_to_profile": "行kàu個人資料", + "account.hide_reblogs": "Tshàng tuì @{name} 來ê轉PO", + "account.in_memoriam": "佇tsia追悼。", + "account.joined_short": "加入ê時", + "account.languages": "變更訂閱的語言", + "account.link_verified_on": "Tsit ê連結ê所有權佇 {date} 受檢查", + "account.locked_info": "Tsit ê口座ê隱私狀態鎖起來ah。所有者ē手動審查thang kā跟tuè ê lâng。", + "account.media": "媒體", + "account.mention": "提起 @{name}", + "account.moved_to": "{name} 指示tsit-má伊ê新口座是:", + "account.mute": "消音 @{name}", + "account.mute_notifications_short": "Kā通知消音", + "account.mute_short": "消音", + "account.muted": "消音ah", + "account.mutual": "相跟tuè", + "account.no_bio": "Bô提供敘述。", + "account.open_original_page": "開原來ê頁", + "account.posts": "PO文", + "account.posts_with_replies": "PO文kap回應", + "account.report": "檢舉 @{name}", + "account.requested": "Teh等待審查。Tshi̍h tsi̍t-ē 通取消跟tuè請求", + "account.requested_follow": "{name} 請求跟tuè lí", + "account.share": "分享 @{name} ê個人資料", + "account.show_reblogs": "顯示uì @{name} 來ê轉PO", + "account.statuses_counter": "{count, plural, other {{count} ê PO文}}", + "account.unblock": "取消封鎖 @{name}", + "account.unblock_domain": "Kā域名 {domain} 取消封鎖", + "account.unblock_short": "取消封鎖", + "account.unendorse": "Mài tī個人資料推薦伊", + "account.unfollow": "取消跟tuè", + "account.unmute": "取消消音 @{name}", + "account.unmute_notifications_short": "Kā通知取消消音", + "account.unmute_short": "取消消音", + "account_note.placeholder": "Tshi̍h tse加註kha", + "admin.dashboard.daily_retention": "註冊以後ê用者維持率(用kang計算)", + "admin.dashboard.monthly_retention": "註冊以後ê用者維持率", + "admin.dashboard.retention.average": "平均", + "admin.dashboard.retention.cohort": "註冊ê月", + "admin.dashboard.retention.cohort_size": "新用者", + "admin.impact_report.instance_accounts": "個人資料ē hőng thâi掉ê用者數", + "admin.impact_report.instance_followers": "本站ê跟tuè者ē流失ê數", + "admin.impact_report.instance_follows": "In ê跟tuè者ē流失ê數", + "admin.impact_report.title": "影響ê摘要", + "alert.rate_limited.message": "請tī {retry_time, time, medium} 以後koh試。", + "alert.rate_limited.title": "限速ah", + "alert.unexpected.message": "發生意外ê錯誤。.", + "alert.unexpected.title": "Ai-ioh!", + "alt_text_badge.title": "替代文字", + "announcement.announcement": "公告", + "attachments_list.unprocessed": "(Iáu bē處理)", + "audio.hide": "Tshàng聲音", + "block_modal.remote_users_caveat": "Guán ē要求服侍器 {domain} 尊重lí ê決定。但是bô法度保證ta̍k ê服侍器lóng遵守,因為tsi̍t-kuá服侍器huân-sè用別款方法處理封鎖。公開ê PO文可能iáu是ē hōo bô登入ê用者看著。", + "block_modal.show_less": "看khah少", + "block_modal.show_more": "顯示其他ê內容", + "block_modal.they_cant_mention": "In buē-tàng 提起á是跟tuè lí。", + "block_modal.they_cant_see_posts": "Lín buē-tàng互相看著對方ê PO文。", + "block_modal.they_will_know": "In通看見in hőng封鎖。", + "block_modal.title": "Kám beh封鎖用者?", + "block_modal.you_wont_see_mentions": "Lí buē看見提起in ê PO文。", + "boost_modal.combo": "後擺lí thang tshi̍h {combo} 跳過", + "boost_modal.reblog": "Kám beh轉PO?", + "boost_modal.undo_reblog": "Kám beh取消轉PO?", + "bundle_column_error.copy_stacktrace": "Khóo-pih錯誤報告", + "bundle_column_error.error.body": "請求ê頁bē-tàng 畫出來。有可能是guán程式碼內底ê錯誤,á是瀏覽器共存性ê議題。", + "bundle_column_error.error.title": "害ah!", + "bundle_column_error.network.body": "佇載入tsit頁ê時出現錯誤。可能因為lí ê網路連線á是tsit臺服侍器ê暫時ê問題。", + "bundle_column_error.network.title": "網路錯誤", + "bundle_column_error.retry": "Koh試", + "bundle_column_error.return": "Tńg去頭頁", + "bundle_column_error.routing.body": "Tshuē bô所要求ê頁面。Lí kám確定地址liâu-á ê URL正確?", + "bundle_column_error.routing.title": "404", + "bundle_modal_error.close": "關", + "bundle_modal_error.retry": "Koh試", + "closed_registrations.other_server_instructions": "因為Mastodon非中心化,所以lí ē當tī別ê服侍器建立口座,iáu ē當kap tsit ê服侍器來往。", + "closed_registrations_modal.description": "Tann bē當tī {domain} 建立新ê口座,m̄-koh著記得,lí bô需要 {domain} 服侍器ê帳號,mā ē當用 Mastodon。", + "closed_registrations_modal.find_another_server": "Tshuē別ê服侍器", + "closed_registrations_modal.preamble": "因為Mastodon非中心化,所以bô論tī tá tsi̍t ê服侍器建立口座,lí lóng ē當跟tuè tsi̍t ê服侍器ê逐ê lâng,kap hām in交流。Lí iā ē當ka-tī起tsi̍t ê站!", + "closed_registrations_modal.title": "註冊 Mastodon ê口座", + "column.about": "概要", + "column.blocks": "封鎖ê用者", + "column.bookmarks": "冊籤", + "column.community": "本地ê時間線", + "column.direct": "私人ê提起", + "column.directory": "瀏覽個人資料", + "column.domain_blocks": "封鎖ê域名", + "column.favourites": "Siōng kah意", + "column.firehose": "Tsit-má ê動態", + "column.follow_requests": "跟tuè請求", + "column.home": "頭頁", + "column.lists": "列單", + "column.mutes": "消音ê用者", + "column.notifications": "通知", + "column.pins": "釘起來ê PO文", + "column.public": "聯邦ê時間線", + "column_back_button.label": "頂頁", + "column_header.hide_settings": "Khàm掉設定", + "column_header.moveLeft_settings": "Kā欄sak khah倒pîng", + "column_header.moveRight_settings": "Kā欄sak khah正pîng", + "column_header.pin": "釘", + "column_header.show_settings": "顯示設定", + "column_header.unpin": "Pak掉", + "column_subheading.settings": "設定", + "community.column_settings.local_only": "Kan-ta展示本地ê", + "community.column_settings.media_only": "Kan-ta展示媒體", + "community.column_settings.remote_only": "Kan-ta展示遠距離ê", + "compose.language.change": "換語言", + "compose.language.search": "Tshiau-tshuē語言……", + "compose.published.body": "成功PO文。", + "compose.published.open": "開", + "compose.saved.body": "PO文儲存ah。", + "compose_form.direct_message_warning_learn_more": "詳細資訊", + "compose_form.encryption_warning": "Mastodon ê PO文無點tuì點加密。M̄通用Mastodon分享任何敏感ê資訊。", + "compose_form.hashtag_warning": "因為tsit êPO文m̄是公開ê,buē列tī任何ê hashtag。Kan-ta公開ê PO文tsiah ē當用hashtag tshuē。", + "compose_form.lock_disclaimer": "Lí ê口座iáu buē {locked}。逐ê lâng lóng通跟tuè lí,看lí kan-ta hōo跟tuè ê看ê PO文。", + "compose_form.lock_disclaimer.lock": "鎖起來ê", + "compose_form.placeholder": "Lí teh想siánn?", + "compose_form.poll.duration": "投票期間", + "compose_form.poll.multiple": "Tsē選擇", + "compose_form.poll.option_placeholder": "選項 {number}", + "compose_form.poll.single": "揀tsi̍t ê", + "compose_form.poll.switch_to_multiple": "Kā投票改做ē當選tsē-tsē ê。", + "compose_form.poll.switch_to_single": "Kā投票改做kan-ta通選tsi̍t-ê", + "compose_form.poll.type": "投票ê方法", + "compose_form.publish": "PO文", + "compose_form.publish_form": "PO出去", + "compose_form.reply": "回應", + "compose_form.save_changes": "更新", + "compose_form.spoiler.marked": "Thâi掉內容警告", + "compose_form.spoiler.unmarked": "加添內容警告", + "compose_form.spoiler_placeholder": "內容警告(m̄是必要)", + "confirmation_modal.cancel": "取消", + "confirmations.block.confirm": "封鎖", + "confirmations.delete.confirm": "Thâi掉", + "confirmations.delete.message": "Lí kám確定beh thâi掉tsit ê PO文?", + "confirmations.delete.title": "Kám beh thâi掉tsit ê PO文?", + "confirmations.delete_list.confirm": "Thâi掉", + "confirmations.delete_list.message": "Lí kám確定beh永永thâi掉tsit ê列單?", + "confirmations.delete_list.title": "Kám beh thâi掉tsit ê列單?", + "confirmations.discard_edit_media.confirm": "棄sak", + "confirmations.discard_edit_media.message": "Lí佇媒體敘述á是先看māi ê所在有iáu buē儲存ê改變,kám beh kā in棄sak?", + "confirmations.edit.confirm": "編輯", + "confirmations.edit.message": "Tsit-má編輯ē khàm掉lí tng-leh編寫ê訊息,lí kám beh繼續án-ne做?", + "confirmations.edit.title": "Kám beh khàm掉PO文?", + "confirmations.logout.confirm": "登出", + "confirmations.logout.message": "Lí kám確定beh登出?", + "confirmations.logout.title": "Lí kám beh登出?", + "confirmations.mute.confirm": "消音", + "confirmations.redraft.confirm": "Thâi掉了後重寫", + "confirmations.redraft.message": "Lí kám確定behthâi掉tsit篇PO文了後koh重寫?收藏kap轉PO ē無去,而且原底ê PO文ê回應ē變孤立。", + "confirmations.redraft.title": "Kám beh thâi掉koh重寫PO文?", + "confirmations.reply.confirm": "回應", + "confirmations.reply.message": "Tsit-má回應ē khàm掉lí tng-leh編寫ê訊息。Lí kám確定beh繼續án-ne做?", + "confirmations.reply.title": "Kám beh khàm掉PO文?", + "confirmations.unfollow.confirm": "取消跟tuè", + "confirmations.unfollow.message": "Lí kám確定無愛跟tuè {name}?", + "confirmations.unfollow.title": "Kám beh取消跟tuè tsit ê用者?", + "content_warning.hide": "Am-khàm PO文", + "content_warning.show": "Mā tio̍h顯示", + "content_warning.show_more": "其他內容", + "conversation.delete": "Thâi掉會話", + "conversation.mark_as_read": "標做有讀", + "conversation.open": "顯示會話", + "conversation.with": "Kap {names}", + "copy_icon_button.copied": "有khóo-pih kàu tsián貼pang", + "copypaste.copied": "有khóo-pih", + "copypaste.copy_to_clipboard": "Khóo-pih kàu tsián貼pang", + "directory.federated": "Uì知影ê Fediverse", + "directory.local": "Kan-ta uì {domain}", + "directory.new_arrivals": "新來ê", + "directory.recently_active": "最近活動ê", + "disabled_account_banner.account_settings": "口座ê設定", + "disabled_account_banner.text": "Lí ê口座 {disabledAccount} tsit-má hōo lâng停止使用。", + "dismissable_banner.community_timeline": "Tsia sī uì 口座hē tī {domain} ê lâng,最近所公開PO ê。", + "dismissable_banner.dismiss": "Mài kā tshah", + "domain_block_modal.block": "封鎖服侍器", + "domain_block_modal.block_account_instead": "改做封鎖 @{name}", + "domain_block_modal.they_can_interact_with_old_posts": "Uì tsit ê服侍器來ê,通kap lí khah早ê PO交流。", + "domain_block_modal.they_cant_follow": "Tuì tsit ê服侍器來ê 通跟tuè lí。", + "domain_block_modal.they_wont_know": "In buē知影in受封鎖。", + "domain_block_modal.title": "Kám beh封鎖域名?", + "domain_block_modal.you_will_lose_num_followers": "Lí ē失去 {followersCount, plural, other {{followersCountDisplay} ê lâng跟tuè}} kap {followingCount, plural, other {{followingCountDisplay} ê lí所tuè ê 口座}}。", + "domain_block_modal.you_will_lose_relationships": "Lí ē失去逐ê佇tsit ê服侍器跟tuè lí ê,kap lí所跟tuè ê。", + "domain_block_modal.you_wont_see_posts": "Lí buē看見tsit ê服侍器ê用者所送ê PO文kap通知。", + "domain_pill.activitypub_lets_connect": "伊ē hōo lí kap Mastodon ê lâng連結kap互動,其他社交應用程式ê lâng mā ē使。", + "domain_pill.activitypub_like_language": "ActivityPub親像Mastodon kap其他社交應用程式所講ê語言。", + "domain_pill.server": "服侍器", + "domain_pill.their_handle": "In ê口座:", + "domain_pill.their_server": "In數位ê tau,in所有ê PO文lóng tī tsia。", + "domain_pill.their_username": "In佇in ê服侍器獨一ê稱呼。佇無kâng ê服侍器有可能tshuē著kāng名ê用者。", + "domain_pill.username": "用者ê名", + "domain_pill.whats_in_a_handle": "口座是siánn-mih?", + "domain_pill.who_they_are": "因為口座(handle)表示tsit ê lâng是siáng kap tī toh,lí ē當佇. ê社交網路kap lâng交流。", + "domain_pill.who_you_are": "因為口座(handle)表示lí是siáng kap tī toh,lâng ē當佇. ê社交網路kap lí交流。", + "domain_pill.your_handle": "Lí ê口座:", + "domain_pill.your_server": "Lí數位ê厝,內底有lí所有ê PO文。無kah意?Ē當轉kàu別ê服侍器,koh保有跟tuè lí êl âng。.", + "domain_pill.your_username": "Lí 佇tsit ê服侍器獨一ê稱呼。佇無kâng ê服侍器有可能tshuē著kāng名ê用者。", + "embed.instructions": "Khóo-pih 下kha ê程式碼,來kā tsit篇PO文tàu佇lí ê網站。", + "embed.preview": "伊e án-ne顯示:\n", + "emoji_button.activity": "活動", + "emoji_button.clear": "清掉", + "emoji_button.custom": "自訂ê", + "emoji_button.flags": "旗á", + "emoji_button.food": "Tsia̍h-mi̍h kap 飲料", + "emoji_button.label": "加入繪文字(emoji)", + "emoji_button.nature": "自然", + "emoji_button.not_found": "Tshuē無對應ê emoji", + "emoji_button.objects": "物件", + "emoji_button.people": "Lâng", + "emoji_button.recent": "Tsia̍p用ê", + "emoji_button.search": "Tshiau-tshuē……", + "emoji_button.search_results": "Tshiau-tshuē ê結果", + "emoji_button.symbols": "符號", + "emoji_button.travel": "旅行kap地點", + "empty_column.account_hides_collections": "Tsit位用者選擇無愛公開tsit ê資訊", + "empty_column.account_suspended": "口座已經受停止", + "empty_column.account_timeline": "Tsia無PO文!", + "empty_column.account_unavailable": "個人資料bē當看", + "empty_column.blocks": "Lí iáu無封鎖任何用者。", + "empty_column.bookmarked_statuses": "Lí iáu無加添任何冊籤。Nā是lí加添冊籤,伊ē佇tsia顯示。", + "empty_column.community": "本站時間線是空ê。緊來公開PO文oh!", + "empty_column.direct": "Lí iáu無任何ê私人訊息。Nā是lí送á是收著私人訊息,ē佇tsia顯示。.", + "empty_column.domain_blocks": "Iáu無封鎖任何網域。", + "empty_column.explore_statuses": "目前iáu無有流行ê趨勢,請sió等tsi̍t-ē,koh確認。", + "empty_column.favourited_statuses": "Lí iáu無加添任何收藏 ê PO文。Nā是lí加收藏,伊ē佇tsia顯示。", + "empty_column.favourites": "Iáu無lâng收藏tsit篇PO文。Nā是有lâng收藏,ē佇tsia顯示。", + "empty_column.follow_requests": "Lí iáu buē收著任何ê跟tuè請求。Nā是lí收著,伊ē佇tsia顯示。", + "empty_column.followed_tags": "Lí iáu buē收著任何ê hashtag。Nā是lí收著,ē佇tsia顯示。", + "empty_column.hashtag": "Tsit ê hashtag內底無物件。", + "empty_column.home": "Lí tshù ê時間線是空ê!跟tuè別lâng來kā充滿。", + "empty_column.list": "Tsit張列單內底iáu bô物件。若是列單內底ê成員貼新ê PO文,in ē tī tsia顯示。", + "empty_column.mutes": "Lí iáu無消音任何用者。", + "empty_column.notification_requests": "清hōo空ah!內底無物件。若是lí收著新ê通知,ē根據lí ê設定,佇tsia出現。", + "empty_column.notifications": "Lí iáu無收著任何通知。Nā別lâng kap lí互動,lí ē佇tsia看著。", + "empty_column.public": "內底無物件!寫beh公開ê PO文,á是主動跟tuè別ê服侍器ê用者,來加添內容。", + "error.unexpected_crash.explanation": "因為原始碼內底有錯誤,á是瀏覽器相容出tshê,tsit頁bē當正確顯示。", + "error.unexpected_crash.explanation_addons": "Tsit頁bē當正確顯示,可能是瀏覽器附ê功能,á是自動翻譯工具所致。", + "error.unexpected_crash.next_steps": "請試更新tsit頁。若是bē當改善,lí iáu是ē當改使用無kâng ê瀏覽器,á是app,來用Mastodon。", + "error.unexpected_crash.next_steps_addons": "請試kā in停止使用,suà落來更新tsit頁。若是bē當改善,lí iáu是ē當改使用無kâng ê瀏覽器,á是app,來用Mastodon。", + "errors.unexpected_crash.copy_stacktrace": "Khóo-pih stacktrace kàu剪貼pang-á", + "errors.unexpected_crash.report_issue": "報告問題", + "explore.suggested_follows": "用者", + "explore.title": "探索", + "explore.trending_links": "新聞", + "explore.trending_statuses": "PO文", + "explore.trending_tags": "Hashtag", + "filter_modal.added.context_mismatch_explanation": "Tsit ê過濾器類別bē當適用佇lí所接近使用ê PO文ê情境。若是lí mā beh佇tsit ê情境過濾tsit ê PO文,lí著編輯過濾器。.", + "filter_modal.added.context_mismatch_title": "本文無sio合!", + "filter_modal.added.expired_explanation": "Tsit ê過濾器類別過期ah,lí需要改到期ê日期來繼續用。", + "filter_modal.added.expired_title": "過期ê過濾器", + "filter_modal.added.review_and_configure": "Beh審視kap進前設定tsit ê過濾器ê類別,請kàu {settings_link}。", + "filter_modal.added.review_and_configure_title": "過濾器ê設定", + "filter_modal.added.settings_link": "設定頁", + "filter_modal.added.short_explanation": "Tsit ê PO文已經加添kàu下kha ê過濾器類別:{title}。", + "filter_modal.added.title": "過濾器加添ah!", + "filter_modal.select_filter.context_mismatch": "Mài用tī tsit ê內文", + "filter_modal.select_filter.expired": "過期ah", + "filter_modal.select_filter.prompt_new": "新ê類別:{name}", + "filter_modal.select_filter.search": "Tshiau-tshuē á是加添", + "filter_modal.select_filter.subtitle": "用有ê類別á是建立新ê", + "filter_modal.select_filter.title": "過濾tsit ê PO文", + "filter_modal.title.status": "過濾PO文", + "filter_warning.matches_filter": "合過濾器「{title}」", + "filtered_notifications_banner.pending_requests": "Tuì lí可能熟sāi ê {count, plural, =0 {0 ê人} other {# ê人}}", + "filtered_notifications_banner.title": "過濾ê通知", + "firehose.all": "Kui ê", + "firehose.local": "Tsit ê服侍器", + "firehose.remote": "別ê服侍器", + "follow_request.authorize": "授權", + "follow_request.reject": "拒絕", + "follow_requests.unlocked_explanation": "就算lí ê口座無hőng鎖,{domain} ê管理員leh想,lí可能beh手動審查tuì tsiah ê口座送ê跟tuè請求。", + "follow_suggestions.curated_suggestion": "精選ê內容", + "follow_suggestions.dismiss": "Mài koh顯示。", + "follow_suggestions.featured_longer": "{domain} 團隊所揀ê", + "follow_suggestions.friends_of_friends_longer": "時行佇lí所tuè ê lâng", + "follow_suggestions.hints.featured": "Tsit ê個人資料是 {domain} 團隊特別揀ê。", + "follow_suggestions.hints.friends_of_friends": "Tsit ê個人資料tī lí跟tuè ê lâng之間真流行。", + "follow_suggestions.hints.most_followed": "Tsit ê個人資料是 {domain} 內,有足tsē跟tuè者ê其中tsit ê。", + "follow_suggestions.hints.most_interactions": "Tsit ê個人資料tsi̍t-tsām-á佇 {domain} 有得著真tsē關注。", + "follow_suggestions.hints.similar_to_recently_followed": "Tsit ê個人資料kap lí最近跟tuè ê口座相siâng。", + "follow_suggestions.personalized_suggestion": "個人化ê推薦", + "follow_suggestions.popular_suggestion": "流行ê推薦", + "follow_suggestions.popular_suggestion_longer": "佇{domain} 足有lâng緣", + "follow_suggestions.similar_to_recently_followed_longer": "Kap lí最近跟tuè ê相siâng", + "follow_suggestions.view_all": "看全部", + "follow_suggestions.who_to_follow": "Thang tuè ê", + "followed_tags": "跟tuè ê hashtag", + "footer.about": "概要", + "footer.directory": "個人資料ê目錄", + "footer.get_app": "The̍h著app", + "footer.invite": "邀請lâng", + "footer.keyboard_shortcuts": "鍵盤kiu-té khí (shortcut)", + "footer.privacy_policy": "隱私權政策", + "footer.source_code": "看原始碼", + "footer.status": "狀態", + "generic.saved": "儲存ah", + "getting_started.heading": "開始用", + "hashtag.column_header.tag_mode.all": "kap {additional}", + "hashtag.column_header.tag_mode.any": "á是 {additional}", + "hashtag.column_header.tag_mode.none": "無需要 {additional}", + "hashtag.column_settings.select.no_options_message": "Tshuē無建議", + "hashtag.column_settings.select.placeholder": "請輸入hashtag……", + "hashtag.column_settings.tag_mode.all": "Kui ê", + "hashtag.column_settings.tag_mode.any": "任何tsi̍t ê", + "hashtag.column_settings.tag_mode.none": "Lóng mài", + "hashtag.column_settings.tag_toggle": "Kā追加ê標籤加添kàu tsit ê欄", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} ê} other {{counter} ê}}參與ê", + "hashtag.counter_by_uses": "{count, plural, one {{counter} ê} other {{counter} ê}} PO文", + "hashtag.counter_by_uses_today": "Kin-á日有 {count, plural, one {{counter} ê} other {{counter} ê}} PO文", + "hashtag.follow": "跟tuè hashtag", + "hashtag.unfollow": "取消跟tuè hashtag", + "hashtags.and_other": "……kap 其他 {count, plural, other {# ê}}", + "hints.profiles.followers_may_be_missing": "Tsit ê個人資料ê跟tuè者資訊可能有落勾ê。", + "hints.profiles.follows_may_be_missing": "Tsit ê口座所跟tuè ê ê資訊可能有落勾ê。", + "hints.profiles.posts_may_be_missing": "Tsit ê口座ê tsi̍t kuá PO文可能有落勾ê。", + "hints.profiles.see_more_followers": "佇 {domain} 看koh khah tsē跟tuè lí ê", + "hints.profiles.see_more_follows": "佇 {domain} 看koh khah tsē lí跟tuè ê", + "hints.profiles.see_more_posts": "佇 {domain} 看koh khah tsē ê PO文", + "hints.threads.replies_may_be_missing": "Tuì其他ê服侍器來ê回應可能有phah m̄見。", + "hints.threads.see_more": "佇 {domain} 看koh khah tsē ê回應", + "home.column_settings.show_reblogs": "顯示轉PO", + "home.column_settings.show_replies": "顯示回應", + "home.hide_announcements": "Khàm掉公告", + "home.pending_critical_update.body": "請liōng早更新lí ê Mastodon ê服侍器!", + "home.pending_critical_update.link": "看更新內容", + "home.pending_critical_update.title": "有重要ê安全更新!", + "home.show_announcements": "顯示公告", + "ignore_notifications_modal.disclaimer": "Lí所忽略in ê通知ê用者,Mastodonbē當kā lí通知。忽略通知bē當阻擋訊息ê寄送。", + "ignore_notifications_modal.filter_instead": "改做過濾", + "ignore_notifications_modal.filter_to_act_users": "Lí猶原ē當接受、拒絕猶是檢舉用者", + "ignore_notifications_modal.filter_to_avoid_confusion": "過濾ē當避免可能ê bē分明。", + "ignore_notifications_modal.filter_to_review_separately": "Lí ē當個別檢視所過濾ê通知", + "ignore_notifications_modal.ignore": "Kā通知忽略", + "ignore_notifications_modal.limited_accounts_title": "Kám beh忽略受限制ê口座送來ê通知?", + "ignore_notifications_modal.new_accounts_title": "Kám beh忽略新口座送來ê通知?", + "ignore_notifications_modal.not_followers_title": "Kám beh忽略無跟tuè lí ê口座送來ê通知?", + "ignore_notifications_modal.not_following_title": "Kám beh忽略lí 無跟tuè ê口座送來ê通知?", + "ignore_notifications_modal.private_mentions_title": "忽略ka-kī主動送ê私人提起ê通知?", + "interaction_modal.on_another_server": "佇無kâng ê服侍器", + "interaction_modal.on_this_server": "Tī tsit ê服侍器", + "interaction_modal.title.favourite": "收藏 {name} ê PO文", + "interaction_modal.title.follow": "跟tuè {name}", + "interaction_modal.title.reblog": "轉送 {name} ê PO文", + "interaction_modal.title.reply": "回應 {name} ê PO文", + "intervals.full.days": "{number, plural, other {# kang}}", + "intervals.full.hours": "{number, plural, other {# 點鐘}}", + "intervals.full.minutes": "{number, plural, other {# 分鐘}}", + "keyboard_shortcuts.back": "Tńg去", + "keyboard_shortcuts.blocked": "開封鎖ê用者ê列單", + "keyboard_shortcuts.boost": "轉送PO文", + "keyboard_shortcuts.column": "揀tsit ê欄", + "keyboard_shortcuts.compose": "揀寫文字ê框仔", + "keyboard_shortcuts.description": "說明", + "keyboard_shortcuts.direct": "phah開私人提起ê欄", + "keyboard_shortcuts.down": "佇列單內kā suá khah 下kha", + "keyboard_shortcuts.enter": "Phah開PO文", + "keyboard_shortcuts.favourite": "收藏PO文", + "keyboard_shortcuts.favourites": "Phah開收藏ê列單", + "keyboard_shortcuts.federated": "Phah開聯邦ê時間線", + "keyboard_shortcuts.heading": "鍵盤ê快速key", + "keyboard_shortcuts.home": "Phah開tshù ê時間線", + "keyboard_shortcuts.hotkey": "快速key", + "keyboard_shortcuts.legend": "顯示tsit篇說明", + "keyboard_shortcuts.local": "Phah開本站ê時間線", + "keyboard_shortcuts.mention": "提起作者", + "keyboard_shortcuts.muted": "Phah開消音ê用者列單", + "keyboard_shortcuts.my_profile": "Phah開lí ê個人資料", + "keyboard_shortcuts.notifications": "Phah開通知欄", + "keyboard_shortcuts.open_media": "Phah開媒體", + "keyboard_shortcuts.pinned": "Phah開釘起來ê PO文列單", + "keyboard_shortcuts.profile": "Phah開作者ê個人資料", + "keyboard_shortcuts.reply": "回應PO文", + "keyboard_shortcuts.requests": "Phah開跟tuè請求ê列單", + "keyboard_shortcuts.search": "揀tshiau-tshuē條á", + "keyboard_shortcuts.spoilers": "顯示/隱藏內容警告", + "keyboard_shortcuts.start": "Phah開「開始用」欄", + "keyboard_shortcuts.toggle_hidden": "顯示/隱藏內容警告後壁ê PO文", + "onboarding.action.back": "Tńg去", + "onboarding.actions.back": "Tńg去", + "search_popout.language_code": "ISO語言代碼", + "status.translated_from_with": "用 {provider} 翻譯 {lang}" +} diff --git a/app/javascript/mastodon/locales/ne.json b/app/javascript/mastodon/locales/ne.json index 1cb10a93b4..a4b5b0cb4f 100644 --- a/app/javascript/mastodon/locales/ne.json +++ b/app/javascript/mastodon/locales/ne.json @@ -10,6 +10,7 @@ "about.powered_by": "{mastodon} द्वारा संचालित विकेन्द्रीकृत सामाजिक मिडिया", "about.rules": "सर्भर नियमहरू", "account.add_or_remove_from_list": "सूचीबाट थप्नुहोस् वा हटाउनुहोस्", + "account.badges.bot": "स्वचालित", "account.badges.group": "समूह", "account.block": "@{name} लाई ब्लक गर्नुहोस्", "account.block_domain": "{domain} डोमेनलाई ब्लक गर्नुहोस्", @@ -24,25 +25,43 @@ "account.enable_notifications": "@{name} ले पोस्ट गर्दा मलाई सूचित गर्नुहोस्", "account.endorse": "प्रोफाइलमा फिचर गर्नुहोस्", "account.featured_tags.last_status_never": "कुनै पोस्ट छैन", + "account.featured_tags.title": "{name}का विशेष ह्यासट्यागहरू", "account.follow": "फलो गर्नुहोस", + "account.follow_back": "फलो ब्याक गर्नुहोस्", + "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.go_to_profile": "प्रोफाइलमा जानुहोस्", "account.hide_reblogs": "@{name} को बूस्टहरू लुकाउनुहोस्", + "account.in_memoriam": "सम्झनामा।", "account.link_verified_on": "यस लिङ्कको स्वामित्व {date} मा जाँच गरिएको थियो", "account.media": "मिडिया", "account.mention": "@{name} लाई उल्लेख गर्नुहोस्", + "account.mute": "@{name}लाई म्यूट गर्नुहोस्", + "account.mute_notifications_short": "सूचनाहरू म्यूट गर्नुहोस्", + "account.mute_short": "म्युट", + "account.muted": "म्युट गरिएको", + "account.mutual": "आपसी", "account.no_bio": "कुनै विवरण प्रदान गरिएको छैन।", "account.posts": "पोस्टहरू", + "account.posts_with_replies": "पोस्ट र जवाफहरू", + "account.report": "@{name}लाई रिपोर्ट गर्नुहोस्", "account.requested": "स्वीकृतिको पर्खाइमा। फलो अनुरोध रद्द गर्न क्लिक गर्नुहोस्", "account.requested_follow": "{name} ले तपाईंलाई फलो गर्न अनुरोध गर्नुभएको छ", "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_notifications_short": "सूचनाहरू अनम्युट गर्नुहोस्", + "account.unmute_short": "अनम्यूट गर्नुहोस्", "account_note.placeholder": "नोट लेख्न क्लिक गर्नुहोस्", "admin.dashboard.retention.average": "औसत", "admin.dashboard.retention.cohort_size": "नयाँ प्रयोगकर्ताहरू", @@ -52,9 +71,13 @@ "block_modal.remote_users_caveat": "हामी सर्भर {domain} लाई तपाईंको निर्णयको सम्मान गर्न सोध्नेछौं। तर, हामी अनुपालनको ग्यारेन्टी दिन सक्दैनौं किनभने केही सर्भरहरूले ब्लकहरू फरक रूपमा ह्यान्डल गर्न सक्छन्। सार्वजनिक पोस्टहरू लग इन नभएका प्रयोगकर्ताहरूले देख्न सक्छन्।", "block_modal.show_less": "कम देखाउनुहोस्", "block_modal.show_more": "थप देखाउनुहोस्", + "block_modal.title": "प्रयोगकर्तालाई ब्लक गर्ने?", + "boost_modal.reblog": "पोस्ट बुस्ट गर्ने?", + "boost_modal.undo_reblog": "पोस्ट अनबुस्ट गर्ने?", "bundle_column_error.copy_stacktrace": "त्रुटि रिपोर्ट प्रतिलिपि गर्नुहोस्", "bundle_column_error.network.title": "नेटवर्क त्रुटि", "bundle_column_error.retry": "पुन: प्रयास गर्नुहोस्", + "bundle_column_error.routing.title": "४०४", "bundle_modal_error.close": "बन्द गर्नुहोस्", "bundle_modal_error.message": "यो कम्पोनेन्ट लोड गर्दा केही गडबड भयो।", "bundle_modal_error.retry": "Try again", @@ -63,15 +86,93 @@ "closed_registrations_modal.find_another_server": "अर्को सर्भर खोज्नुहोस्", "closed_registrations_modal.title": "Mastodon मा साइन अप गर्दै", "column.blocks": "ब्लक गरिएको प्रयोगकर्ताहरु", + "column.bookmarks": "बुकमार्कहरू", + "column.direct": "निजी उल्लेखहरू", "column.directory": "प्रोफाइल ब्राउज गर्नुहोस्", "column.domain_blocks": "ब्लक गरिएको डोमेन", "column.follow_requests": "फलो अनुरोधहरू", + "column.home": "गृहपृष्ठ", "column.lists": "सूचीहरू", + "column.mutes": "म्यूट गरिएका प्रयोगकर्ताहरू", "column.notifications": "सूचनाहरू", + "column.pins": "पिन गरिएका पोस्टहरू", "column_header.hide_settings": "सेटिङ्हरू लुकाउनुहोस्", + "column_header.pin": "पिन गर्नुहोस्", + "column_header.unpin": "अनपिन गर्नुहोस्", "column_subheading.settings": "सेटिङहरू", + "community.column_settings.media_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.publish_form": "नयाँ पोस्ट" + "compose_form.placeholder": "तपाईको मनमा के छ?", + "compose_form.publish": "पोस्ट गर्नुहोस्", + "compose_form.publish_form": "नयाँ पोस्ट", + "compose_form.reply": "जवाफ दिनुहोस्", + "compose_form.save_changes": "अपडेट गर्नुहोस्", + "confirmation_modal.cancel": "रद्द गर्नुहोस्", + "confirmations.block.confirm": "ब्लक गर्नुहोस्", + "confirmations.delete.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाईं यो पोष्ट मेटाउन चाहनुहुन्छ?", + "confirmations.delete.title": "पोस्ट मेटाउने?", + "confirmations.delete_list.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाईं यो सूची स्थायी रूपमा मेटाउन चाहनुहुन्छ?", + "confirmations.delete_list.title": "सूची मेटाउने?", + "confirmations.edit.confirm": "सम्पादन गर्नुहोस्", + "confirmations.edit.message": "अहिले सम्पादन गर्नाले तपाईंले हाल लेखिरहनुभएको सन्देश अधिलेखन हुनेछ। के तपाईं अगाडि बढ्न चाहनुहुन्छ?", + "confirmations.edit.title": "पोस्ट अधिलेखन गर्ने?", + "confirmations.logout.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाइँ लाई लग आउट गर्न चाहनुहुन्छ?", + "confirmations.logout.title": "लग आउट गर्ने?", + "confirmations.mute.confirm": "म्यूट गर्नुहोस्", + "confirmations.redraft.confirm": "मेटाएर पुन: ड्राफ्ट गर्नुहोस्", + "confirmations.redraft.title": "पोस्ट मेटाएर पुन: ड्राफ्ट गर्ने?", + "confirmations.reply.confirm": "जवाफ दिनुहोस्", + "confirmations.reply.message": "अहिले जवाफ दिनाले तपाईंले हाल लेखिरहनुभएको सन्देश अधिलेखन हुनेछ। के तपाईं अगाडि बढ्न चाहनुहुन्छ?", + "confirmations.reply.title": "पोस्ट अधिलेखन गर्ने?", + "confirmations.unfollow.confirm": "अनफलो गर्नुहोस्", + "confirmations.unfollow.message": "के तपाइँ पक्का हुनुहुन्छ कि तपाइँ {name}लाई अनफलो गर्न चाहनुहुन्छ?", + "confirmations.unfollow.title": "प्रयोगकर्तालाई अनफलो गर्ने?", + "disabled_account_banner.account_settings": "खाता सेटिङहरू", + "empty_column.follow_requests": "तपाईंले अहिलेसम्म कुनै पनि फलो अनुरोधहरू प्राप्त गर्नुभएको छैन। तपाईंले कुनै प्राप्त गरेपछि त्यो यहाँ देखिनेछ।", + "empty_column.followed_tags": "तपाईंले अहिलेसम्म कुनै पनि ह्यासट्यागहरू फलो गर्नुभएको छैन। तपाईंले ह्यासट्याग फलो गरेपछि तिनीहरू यहाँ देखिनेछन्।", + "follow_suggestions.dismiss": "फेरि नदेखाउनुहोस्", + "follow_suggestions.hints.similar_to_recently_followed": "यो प्रोफाइल तपाईंले हालसालै फलो गर्नुभएका प्रोफाइलहरूसँग मिल्दोजुल्दो छ।", + "follow_suggestions.popular_suggestion": "लोकप्रिय सुझाव", + "follow_suggestions.popular_suggestion_longer": "{domain} मा लोकप्रिय", + "follow_suggestions.similar_to_recently_followed_longer": "तपाईंले हालसालै फलो गर्नुभएको प्रोफाइलहरू जस्तै", + "follow_suggestions.view_all": "सबै हेर्नुहोस्", + "follow_suggestions.who_to_follow": "कसलाई फलो गर्ने", + "followed_tags": "फलो गरिएका ह्यासट्यागहरू", + "hashtag.follow": "ह्यासट्याग फलो गर्नुहोस्", + "hashtag.unfollow": "ह्यासट्याग अनफलो गर्नुहोस्", + "home.column_settings.show_reblogs": "बूस्टहरू देखाउनुहोस्", + "interaction_modal.title.follow": "{name} लाई फलो गर्नुहोस्", + "interaction_modal.title.reblog": "{name} को पोस्ट बुस्ट गर्नुहोस्", + "keyboard_shortcuts.boost": "पोस्ट बुस्ट गर्नुहोस्", + "mute_modal.they_wont_know": "उनीहरूलाई म्यूट गरिएको बारे थाहा हुँदैन।", + "mute_modal.title": "प्रयोगकर्तालाई म्युट गर्ने?", + "navigation_bar.blocks": "ब्लक गरिएको प्रयोगकर्ताहरु", + "navigation_bar.follow_requests": "फलो अनुरोधहरू", + "navigation_bar.followed_tags": "फलो गरिएका ह्यासट्यागहरू", + "notification.reblog": "{name} ले तपाईंको पोस्ट बूस्ट गर्नुभयो", + "notification_requests.confirm_accept_multiple.title": "सूचना अनुरोधहरू स्वीकार गर्ने?", + "notification_requests.confirm_dismiss_multiple.title": "सूचना अनुरोधहरू खारेज गर्ने?", + "notifications.clear_title": "सूचनाहरू खाली गर्ने?", + "notifications.column_settings.reblog": "बूस्टहरू:", + "notifications.filter.boosts": "बूस्टहरू", + "report.comment.title": "के हामीले थाहा पाउनुपर्ने अरू केही छ जस्तो लाग्छ?", + "report.forward_hint": "यो खाता अर्को सर्भरबाट हो। त्यहाँ पनि रिपोर्टको गुमनाम प्रतिलिपि पठाउने हो?", + "report.rules.title": "कुन नियमहरू उल्लङ्घन भइरहेका छन्?", + "report.statuses.title": "के यस रिपोर्टलाई समर्थन गर्ने कुनै पोस्टहरू छन्?", + "report.thanks.title": "यो हेर्न चाहनुहुन्न?", + "report.unfollow": "@{name} लाई अनफलो गर्नुहोस्", + "search_results.hashtags": "ह्यासट्यागहरू", + "status.cancel_reblog_private": "अनबुस्ट गर्नुहोस्", + "status.cannot_reblog": "यो पोस्टलाई बुस्ट गर्न सकिँदैन", + "status.mute": "@{name}लाई म्यूट गर्नुहोस्", + "status.mute_conversation": "कुराकानी म्यूट गर्नुहोस्", + "status.reblog": "बूस्ट गर्नुहोस्", + "status.reblogged_by": "{name} ले बूस्ट गर्नुभएको", + "status.reblogs": "{count, plural, one {बूस्ट} other {बूस्टहरू}}", + "status.unmute_conversation": "कुराकानी अनम्यूट गर्नुहोस्" } diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 1c31574dea..59c3782d42 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Gebruiker ontvolgen?", "content_warning.hide": "Bericht verbergen", "content_warning.show": "Alsnog tonen", + "content_warning.show_more": "Meer tonen", "conversation.delete": "Gesprek verwijderen", "conversation.mark_as_read": "Als gelezen markeren", "conversation.open": "Gesprek tonen", @@ -267,7 +268,7 @@ "empty_column.explore_statuses": "Momenteel zijn er geen trends. Kom later terug!", "empty_column.favourited_statuses": "Jij hebt nog geen favoriete berichten. Wanneer je een bericht als favoriet markeert, valt deze hier te zien.", "empty_column.favourites": "Niemand heeft dit bericht nog als favoriet gemarkeerd. Wanneer iemand dit doet, valt dat hier te zien.", - "empty_column.follow_requests": "Jij hebt nog enkel volgverzoek ontvangen. Wanneer je er eentje ontvangt, valt dat hier te zien.", + "empty_column.follow_requests": "Je hebt nog geen volgverzoeken ontvangen. Wanneer je er een ontvangt, valt dat hier te zien.", "empty_column.followed_tags": "Je hebt nog geen hashtags gevolgd. Nadat je dit doet, komen deze hier te staan.", "empty_column.hashtag": "Er is nog niks te vinden onder deze hashtag.", "empty_column.home": "Deze tijdlijn is leeg! Volg meer mensen om het te vullen.", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Een bestaande categorie gebruiken of een nieuwe aanmaken", "filter_modal.select_filter.title": "Dit bericht filteren", "filter_modal.title.status": "Een bericht filteren", - "filter_warning.matches_filter": "Komt overeen met filter “{title}”", + "filter_warning.matches_filter": "Komt overeen met filter \"{title}\"", "filtered_notifications_banner.pending_requests": "Van {count, plural, =0 {niemand} one {een persoon} other {# personen}} die je mogelijk kent", "filtered_notifications_banner.title": "Gefilterde meldingen", "firehose.all": "Alles", @@ -459,7 +460,7 @@ "lists.subheading": "Jouw lijsten", "load_pending": "{count, plural, one {# nieuw item} other {# nieuwe items}}", "loading_indicator.label": "Laden…", - "media_gallery.hide": "Verbergen", + "media_gallery.hide": "Verberg", "moved_to_account_banner.text": "Omdat je naar {movedToAccount} bent verhuisd is jouw account {disabledAccount} momenteel uitgeschakeld.", "mute_modal.hide_from_notifications": "Onder meldingen verbergen", "mute_modal.hide_options": "Opties verbergen", @@ -504,22 +505,23 @@ "notification.admin.report_statuses": "{name} rapporteerde {target} voor {category}", "notification.admin.report_statuses_other": "{name} rapporteerde {target}", "notification.admin.sign_up": "{name} heeft zich geregistreerd", - "notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben zich geregistreerd", + "notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben zich geregistreerd", "notification.favourite": "{name} markeerde jouw bericht als favoriet", - "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# ander} other {# anderen}} hebben jouw bericht als favoriet gemarkeerd", + "notification.favourite.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht als favoriet gemarkeerd", "notification.follow": "{name} volgt jou nu", - "notification.follow.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben je gevolgd", + "notification.follow.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} volgen jou nou", "notification.follow_request": "{name} wil jou graag volgen", - "notification.follow_request.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben gevraagd om je te volgen", + "notification.follow_request.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben gevraagd om je te volgen", "notification.label.mention": "Vermelding", "notification.label.private_mention": "Privébericht", "notification.label.private_reply": "Privéreactie", "notification.label.reply": "Reactie", "notification.mention": "Vermelding", + "notification.mentioned_you": "Je bent vermeld door {name}", "notification.moderation-warning.learn_more": "Meer informatie", "notification.moderation_warning": "Je hebt een moderatie-waarschuwing ontvangen", "notification.moderation_warning.action_delete_statuses": "Sommige van je berichten zijn verwijderd.", - "notification.moderation_warning.action_disable": "Je account is uitgeschakeld.", + "notification.moderation_warning.action_disable": "Jouw account is uitgeschakeld.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Sommige van je berichten zijn gemarkeerd als gevoelig.", "notification.moderation_warning.action_none": "Jouw account heeft een moderatie-waarschuwing ontvangen.", "notification.moderation_warning.action_sensitive": "Je berichten worden vanaf nu als gevoelig gemarkeerd.", @@ -528,14 +530,14 @@ "notification.own_poll": "Jouw peiling is beëindigd", "notification.poll": "Een peiling waaraan jij hebt meegedaan is beëindigd", "notification.reblog": "{name} boostte jouw bericht", - "notification.reblog.name_and_others_with_link": "{name} en {count, plural, one {# ander} other {# anderen}} hebben jouw bericht geboost", + "notification.reblog.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht geboost", "notification.relationships_severance_event": "Verloren verbindingen met {name}", "notification.relationships_severance_event.account_suspension": "Een beheerder van {from} heeft {target} geschorst, wat betekent dat je geen updates meer van hen kunt ontvangen of met hen kunt communiceren.", - "notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt.", + "notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt.", "notification.relationships_severance_event.learn_more": "Meer informatie", - "notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt, bent verloren.", + "notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt, bent verloren.", "notification.status": "{name} heeft zojuist een bericht geplaatst", - "notification.update": "{name} heeft een bericht bewerkt", + "notification.update": "{name} bewerkte een bericht", "notification_requests.accept": "Accepteren", "notification_requests.accept_multiple": "{count, plural, one {# verzoek accepteren…} other {# verzoeken accepteren…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Verzoek accepteren} other {Verzoeken accepteren}}", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Snelle filterbalk", "notifications.column_settings.follow": "Nieuwe volgers:", "notifications.column_settings.follow_request": "Nieuw volgverzoek:", + "notifications.column_settings.group": "Groeperen", "notifications.column_settings.mention": "Vermeldingen:", "notifications.column_settings.poll": "Peilingresultaten:", "notifications.column_settings.push": "Pushmeldingen", @@ -780,7 +783,7 @@ "status.bookmark": "Bladwijzer toevoegen", "status.cancel_reblog_private": "Niet langer boosten", "status.cannot_reblog": "Dit bericht kan niet geboost worden", - "status.continued_thread": "Vervolgt het gesprek", + "status.continued_thread": "Vervolg van gesprek", "status.copy": "Link naar bericht kopiëren", "status.delete": "Verwijderen", "status.detailed_status": "Uitgebreide gespreksweergave", @@ -858,7 +861,7 @@ "upload_form.drag_and_drop.on_drag_over": "Mediabijlage {item} is verplaatst.", "upload_form.drag_and_drop.on_drag_start": "Mediabijlage {item} is opgepakt.", "upload_form.edit": "Bewerken", - "upload_form.thumbnail": "Miniatuurafbeelding wijzigen", + "upload_form.thumbnail": "Miniatuur wijzigen", "upload_form.video_description": "Omschrijf dit voor dove, slechthorende, blinde of slechtziende mensen", "upload_modal.analyzing_picture": "Afbeelding analyseren…", "upload_modal.apply": "Toepassen", @@ -867,7 +870,7 @@ "upload_modal.description_placeholder": "Pa's wijze lynx bezag vroom het fikse aquaduct", "upload_modal.detect_text": "Tekst in een afbeelding detecteren", "upload_modal.edit_media": "Media bewerken", - "upload_modal.hint": "Klik of sleep de cirkel in de voorvertoning naar een centraal focuspunt dat op elke thumbnail zichtbaar moet blijven.", + "upload_modal.hint": "Klik of sleep de cirkel in de voorvertoning naar een centraal focuspunt in de afbeelding dat altijd zichtbaar moet blijven.", "upload_modal.preparing_ocr": "OCR voorbereiden…", "upload_modal.preview_label": "Voorvertoning ({ratio})", "upload_progress.label": "Uploaden...", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 69883a5495..d49c36e652 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Slutt å fylgja brukaren?", "content_warning.hide": "Gøym innlegg", "content_warning.show": "Vis likevel", + "content_warning.show_more": "Vis meir", "conversation.delete": "Slett samtale", "conversation.mark_as_read": "Marker som lesen", "conversation.open": "Sjå samtale", @@ -213,7 +214,7 @@ "dismissable_banner.community_timeline": "Dette er dei nylegaste offentlege innlegga frå personar med kontoar frå {domain}.", "dismissable_banner.dismiss": "Avvis", "dismissable_banner.explore_links": "Desse nyhendesakene snakkast om av folk på denne og andre tenarar på det desentraliserte nettverket no.", - "dismissable_banner.explore_statuses": "Dette er innlegg frå det desentraliserte nettverket som er i støytet i dag. Nye statusar som er mykje framheva og merkte som favorittar er rangert høgare.", + "dismissable_banner.explore_statuses": "Dette er innlegg frå det sosiale nettet som er populære i dag. Nye innlegg med mange favorittmerkingar og framhevingar er rangert høgare.", "dismissable_banner.explore_tags": "Desse emneknaggane er populære blant folk på denne tenaren og andre tenarar i det desentraliserte nettverket nett no.", "dismissable_banner.public_timeline": "Dette er dei nyaste offentlege innlegga frå menneske på det sosiale nettet som folk på {domain} fylgjer.", "domain_block_modal.block": "Blokker tenaren", @@ -264,7 +265,7 @@ "empty_column.community": "Den lokale tidslina er tom. Skriv noko offentleg å få ballen til å rulle!", "empty_column.direct": "Du har ingen private omtaler enda. Etter du har sendt eller mottatt en, så vil den dukke opp her.", "empty_column.domain_blocks": "Det er ingen blokkerte domene enno.", - "empty_column.explore_statuses": "Ingenting er i støytet nett no. Prøv igjen seinare!", + "empty_column.explore_statuses": "Ingenting er populært nett no. Prøv att seinare!", "empty_column.favourited_statuses": "Du har ingen favoritt-statusar ennå. Når du merkjer ein som favoritt, dukkar han opp her.", "empty_column.favourites": "Ingen har merkt denne statusen som favoritt enno. Når nokon gjer det, dukkar dei opp her.", "empty_column.follow_requests": "Ingen har spurt om å fylgja deg enno. Når nokon gjer det, vil det dukka opp her.", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Bruk ein eksisterande kategori eller opprett ein ny", "filter_modal.select_filter.title": "Filtrer dette innlegget", "filter_modal.title.status": "Filtrer eit innlegg", - "filter_warning.matches_filter": "Passar med filteret «{title}»", + "filter_warning.matches_filter": "Passar med filteret «{title}»", "filtered_notifications_banner.pending_requests": "Frå {count, plural, =0 {ingen} one {éin person} other {# personar}} du kanskje kjenner", "filtered_notifications_banner.title": "Filtrerte varslingar", "firehose.all": "Alle", @@ -508,7 +509,7 @@ "notification.favourite": "{name} markerte innlegget ditt som favoritt", "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# annan} other {# andre}} favorittmerka innlegget ditt", "notification.follow": "{name} fylgde deg", - "notification.follow.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} fylgde deg", + "notification.follow.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} fylgde deg", "notification.follow_request": "{name} har bedt om å fylgja deg", "notification.follow_request.name_and_others": "{name} og {count, plural, one {# annan} other {# andre}} har spurt om å fylgja deg", "notification.label.mention": "Omtale", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Privat svar", "notification.label.reply": "Svar", "notification.mention": "Omtale", + "notification.mentioned_you": "{name} nemnde deg", "notification.moderation-warning.learn_more": "Lær meir", "notification.moderation_warning": "Du har mottatt ei moderasjonsåtvaring", "notification.moderation_warning.action_delete_statuses": "Nokre av innlegga dine har blitt fjerna.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Snøggfilterline", "notifications.column_settings.follow": "Nye fylgjarar:", "notifications.column_settings.follow_request": "Ny fylgjarførespurnader:", + "notifications.column_settings.group": "Gruppe", "notifications.column_settings.mention": "Omtaler:", "notifications.column_settings.poll": "Røysteresultat:", "notifications.column_settings.push": "Pushvarsel", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 8cd3387eaf..bb8b363ec5 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Hastighetsbegrenset", "alert.unexpected.message": "En uventet feil oppstod.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Alternativ tekst", "announcement.announcement": "Kunngjøring", "attachments_list.unprocessed": "(ubehandlet)", "audio.hide": "Skjul lyd", @@ -196,6 +197,7 @@ "confirmations.unfollow.title": "Slutt å følge bruker?", "content_warning.hide": "Skjul innlegg", "content_warning.show": "Vis likevel", + "content_warning.show_more": "Vis mer", "conversation.delete": "Slett samtalen", "conversation.mark_as_read": "Marker som lest", "conversation.open": "Vis samtale", @@ -302,7 +304,6 @@ "filter_modal.select_filter.subtitle": "Bruk en eksisterende kategori eller opprett en ny", "filter_modal.select_filter.title": "Filtrer dette innlegget", "filter_modal.title.status": "Filtrer et innlegg", - "filter_warning.matches_filter": "Passer med filteret «{title}»", "filtered_notifications_banner.pending_requests": "Fra {count, plural, =0 {ingen} one {en person} other {# folk}} du kanskje kjenner", "filtered_notifications_banner.title": "Filtrerte varsler", "firehose.all": "Alt", @@ -454,6 +455,7 @@ "lists.subheading": "Dine lister", "load_pending": "{count, plural,one {# ny gjenstand} other {# nye gjenstander}}", "loading_indicator.label": "Laster…", + "media_gallery.hide": "Skjul", "moved_to_account_banner.text": "Din konto {disabledAccount} er for øyeblikket deaktivert fordi du flyttet til {movedToAccount}.", "mute_modal.hide_from_notifications": "Ikke varsle", "mute_modal.hide_options": "Skjul alternativer", @@ -498,10 +500,22 @@ "notification.favourite": "{name} favorittmarkerte innlegget ditt", "notification.follow": "{name} fulgte deg", "notification.follow_request": "{name} har bedt om å få følge deg", + "notification.label.mention": "Nevn", + "notification.label.reply": "Svar", + "notification.mention": "Nevn", + "notification.mentioned_you": "{name} nevnte deg", + "notification.moderation-warning.learn_more": "Lær mer", "notification.own_poll": "Avstemningen din er ferdig", "notification.reblog": "{name} fremhevet ditt innlegg", + "notification.relationships_severance_event.learn_more": "Lær mer", "notification.status": "{name} la nettopp ut", "notification.update": "{name} redigerte et innlegg", + "notification_requests.accept": "Aksepter", + "notification_requests.dismiss": "Lukk", + "notification_requests.edit_selection": "Redigér", + "notification_requests.exit_selection": "Ferdig", + "notification_requests.minimize_banner": "Minimer banneret for filtrerte varsler", + "notification_requests.view": "Vis varsler", "notifications.clear": "Fjern varsler", "notifications.clear_confirmation": "Er du sikker på at du vil fjerne alle dine varsler permanent?", "notifications.column_settings.admin.report": "Nye rapporter:", @@ -512,6 +526,7 @@ "notifications.column_settings.filter_bar.category": "Hurtigfiltreringslinje", "notifications.column_settings.follow": "Nye følgere:", "notifications.column_settings.follow_request": "Nye følgerforespørsler:", + "notifications.column_settings.group": "Gruppe", "notifications.column_settings.mention": "Nevnt:", "notifications.column_settings.poll": "Avstemningsresultater:", "notifications.column_settings.push": "Push varsler", @@ -677,6 +692,7 @@ "report_notification.attached_statuses": "{count, plural,one {{count} innlegg} other {{count} innlegg}} vedlagt", "report_notification.categories.legal": "Juridiske", "report_notification.categories.other": "Annet", + "report_notification.categories.other_sentence": "annet", "report_notification.categories.spam": "Søppelpost", "report_notification.categories.violation": "Regelbrudd", "report_notification.open": "Åpne rapport", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 9dbd123c9b..c537d35898 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -8,6 +8,7 @@ "about.not_available": "Aquesta informacion foguèt pas renduda disponibla sus aqueste servidor.", "about.powered_by": "Malhum social descentralizat propulsat per {mastodon}", "about.rules": "Règlas del servidor", + "account.account_note_header": "Nòta personala", "account.add_or_remove_from_list": "Ajustar o tirar de las listas", "account.badges.bot": "Robòt", "account.badges.group": "Grop", @@ -72,9 +73,12 @@ "alert.rate_limited.title": "Taus limitat", "alert.unexpected.message": "Una error s’es producha.", "alert.unexpected.title": "Ops !", + "alt_text_badge.title": "Tèxt alternatiu", "announcement.announcement": "Anóncia", "attachments_list.unprocessed": "(pas tractat)", "audio.hide": "Amagar àudio", + "block_modal.show_less": "Ne veire mens", + "block_modal.show_more": "Ne veire mai", "boost_modal.combo": "Podètz botar {combo} per passar aquò lo còp que ven", "bundle_column_error.copy_stacktrace": "Copiar senhalament d’avaria", "bundle_column_error.error.title": "Oh non !", @@ -128,9 +132,14 @@ "compose_form.poll.duration": "Durada del sondatge", "compose_form.poll.switch_to_multiple": "Cambiar lo sondatge per permetre de causidas multiplas", "compose_form.poll.switch_to_single": "Cambiar lo sondatge per permetre una sola causida", + "compose_form.poll.type": "Estil", + "compose_form.publish": "Publicar", "compose_form.publish_form": "Publicar", + "compose_form.reply": "Respondre", + "compose_form.save_changes": "Actualizar", "compose_form.spoiler.marked": "Lo tèxte es rescondut jos l’avertiment", "compose_form.spoiler.unmarked": "Lo tèxte es pas rescondut", + "compose_form.spoiler_placeholder": "Avertiment de contengut (opcional)", "confirmation_modal.cancel": "Anullar", "confirmations.block.confirm": "Blocar", "confirmations.delete.confirm": "Escafar", @@ -436,6 +445,7 @@ "relative_time.seconds": "fa {number}s", "relative_time.today": "uèi", "reply_indicator.cancel": "Anullar", + "reply_indicator.poll": "Sondatge", "report.block": "Blocar", "report.categories.other": "Autre", "report.categories.spam": "Messatge indesirable", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 5da88ff08f..ea2c259984 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -4,6 +4,7 @@ "about.domain_blocks.silenced.title": "ਸੀਮਿਤ", "about.domain_blocks.suspended.title": "ਮੁਅੱਤਲ ਕੀਤੀ", "about.rules": "ਸਰਵਰ ਨਿਯਮ", + "account.account_note_header": "ਨਿੱਜੀ ਨੋਟ", "account.add_or_remove_from_list": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ ਜਾਂ ਹਟਾਓ", "account.badges.bot": "ਆਟੋਮੇਟ ਕੀਤਾ", "account.badges.group": "ਗਰੁੱਪ", @@ -27,7 +28,9 @@ "account.following": "ਫ਼ਾਲੋ ਕੀਤਾ", "account.follows.empty": "ਇਹ ਵਰਤੋਂਕਾਰ ਹਾਲੇ ਕਿਸੇ ਨੂੰ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦਾ ਹੈ।", "account.go_to_profile": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਜਾਓ", + "account.joined_short": "ਜੁਆਇਨ ਕੀਤਾ", "account.media": "ਮੀਡੀਆ", + "account.mention": "@{name} ਦਾ ਜ਼ਿਕਰ", "account.mute": "{name} ਨੂੰ ਮੌਨ ਕਰੋ", "account.mute_notifications_short": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਮੌਨ ਕਰੋ", "account.mute_short": "ਮੌਨ ਕਰੋ", @@ -36,7 +39,7 @@ "account.no_bio": "ਕੋਈ ਵਰਣਨ ਨਹੀਂ ਦਿੱਤਾ।", "account.open_original_page": "ਅਸਲ ਸਫ਼ੇ ਨੂੰ ਖੋਲ੍ਹੋ", "account.posts": "ਪੋਸਟਾਂ", - "account.posts_with_replies": "ਪੋਸਤਾਂ ਅਤੇ ਜਵਾਬ", + "account.posts_with_replies": "ਪੋਸਟਾਂ ਅਤੇ ਜਵਾਬ", "account.report": "{name} ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ", "account.requested": "ਮਨਜ਼ੂਰੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ ਨੂੰ ਰੱਦ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ", "account.requested_follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ", @@ -44,16 +47,23 @@ "account.unblock": "@{name} ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ", "account.unblock_domain": "{domain} ਡੋਮੇਨ ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਓ", "account.unblock_short": "ਪਾਬੰਦੀ ਹਟਾਓ", + "account.unendorse": "ਪਰੋਫਾਇਲ ਉੱਤੇ ਫ਼ੀਚਰ ਨਾ ਕਰੋ", "account.unfollow": "ਅਣ-ਫ਼ਾਲੋ", + "account.unmute": "@{name} ਲਈ ਮੌਨ ਹਟਾਓ", + "account.unmute_notifications_short": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਅਣ-ਮੌਨ ਕਰੋ", "account.unmute_short": "ਮੌਨ-ਰਹਿਤ ਕਰੋ", "account_note.placeholder": "Click to add a note", "admin.dashboard.retention.average": "ਔਸਤ", "admin.dashboard.retention.cohort_size": "ਨਵੇਂ ਵਰਤੋਂਕਾਰ", "alert.unexpected.title": "ਓਹੋ!", + "alt_text_badge.title": "ਬਦਲੀ ਲਿਖਤ", "announcement.announcement": "ਹੋਕਾ", + "audio.hide": "ਆਡੀਓ ਨੂੰ ਲੁਕਾਓ", "block_modal.show_less": "ਘੱਟ ਦਿਖਾਓ", "block_modal.show_more": "ਵੱਧ ਦਿਖਾਓ", "block_modal.title": "ਵਰਤੋਂਕਾਰ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ ਹੈ?", + "boost_modal.reblog": "ਪੋਸਟ ਨੂੰ ਬੂਸਟ ਕਰਨਾ ਹੈ?", + "bundle_column_error.copy_stacktrace": "ਗਲਤੀ ਰਿਪੋਰਟ ਨੂੰ ਕਾਪੀ ਕਰੋ", "bundle_column_error.error.title": "ਓਹ ਹੋ!", "bundle_column_error.network.title": "ਨੈੱਟਵਰਕ ਦੀ ਸਮੱਸਿਆ", "bundle_column_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ", @@ -62,18 +72,26 @@ "bundle_modal_error.close": "ਬੰਦ ਕਰੋ", "bundle_modal_error.message": "ਭਾਗ ਲੋਡ ਕਰਨ ਦੌਰਾਨ ਕੁਝ ਗਲਤ ਵਾਪਰਿਆ ਹੈ।", "bundle_modal_error.retry": "ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ", + "closed_registrations_modal.title": "Mastodon ਲਈ ਸਾਈਨ ਅੱਪ ਕਰੋ", "column.about": "ਸਾਡੇ ਬਾਰੇ", "column.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ", "column.bookmarks": "ਬੁੱਕਮਾਰਕ", "column.community": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ", "column.direct": "ਨਿੱਜੀ ਜ਼ਿਕਰ", + "column.directory": "ਪ੍ਰੋਫਾਈਲਾਂ ਨੂੰ ਦੇਖੋ", + "column.domain_blocks": "ਪਾਬੰਦੀ ਲਾਏ ਡੋਮੇਨ", "column.favourites": "ਮਨਪਸੰਦ", + "column.firehose": "ਲਾਈਵ ਫੀਡ", "column.follow_requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ", "column.home": "ਮੁੱਖ ਸਫ਼ਾ", "column.lists": "ਸੂਚੀਆਂ", + "column.mutes": "ਮੌਨ ਕੀਤੇ ਵਰਤੋਂਕਾਰ", "column.notifications": "ਸੂਚਨਾਵਾਂ", "column.pins": "ਟੰਗੀਆਂ ਪੋਸਟਾਂ", "column_back_button.label": "ਪਿੱਛੇ", + "column_header.hide_settings": "ਸੈਟਿੰਗਾਂ ਨੂੰ ਲੁਕਾਓ", + "column_header.moveLeft_settings": "ਕਾਲਮ ਨੂੰ ਖੱਬੇ ਪਾਸੇ ਭੇਜੋ", + "column_header.moveRight_settings": "ਕਾਲਮ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਭੇਜੋ", "column_header.pin": "ਟੰਗੋ", "column_header.show_settings": "ਸੈਟਿੰਗਾਂ ਦਿਖਾਓ", "column_header.unpin": "ਲਾਹੋ", @@ -83,16 +101,19 @@ "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": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over 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.lock_disclaimer.lock": "ਲਾਕ ਹੈ", - "compose_form.placeholder": "What is on your mind?", + "compose_form.placeholder": "ਤੁਹਾਡੇ ਮਨ ਵਿੱਚ ਕੀ ਹੈ?", + "compose_form.poll.option_placeholder": "{number} ਚੋਣ", "compose_form.poll.type": "ਸਟਾਈਲ", "compose_form.publish": "ਪੋਸਟ", - "compose_form.publish_form": "Publish", + "compose_form.publish_form": "ਨਵੀਂ ਪੋਸਟ", "compose_form.reply": "ਜਵਾਬ ਦਿਓ", "compose_form.save_changes": "ਅੱਪਡੇਟ", "compose_form.spoiler.marked": "ਸਮੱਗਰੀ ਚੇਤਾਵਨੀ ਨੂੰ ਹਟਾਓ", @@ -102,20 +123,49 @@ "confirmations.block.confirm": "ਪਾਬੰਦੀ", "confirmations.delete.confirm": "ਹਟਾਓ", "confirmations.delete.message": "ਕੀ ਤੁਸੀਂ ਇਹ ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?", + "confirmations.delete.title": "ਪੋਸਟ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?", "confirmations.delete_list.confirm": "ਹਟਾਓ", + "confirmations.delete_list.message": "ਕੀ ਤੁਸੀਂ ਇਸ ਸੂਚੀ ਨੂੰ ਪੱਕੇ ਤੌਰ ਉੱਤੇ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?", + "confirmations.delete_list.title": "ਸੂਚੀ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?", "confirmations.discard_edit_media.confirm": "ਰੱਦ ਕਰੋ", "confirmations.edit.confirm": "ਸੋਧ", "confirmations.logout.confirm": "ਬਾਹਰ ਹੋਵੋ", + "confirmations.logout.message": "ਕੀ ਤੁਸੀਂ ਲਾਗ ਆਉਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?", + "confirmations.logout.title": "ਲਾਗ ਆਉਟ ਕਰਨਾ ਹੈ?", "confirmations.mute.confirm": "ਮੌਨ ਕਰੋ", + "confirmations.redraft.confirm": "ਹਟਾਓ ਤੇ ਮੁੜ-ਡਰਾਫਟ", "confirmations.reply.confirm": "ਜਵਾਬ ਦੇਵੋ", "confirmations.unfollow.confirm": "ਅਣ-ਫ਼ਾਲੋ", + "confirmations.unfollow.message": "ਕੀ ਤੁਸੀਂ {name} ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?", + "confirmations.unfollow.title": "ਵਰਤੋਂਕਾਰ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰਨਾ ਹੈ?", + "content_warning.hide": "ਪੋਸਟ ਨੂੰ ਲੁਕਾਓ", + "content_warning.show": "ਕਿਵੇਂ ਵੀ ਵੇਖਾਓ", + "content_warning.show_more": "ਹੋਰ ਵੇਖਾਓ", + "conversation.delete": "ਗੱਲਬਾਤ ਨੂੰ ਹਟਾਓ", + "conversation.mark_as_read": "ਪੜ੍ਹੇ ਵਜੋਂ ਨਿਸ਼ਾਨੀ ਲਾਓ", + "conversation.open": "ਗੱਲਬਾਤ ਨੂੰ ਵੇਖੋ", + "conversation.with": "{names} ਨਾਲ", + "copy_icon_button.copied": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ", "copypaste.copied": "ਕਾਪੀ ਕੀਤਾ", "copypaste.copy_to_clipboard": "ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ", + "directory.local": "ਸਿਰਫ਼ {domain} ਤੋਂ", + "directory.new_arrivals": "ਨਵੇਂ ਆਉਣ ਵਾਲੇ", + "directory.recently_active": "ਸੱਜਰੇ ਸਰਗਰਮ", "disabled_account_banner.account_settings": "ਖਾਤੇ ਦੀਆਂ ਸੈਟਿੰਗਾਂ", + "disabled_account_banner.text": "ਤੁਹਾਡਾ ਖਾਤਾ {disabledAccount} ਇਸ ਵੇਲੇ ਅਸਮਰੱਥ ਕੀਤਾ ਹੈ।", "dismissable_banner.dismiss": "ਰੱਦ ਕਰੋ", "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.", - "embed.instructions": "Embed this status on your website by copying the code below.", + "domain_block_modal.block": "ਸਰਵਰ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", + "domain_block_modal.block_account_instead": "ਇਸ ਦੀ ਬਜਾਏ @{name} ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ", + "domain_block_modal.title": "ਡੋਮੇਨ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ ਹੈ?", + "domain_pill.server": "ਸਰਵਰ", + "domain_pill.their_handle": "ਇਹ ਹੈਂਡਲ:", + "domain_pill.their_server": "ਉਹਨਾਂ ਦਾ ਡਿਜ਼ਿਟਲ ਘਰ, ਜਿੱਥੇ ਉਹਨਾਂ ਦੀਆਂ ਸਾਰੀਆਂ ਪੋਸਟਾਂ ਹੁੰਦੀਆਂ ਹਨ।", + "domain_pill.username": "ਵਰਤੋਂਕਾਰ-ਨਾਂ", + "domain_pill.whats_in_a_handle": "ਹੈਂਡਲ ਕੀ ਹੁੰਦਾ ਹੈ?", + "domain_pill.your_handle": "ਤੁਹਾਡਾ ਹੈਂਡਲ:", + "embed.instructions": "ਹੇਠਲੇ ਕੋਡ ਨੂੰ ਕਾਪੀ ਕਰਕੇ ਆਪਣੀ ਵੈੱਬਸਾਈਟ ਉੱਤੇ ਇਸ ਪੋਸਟ ਨੂੰ ਇੰਬੈੱਡ ਕਰੋ।", "emoji_button.activity": "ਗਤੀਵਿਧੀ", "emoji_button.clear": "ਮਿਟਾਓ", "emoji_button.custom": "ਕਸਟਮ", @@ -124,27 +174,46 @@ "emoji_button.nature": "ਕੁਦਰਤ", "emoji_button.objects": "ਇਕਾਈ", "emoji_button.people": "ਲੋਕ", + "emoji_button.recent": "ਅਕਸਰ ਵਰਤੇ", "emoji_button.search": "ਖੋਜ ਕਰੋ...", "emoji_button.search_results": "ਖੋਜ ਨਤੀਜੇ", "emoji_button.symbols": "ਚਿੰਨ੍ਹ", "emoji_button.travel": "ਸੈਰ ਸਪਾਟਾ ਤੇ ਥਾਵਾਂ", + "empty_column.account_suspended": "ਖਾਤਾ ਸਸਪੈਂਡ ਕੀਤਾ", "empty_column.account_timeline": "ਇੱਥੇ ਕੋਈ ਪੋਸਟ ਨਹੀਂ ਹੈ!", - "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", + "empty_column.account_unavailable": "ਪ੍ਰੋਫਾਈਲ ਅਣ-ਉਪਲਬਧ ਹੈ", + "empty_column.blocks": "ਤੁਸੀਂ ਹਾਲੇ ਕਿਸੇ ਵਰਤੋਂਕਾਰ ਉੱਤੇ ਪਾਬੰਦੀ ਨਹੀਂ ਲਾਈ ਹੈ।", + "empty_column.bookmarked_statuses": "ਤੁਸੀਂ ਹਾਲੇ ਕਿਸੇ ਵੀ ਪੋਸਟ ਨੂੰ ਬੁੱਕਮਾਰਕ ਨਹੀਂ ਕੀਤਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਬੁੱਕਮਾਰਕ ਕੀਤਾ ਤਾਂ ਉਹ ਇੱਥੇ ਦਿਖਾਈ ਦਾਵੇਗਾ।", "empty_column.home": "ਤੁਹਾਡੀ ਟਾਈਮ-ਲਾਈਨ ਖਾਲੀ ਹੈ! ਇਸ ਨੂੰ ਭਰਨ ਲਈ ਹੋਰ ਲੋਕਾਂ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ।", - "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.list": "ਇਸ ਸੂਚੀ ਵਿੱਚ ਹਾਲੇ ਕੁਝ ਵੀ ਨਹੀਂ ਹੈ। ਜਦੋਂ ਇਸ ਸੂਚੀ ਦੇ ਮੈਂਬਰ ਨਵੀਆਂ ਪੋਸਟਾਂ ਪਾਉਂਦੇ ਹਨ ਤਾਂ ਉਹ ਇੱਥੇ ਦਿਖਾਈ ਦੇਣਗੀਆਂ।", "errors.unexpected_crash.report_issue": "ਮੁੱਦੇ ਦੀ ਰਿਪੋਰਟ ਕਰੋ", + "explore.search_results": "ਖੋਜ ਦੇ ਨਤੀਜੇ", "explore.suggested_follows": "ਲੋਕ", "explore.title": "ਪੜਚੋਲ ਕਰੋ", "explore.trending_links": "ਖ਼ਬਰਾਂ", "explore.trending_statuses": "ਪੋਸਟਾਂ", "explore.trending_tags": "ਹੈਸ਼ਟੈਗ", + "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": "ਖੋਜੋ ਜਾਂ ਬਣਾਓ", + "filter_modal.select_filter.title": "ਇਸ ਪੋਸਟ ਨੂੰ ਫਿਲਟਰ ਕਰੋ", + "filter_modal.title.status": "ਇੱਕ ਪੋਸਟ ਨੂੰ ਫਿਲਟਰ ਕਰੋ", "firehose.all": "ਸਭ", "firehose.local": "ਇਹ ਸਰਵਰ", "firehose.remote": "ਹੋਰ ਸਰਵਰ", + "follow_request.authorize": "ਪਰਮਾਣਿਤ", "follow_request.reject": "ਰੱਦ ਕਰੋ", "follow_suggestions.dismiss": "ਮੁੜ ਨਾ ਵੇਖਾਓ", + "follow_suggestions.personalized_suggestion": "ਨਿੱਜੀ ਸੁਝਾਅ", + "follow_suggestions.popular_suggestion": "ਹਰਮਨਪਿਆਰੇ ਸੁਝਾਅ", + "follow_suggestions.popular_suggestion_longer": "{domain} ਉੱਤੇ ਹਰਮਨਪਿਆਰੇ", "follow_suggestions.view_all": "ਸਭ ਵੇਖੋ", + "follow_suggestions.who_to_follow": "ਕਿਸ ਨੂੰ ਫ਼ਾਲੋ ਕਰੀਏ", + "followed_tags": "ਫ਼ਾਲੋ ਕੀਤੇ ਹੈਸ਼ਟੈਗ", "footer.about": "ਸਾਡੇ ਬਾਰੇ", "footer.directory": "ਪਰੋਫਾਇਲ ਡਾਇਰੈਕਟਰੀ", "footer.get_app": "ਐਪ ਲਵੋ", @@ -159,55 +228,86 @@ "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": "Include additional tags in this column", "hashtag.follow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", "hashtag.unfollow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ", + "hints.profiles.see_more_followers": "{domain} ਉੱਤੇ ਹੋਰ ਫ਼ਾਲੋਅਰ ਵੇਖੋ", + "hints.profiles.see_more_follows": "{domain} ਉੱਤੇ ਹੋਰ ਫ਼ਾਲੋ ਨੂੰ ਵੇਖੋ", + "hints.profiles.see_more_posts": "{domain} ਉੱਤੇ ਹੋਰ ਪੋਸਟਾਂ ਨੂੰ ਵੇਖੋ", + "hints.threads.see_more": "{domain} ਤੋਂ ਹੋਰ ਜਵਾਬਾਂ ਨੂੰ ਵੇਖੋ", + "home.column_settings.show_reblogs": "ਬੂਸਟਾਂ ਨੂੰ ਵੇਖੋ", + "home.column_settings.show_replies": "ਜਵਾਬਾਂ ਨੂੰ ਵੇਖੋ", + "home.hide_announcements": "ਐਲਾਨਾਂ ਨੂੰ ਓਹਲੇ ਕਰੋ", "home.pending_critical_update.link": "ਅੱਪਡੇਟ ਵੇਖੋ", + "ignore_notifications_modal.ignore": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ", + "interaction_modal.login.action": "ਮੈਨੂੰ ਮੁੱਖ ਸਫ਼ੇ ਉੱਤੇ ਲੈ ਜਾਓ", + "interaction_modal.no_account_yet": "Mastodon ਉੱਤੇ ਨਹੀਂ ਹੋ?", + "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} ਦੀ ਪੋਸਟ ਨੂੰ ਬੂਸਟ ਕਰੋ", + "interaction_modal.title.reply": "{name} ਦੀ ਪੋਸਟ ਦਾ ਜਵਾਬ ਦਿਓ", + "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": "to focus the compose textarea", "keyboard_shortcuts.description": "ਵਰਣਨ", - "keyboard_shortcuts.direct": "to open direct messages column", - "keyboard_shortcuts.down": "to move down in the list", - "keyboard_shortcuts.enter": "to open status", - "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.direct": "ਪ੍ਰਾਈਵੇਟ ਜ਼ਿਕਰ ਕੀਤੇ ਕਾਲਮ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ", + "keyboard_shortcuts.down": "ਸੂਚੀ ਵਿੱਚ ਹੇਠਾਂ ਭੇਜੋ", + "keyboard_shortcuts.enter": "ਪੋਸਟ ਨੂੰ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.favourite": "ਪੋਸਟ ਨੂੰ ਪਸੰਦ ਕਰੋ", + "keyboard_shortcuts.favourites": "ਮਨਪਸੰਦ ਸੂਚੀ ਨੂੰ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.federated": "", "keyboard_shortcuts.heading": "ਕੀਬੋਰਡ ਸ਼ਾਰਟਕੱਟ", - "keyboard_shortcuts.home": "to open home timeline", - "keyboard_shortcuts.legend": "to display this legend", - "keyboard_shortcuts.local": "to open local timeline", - "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", - "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.home": "ਮੁੱਖ-ਸਫ਼ਾ ਟਾਈਮ-ਲਾਈਨ ਨੂੰ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.legend": "ਇਸ ਸੰਕੇਤ ਨੂੰ ਵੇਖਾਓ", + "keyboard_shortcuts.local": "ਲੋਕਲ ਸਮਾਂ-ਲਾਈਨ ਨੂੰ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.mention": "ਲੇਖਕ ਦਾ ਜ਼ਿਕਰ", + "keyboard_shortcuts.muted": "ਮੌਨ ਕੀਤੇ ਵਰਤੋਂਕਾਰ ਦੀ ਸੂਚੀ ਨੂੰ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.my_profile": "ਆਪਣੇ ਪਰੋਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ", "keyboard_shortcuts.notifications": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਕਾਲਮ ਖੋਲ੍ਹੋ", - "keyboard_shortcuts.open_media": "to open media", - "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.open_media": "ਮੀਡੀਏ ਨੂੰ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.pinned": "ਪਿੰਨ ਕੀਤੀਆਂ ਪੋਸਟਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਖੋਲ੍ਹੋ", "keyboard_shortcuts.profile": "ਲੇਖਕ ਦਾ ਪਰੋਫਾਈਲ ਖੋਲ੍ਹੋ", "keyboard_shortcuts.reply": "ਪੋਸਟ ਨੂੰ ਜਵਾਬ ਦਿਓ", - "keyboard_shortcuts.requests": "to open follow requests list", - "keyboard_shortcuts.search": "to focus search", - "keyboard_shortcuts.spoilers": "to show/hide CW field", + "keyboard_shortcuts.requests": "ਫ਼ਾਲੋ ਦੀਆਂ ਬੇਨਤੀਆਂ ਦੀ ਸੂਚੀ ਨੂੰ ਖੋਲ੍ਹੋ", + "keyboard_shortcuts.search": "ਖੋਜ ਪੱਟੀ ਨੂੰ ਫੋਕਸ ਕਰੋ", + "keyboard_shortcuts.spoilers": "CW ਖੇਤਰ ਨੂੰ ਵੇਖਾਓ/ਓਹਲੇ ਕਰੋ", "keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_sensitivity": "ਮੀਡੀਆ ਦਿਖਾਉਣ/ਲੁਕਾਉਣ ਲਈ", "keyboard_shortcuts.toot": "ਨਵੀਂ ਪੋਸਟ ਸ਼ੁਰੂ ਕਰੋ", "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", - "keyboard_shortcuts.up": "to move up in the list", + "keyboard_shortcuts.up": "ਸੂਚੀ ਵਿੱਚ ਉੱਤੇ ਭੇਜੋ", "lightbox.close": "ਬੰਦ ਕਰੋ", "lightbox.next": "ਅਗਲੀ", "lightbox.previous": "ਪਿਛਲੀ", + "limited_account_hint.action": "ਪਰੋਫਾਈਲ ਨੂੰ ਕਿਵੇਂ ਵੀ ਵੇਖਾਓ", "link_preview.author": "{name} ਵਲੋਂ", + "link_preview.more_from_author": "{name} ਵਲੋਂ ਹੋਰ", + "link_preview.shares": "{count, plural, one {{counter} ਪੋਸਟ} other {{counter} ਪੋਸਟਾਂ}}", "lists.account.add": "ਸੂਚੀ ਵਿੱਚ ਜੋੜੋ", "lists.account.remove": "ਸੂਚੀ ਵਿਚੋਂ ਹਟਾਓ", "lists.delete": "ਸੂਚੀ ਹਟਾਓ", + "lists.edit": "ਸੂਚੀ ਨੂੰ ਸੋਧੋ", "lists.replies_policy.followed": "ਕੋਈ ਵੀ ਫ਼ਾਲੋ ਕੀਤਾ ਵਰਤੋਂਕਾਰ", + "lists.replies_policy.list": "ਸੂਚੀ ਦੇ ਮੈਂਬਰ", "lists.replies_policy.none": "ਕੋਈ ਨਹੀਂ", "loading_indicator.label": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ…", + "media_gallery.hide": "ਲੁਕਾਓ", + "mute_modal.hide_from_notifications": "ਨੋਟੀਫਿਕੇਸ਼ਨਾਂ ਵਿੱਚੋਂ ਲੁਕਾਓ", + "mute_modal.show_options": "ਚੋਣਾਂ ਨੂੰ ਵੇਖਾਓ", "navigation_bar.about": "ਇਸ ਬਾਰੇ", + "navigation_bar.administration": "ਪਰਸ਼ਾਸ਼ਨ", "navigation_bar.advanced_interface": "ਤਕਨੀਕੀ ਵੈੱਬ ਇੰਟਰਫੇਸ ਵਿੱਚ ਖੋਲ੍ਹੋ", "navigation_bar.blocks": "ਪਾਬੰਦੀ ਲਾਏ ਵਰਤੋਂਕਾਰ", "navigation_bar.bookmarks": "ਬੁੱਕਮਾਰਕ", @@ -231,20 +331,64 @@ "navigation_bar.search": "ਖੋਜੋ", "navigation_bar.security": "ਸੁਰੱਖਿਆ", "not_signed_in_indicator.not_signed_in": "ਇਹ ਸਰੋਤ ਵਰਤਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।", + "notification.admin.sign_up": "{name} ਨੇ ਸਾਈਨ ਅੱਪ ਕੀਤਾ", "notification.follow": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕੀਤਾ", + "notification.follow.name_and_others": "{name} ਅਤੇ {count, plural, one {# ਹੋਰ} other {# ਹੋਰਾਂ}} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕੀਤਾ", "notification.follow_request": "{name} ਨੇ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ", + "notification.label.mention": "ਜ਼ਿਕਰ", + "notification.label.private_mention": "ਨਿੱਜੀ ਜ਼ਿਕਰ", + "notification.label.private_reply": "ਪ੍ਰਾਈਵੇਟ ਜਵਾਬ", + "notification.label.reply": "ਜਵਾਬ", + "notification.mention": "ਜ਼ਿਕਰ", + "notification.mentioned_you": "{name} ਨੇ ਤੁਹਾਡਾ ਜ਼ਿਕਰ ਕੀਤਾ", + "notification.moderation-warning.learn_more": "ਹੋਰ ਜਾਣੋ", + "notification.moderation_warning.action_disable": "ਤੁਹਾਡੇ ਖਾਤੇ ਨੂੰਅਸਮਰੱਥ ਕੀਤਾ ਹੈ।", + "notification.moderation_warning.action_silence": "ਤੁਹਾਡੇ ਖਾਤੇ ਨੂੰ ਸੀਮਿਤ ਕੀਤਾ ਗਿਆ ਹੈ।", + "notification.moderation_warning.action_suspend": "ਤੁਹਾਡੇ ਖਾਤੇ ਨੂੰ ਮੁਅੱਤਲ ਕੀਤਾ ਗਿਆ ਹੈ।", "notification.reblog": "{name} boosted your status", + "notification.relationships_severance_event.learn_more": "ਹੋਰ ਜਾਣੋ", + "notification.status": "{name} ਨੇ ਹੁਣੇ ਪੋਸਟ ਕੀਤਾ", + "notification.update": "{name} ਨੋ ਪੋਸਟ ਨੂੰ ਸੋਧਿਆ", + "notification_requests.accept": "ਮਨਜ਼ੂਰ", + "notification_requests.confirm_accept_multiple.title": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਬੇਨਤੀਆਂ ਨੂੰ ਮਨਜ਼ੂਰ ਕਰਨਾ ਹੈ?", + "notification_requests.confirm_dismiss_multiple.title": "ਨੋਟੀਫਿਕੇਸ਼ਨ ਬੇਨਤੀਆਂ ਨੂੰ ਖ਼ਾਰਜ ਕਰਨਾ ਹੈ?", + "notification_requests.dismiss": "ਖ਼ਾਰਜ ਕਰੋ", + "notification_requests.edit_selection": "ਸੋਧੋ", + "notification_requests.exit_selection": "ਮੁਕੰਮਲ", + "notification_requests.notifications_from": "{name} ਵਲੋਂ ਨੋਟੀਫਿਕੇਸ਼ਨ", + "notifications.clear_title": "ਨੋਟਫਿਕੇਸ਼ਨਾਂ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?", + "notifications.column_settings.admin.report": "ਨਵੀਆਂ ਰਿਪੋਰਟਾਂ:", "notifications.column_settings.alert": "ਡੈਸਕਟਾਪ ਸੂਚਨਾਵਾਂ", "notifications.column_settings.favourite": "ਮਨਪਸੰਦ:", + "notifications.column_settings.filter_bar.category": "ਫੌਰੀ ਫਿਲਟਰ ਪੱਟੀ", "notifications.column_settings.follow": "ਨਵੇਂ ਫ਼ਾਲੋਅਰ:", "notifications.column_settings.follow_request": "ਨਵੀਆਂ ਫ਼ਾਲੋ ਬੇਨਤੀਆਂ:", + "notifications.column_settings.group": "ਗਰੁੱਪ", + "notifications.column_settings.mention": "ਜ਼ਿਕਰ:", + "notifications.column_settings.poll": "ਪੋਲ ਦੇ ਨਤੀਜੇ:", + "notifications.column_settings.reblog": "ਬੂਸਟ:", + "notifications.column_settings.show": "ਕਾਲਮ ਵਿੱਚ ਵੇਖਾਓ", + "notifications.column_settings.sound": "ਆਵਾਜ਼ ਚਲਾਓ", "notifications.column_settings.status": "ਨਵੀਆਂ ਪੋਸਟਾਂ:", + "notifications.column_settings.unread_notifications.category": "ਨਾ-ਪੜ੍ਹੇ ਨੋਟੀਫਿਕੇਸ਼ਨ", + "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.grant_permission": "ਇਜਾਜ਼ਤ ਦਿਓ।", + "notifications.group": "{count} ਨੋਟੀਫਿਕੇਸ਼ਨ", + "notifications.policy.accept": "ਮਨਜ਼ੂਰ", + "notifications.policy.accept_hint": "ਨੋਟੀਫਿਕੇਸ਼ਨਾਂ ਵਿੱਚ ਵੇਖਾਓ", + "notifications.policy.drop": "ਅਣਡਿੱਠਾ", + "notifications.policy.filter": "ਫਿਲਟਰ", + "notifications.policy.filter_new_accounts_title": "ਨਵੇਂ ਖਾਤੇ", + "notifications.policy.filter_not_followers_title": "ਲੋਕ ਤੁਹਾਨੂੰ ਫ਼ਾਲੋ ਨਹੀਂ ਕਰਦੇ", + "notifications.policy.filter_not_following_hint": "ਜਦ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਖੁਦ ਮਨਜ਼ੂਰੀ ਨਹੀਂ ਦਿੰਦੇ", + "notifications_permission_banner.enable": "ਡੈਸਕਟਾਪ ਸੂਚਨਾਵਾਂ ਸਮਰੱਥ ਕਰੋ", "onboarding.actions.go_to_explore": "ਮੈਨੂੰ ਰੁਝਾਨ ਵੇਖਾਓ", "onboarding.actions.go_to_home": "ਮੇਰੀ ਮੁੱਖ ਫੀਡ ਉੱਤੇ ਲੈ ਜਾਓ", "onboarding.follows.lead": "", @@ -267,13 +411,27 @@ "onboarding.steps.share_profile.title": "ਆਪਣੇ ਮਸਟਾਡੋਨ ਪਰੋਫਾਈਲ ਨੂੰ ਸਾਂਝਾ ਕਰੋ", "poll.closed": "ਬੰਦ ਹੈ", "poll.refresh": "ਤਾਜ਼ਾ ਕਰੋ", + "poll.reveal": "ਨਤੀਜਿਆਂ ਨੂੰ ਵੇਖੋ", "poll.vote": "ਵੋਟ ਪਾਓ", + "poll.voted": "ਤੁਸੀਂ ਇਸ ਜਵਾਬ ਲਈ ਵੋਟ ਕੀਤਾ", "privacy.change": "ਪੋਸਟ ਦੀ ਪਰਦੇਦਾਰੀ ਨੂੰ ਬਦਲੋ", + "privacy.direct.long": "ਪੋਸਟ ਵਿੱਚ ਜ਼ਿਕਰ ਕੀਤੇ ਹਰ ਕੋਈ", + "privacy.direct.short": "ਖਾਸ ਲੋਕ", + "privacy.private.long": "ਸਿਰਫ਼ ਤੁਹਾਡੇ ਫ਼ਾਲੋਅਰ ਹੀ", + "privacy.private.short": "ਫ਼ਾਲੋਅਰ", "privacy.public.short": "ਜਨਤਕ", + "privacy_policy.last_updated": "ਆਖਰੀ ਵਾਰ {date} ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ", "privacy_policy.title": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ", + "recommended": "ਸਿਫ਼ਾਰਸ਼ੀ", "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 {# ਮਿੰਟ}} ਪਹਿਲਾਂ", + "relative_time.full.seconds": "{number, plural, one {# ਸਕਿੰਟ} other {# ਸਕਿੰਟ}} ਪਹਿਲਾਂ", + "relative_time.hours": "{number}ਘੰ", "relative_time.just_now": "ਹੁਣੇ", "relative_time.minutes": "{number}ਮਿੰ", "relative_time.seconds": "{number}ਸ", @@ -290,18 +448,34 @@ "report.next": "ਅਗਲੀ", "report.placeholder": "ਵਧੀਕ ਟਿੱਪਣੀਆਂ", "report.reasons.dislike": "ਮੈਨੂੰ ਇਹ ਪਸੰਦ ਨਹੀਂ ਹੈ", + "report.reasons.legal": "ਇਹ ਗ਼ੈਰ-ਕਨੂੰਨੀ ਹੈ", + "report.reasons.other": "ਇਹ ਕੁਝ ਹੋਰ ਹੈ", "report.reasons.spam": "ਇਹ ਸਪੈਮ ਹੈ", + "report.rules.subtitle": "ਲਾਗੂ ਹੋਣ ਵਾਲੇ ਸਾਰੇ ਚੁਣੋ", + "report.rules.title": "ਕਿਹੜੇ ਨਿਯਮਾਂ ਦਾ ਉਲੰਘਣ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ?", + "report.statuses.subtitle": "ਲਾਗੂ ਹੋਣ ਵਾਲੇ ਸਾਰੇ ਚੁਣੋ", "report.submit": "ਭੇਜੋ", "report.target": "{target} ਰਿਪੋਰਟ", + "report.thanks.title": "ਇਸ ਨੂੰ ਵੇਖਣਾ ਨਹੀਂ ਚਾਹੁੰਦੇ ਹੋ?", + "report.thanks.title_actionable": "ਰਿਪੋਰਟ ਕਰਨ ਲਈ ਧੰਨਵਾਦ ਹੈ। ਅਸੀਂ ਇਸ ਦੀ ਛਾਣਬੀਣ ਕਰਾਂਗੇ।", "report.unfollow": "@{name} ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.legal": "ਕਨੂੰਨੀ", "report_notification.categories.other": "ਬਾਕੀ", + "report_notification.categories.other_sentence": "ਹੋਰ", "report_notification.categories.spam": "ਸਪੈਮ", + "report_notification.categories.spam_sentence": "ਸਪੈਮ", "report_notification.categories.violation": "ਨਿਯਮ ਦੀ ਉਲੰਘਣਾ", + "report_notification.categories.violation_sentence": "ਨਿਯਮ ਦੀ ਉਲੰਘਣਾ", "report_notification.open": "ਰਿਪੋਰਟ ਨੂੰ ਖੋਲ੍ਹੋ", + "search.no_recent_searches": "ਕੋਈ ਸੱਜਰੀ ਖੋਜ ਨਹੀਂ ਹੈ", "search.placeholder": "ਖੋਜੋ", + "search.quick_action.go_to_account": "ਪਰੋਫਾਈਲ {x} ਉੱਤੇ ਜਾਓ", + "search.quick_action.go_to_hashtag": "ਹੈਸ਼ਟੈਗ {x} ਉੱਤੇ ਜਾਓ", + "search_popout.language_code": "ISO ਭਾਸ਼ਾ ਕੋਡ", + "search_popout.options": "ਖੋਜ ਲਈ ਚੋਣਾਂ", "search_popout.quick_actions": "ਫੌਰੀ ਕਾਰਵਾਈਆਂ", + "search_popout.recent": "ਸੱਜਰੀਆਂ ਖੋਜੋ", "search_popout.specific_date": "ਖਾਸ ਤਾਰੀਖ", "search_popout.user": "ਵਰਤੋਂਕਾਰ", "search_results.accounts": "ਪਰੋਫਾਈਲ", @@ -310,6 +484,7 @@ "search_results.see_all": "ਸਭ ਵੇਖੋ", "search_results.statuses": "ਪੋਸਟਾਂ", "search_results.title": "{q} ਲਈ ਖੋਜ", + "server_banner.active_users": "ਸਰਗਰਮ ਵਰਤੋਂਕਾਰ", "sign_in_banner.create_account": "ਖਾਤਾ ਬਣਾਓ", "sign_in_banner.sign_in": "ਲਾਗਇਨ", "sign_in_banner.sso_redirect": "ਲਾਗਇਨ ਜਾਂ ਰਜਿਸਟਰ ਕਰੋ", @@ -318,7 +493,10 @@ "status.bookmark": "ਬੁੱਕਮਾਰਕ", "status.copy": "ਪੋਸਟ ਲਈ ਲਿੰਕ ਕਾਪੀ ਕਰੋ", "status.delete": "ਹਟਾਓ", + "status.direct": "{name} ਪ੍ਰਾਈਵੇਟ ਜ਼ਿਕਰ", + "status.direct_indicator": "ਪ੍ਰਾਈਵੇਟ ਜ਼ਿਕਰ", "status.edit": "ਸੋਧ", + "status.edited": "ਆਖਰੀ ਸੋਧ ਦੀ ਤਾਰੀਖ {date}", "status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}", "status.favourite": "ਪਸੰਦ", "status.history.created": "{name} ਨੇ {date} ਨੂੰ ਬਣਾਇਆ", @@ -326,29 +504,47 @@ "status.load_more": "ਹੋਰ ਦਿਖਾਓ", "status.media.open": "ਖੋਲ੍ਹਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", "status.media.show": "ਵੇਖਾਉਣ ਲਈ ਕਲਿੱਕ ਕਰੋ", + "status.media_hidden": "ਮੀਡਿਆ ਲੁਕਵਾਂ ਹੈ", "status.mention": "@{name} ਦਾ ਜ਼ਿਕਰ", "status.more": "ਹੋਰ", + "status.mute": "@{name} ਨੂੰ ਮੌਨ ਕਰੋ", + "status.mute_conversation": "ਗੱਲਬਾਤ ਨੂੰ ਮੌਨ ਕਰੋ", "status.open": "ਇਹ ਪੋਸਟ ਨੂੰ ਫੈਲਾਓ", "status.pin": "ਪਰੋਫਾਈਲ ਉੱਤੇ ਟੰਗੋ", "status.pinned": "ਟੰਗੀ ਹੋਈ ਪੋਸਟ", "status.read_more": "ਹੋਰ ਪੜ੍ਹੋ", "status.reblog": "ਵਧਾਓ", + "status.reblogged_by": "{name} ਨੇ ਬੂਸਟ ਕੀਤਾ", "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "ਹਟਾਓ ਤੇ ਮੁੜ-ਡਰਾਫਟ", + "status.remove_bookmark": "ਬੁੱਕਮਾਰਕ ਨੂੰ ਹਟਾਓ", + "status.replied_in_thread": "ਮਾਮਲੇ ਵਿੱਚ ਜਵਾਬ ਦਿਓ", "status.replied_to": "{name} ਨੂੰ ਜਵਾਬ ਦਿੱਤਾ", "status.reply": "ਜਵਾਬ ਦੇਵੋ", "status.replyAll": "ਮਾਮਲੇ ਨੂੰ ਜਵਾਬ ਦਿਓ", "status.report": "@{name} ਦੀ ਰਿਪੋਰਟ ਕਰੋ", "status.sensitive_warning": "ਸੰਵੇਦਨਸ਼ੀਲ ਸਮੱਗਰੀ", "status.share": "ਸਾਂਝਾ ਕਰੋ", + "status.show_less_all": "ਸਭ ਲਈ ਘੱਟ ਵੇਖਾਓ", + "status.show_more_all": "ਸਭ ਲਈ ਵੱਧ ਵੇਖਾਓ", + "status.show_original": "ਅਸਲ ਨੂੰ ਵੇਖਾਓ", "status.title.with_attachments": "{user} ਨੇ {attachmentCount, plural,one {ਅਟੈਚਮੈਂਟ} other {{attachmentCount}ਅਟੈਚਮੈਂਟਾਂ}} ਪੋਸਟ ਕੀਤੀਆਂ", "status.translate": "ਉਲੱਥਾ ਕਰੋ", + "status.translated_from_with": "{provider} ਵਰਤ ਕੇ {lang} ਤੋਂ ਅਨੁਵਾਦ ਕੀਤਾ", + "status.uncached_media_warning": "ਝਲਕ ਮੌਜੂਦ ਨਹੀਂ ਹੈ", + "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 {# ਮਿੰਟ}} ਬਾਕੀ", "trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}", + "trends.trending_now": "ਹੁਣ ਰੁਝਾਨ ਵਿੱਚ", "units.short.billion": "{count}ਿਬ", "units.short.million": "{count}ਮਿ", "units.short.thousand": "{count}ਹਜ਼ਾਰ", + "upload_button.label": "ਚਿੱਤਰ, ਵੀਡੀਓ ਜਾਂ ਆਡੀਓ ਫਾਇਲ ਨੂੰ ਜੋੜੋ", "upload_form.audio_description": "ਬੋਲ਼ੇ ਜਾਂ ਸੁਣਨ ਵਿੱਚ ਮੁਸ਼ਕਿਲ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵੇ", "upload_form.description": "ਅੰਨ੍ਹੇ ਜਾਂ ਦੇਖਣ ਲਈ ਮੁਸ਼ਕਲ ਵਾਲੇ ਲੋਕਾਂ ਲਈ ਵੇਰਵੇ", "upload_form.edit": "ਸੋਧ", @@ -359,8 +555,15 @@ "upload_modal.edit_media": "ਮੀਡੀਆ ਸੋਧੋ", "upload_progress.label": "ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...", "upload_progress.processing": "ਕਾਰਵਾਈ ਚੱਲ ਰਹੀ ਹੈ…", + "username.taken": "ਉਹ ਵਰਤੋਂਕਾਰ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਲੈ ਲਿਆ ਹੈ। ਹੋਰ ਅਜ਼ਮਾਓ", + "video.close": "ਵੀਡੀਓ ਨੂੰ ਬੰਦ ਕਰੋ", + "video.download": "ਫ਼ਾਈਲ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰੋ", "video.exit_fullscreen": "ਪੂਰੀ ਸਕਰੀਨ ਵਿੱਚੋਂ ਬਾਹਰ ਨਿਕਲੋ", + "video.expand": "ਵੀਡੀਓ ਨੂੰ ਫੈਲਾਓ", "video.fullscreen": "ਪੂਰੀ ਸਕਰੀਨ", + "video.hide": "ਵੀਡੀਓ ਨੂੰ ਲੁਕਾਓ", + "video.mute": "ਆਵਾਜ਼ ਨੂੰ ਬੰਦ ਕਰੋ", "video.pause": "ਠਹਿਰੋ", - "video.play": "ਚਲਾਓ" + "video.play": "ਚਲਾਓ", + "video.unmute": "ਆਵਾਜ਼ ਨੂੰ ਸੁਣਾਓ" } diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 4dc74db8cb..a92a55ffcd 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -11,7 +11,7 @@ "about.not_available": "Ta informacja nie została udostępniona na tym serwerze.", "about.powered_by": "Zdecentralizowane media społecznościowe napędzane przez {mastodon}", "about.rules": "Regulamin serwera", - "account.account_note_header": "Twoja notatka", + "account.account_note_header": "Notatka", "account.add_or_remove_from_list": "Dodaj lub usuń z list", "account.badges.bot": "Bot", "account.badges.group": "Grupa", @@ -19,9 +19,9 @@ "account.block_domain": "Blokuj wszystko z {domain}", "account.block_short": "Zablokuj", "account.blocked": "Zablokowany(-a)", - "account.cancel_follow_request": "Wycofaj żądanie obserwowania", - "account.copy": "Skopiuj odnośnik do profilu", - "account.direct": "Prywatna wzmianka @{name}", + "account.cancel_follow_request": "Nie obserwuj", + "account.copy": "Skopiuj link do profilu", + "account.direct": "Napisz bezpośrednio do @{name}", "account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}", "account.domain_blocked": "Ukryto domenę", "account.edit_profile": "Edytuj profil", @@ -31,7 +31,7 @@ "account.featured_tags.last_status_never": "Brak postów", "account.featured_tags.title": "Polecane hasztagi {name}", "account.follow": "Obserwuj", - "account.follow_back": "Obserwuj wzajemnie", + "account.follow_back": "Również obserwuj", "account.followers": "Obserwujący", "account.followers.empty": "Nikt jeszcze nie obserwuje tego użytkownika.", "account.followers_counter": "{count, plural, one {{counter} obserwujący} few {{counter} obserwujących} many {{counter} obserwujących} other {{counter} obserwujących}}", @@ -52,35 +52,35 @@ "account.mute_notifications_short": "Wycisz powiadomienia", "account.mute_short": "Wycisz", "account.muted": "Wyciszony", - "account.mutual": "Przyjaciele", + "account.mutual": "Znajomi", "account.no_bio": "Brak opisu.", "account.open_original_page": "Otwórz stronę oryginalną", "account.posts": "Wpisy", "account.posts_with_replies": "Wpisy i odpowiedzi", "account.report": "Zgłoś @{name}", "account.requested": "Oczekująca prośba, kliknij aby anulować", - "account.requested_follow": "{name} chce zaobserwować twój profil", + "account.requested_follow": "{name} chce cię zaobserwować", "account.share": "Udostępnij profil @{name}", "account.show_reblogs": "Pokazuj podbicia od @{name}", "account.statuses_counter": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", "account.unblock": "Odblokuj @{name}", "account.unblock_domain": "Odblokuj domenę {domain}", "account.unblock_short": "Odblokuj", - "account.unendorse": "Przestań polecać", - "account.unfollow": "Przestań obserwować", - "account.unmute": "Cofnij wyciszenie @{name}", - "account.unmute_notifications_short": "Wyłącz wyciszenie powiadomień", - "account.unmute_short": "Włącz dźwięki", - "account_note.placeholder": "Naciśnij aby dodać notatkę", + "account.unendorse": "Nie wyświetlaj w profilu", + "account.unfollow": "Nie obserwuj", + "account.unmute": "Nie wyciszaj @{name}", + "account.unmute_notifications_short": "Nie wyciszaj powiadomień", + "account.unmute_short": "Nie wyciszaj", + "account_note.placeholder": "Kliknij, aby dodać notatkę", "admin.dashboard.daily_retention": "Wskaźnik utrzymania użytkowników po dniach od rejestracji", "admin.dashboard.monthly_retention": "Wskaźnik utrzymania użytkowników po miesiącach od rejestracji", "admin.dashboard.retention.average": "Średnia", "admin.dashboard.retention.cohort": "Miesiąc rejestracji", "admin.dashboard.retention.cohort_size": "Nowi użytkownicy", - "admin.impact_report.instance_accounts": "Usuniętych profili kont", + "admin.impact_report.instance_accounts": "Profile kont, które zostaną usunięte", "admin.impact_report.instance_followers": "Obserwujący, których straciliby nasi użytkownicy", "admin.impact_report.instance_follows": "Obserwujący, których straciliby ich użytkownicy", - "admin.impact_report.title": "Podsumowanie wpływu", + "admin.impact_report.title": "Podsumowanie zmian", "alert.rate_limited.message": "Spróbuj ponownie po {retry_time, time, medium}.", "alert.rate_limited.title": "Ograniczenie liczby zapytań", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", @@ -89,25 +89,25 @@ "announcement.announcement": "Ogłoszenie", "attachments_list.unprocessed": "(nieprzetworzone)", "audio.hide": "Ukryj dźwięk", - "block_modal.remote_users_caveat": "Poprosimy serwer {domain} o uszanowanie twojej decyzji. Zgodność nie jest jednak gwarantowana, bo niektóre serwery mogą inaczej obsługiwać blokowanie. Wpisy publiczne mogą być widoczne dla niezalogowanych użytkowników.", + "block_modal.remote_users_caveat": "Poprosimy serwer {domain} o uszanowanie twojej decyzji. Nie jest to jednak gwarantowane, bo niektóre serwery mogą obsługiwać blokady w inny sposób. Publiczne wpisy mogą być nadal widoczne dla niezalogowanych użytkowników.", "block_modal.show_less": "Pokaż mniej", "block_modal.show_more": "Pokaż więcej", - "block_modal.they_cant_mention": "Użytkownik nie może Cię obserwować ani dodawać wzmianek o Tobie.", - "block_modal.they_cant_see_posts": "Użytkownik nie będzie widzieć Twoich wpisów, a Ty jego.", - "block_modal.they_will_know": "Użytkownik będzie wiedział, że jest zablokowany.", - "block_modal.title": "Zablokować użytkownika?", - "block_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które wspominają tego użytkownika.", - "boost_modal.combo": "Naciśnij {combo}, aby pominąć to następnym razem", + "block_modal.they_cant_mention": "Nie może cię wzmiankować ani obserwować.", + "block_modal.they_cant_see_posts": "Nie zobaczycie wzajemnie swoich wpisów.", + "block_modal.they_will_know": "Zobaczy informację o blokadzie.", + "block_modal.title": "Zablokować?", + "block_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które zawierają wzmianki o tej osobie.", + "boost_modal.combo": "Możesz kliknąć {combo}, aby pominąć tę czynność następnym razem", "boost_modal.reblog": "Podbić wpis?", "boost_modal.undo_reblog": "Cofnąć podbicie?", "bundle_column_error.copy_stacktrace": "Skopiuj raport o błędzie", - "bundle_column_error.error.body": "Nie można zrenderować żądanej strony. Może to być spowodowane błędem w naszym kodzie lub problemami z kompatybilnością przeglądarki.", + "bundle_column_error.error.body": "Nie udało się wyświetlić tej strony. Może to być spowodowane błędem w naszym kodzie lub niezgodnością przeglądarki.", "bundle_column_error.error.title": "O nie!", - "bundle_column_error.network.body": "Wystąpił błąd podczas próby załadowania tej strony. Może to być spowodowane tymczasowym problemem z połączeniem z internetem lub serwerem.", + "bundle_column_error.network.body": "Wystąpił błąd podczas próby wczytania tej strony. Może to być spowodowane tymczasowym problemem z połączeniem internetowym lub serwerem.", "bundle_column_error.network.title": "Błąd sieci", "bundle_column_error.retry": "Spróbuj ponownie", "bundle_column_error.return": "Wróć do strony głównej", - "bundle_column_error.routing.body": "Żądana strona nie została znaleziona. Czy na pewno adres URL w pasku adresu jest poprawny?", + "bundle_column_error.routing.body": "Nie można odnaleźć tej strony. Czy URL w pasku adresu na pewno jest prawidłowy?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Zamknij", "bundle_modal_error.message": "Coś poszło nie tak podczas ładowania tego składnika.", @@ -118,18 +118,18 @@ "closed_registrations_modal.preamble": "Mastodon jest zdecentralizowany, więc bez względu na to, gdzie się zarejestrujesz, będziesz w stanie obserwować i wchodzić w interakcje z innymi osobami na tym serwerze. Możesz nawet uruchomić własny serwer!", "closed_registrations_modal.title": "Rejestracja na Mastodonie", "column.about": "O serwerze", - "column.blocks": "Zablokowani użytkownicy", + "column.blocks": "Zablokowani", "column.bookmarks": "Zakładki", "column.community": "Lokalna oś czasu", - "column.direct": "Prywatne wzmianki", + "column.direct": "Wzmianki bezpośrednie", "column.directory": "Przeglądaj profile", - "column.domain_blocks": "Ukryte domeny", + "column.domain_blocks": "Zablokowane domeny", "column.favourites": "Ulubione", - "column.firehose": "Kanały na żywo", + "column.firehose": "Aktualności", "column.follow_requests": "Prośby o obserwację", "column.home": "Strona główna", "column.lists": "Listy", - "column.mutes": "Wyciszeni użytkownicy", + "column.mutes": "Wyciszeni", "column.notifications": "Powiadomienia", "column.pins": "Przypięte wpisy", "column.public": "Globalna oś czasu", @@ -139,32 +139,32 @@ "column_header.moveRight_settings": "Przesuń kolumnę w prawo", "column_header.pin": "Przypnij", "column_header.show_settings": "Pokaż ustawienia", - "column_header.unpin": "Cofnij przypięcie", + "column_header.unpin": "Odepnij", "column_subheading.settings": "Ustawienia", - "community.column_settings.local_only": "Tylko Lokalne", + "community.column_settings.local_only": "Tylko lokalne", "community.column_settings.media_only": "Tylko multimedia", - "community.column_settings.remote_only": "Tylko Zdalne", + "community.column_settings.remote_only": "Tylko zdalne", "compose.language.change": "Zmień język", "compose.language.search": "Szukaj języków...", - "compose.published.body": "Opublikowano post.", + "compose.published.body": "Wpis został opublikowany.", "compose.published.open": "Otwórz", - "compose.saved.body": "Post zapisany.", + "compose.saved.body": "Wpis został zapisany.", "compose_form.direct_message_warning_learn_more": "Dowiedz się więcej", - "compose_form.encryption_warning": "Posty na Mastodon nie są szyfrowane end-to-end. Nie udostępniaj żadnych wrażliwych informacji przez Mastodon.", - "compose_form.hashtag_warning": "Ten wpis nie będzie widoczny pod podanymi hasztagami, ponieważ jest oznaczony jako niepubliczny. Tylko publiczne wpisy mogą zostać znalezione z użyciem hasztagów.", - "compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy, kto Cię obserwuje, może wyświetlać Twoje wpisy przeznaczone tylko dla obserwujących.", + "compose_form.encryption_warning": "Wpisy na Mastodon nie są szyfrowane end-to-end. Nie udostępniaj żadnych poufnych informacji za pośrednictwem Mastodon.", + "compose_form.hashtag_warning": "Ten wpis nie będzie wyświetlany pod żadnym hashtagiem, bo nie jest publiczny. Tylko publiczne wpisy mogą być wyszukiwane po hashtagach.", + "compose_form.lock_disclaimer": "Twoje konto nie jest {locked}. Każdy może cię obserwować, aby zobaczyć twoje wpisy tylko dla obserwujących.", "compose_form.lock_disclaimer.lock": "zablokowane", - "compose_form.placeholder": "Co chodzi ci po głowie?", - "compose_form.poll.duration": "Czas trwania głosowania", - "compose_form.poll.multiple": "Wielokrotny wybór", + "compose_form.placeholder": "Co ci chodzi po głowie?", + "compose_form.poll.duration": "Czas trwania ankiety", + "compose_form.poll.multiple": "Możliwość wielokrotnego wyboru", "compose_form.poll.option_placeholder": "Opcja {number}", "compose_form.poll.single": "Wybierz jedną", - "compose_form.poll.switch_to_multiple": "Pozwól na wybranie wielu opcji", - "compose_form.poll.switch_to_single": "Pozwól na wybranie tylko jednej opcji", + "compose_form.poll.switch_to_multiple": "Pozwól na zaznaczenie kilku odpowiedzi", + "compose_form.poll.switch_to_single": "Pozwól na zaznaczenie tylko jednej odpowiedzi", "compose_form.poll.type": "Styl", "compose_form.publish": "Opublikuj", - "compose_form.publish_form": "Opublikuj", - "compose_form.reply": "Odpowiedz", + "compose_form.publish_form": "Nowy wpis", + "compose_form.reply": "Skomentuj", "compose_form.save_changes": "Aktualizuj", "compose_form.spoiler.marked": "Usuń ostrzeżenie o treści", "compose_form.spoiler.unmarked": "Dodaj ostrzeżenie o treści", @@ -175,71 +175,72 @@ "confirmations.delete.message": "Czy na pewno chcesz usunąć ten wpis?", "confirmations.delete.title": "Usunąć wpis?", "confirmations.delete_list.confirm": "Usuń", - "confirmations.delete_list.message": "Czy na pewno chcesz bezpowrotnie usunąć tą listę?", + "confirmations.delete_list.message": "Czy na pewno chcesz trwale usunąć tę listę?", "confirmations.delete_list.title": "Usunąć listę?", "confirmations.discard_edit_media.confirm": "Odrzuć", "confirmations.discard_edit_media.message": "Masz niezapisane zmiany w opisie lub podglądzie, odrzucić je mimo to?", "confirmations.edit.confirm": "Edytuj", "confirmations.edit.message": "Edytowanie wpisu nadpisze wiadomość, którą obecnie piszesz. Czy na pewno chcesz to zrobić?", - "confirmations.edit.title": "Nadpisać wpis?", + "confirmations.edit.title": "Zastąpić wpis?", "confirmations.logout.confirm": "Wyloguj", "confirmations.logout.message": "Czy na pewno chcesz się wylogować?", "confirmations.logout.title": "Wylogować?", "confirmations.mute.confirm": "Wycisz", - "confirmations.redraft.confirm": "Usuń i przeredaguj", - "confirmations.redraft.message": "Czy na pewno chcesz usunąć i przeredagować ten wpis? Polubienia i podbicia zostaną utracone, a odpowiedzi do oryginalnego wpisu zostaną osierocone.", - "confirmations.redraft.title": "Usunąć i przeredagować wpis?", - "confirmations.reply.confirm": "Odpowiedz", - "confirmations.reply.message": "W ten sposób utracisz wpis który obecnie tworzysz. Czy na pewno chcesz to zrobić?", - "confirmations.reply.title": "Nadpisać wpis?", - "confirmations.unfollow.confirm": "Przestań obserwować", - "confirmations.unfollow.message": "Czy na pewno zamierzasz przestać obserwować {name}?", - "confirmations.unfollow.title": "Przestać obserwować?", + "confirmations.redraft.confirm": "Usuń i popraw", + "confirmations.redraft.message": "Czy na pewno chcesz usunąć i poprawić ten wpis? Polubienia, podbicia i komentarze pierwotnego wpisu zostaną utracone.", + "confirmations.redraft.title": "Usunąć i poprawić wpis?", + "confirmations.reply.confirm": "Skomentuj", + "confirmations.reply.message": "W ten sposób utracisz wpis, który teraz tworzysz. Czy na pewno chcesz to zrobić?", + "confirmations.reply.title": "Zastąpić wpis?", + "confirmations.unfollow.confirm": "Nie obserwuj", + "confirmations.unfollow.message": "Czy na pewno nie chcesz obserwować {name}?", + "confirmations.unfollow.title": "Cofnąć obserwację?", "content_warning.hide": "Ukryj wpis", "content_warning.show": "Pokaż mimo to", - "conversation.delete": "Usuń konwersację", + "content_warning.show_more": "Pokaż więcej", + "conversation.delete": "Usuń rozmowę", "conversation.mark_as_read": "Oznacz jako przeczytane", - "conversation.open": "Zobacz konwersację", + "conversation.open": "Zobacz rozmowę", "conversation.with": "Z {names}", "copy_icon_button.copied": "Skopiowano do schowka", "copypaste.copied": "Skopiowano", "copypaste.copy_to_clipboard": "Skopiuj do schowka", "directory.federated": "Ze znanego fediwersum", "directory.local": "Tylko z {domain}", - "directory.new_arrivals": "Nowości", - "directory.recently_active": "Ostatnio aktywne", + "directory.new_arrivals": "Nowo przybyli", + "directory.recently_active": "Ostatnio aktywni", "disabled_account_banner.account_settings": "Ustawienia konta", "disabled_account_banner.text": "Twoje konto {disabledAccount} jest obecnie wyłączone.", - "dismissable_banner.community_timeline": "To są najnowsze wpisy publiczne od osób, które mają założone konta na {domain}.", - "dismissable_banner.dismiss": "Schowaj", + "dismissable_banner.community_timeline": "To są najnowsze publiczne wpisy osób, które są na {domain}.", + "dismissable_banner.dismiss": "Odrzuć", "dismissable_banner.explore_links": "Te wiadomości obecnie są komentowane przez osoby z tego serwera i pozostałych w zdecentralizowanej sieci.", "dismissable_banner.explore_statuses": "Obecnie te wpisy z tego serwera i pozostałych serwerów w zdecentralizowanej sieci zyskują popularność na tym serwerze.", "dismissable_banner.explore_tags": "Te hasztagi obecnie zyskują popularność wśród osób z tego serwera i pozostałych w zdecentralizowanej sieci.", "dismissable_banner.public_timeline": "Są to najnowsze publiczne wpisy osób w serwisie społecznościowym, które obserwują ludzie w serwisie {domain}.", "domain_block_modal.block": "Blokuj serwer", "domain_block_modal.block_account_instead": "Zamiast tego zablokuj @{name}", - "domain_block_modal.they_can_interact_with_old_posts": "Ludzie z tego serwera mogą wchodzić w interakcje z Twoimi starymi wpisami.", - "domain_block_modal.they_cant_follow": "Nikt z tego serwera nie może Cię obserwować.", - "domain_block_modal.they_wont_know": "Użytkownik nie dowie się, że został zablokowany.", + "domain_block_modal.they_can_interact_with_old_posts": "Osoby z tego serwera mogą wchodzić w interakcje z twoimi starymi wpisami.", + "domain_block_modal.they_cant_follow": "Nikt z tego serwera nie może cię obserwować.", + "domain_block_modal.they_wont_know": "Nie będą wiedzieć, że zostali zablokowani.", "domain_block_modal.title": "Zablokować domenę?", "domain_block_modal.you_will_lose_num_followers": "Utracisz {followersCount, plural, one {jednego obserwującego} other {{followersCountDisplay} obserwujących}} i {followingCount, plural, one {jedną osobę którą obserwujesz} few {{followingCountDisplay} osoby które obserwujesz} other {{followingCountDisplay} osób które obserwujesz}}.", - "domain_block_modal.you_will_lose_relationships": "Utracisz wszystkich obserwujących z tego serwera i wszystkie osoby które obserwujesz na tym serwerze.", - "domain_block_modal.you_wont_see_posts": "Nie zobaczysz postów ani powiadomień od użytkowników na tym serwerze.", - "domain_pill.activitypub_lets_connect": "Pozwala połączyć się z ludźmi na Mastodonie, jak i na innych serwisach społecznościowych.", - "domain_pill.activitypub_like_language": "ActivityPub jest językiem używanym przez Mastodon do wymiany danych z innymi serwisami społecznościowymi.", + "domain_block_modal.you_will_lose_relationships": "Utracisz wszystkich obserwujących i obserwowanych z tego serwera.", + "domain_block_modal.you_wont_see_posts": "Nie zobaczysz wpisów ani powiadomień od osób z tego serwera.", + "domain_pill.activitypub_lets_connect": "Umożliwia komunikację i interakcję z innymi nie tylko na Mastodon, ale także w innych aplikacjach.", + "domain_pill.activitypub_like_language": "ActivityPub jest jak język, którym Mastodon komunikuje się z innymi sieciami społecznościowymi.", "domain_pill.server": "Serwer", - "domain_pill.their_handle": "Uchwyt:", - "domain_pill.their_server": "Cyfrowy dom, w którym znajdują się wszystkie wpisy.", + "domain_pill.their_handle": "Nazwa:", + "domain_pill.their_server": "Cyfrowy dom wszystkich wpisów tej osoby.", "domain_pill.their_username": "Unikalny identyfikator na serwerze. Możliwe jest znalezienie użytkowników o tej samej nazwie użytkownika na różnych serwerach.", "domain_pill.username": "Nazwa użytkownika", - "domain_pill.whats_in_a_handle": "Co zawiera uchwyt użytkownika?", - "domain_pill.who_they_are": "Ponieważ uchwyty mówią kto jest kim i gdzie się znajduje, możesz wchodzić w interakcje z ludźmi korzystającymi z .", - "domain_pill.who_you_are": "Ponieważ Twój uchwyt mówi kim jesteś i gdzie się znajdujesz, inni mogą wchodzić z Tobą w interakcje korzystając z .", - "domain_pill.your_handle": "Twój uchwyt:", - "domain_pill.your_server": "Twój cyfrowy dom, w którym żyją wszystkie Twoje wpisy. Nie lubisz tego? Zmień serwer w dowolnym momencie i przenieś swoich obserwujących.", - "domain_pill.your_username": "Twój unikalny identyfikator na tym serwerze. Użytkownicy o tej samej nazwie mogą współistnieć na różnych serwerach.", - "embed.instructions": "Osadź ten wpis na swojej stronie wklejając poniższy kod.", - "embed.preview": "Będzie to wyglądać tak:", + "domain_pill.whats_in_a_handle": "Z czego składa się nazwa?", + "domain_pill.who_they_are": "Dzięki temu, że nazwy wskazują, kim ktoś jest i gdzie się znajduje, możesz wchodzić w interakcje z innymi z różnych .", + "domain_pill.who_you_are": "Dzięki temu, że twoja nazwa wskazuje, kim jesteś i gdzie się znajdujesz, inni mogą wchodzić z tobą w interakcje w różnych .", + "domain_pill.your_handle": "Twoja nazwa:", + "domain_pill.your_server": "Twój cyfrowy dom wszystkich twoich wpisów. Nie podoba ci się ten serwer? Przenieś się na inny w dowolnym momencie i zabierz ze sobą swoich obserwujących.", + "domain_pill.your_username": "Twój unikalny identyfikator na tym serwerze. Możliwe jest znalezienie osób z tą samą nazwą na innych serwerach.", + "embed.instructions": "Umieść ten wpis na swojej stronie, kopiując poniższy kod.", + "embed.preview": "Tak to będzie wyglądać:", "emoji_button.activity": "Aktywność", "emoji_button.clear": "Wyczyść", "emoji_button.custom": "Niestandardowe", @@ -255,83 +256,83 @@ "emoji_button.search_results": "Wyniki wyszukiwania", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Podróże i miejsca", - "empty_column.account_hides_collections": "Użytkownik postanowił nie udostępniać tych informacji", + "empty_column.account_hides_collections": "Ta osoba postanowiła nie udostępniać tych informacji", "empty_column.account_suspended": "Konto zawieszone", - "empty_column.account_timeline": "Brak wpisów tutaj!", + "empty_column.account_timeline": "Brak wpisów!", "empty_column.account_unavailable": "Profil niedostępny", - "empty_column.blocks": "Nie zablokowałeś(-aś) jeszcze żadnego użytkownika.", - "empty_column.bookmarked_statuses": "Nie dodałeś(-aś) żadnego wpisu do zakładek. Kiedy to zrobisz, pojawi się on tutaj.", - "empty_column.community": "Lokalna oś czasu jest pusta. Napisz coś publicznie, aby zagaić!", - "empty_column.direct": "Nie masz jeszcze żadnych prywatnych wzmianek. Kiedy je wyślesz lub otrzymasz, pojawią się tutaj.", + "empty_column.blocks": "Nie zablokowano jeszcze żadnych użytkowników.", + "empty_column.bookmarked_statuses": "Nie dodano jeszcze żadnego wpisu do zakładek. Gdy to zrobisz, pojawi się tutaj.", + "empty_column.community": "Lokalna oś czasu jest pusta. Opublikuj coś, by ruszyć z kopyta!", + "empty_column.direct": "Nie ma tu jeszcze żadnych wzmianek bezpośrednich. Gdy je wyślesz lub otrzymasz, pojawią się tutaj.", "empty_column.domain_blocks": "Brak zablokowanych domen.", - "empty_column.explore_statuses": "Nic nie jest w tej chwili popularne. Sprawdź później!", - "empty_column.favourited_statuses": "Nie dodałeś(-aś) żadnego wpisu do ulubionych. Kiedy to zrobisz, pojawi się on tutaj.", - "empty_column.favourites": "Nikt nie dodał tego wpisu do ulubionych. Gdy ktoś to zrobi, pojawi się tutaj.", - "empty_column.follow_requests": "Nie masz żadnych próśb o możliwość obserwacji. Kiedy ktoś utworzy ją, pojawi się tutaj.", - "empty_column.followed_tags": "Nie obserwujesz jeszcze żadnych hashtagów. Kiedy to zrobisz, pojawią się one tutaj.", - "empty_column.hashtag": "Nie ma wpisów oznaczonych tym hasztagiem. Możesz napisać pierwszy(-a).", - "empty_column.home": "Nie obserwujesz nikogo. Odwiedź globalną oś czasu lub użyj wyszukiwarki, aby znaleźć interesujące Cię profile.", - "empty_column.list": "Nie ma nic na tej liście. Kiedy członkowie listy dodadzą nowe wpisy, pojawia się one tutaj.", + "empty_column.explore_statuses": "Nic nie cieszy się teraz popularnością. Sprawdź później!", + "empty_column.favourited_statuses": "Nie polubiono jeszcze żadnego wpisu. Gdy to zrobisz, pojawi się tutaj.", + "empty_column.favourites": "Nikt jeszcze nie polubił tego wpisu. Kiedy ktoś to zrobi, pojawi się tutaj.", + "empty_column.follow_requests": "Nie masz jeszcze żadnych próśb o obserwowanie. Gdy je otrzymasz, pojawią się tutaj.", + "empty_column.followed_tags": "Nie obserwujesz jeszcze żadnych hashtagów. Gdy to zrobisz, pojawią się tutaj.", + "empty_column.hashtag": "Nie ma jeszcze wpisów oznaczonych tym hasztagiem.", + "empty_column.home": "Twoja główna oś czasu jest pusta! Zaobserwuj więcej osób, aby coś zobaczyć.", + "empty_column.list": "Nie ma jeszcze nic na tej liście. Kiedy osoby z tej listy opublikują nowe wpisy, pojawią się tutaj.", "empty_column.lists": "Nie masz żadnych list. Kiedy utworzysz jedną, pojawi się tutaj.", - "empty_column.mutes": "Nie wyciszyłeś(-aś) jeszcze żadnego użytkownika.", - "empty_column.notification_requests": "To wszystko – kiedy otrzymasz nowe powiadomienia, pokażą się tutaj zgodnie z twoimi ustawieniami.", - "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.", - "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić", - "error.unexpected_crash.explanation": "W związku z błędem w naszym kodzie lub braku kompatybilności przeglądarki, ta strona nie może być poprawnie wyświetlona.", - "error.unexpected_crash.explanation_addons": "Ta strona nie mogła zostać poprawnie wyświetlona. Może to być spowodowane dodatkiem do przeglądarki lub narzędziem do automatycznego tłumaczenia.", - "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, wciąż jesteś w stanie używać Mastodona przez inną przeglądarkę lub natywną aplikację.", - "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć lub odświeżyć stronę. Jeśli to nie pomoże, możesz wciąż korzystać z Mastodona w innej przeglądarce lub natywnej aplikacji.", + "empty_column.mutes": "Nie wyciszono jeszcze żadnego użytkownika.", + "empty_column.notification_requests": "Wszystko przeczytane! Gdy otrzymasz nowe powiadomienia, pojawią się tutaj zgodnie z twoimi ustawieniami.", + "empty_column.notifications": "Nie masz jeszcze żadnych powiadomień. Gdy inne osoby wejdą z tobą w interakcję, zobaczysz to tutaj.", + "empty_column.public": "Nic tu nie ma! Opublikuj coś lub obserwuj osoby z innych serwerów, aby coś zobaczyć", + "error.unexpected_crash.explanation": "Z powodu błędu w naszym kodzie lub niezgodności przeglądarki nie udało się poprawnie wyświetlić tej strony.", + "error.unexpected_crash.explanation_addons": "Nie udało się poprawnie wyświetlić tej strony. Ten błąd jest spowodowany zapewne przez wtyczkę do przeglądarki lub narzędzia do automatycznego tłumaczenia.", + "error.unexpected_crash.next_steps": "Spróbuj odświeżyć stronę. Jeśli to nie pomoże, nadal możesz korzystać z Mastodon za pośrednictwem innej przeglądarki lub aplikacji.", + "error.unexpected_crash.next_steps_addons": "Spróbuj je wyłączyć i odświeżyć stronę. Jeśli to nie pomoże, nadal możesz korzystać z Mastodon za pośrednictwem innej przeglądarki lub aplikacji.", "errors.unexpected_crash.copy_stacktrace": "Skopiuj stacktrace do schowka", "errors.unexpected_crash.report_issue": "Zgłoś problem", "explore.search_results": "Wyniki wyszukiwania", "explore.suggested_follows": "Ludzie", "explore.title": "Odkrywaj", "explore.trending_links": "Aktualności", - "explore.trending_statuses": "Posty", + "explore.trending_statuses": "Wpisy", "explore.trending_tags": "Hasztagi", - "filter_modal.added.context_mismatch_explanation": "Ta kategoria filtrów nie ma zastosowania do kontekstu, w którym uzyskałeś dostęp do tego wpisu. Jeśli chcesz, aby wpis został przefiltrowany również w tym kontekście, będziesz musiał edytować filtr.", - "filter_modal.added.context_mismatch_title": "Niezgodność kontekstów!", - "filter_modal.added.expired_explanation": "Ta kategoria filtra wygasła, będziesz musiał zmienić datę wygaśnięcia, aby ją zastosować.", - "filter_modal.added.expired_title": "Wygasły filtr!", - "filter_modal.added.review_and_configure": "Aby przejrzeć i skonfigurować tę kategorię filtrów, przejdź do {settings_link}.", - "filter_modal.added.review_and_configure_title": "Ustawienia filtra", + "filter_modal.added.context_mismatch_explanation": "To filtrowanie nie dotyczy kategorii, w której pojawił się ten wpis. Jeśli chcesz, aby wpis był filtrowany również w tym kontekście, musisz edytować ustawienia filtrowania.", + "filter_modal.added.context_mismatch_title": "Niewłaściwy kontekst!", + "filter_modal.added.expired_explanation": "Ta kategoria filtrowania wygasła, aby ją zastosować, należy zmienić datę wygaśnięcia.", + "filter_modal.added.expired_title": "Filtr wygasł!", + "filter_modal.added.review_and_configure": "Aby przejrzeć i skonfigurować tę kategorię filtrowania, przejdź do {settings_link}.", + "filter_modal.added.review_and_configure_title": "Ustawienia filtrowania", "filter_modal.added.settings_link": "strona ustawień", - "filter_modal.added.short_explanation": "Ten wpis został dodany do następującej kategorii filtrów: {title}.", - "filter_modal.added.title": "Filtr dodany!", - "filter_modal.select_filter.context_mismatch": "nie dotyczy tego kontekstu", + "filter_modal.added.short_explanation": "Ten wpis został dodany do następującej kategorii filtrowania: {title}.", + "filter_modal.added.title": "Filtrowanie zostało dodane!", + "filter_modal.select_filter.context_mismatch": "nie ma zastosowania w tym kontekście", "filter_modal.select_filter.expired": "wygasły", "filter_modal.select_filter.prompt_new": "Nowa kategoria: {name}", "filter_modal.select_filter.search": "Szukaj lub utwórz", "filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową", - "filter_modal.select_filter.title": "Filtruj ten wpis", - "filter_modal.title.status": "Filtruj wpis", - "filter_warning.matches_filter": "Pasuje do filtra \"{title}\"", + "filter_modal.select_filter.title": "Odfiltruj ten wpis", + "filter_modal.title.status": "Odfiltruj wpis", + "filter_warning.matches_filter": "Odfiltrowane przez \"{title}\"", "filtered_notifications_banner.pending_requests": "Od {count, plural, =0 {żadnej osoby którą możesz znać} one {# osoby którą możesz znać} other {# osób które możesz znać}}", - "filtered_notifications_banner.title": "Powiadomienia filtrowane", + "filtered_notifications_banner.title": "Odfiltrowane powiadomienia", "firehose.all": "Wszystko", "firehose.local": "Ten serwer", "firehose.remote": "Inne serwery", - "follow_request.authorize": "Autoryzuj", + "follow_request.authorize": "Przyjmij", "follow_request.reject": "Odrzuć", - "follow_requests.unlocked_explanation": "Mimo że Twoje konto nie jest zablokowane, zespół {domain} uznał że możesz chcieć ręcznie przejrzeć prośby o możliwość obserwacji.", - "follow_suggestions.curated_suggestion": "Wybrane przez personel", + "follow_requests.unlocked_explanation": "Mimo że twoje konto nie jest zablokowane, administratorzy {domain} uznali, że możesz chcieć samodzielnie sprawdzić prośby o obserwowanie od tych osób.", + "follow_suggestions.curated_suggestion": "Wybrane przez redakcję", "follow_suggestions.dismiss": "Nie pokazuj ponownie", - "follow_suggestions.featured_longer": "Wybrane przez zespół {domain}", - "follow_suggestions.friends_of_friends_longer": "Popularni wśród ludzi których obserwujesz", - "follow_suggestions.hints.featured": "Ten profil został wybrany przez zespół {domain}.", - "follow_suggestions.hints.friends_of_friends": "Ten profil jest popularny w gronie użytkowników, których obserwujesz.", + "follow_suggestions.featured_longer": "Wybrane przez redakcję {domain}", + "follow_suggestions.friends_of_friends_longer": "Popularne wśród obserwowanych", + "follow_suggestions.hints.featured": "Ten profil został wybrany przez redakcję {domain}.", + "follow_suggestions.hints.friends_of_friends": "Ten profil jest popularny wśród obserwowanych.", "follow_suggestions.hints.most_followed": "Ten profil jest jednym z najczęściej obserwowanych na {domain}.", - "follow_suggestions.hints.most_interactions": "Ten profil otrzymuje dużo interakcji na {domain}.", - "follow_suggestions.hints.similar_to_recently_followed": "Ten profil jest podobny do profili ostatnio przez ciebie zaobserwowanych.", - "follow_suggestions.personalized_suggestion": "Sugestia spersonalizowana", - "follow_suggestions.popular_suggestion": "Sugestia popularna", - "follow_suggestions.popular_suggestion_longer": "Popularni na {domain}", - "follow_suggestions.similar_to_recently_followed_longer": "Podobne do ostatnio zaobserwowanych przez ciebie profilów", + "follow_suggestions.hints.most_interactions": "Ten profil cieszy się ostatnio dużym zainteresowaniem na {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ten profil jest podobny do ostatnio przez ciebie zaobserwowanych.", + "follow_suggestions.personalized_suggestion": "Spersonalizowana rekomendacja", + "follow_suggestions.popular_suggestion": "Popularna rekomendacja", + "follow_suggestions.popular_suggestion_longer": "Popularne na {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Podobne do ostatnio zaobserwowanych", "follow_suggestions.view_all": "Pokaż wszystkie", - "follow_suggestions.who_to_follow": "Kogo obserwować", + "follow_suggestions.who_to_follow": "Kogo warto obserwować", "followed_tags": "Obserwowane hasztagi", "footer.about": "O serwerze", - "footer.directory": "Katalog profilów", + "footer.directory": "Katalog profili", "footer.get_app": "Pobierz aplikację", "footer.invite": "Zaproś znajomych", "footer.keyboard_shortcuts": "Skróty klawiszowe", @@ -339,48 +340,48 @@ "footer.source_code": "Zobacz kod źródłowy", "footer.status": "Status", "generic.saved": "Zapisano", - "getting_started.heading": "Rozpocznij", + "getting_started.heading": "Pierwsze kroki", "hashtag.column_header.tag_mode.all": "i {additional}", "hashtag.column_header.tag_mode.any": "lub {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", - "hashtag.column_settings.select.no_options_message": "Nie odnaleziono sugestii", + "hashtag.column_settings.select.no_options_message": "Nie znaleziono żadnych rekomendacji", "hashtag.column_settings.select.placeholder": "Wprowadź hasztagi…", "hashtag.column_settings.tag_mode.all": "Wszystkie", "hashtag.column_settings.tag_mode.any": "Dowolne", "hashtag.column_settings.tag_mode.none": "Żadne", - "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "hashtag.counter_by_accounts": "{count, plural, one {{counter} uczestnik} few {{counter} uczestnicy} many {{counter} uczestników} other {{counter} uczestników}}", + "hashtag.column_settings.tag_toggle": "Uwzględnij dodatkowe tagi w tej kolumnie", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} osoba} few {{counter} osoby} many {{counter} osób} other {{counter} osób}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}}", - "hashtag.counter_by_uses_today": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}} z dzisiaj", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} wpis} few {{counter} wpisy} many {{counter} wpisów} other {{counter} wpisów}} dzisiaj", "hashtag.follow": "Obserwuj hasztag", "hashtag.unfollow": "Przestań obserwować hashtag", "hashtags.and_other": "…i {count, plural, other {jeszcze #}}", - "hints.profiles.followers_may_be_missing": "Może brakować niektórych obserwujących tego profilu.", - "hints.profiles.follows_may_be_missing": "Może brakować niektórych obserwowanych przez tego użytkownika.", - "hints.profiles.posts_may_be_missing": "Może brakować niektórych wpisów tego profilu.", - "hints.profiles.see_more_followers": "Zobacz wszystkich obserwujących na {domain}", - "hints.profiles.see_more_follows": "Zobacz wszystkich obserwowanych na {domain}", - "hints.profiles.see_more_posts": "Zobacz wszystkie wpisy na {domain}", - "hints.threads.replies_may_be_missing": "Może brakować odpowiedzi z innych serwerów.", - "hints.threads.see_more": "Zobacz wszystkie odpowiedzi na {domain}", + "hints.profiles.followers_may_be_missing": "Niektórzy obserwujący ten profil mogą być niewidoczni.", + "hints.profiles.follows_may_be_missing": "Niektórzy obserwowani mogą być niewidoczni.", + "hints.profiles.posts_may_be_missing": "Niektóre wpisy mogą być niewidoczne.", + "hints.profiles.see_more_followers": "Zobacz więcej obserwujących na {domain}", + "hints.profiles.see_more_follows": "Zobacz więcej obserwowanych na {domain}", + "hints.profiles.see_more_posts": "Zobacz więcej wpisów na {domain}", + "hints.threads.replies_may_be_missing": "Komentarze z innych serwerów mogą być niewidoczne.", + "hints.threads.see_more": "Zobacz więcej komentarzy na {domain}", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", "home.hide_announcements": "Ukryj ogłoszenia", - "home.pending_critical_update.body": "Zaktualizuj serwer jak tylko będzie to możliwe!", - "home.pending_critical_update.link": "Pokaż aktualizacje", + "home.pending_critical_update.body": "Prosimy o jak najszybszą aktualizację serwera Mastodon!", + "home.pending_critical_update.link": "Zobacz aktualizacje", "home.pending_critical_update.title": "Dostępna krytyczna aktualizacja bezpieczeństwa!", "home.show_announcements": "Pokaż ogłoszenia", - "ignore_notifications_modal.disclaimer": "Mastodon nie może poinformować innych użytkowników że ignorujesz ich powiadomienia. Ignorowanie powiadomień nie zapobieże wysyłaniu wpisów per se. ", - "ignore_notifications_modal.filter_instead": "Filtruj zamiast tego", - "ignore_notifications_modal.filter_to_act_users": "Dalej będziesz mieć możliwość przyjmować, odrzucać, i raportować użytkowników", - "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrowanie może ograniczyć pomyłki", - "ignore_notifications_modal.filter_to_review_separately": "Możesz osobno przejrzeć powiadomienia odfiltrowane", + "ignore_notifications_modal.disclaimer": "Mastodon nie informuje nikogo o zignorowaniu powiadomienia. Ignorowanie powiadomień nie zapobiegnie wysyłaniu samych wiadomości.", + "ignore_notifications_modal.filter_instead": "Zamiast tego odfiltruj", + "ignore_notifications_modal.filter_to_act_users": "Przyjmowanie, odrzucanie i zgłaszanie innych będzie nadal możliwe", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrowanie pomaga uniknąć ewentualnych pomyłek", + "ignore_notifications_modal.filter_to_review_separately": "Możesz sprawdzić każde odfiltrowane powiadomienie", "ignore_notifications_modal.ignore": "Ignoruj powiadomienia", - "ignore_notifications_modal.limited_accounts_title": "Ignoruj powiadomienia od kont moderowanych?", - "ignore_notifications_modal.new_accounts_title": "Ignoruj powiadomienia od nowych kont?", - "ignore_notifications_modal.not_followers_title": "Ignoruj powiadomienia od użytkowników którzy cię nie obserwują?", - "ignore_notifications_modal.not_following_title": "Ignoruj powiadomienia od użytkowników których nie obserwujesz?", - "ignore_notifications_modal.private_mentions_title": "Ignoruj powiadomienia o nieproszonych wzmiankach prywatnych?", + "ignore_notifications_modal.limited_accounts_title": "Ignorować powiadomienia z moderowanych kont?", + "ignore_notifications_modal.new_accounts_title": "Ignorować powiadomienia z nowych kont?", + "ignore_notifications_modal.not_followers_title": "Ignorować powiadomienia od osób, które cię nie obserwują?", + "ignore_notifications_modal.not_following_title": "Ignorować powiadomienia od osób, których nie obserwujesz?", + "ignore_notifications_modal.private_mentions_title": "Ignorować powiadomienia od niechcianych wzmianek bezpośrednich?", "interaction_modal.description.favourite": "Mając konto na Mastodonie, możesz dodawać wpisy do ulubionych by dać znać jego autorowi, że podoba Ci się ten wpis i zachować go na później.", "interaction_modal.description.follow": "Mając konto na Mastodonie, możesz śledzić {name} by widzieć jego wpisy na swojej głównej osi czasu.", "interaction_modal.description.reblog": "Mając konto na Mastodonie, możesz podbić ten wpis i udostępnić go Twoim obserwującym.", @@ -392,52 +393,52 @@ "interaction_modal.on_this_server": "Na tym serwerze", "interaction_modal.sign_in": "Nie jesteś zalogowany(-a) na tym serwerze. Gdzie masz konto?", "interaction_modal.sign_in_hint": "To strona na której się rejestrowałeś(-aś). Jeżeli nie pamiętasz, poszukaj mejla z przywitaniem. Możesz też wprowadzić pełną nazwę użytkownika, à la @Mastodon@mastodon.social!", - "interaction_modal.title.favourite": "Polub wpis użytkownika {name}", - "interaction_modal.title.follow": "Śledź {name}", + "interaction_modal.title.favourite": "Polub wpis {name}", + "interaction_modal.title.follow": "Obserwuj {name}", "interaction_modal.title.reblog": "Podbij wpis {name}", "interaction_modal.title.reply": "Odpowiedz na post {name}", "intervals.full.days": "{number, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}", "intervals.full.hours": "{number, plural, one {# godzina} few {# godziny} many {# godzin} other {# godzin}}", "intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minut} other {# minut}}", - "keyboard_shortcuts.back": "aby cofnąć się", - "keyboard_shortcuts.blocked": "aby przejść do listy zablokowanych użytkowników", - "keyboard_shortcuts.boost": "aby podbić wpis", - "keyboard_shortcuts.column": "aby przejść do wpisu z jednej z kolumn", - "keyboard_shortcuts.compose": "aby przejść do pola tworzenia wpisu", + "keyboard_shortcuts.back": "Wstecz", + "keyboard_shortcuts.blocked": "Otwórz listę zablokowanych", + "keyboard_shortcuts.boost": "Podbij wpis", + "keyboard_shortcuts.column": "Aktywuj kolumnę", + "keyboard_shortcuts.compose": "Aktywuj pole tekstowe", "keyboard_shortcuts.description": "Opis", - "keyboard_shortcuts.direct": "aby otworzyć kolumnę z wzmiankami prywatnymi", - "keyboard_shortcuts.down": "aby przejść na dół listy", - "keyboard_shortcuts.enter": "aby otworzyć wpis", + "keyboard_shortcuts.direct": "aby otworzyć kolumnę wzmianek bezpośrednich", + "keyboard_shortcuts.down": "Przesuń w dół na liście", + "keyboard_shortcuts.enter": "Otwórz wpis", "keyboard_shortcuts.favourite": "Polub wpis", - "keyboard_shortcuts.favourites": "Otwórz listę ulubionych wpisów", - "keyboard_shortcuts.federated": "aby otworzyć oś czasu federacji", + "keyboard_shortcuts.favourites": "Otwórz listę polubionych wpisów", + "keyboard_shortcuts.federated": "Otwórz globalną oś czasu", "keyboard_shortcuts.heading": "Skróty klawiszowe", - "keyboard_shortcuts.home": "aby otworzyć stronę główną", + "keyboard_shortcuts.home": "Otwórz stronę główną", "keyboard_shortcuts.hotkey": "Skrót klawiszowy", - "keyboard_shortcuts.legend": "aby wyświetlić tę legendę", - "keyboard_shortcuts.local": "aby otworzyć lokalną oś czasu", - "keyboard_shortcuts.mention": "aby wspomnieć o autorze", - "keyboard_shortcuts.muted": "aby przejść do listy wyciszonych użytkowników", - "keyboard_shortcuts.my_profile": "aby otworzyć własny profil", - "keyboard_shortcuts.notifications": "aby otworzyć kolumnę powiadomień", + "keyboard_shortcuts.legend": "Wyświetl skróty klawiszowe", + "keyboard_shortcuts.local": "Otwórz lokalną oś czasu", + "keyboard_shortcuts.mention": "Dodaj wzmiankę", + "keyboard_shortcuts.muted": "Otwórz listę wyciszonych", + "keyboard_shortcuts.my_profile": "Otwórz swój profil", + "keyboard_shortcuts.notifications": "Otwórz kolumnę powiadomień", "keyboard_shortcuts.open_media": "Otwórz multimedia", - "keyboard_shortcuts.pinned": "aby przejść do listy przypiętych wpisów", - "keyboard_shortcuts.profile": "aby przejść do profilu autora wpisu", - "keyboard_shortcuts.reply": "aby odpowiedzieć", - "keyboard_shortcuts.requests": "aby przejść do listy próśb o możliwość obserwacji", - "keyboard_shortcuts.search": "aby przejść do pola wyszukiwania", - "keyboard_shortcuts.spoilers": "aby pokazać/ukryć pole CW", - "keyboard_shortcuts.start": "aby otworzyć kolumnę „Rozpocznij”", - "keyboard_shortcuts.toggle_hidden": "aby wyświetlić lub ukryć wpis spod CW", - "keyboard_shortcuts.toggle_sensitivity": "Pokaż/ukryj multimedia", - "keyboard_shortcuts.toot": "Stwórz nowy post", - "keyboard_shortcuts.unfocus": "aby opuścić pole wyszukiwania/pisania", - "keyboard_shortcuts.up": "aby przejść na górę listy", + "keyboard_shortcuts.pinned": "Otwórz listę przypiętych wpisów", + "keyboard_shortcuts.profile": "Otwórz profil", + "keyboard_shortcuts.reply": "Skomentuj", + "keyboard_shortcuts.requests": "Otwórz listę próśb o obserwowanie", + "keyboard_shortcuts.search": "Aktywuj pole wyszukiwania", + "keyboard_shortcuts.spoilers": "Pokaż lub ukryj ostrzeżenia", + "keyboard_shortcuts.start": "Otwórz kolumnę \"Pierwsze kroki\"", + "keyboard_shortcuts.toggle_hidden": "Pokaż lub ukryj tekst z ostrzeżeniem", + "keyboard_shortcuts.toggle_sensitivity": "Pokaż lub ukryj multimedia", + "keyboard_shortcuts.toot": "Stwórz nowy wpis", + "keyboard_shortcuts.unfocus": "Opuść pole tekstowe", + "keyboard_shortcuts.up": "Przesuń w górę na liście", "lightbox.close": "Zamknij", "lightbox.next": "Następne", "lightbox.previous": "Poprzednie", - "lightbox.zoom_in": "Rozmiar rzeczywisty", - "lightbox.zoom_out": "Dopasuj", + "lightbox.zoom_in": "Powiększ do rzeczywistego rozmiaru", + "lightbox.zoom_out": "Powiększ, aby dopasować", "limited_account_hint.action": "Pokaż profil mimo to", "limited_account_hint.title": "Ten profil został ukryty przez moderatorów {domain}.", "link_preview.author": "{name}", @@ -451,183 +452,185 @@ "lists.exclusive": "Ukryj te posty w lokalnej osi czasu", "lists.new.create": "Utwórz listę", "lists.new.title_placeholder": "Wprowadź tytuł listy", - "lists.replies_policy.followed": "Dowolny obserwowany użytkownik", - "lists.replies_policy.list": "Członkowie listy", + "lists.replies_policy.followed": "Każdy obserwowany", + "lists.replies_policy.list": "Osoby na liście", "lists.replies_policy.none": "Nikt", "lists.replies_policy.title": "Pokazuj odpowiedzi dla:", "lists.search": "Szukaj wśród osób które obserwujesz", "lists.subheading": "Twoje listy", - "load_pending": "{count, plural, one {# nowa pozycja} other {nowe pozycje}}", - "loading_indicator.label": "Ładowanie…", + "load_pending": "{count, plural, one {# nowa} few {# nowe} many {# nowych} other {# nowych}}", + "loading_indicator.label": "Wczytywanie…", "media_gallery.hide": "Ukryj", "moved_to_account_banner.text": "Twoje konto {disabledAccount} jest obecnie wyłączone, ponieważ zostało przeniesione na {movedToAccount}.", - "mute_modal.hide_from_notifications": "Ukryj z powiadomień", + "mute_modal.hide_from_notifications": "Nie pokazuj w powiadomieniach", "mute_modal.hide_options": "Ukryj opcje", - "mute_modal.indefinite": "Do ręcznego usunięcia wyciszenia", + "mute_modal.indefinite": "Dopóki nie zmienię zdania", "mute_modal.show_options": "Pokaż opcje", - "mute_modal.they_can_mention_and_follow": "Użytkownik może Cię obserwować oraz dodawać wzmianki, ale Ty ich nie zobaczysz.", - "mute_modal.they_wont_know": "Użytkownik nie dowie się, że został wyciszony.", - "mute_modal.title": "Wyciszyć użytkownika?", - "mute_modal.you_wont_see_mentions": "Nie zobaczysz wpisów, które wspominają tego użytkownika.", - "mute_modal.you_wont_see_posts": "Użytkownik dalej będzie widzieć Twoje posty, ale Ty nie będziesz widzieć jego.", + "mute_modal.they_can_mention_and_follow": "Może cię wzmiankować i obserwować, ale ty tego nie zobaczysz.", + "mute_modal.they_wont_know": "Informacja o wyciszeniu nie będzie widoczna dla tej osoby.", + "mute_modal.title": "Wyciszyć?", + "mute_modal.you_wont_see_mentions": "Nie zobaczysz wpisów wzmiankujących tę osobę.", + "mute_modal.you_wont_see_posts": "Nie zobaczysz wpisów tej osoby, ale ona może widzieć twoje.", "navigation_bar.about": "O serwerze", "navigation_bar.administration": "Administracja", - "navigation_bar.advanced_interface": "Otwórz w zaawansowanym interfejsie użytkownika", - "navigation_bar.blocks": "Zablokowani użytkownicy", + "navigation_bar.advanced_interface": "Otwórz w widoku zaawansowanym", + "navigation_bar.blocks": "Zablokowani", "navigation_bar.bookmarks": "Zakładki", "navigation_bar.community_timeline": "Lokalna oś czasu", "navigation_bar.compose": "Utwórz nowy wpis", - "navigation_bar.direct": "Prywatne wzmianki", + "navigation_bar.direct": "Wzmianki bezpośrednie", "navigation_bar.discover": "Odkrywaj", - "navigation_bar.domain_blocks": "Ukryte domeny", + "navigation_bar.domain_blocks": "Zablokowane domeny", "navigation_bar.explore": "Odkrywaj", - "navigation_bar.favourites": "Ulubione", + "navigation_bar.favourites": "Polubione", "navigation_bar.filters": "Wyciszone słowa", - "navigation_bar.follow_requests": "Prośby o obserwację", + "navigation_bar.follow_requests": "Prośby o obserwowanie", "navigation_bar.followed_tags": "Obserwowane hasztagi", "navigation_bar.follows_and_followers": "Obserwowani i obserwujący", "navigation_bar.lists": "Listy", "navigation_bar.logout": "Wyloguj", "navigation_bar.moderation": "Moderacja", - "navigation_bar.mutes": "Wyciszeni użytkownicy", - "navigation_bar.opened_in_classic_interface": "Posty, konta i inne konkretne strony są otwierane domyślnie w klasycznym interfejsie sieciowym.", + "navigation_bar.mutes": "Wyciszeni", + "navigation_bar.opened_in_classic_interface": "Wpisy, konta i inne określone strony są domyślnie otwierane w widoku klasycznym.", "navigation_bar.personal": "Osobiste", "navigation_bar.pins": "Przypięte wpisy", - "navigation_bar.preferences": "Preferencje", + "navigation_bar.preferences": "Ustawienia", "navigation_bar.public_timeline": "Globalna oś czasu", "navigation_bar.search": "Szukaj", "navigation_bar.security": "Bezpieczeństwo", - "not_signed_in_indicator.not_signed_in": "Musisz się zalogować, aby uzyskać dostęp do tego zasobu.", + "not_signed_in_indicator.not_signed_in": "Zaloguj się, aby uzyskać dostęp.", "notification.admin.report": "{name} zgłosił {target}", "notification.admin.report_account": "{name} zgłosił(a) {count, plural, one {1 wpis} few {# wpisy} other {# wpisów}} z {target} w kategorii {category}", "notification.admin.report_account_other": "{name} zgłosił(a) {count, plural, one {1 wpis} few {# wpisy} other {# wpisów}} z {target}", "notification.admin.report_statuses": "{name} zgłosił(a) {target} w kategorii {category}", "notification.admin.report_statuses_other": "{name} zgłosił(a) {target}", - "notification.admin.sign_up": "Użytkownik {name} zarejestrował się", - "notification.admin.sign_up.name_and_others": "zarejestrował(-a) się {name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}}", - "notification.favourite": "{name} dodaje Twój wpis do ulubionych", - "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba polubiła twój wpis} few {# inne osoby polubiły twój wpis} other {# innych osób polubiło twój wpis}}", - "notification.follow": "{name} obserwuje Cię", - "notification.follow.name_and_others": "{name} i {count, plural, one {# inna osoba cię zaobserwowała} few {# inne osoby cię zaobserwowały} other {# innych osób cię zaobserwowało}}", + "notification.admin.sign_up": "{name} rejestruje się", + "notification.admin.sign_up.name_and_others": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} zarejestrowali się", + "notification.favourite": "{name} lubi twój wpis", + "notification.favourite.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} lubią twój wpis", + "notification.follow": "{name} obserwuje cię", + "notification.follow.name_and_others": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} zaobserwowali cię", "notification.follow_request": "{name} chce cię zaobserwować", - "notification.follow_request.name_and_others": "{name} i {count, plural, one {# inna osoba chce} few {# inne osoby chcą} other {# innych osób chce}} zaobserwować twój profil", + "notification.follow_request.name_and_others": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} chcą cię zaobserwować", "notification.label.mention": "Wzmianka", - "notification.label.private_mention": "Prywatna wzmianka", - "notification.label.private_reply": "Odpowiedź prywatna", - "notification.label.reply": "Odpowiedź", + "notification.label.private_mention": "Wzmianka bezpośrednia", + "notification.label.private_reply": "Komentarz bezpośredni", + "notification.label.reply": "Komentarz", "notification.mention": "Wzmianka", + "notification.mentioned_you": "{name} wzmiankuje cię", "notification.moderation-warning.learn_more": "Dowiedz się więcej", - "notification.moderation_warning": "Otrzymałeś/-łaś ostrzeżenie moderacyjne", - "notification.moderation_warning.action_delete_statuses": "Niektóre twoje wpisy zostały usunięte.", + "notification.moderation_warning": "Otrzymano ostrzeżenie", + "notification.moderation_warning.action_delete_statuses": "Usunięto niektóre z twoich wpisów.", "notification.moderation_warning.action_disable": "Twoje konto zostało wyłączone.", - "notification.moderation_warning.action_mark_statuses_as_sensitive": "Niektóre twoje wpisy zostały oznaczone jako wrażliwe.", - "notification.moderation_warning.action_none": "Twoje konto otrzymało ostrzeżenie moderacyjne.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Niektóre z twoich wpisów zostały oznaczone jako wrażliwe.", + "notification.moderation_warning.action_none": "Twoje konto otrzymało ostrzeżenie.", "notification.moderation_warning.action_sensitive": "Twoje wpisy będą od teraz oznaczane jako wrażliwe.", "notification.moderation_warning.action_silence": "Twoje konto zostało ograniczone.", "notification.moderation_warning.action_suspend": "Twoje konto zostało zawieszone.", - "notification.own_poll": "Twoje głosowanie zakończyło się", - "notification.poll": "Głosowanie, w którym brałeś(-aś) udział, zostało zakończone", + "notification.own_poll": "Twoja ankieta została zakończona", + "notification.poll": "Zakończyła się ankieta, w której głosowano", "notification.reblog": "Twój post został podbity przez {name}", - "notification.reblog.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba podbiła twój wpis} few {# inne osoby podbiły twój wpis} other {# innych osób podbiło twój wpis}}", - "notification.relationships_severance_event": "Utracone związki z {name}", - "notification.relationships_severance_event.account_suspension": "Administrator z {from} zawiesił {target}, więc nie dostaniesz wieści ani nie wejdziesz w interakcje z użytkownikami z tego serwera.", - "notification.relationships_severance_event.domain_block": "Administrator z {from} zablokował {target}, w tym {followersCount} z Twoich obserwujących i {followingCount, plural, one {# konto} other {# konta}} które obserwujesz.", + "notification.reblog.name_and_others_with_link": "{name} i {count, plural, one {# inna osoba} few {# inne osoby} other {# innych osób}} podbili twój wpis", + "notification.relationships_severance_event": "Utracono połączenie z {name}", + "notification.relationships_severance_event.account_suspension": "Administrator {from} zawiesił {target}, co oznacza, że nie możesz już otrzymywać aktualności ani wchodzić w interakcje z tą osobą.", + "notification.relationships_severance_event.domain_block": "Administrator {from} zablokował {target}, w tym {followersCount} twoich obserwujących i {followingCount, plural, one {# konto} few {# konta} other {# kont}}, które obserwujesz.", "notification.relationships_severance_event.learn_more": "Dowiedz się więcej", - "notification.relationships_severance_event.user_domain_block": "Zablokowałeś {target}, w tym {followersCount} z Twoich obserwujących i {followingCount, plural, one {# konto} other {# konta}} które obserwujesz.", + "notification.relationships_severance_event.user_domain_block": "Zablokowałeś {target}, w tym {followersCount} twoich obserwujących i {followingCount, plural, one {# konto} few {# konta} other {# kont}}, które obserwujesz.", "notification.status": "{name} opublikował(a) nowy wpis", "notification.update": "{name} edytował(a) post", "notification_requests.accept": "Akceptuj", - "notification_requests.accept_multiple": "Przyjmij {count, plural, one {# wniosek} few {# wnioski} other {# wniosków}} o powiadomienia…", - "notification_requests.confirm_accept_multiple.button": "Przyjmij {count, plural, one {wniosek} other {wnioski}} o powiadomienia", - "notification_requests.confirm_accept_multiple.message": "Na pewno przyjąć {count, plural, one {# wniosek o powiadomienie} few {# wnioski o powiadomienia} other {# wniosków o powiadomienia}}?", - "notification_requests.confirm_accept_multiple.title": "Przyjąć wnioski o powiadomienia?", - "notification_requests.confirm_dismiss_multiple.button": "Odrzuć {count, plural, one {wniosek} other {wnioski}} o powiadomienia", - "notification_requests.confirm_dismiss_multiple.message": "Na pewno odrzucić {count, plural, one {# wniosek o powiadomienie} few {# wnioski o powiadomienia} other {# wniosków o powiadomienia}}? Stracisz do {count, plural, one {niego} other {nich}} łatwy dostęp.", - "notification_requests.confirm_dismiss_multiple.title": "Odrzuć żądania powiadomień?", + "notification_requests.accept_multiple": "Przyjmij {count, plural, one {# prośbę} few {# prośby} other {# próśb}}...", + "notification_requests.confirm_accept_multiple.button": "Przyjmij {count, plural, one {# prośbę} few {# prośby} other {# próśb}}", + "notification_requests.confirm_accept_multiple.message": "Zamierzasz przyjąć {count, plural, one {# prośbę} few {# prośby} other {# próśb}}. Czy na pewno chcesz kontynuować?", + "notification_requests.confirm_accept_multiple.title": "Przyjąć prośby?", + "notification_requests.confirm_dismiss_multiple.button": "Odrzuć {count, plural, one {# prośbę} few {# prośby} other {# próśb}}", + "notification_requests.confirm_dismiss_multiple.message": "Zamierzasz odrzucić {count, plural, one {# prośbę} few {# prośby} other {# próśb}}. Stracisz do {count, plural, one {tego} other {tego}} łatwy dostęp. Czy na pewno chcesz kontynuować?", + "notification_requests.confirm_dismiss_multiple.title": "Odrzucić prośbę?", "notification_requests.dismiss": "Odrzuć", - "notification_requests.dismiss_multiple": "Odrzuć {count, plural, one {# wniosek} few {# wnioski} other {# wniosków}} o powiadomienia…", + "notification_requests.dismiss_multiple": "Odrzuć {count, plural, one {# prośbę} few {# prośby} other {# próśb}}...", "notification_requests.edit_selection": "Edytuj", "notification_requests.exit_selection": "Gotowe", - "notification_requests.explainer_for_limited_account": "Powiadomienia od tego konta zostały odfiltrowane bo to konto zostało ograniczone przez moderatora.", - "notification_requests.explainer_for_limited_remote_account": "Powiadomienia od tego konta zostały odfiltrowane bo to konto, albo serwer na którym się znajduje, zostało ograniczone przez moderatora.", - "notification_requests.maximize": "Zmaksymalizuj", - "notification_requests.minimize_banner": "Zminimalizuj baner powiadomień filtrowanych", + "notification_requests.explainer_for_limited_account": "Powiadomienia z tego konta zostały odfiltrowane, ponieważ konto zostało ograniczone przez moderatora.", + "notification_requests.explainer_for_limited_remote_account": "Powiadomienia z tego konta zostały odfiltrowane, ponieważ konto lub serwer zostały ograniczone przez moderatora.", + "notification_requests.maximize": "Maksymalizuj", + "notification_requests.minimize_banner": "Minimalizuj odfiltrowane powiadomienia", "notification_requests.notifications_from": "Powiadomienia od {name}", - "notification_requests.title": "Powiadomienia filtrowane", + "notification_requests.title": "Odfiltrowane powiadomienia", "notification_requests.view": "Wyświetl powiadomienia", "notifications.clear": "Wyczyść powiadomienia", - "notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?", + "notifications.clear_confirmation": "Czy na pewno chcesz trwale wyczyścić wszystkie powiadomienia?", "notifications.clear_title": "Wyczyścić powiadomienia?", "notifications.column_settings.admin.report": "Nowe zgłoszenia:", - "notifications.column_settings.admin.sign_up": "Nowe rejestracje:", + "notifications.column_settings.admin.sign_up": "Nowo zarejestrowani:", "notifications.column_settings.alert": "Powiadomienia na pulpicie", - "notifications.column_settings.favourite": "Ulubione:", + "notifications.column_settings.favourite": "Polubione:", "notifications.column_settings.filter_bar.advanced": "Wyświetl wszystkie kategorie", "notifications.column_settings.filter_bar.category": "Szybkie filtrowanie", "notifications.column_settings.follow": "Nowi obserwujący:", - "notifications.column_settings.follow_request": "Nowe prośby o możliwość obserwacji:", - "notifications.column_settings.mention": "Wspomnienia:", - "notifications.column_settings.poll": "Wyniki głosowania:", + "notifications.column_settings.follow_request": "Nowe prośby o obserwowanie:", + "notifications.column_settings.group": "Grupuj", + "notifications.column_settings.mention": "Wzmianki:", + "notifications.column_settings.poll": "Wyniki ankiety:", "notifications.column_settings.push": "Powiadomienia push", "notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.sound": "Odtwarzaj dźwięk", "notifications.column_settings.status": "Nowe wpisy:", "notifications.column_settings.unread_notifications.category": "Nieprzeczytane powiadomienia", - "notifications.column_settings.unread_notifications.highlight": "Podświetl nieprzeczytane powiadomienia", + "notifications.column_settings.unread_notifications.highlight": "Wyróżnij nieprzeczytane powiadomienia", "notifications.column_settings.update": "Edycje:", "notifications.filter.all": "Wszystkie", "notifications.filter.boosts": "Podbicia", - "notifications.filter.favourites": "Ulubione", + "notifications.filter.favourites": "Polubione", "notifications.filter.follows": "Obserwacje", - "notifications.filter.mentions": "Wspomnienia", - "notifications.filter.polls": "Wyniki głosowania", - "notifications.filter.statuses": "Aktualizacje od osób które obserwujesz", + "notifications.filter.mentions": "Wzmianki", + "notifications.filter.polls": "Wyniki ankiety", + "notifications.filter.statuses": "Aktualności od obserwowanych", "notifications.grant_permission": "Przyznaj uprawnienia.", "notifications.group": "{count, number} {count, plural, one {powiadomienie} few {powiadomienia} many {powiadomień} more {powiadomień}}", "notifications.mark_as_read": "Oznacz wszystkie powiadomienia jako przeczytane", - "notifications.permission_denied": "Powiadomienia na pulpicie nie są dostępne, ponieważ wcześniej nie udzielono uprawnień w przeglądarce", - "notifications.permission_denied_alert": "Powiadomienia na pulpicie nie mogą zostać włączone, ponieważ wcześniej odmówiono uprawnień", - "notifications.permission_required": "Powiadomienia na pulpicie nie są dostępne, ponieważ nie przyznano wymaganego uprawnienia.", - "notifications.policy.accept": "Zaakceptuj", - "notifications.policy.accept_hint": "Wyświetlaj w powiadomieniach", - "notifications.policy.drop": "Zignoruj", - "notifications.policy.drop_hint": "Usuń nieodzyskiwalnie.", + "notifications.permission_denied": "Powiadomienia na pulpicie są niedostępne z powodu wcześniejszego braku zgody", + "notifications.permission_denied_alert": "Nie można włączyć powiadomień na pulpicie, ponieważ wcześniej nie udzielono zgody", + "notifications.permission_required": "Powiadomienia na pulpicie są niedostępne, ponieważ nie przyznano wymaganych uprawnień.", + "notifications.policy.accept": "Akceptuj", + "notifications.policy.accept_hint": "Pokazuj w powiadomieniach", + "notifications.policy.drop": "Ignoruj", + "notifications.policy.drop_hint": "Usuń trwale", "notifications.policy.filter": "Odfiltruj", - "notifications.policy.filter_hint": "Wyślij do skrzynki powiadomień odfiltrowanych", + "notifications.policy.filter_hint": "Przenieś do odfiltrowanych powiadomień", "notifications.policy.filter_limited_accounts_hint": "Ograniczonych przez moderatorów serwera", "notifications.policy.filter_limited_accounts_title": "Kont zmoderowanych", - "notifications.policy.filter_new_accounts.hint": "Utworzone w ciągu {days, plural, one {ostatniego dnia} other {ostatnich # dni}}", - "notifications.policy.filter_new_accounts_title": "Nowe konta", - "notifications.policy.filter_not_followers_hint": "Zawierające osoby które obserwują cię krócej niż {days, plural, one {dzień} other {# dni}}", - "notifications.policy.filter_not_followers_title": "Ludzie, którzy cię nie obserwują", - "notifications.policy.filter_not_following_hint": "Aż ich ręcznie nie zatwierdzisz", - "notifications.policy.filter_not_following_title": "Ludzie, których nie obserwujesz", - "notifications.policy.filter_private_mentions_hint": "Odfiltrowane, chyba że są odpowiedzią na twoją własną wzmiankę, lub obserwujesz wysyłającego", - "notifications.policy.filter_private_mentions_title": "Nieproszone prywatne wzmianki", + "notifications.policy.filter_new_accounts.hint": "Utworzonych w ciągu {days, plural, one {ostatniego dnia} other {ostatnich # dni}}", + "notifications.policy.filter_new_accounts_title": "Nowych kont", + "notifications.policy.filter_not_followers_hint": "Uwzględniając osoby, które obserwują cię krócej niż {days, plural, one {# dzień} other {# dni}}", + "notifications.policy.filter_not_followers_title": "Osób, które cię nie obserwują", + "notifications.policy.filter_not_following_hint": "Do momentu zatwierdzenia", + "notifications.policy.filter_not_following_title": "Osób, których nie obserwujesz", + "notifications.policy.filter_private_mentions_hint": "Odfiltrowane, chyba że są odpowiedzią na wzmiankę od ciebie lub obserwujesz nadawcę", + "notifications.policy.filter_private_mentions_title": "Niechcianych wzmianek bezpośrednich", "notifications.policy.title": "Zarządzaj powiadomieniami od…", "notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie", - "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.", - "notifications_permission_banner.title": "Nie przegap niczego", + "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia na pulpicie. Możesz wybrać, które dokładnie typy interakcji generują powiadomienia na pulpicie za pomocą przycisku {icon} powyżej po ich włączeniu.", + "notifications_permission_banner.title": "Nigdy niczego nie przegapisz", "onboarding.action.back": "Zabierz mnie z powrotem", "onboarding.actions.back": "Zabierz mnie z powrotem", "onboarding.actions.go_to_explore": "Zobacz co się dzieje", "onboarding.actions.go_to_home": "Przejdź do swojego kanału głównego", "onboarding.compose.template": "Witaj #Mastodon!", - "onboarding.follows.empty": "Niestety w tej chwili nie można przedstawić żadnych wyników. Możesz spróbować wyszukać lub przeglądać stronę, aby znaleźć osoby do śledzenia, lub spróbować ponownie później.", + "onboarding.follows.empty": "Niestety, w tej chwili nie można nic wyświetlić. Możesz użyć wyszukiwania lub przeglądać stronę główną, aby znaleźć osoby, które chcesz obserwować, albo spróbuj ponownie później.", "onboarding.follows.lead": "Zarządasz swoim własnym kanałem. Im więcej ludzi śledzisz, tym bardziej aktywny i ciekawy będzie Twój kanał. Te profile mogą być dobrym punktem wyjścia— możesz przestać je obserwować w dowolnej chwili!", "onboarding.follows.title": "Popularne na Mastodonie", - "onboarding.profile.discoverable": "Spraw mój profil odkrywalnym", - "onboarding.profile.discoverable_hint": "Kiedy zapisujesz się do odkrywalności w Mastodonie, twoje wpisy mogą pokazywać się w wynikach wyszukiwania i trendach, a twój profil może być sugerowany użytkownikom o podobnych zainteresowaniach.", - "onboarding.profile.display_name": "Nazwa wyświetlana", + "onboarding.profile.discoverable": "Spraw, by mój profil był widoczny", + "onboarding.profile.discoverable_hint": "Gdy zdecydujesz się na włączenie widoczności na Mastodon, twoje wpisy mogą pojawiać się w wynikach wyszukiwania i aktualnościach, a twój profil może być polecany osobom o podobnych zainteresowaniach.", + "onboarding.profile.display_name": "Wyświetlana nazwa", "onboarding.profile.display_name_hint": "Twoje imię lub pseudonim…", "onboarding.profile.lead": "Możesz wypełnić te dane później w menu ustawień, gdzie dostępnych jest jeszcze więcej opcji.", - "onboarding.profile.note": "O mnie", - "onboarding.profile.note_hint": "Możesz @wspomnieć użytkowników albo #hasztagi…", + "onboarding.profile.note": "Opis", + "onboarding.profile.note_hint": "Możesz @wzmiankować innych lub dodawać #hashtagi…", "onboarding.profile.save_and_continue": "Zapisz i kontynuuj", "onboarding.profile.title": "Ustawienia profilu", "onboarding.profile.upload_avatar": "Dodaj zdjęcie profilowe", - "onboarding.profile.upload_header": "Dodaj banner profilu", + "onboarding.profile.upload_header": "Dodaj baner", "onboarding.share.lead": "Daj znać ludziom, jak mogą cię znaleźć na Mastodonie!", "onboarding.share.message": "Jestem {username} na #Mastodon! Śledź mnie tutaj {url}", "onboarding.share.next_steps": "Możliwe dalsze kroki:", @@ -647,28 +650,28 @@ "onboarding.tips.accounts_from_other_servers": "Czy wiesz? Ponieważ Mastodon jest zdecentralizowany, niektóre profile, z którymi się spotkasz, będą hostowane na serwerach innych niż twoje. A mimo to możesz z nimi bezproblemowo wchodzić w interakcje! Ich serwer jest w drugiej połowie ich nazwy użytkownika!", "onboarding.tips.migration": "Czy wiesz? Jeśli uważasz, że {domain} nie jest dla Ciebie dobrym wyborem na serwer w przyszłości, możesz przenieść się na inny serwer Mastodona bez utraty obserwujących. Możesz nawet hostować swój własny serwer!", "onboarding.tips.verification": "Czy wiesz? Możesz zweryfikować swoje konto, umieszczając link do profilu Mastodon na swojej własnej stronie internetowej, a następnie dodając stronę do swojego profilu. Żadne opłaty lub dokumenty nie są wymagane!", - "password_confirmation.exceeds_maxlength": "Potwierdzenie hasła przekracza maksymalną długość hasła", - "password_confirmation.mismatching": "Wprowadzone hasła różnią się od siebie", - "picture_in_picture.restore": "Odłóż", + "password_confirmation.exceeds_maxlength": "Długość potwierdzonego hasła przekracza maksymalną długość hasła", + "password_confirmation.mismatching": "Hasła nie są takie same", + "picture_in_picture.restore": "Powrót", "poll.closed": "Zamknięte", "poll.refresh": "Odśwież", - "poll.reveal": "Wyświetl wyniki", + "poll.reveal": "Zobacz wyniki", "poll.total_people": "{count, plural, one {# osoba} few {# osoby} many {# osób} other {# osób}}", "poll.total_votes": "{count, plural, one {# głos} few {# głosy} many {# głosów} other {# głosów}}", - "poll.vote": "Zagłosuj", - "poll.voted": "Zagłosowałeś_aś na tą odpowiedź", + "poll.vote": "Głosuj", + "poll.voted": "Wybrano tę odpowiedź", "poll.votes": "{votes, plural, one {# głos} few {# głosy} many {# głosów} other {# głosów}}", - "poll_button.add_poll": "Dodaj głosowanie", - "poll_button.remove_poll": "Usuń głosowanie", + "poll_button.add_poll": "Dodaj ankietę", + "poll_button.remove_poll": "Usuń ankietę", "privacy.change": "Dostosuj widoczność wpisów", - "privacy.direct.long": "Wszyscy wspomnieni w tym wpisie", - "privacy.direct.short": "Konkretni ludzie", - "privacy.private.long": "Tylko ci, którzy cię obserwują", + "privacy.direct.long": "Wszyscy wzmiankowani w tym wpisie", + "privacy.direct.short": "Wzmianki bezpośrednie", + "privacy.private.long": "Tylko obserwujący", "privacy.private.short": "Obserwujący", - "privacy.public.long": "Ktokolwiek na i poza Mastodonem", + "privacy.public.long": "Każdy na i poza Mastodon", "privacy.public.short": "Publiczny", - "privacy.unlisted.additional": "Taki sam jak \"Publiczny\", ale wpis nie pojawi się w kanałach na żywo, hasztagach, odkrywaniu, ani w wyszukiwaniu w Mastodonie, nawet jeżeli jest to włączone w ustawieniach konta.", - "privacy.unlisted.long": "Widoczne dla każdego, z wyłączeniem funkcji odkrywania", + "privacy.unlisted.additional": "Dostępny podobnie jak wpis publiczny, ale nie będzie widoczny w aktualnościach, hashtagach ani wyszukiwarce Mastodon, nawet jeśli twoje konto jest widoczne.", + "privacy.unlisted.long": "Niewidoczny w aktualnościach", "privacy.unlisted.short": "Niewidoczny", "privacy_policy.last_updated": "Data ostatniej aktualizacji: {date}", "privacy_policy.title": "Polityka prywatności", @@ -687,27 +690,27 @@ "relative_time.minutes": "{number} min.", "relative_time.seconds": "{number} s.", "relative_time.today": "dzisiaj", - "reply_indicator.attachments": "{count, plural, one {# załącznik} few {# załączniki} many {# załączników} other {# załączniku}}", + "reply_indicator.attachments": "{count, plural, one {# załącznik} few {# załączniki} many {# załączników} other {# załączników}}", "reply_indicator.cancel": "Anuluj", "reply_indicator.poll": "Ankieta", "report.block": "Zablokuj", - "report.block_explanation": "Nie zobaczysz ich wpisów. Nie będą mogli zobaczyć Twoich postów ani cię obserwować. Będą mogli domyślić się, że są zablokowani.", + "report.block_explanation": "Nie zobaczysz wpisów tej osoby, a ona twoich, ani nie będzie mogła cię zaobserwować. Informacja o zablokowaniu będzie widoczna.", "report.categories.legal": "Prawne", "report.categories.other": "Inne", "report.categories.spam": "Spam", "report.categories.violation": "Zawartość narusza co najmniej jedną zasadę serwera", "report.category.subtitle": "Wybierz najbardziej pasującą opcję", "report.category.title": "Powiedz, co się dzieje z tym {type}", - "report.category.title_account": "profil", - "report.category.title_status": "post", + "report.category.title_account": "profilem", + "report.category.title_status": "wpisem", "report.close": "Gotowe", - "report.comment.title": "Czy jest jeszcze coś, co uważasz, że powinniśmy wiedzieć?", - "report.forward": "Przekaż na {target}", - "report.forward_hint": "To konto znajduje się na innej instancji. Czy chcesz wysłać anonimową kopię zgłoszenia rnież na nią?", + "report.comment.title": "Czy jest coś jeszcze, co powinniśmy wiedzieć?", + "report.forward": "Prześlij do {target}", + "report.forward_hint": "Konto pochodzi z innego serwera. Czy chcesz również tam wysłać kopię zgłoszenia anonimowo?", "report.mute": "Wycisz", - "report.mute_explanation": "Nie zobaczysz ich wpisów. Mimo to będą mogli wciąż obserwować cię i widzieć twoje wpisy, ale nie będą widzieli, że są wyciszeni.", + "report.mute_explanation": "Nie zobaczysz wpisów tej osoby, ale ona nadal będzie mogła cię obserwować i zobaczyć twoje wpisy. Informacja o wyciszeniu nie będzie widoczna.", "report.next": "Dalej", - "report.placeholder": "Dodatkowe komentarze", + "report.placeholder": "Dodatkowe informacje", "report.reasons.dislike": "Nie podoba mi się to", "report.reasons.dislike_description": "Nie jest to coś, co chciałoby się zobaczyć", "report.reasons.legal": "To jest nielegalne", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index d1a3ecdaa7..d8a62d49c0 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -89,7 +89,7 @@ "announcement.announcement": "Comunicados", "attachments_list.unprocessed": "(não processado)", "audio.hide": "Ocultar áudio", - "block_modal.remote_users_caveat": "Pediremos ao servidor {domínio} que respeite sua decisão. No entanto, a conformidade não é garantida pois alguns servidores podem lidar com os blocos de maneira diferente. As postagens públicas ainda podem estar visíveis para usuários não logados.", + "block_modal.remote_users_caveat": "Pediremos ao servidor {domain} que respeite sua decisão. No entanto, a conformidade não é garantida, já que alguns servidores podem lidar com bloqueios de maneira diferente. As postagens públicas ainda podem estar visíveis para usuários não logados.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar mais", "block_modal.they_cant_mention": "Eles não podem mencionar ou seguir você.", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Deixar de seguir o usuário?", "content_warning.hide": "Ocultar post", "content_warning.show": "Mostrar mesmo assim", + "content_warning.show_more": "Mostrar mais", "conversation.delete": "Excluir conversa", "conversation.mark_as_read": "Marcar como lida", "conversation.open": "Ver conversa", @@ -216,12 +217,12 @@ "dismissable_banner.explore_statuses": "Estas são postagens de toda a rede social que estão ganhando tração hoje. Postagens mais recentes com mais impulsos e favoritos têm classificações mais altas.", "dismissable_banner.explore_tags": "Estas hashtags estão ganhando popularidade no momento entre as pessoas deste e de outros servidores da rede descentralizada.", "dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas na rede social que pessoas em {domain} seguem.", - "domain_block_modal.block": "Servidor de blocos.", - "domain_block_modal.block_account_instead": "Bloco @(nome)", + "domain_block_modal.block": "Bloquear servidor", + "domain_block_modal.block_account_instead": "Bloquear @{name}", "domain_block_modal.they_can_interact_with_old_posts": "Pessoas deste servidor podem interagir com suas publicações antigas.", "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode lhe seguir.", "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", - "domain_block_modal.title": "Dominio do bloco", + "domain_block_modal.title": "Bloquear domínio?", "domain_block_modal.you_will_lose_num_followers": "Você perderá {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} e {followingCount, plural, one {{followingCountDisplay} pessoa que você segue} other {{followingCountDisplay} pessoas que você segue}}.", "domain_block_modal.you_will_lose_relationships": "Você irá perder todos os seguidores e pessoas que você segue neste servidor.", "domain_block_modal.you_wont_see_posts": "Você não verá postagens ou notificações de usuários neste servidor.", @@ -232,9 +233,9 @@ "domain_pill.their_server": "Sua casa digital, onde ficam todas as suas postagens.", "domain_pill.their_username": "Seu identificador exclusivo em seu servidor. É possível encontrar usuários com o mesmo nome de usuário em servidores diferentes.", "domain_pill.username": "Nome de usuário", - "domain_pill.whats_in_a_handle": "O que há em uma alça?", - "domain_pill.who_they_are": "Como os identificadores indicam quem alguém é e onde está, você pode interagir com pessoas na web social de .", - "domain_pill.who_you_are": "Como seu identificador indica quem você é e onde está, as pessoas podem interagir com você nas redes sociais das .", + "domain_pill.whats_in_a_handle": "O que há em um identificador?", + "domain_pill.who_they_are": "Como os identificadores indicam quem alguém é e onde está, você pode interagir com pessoas na rede de .", + "domain_pill.who_you_are": "Como seu identificador indica quem você é e onde está, as pessoas podem interagir com você na rede de .", "domain_pill.your_handle": "Seu identificador:", "domain_pill.your_server": "Sua casa digital, onde ficam todas as suas postagens. Não gosta deste? Transfira servidores a qualquer momento e traga seus seguidores também.", "domain_pill.your_username": "Seu identificador exclusivo neste servidor. É possível encontrar usuários com o mesmo nome de usuário em servidores diferentes.", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Use uma categoria existente ou crie uma nova", "filter_modal.select_filter.title": "Filtrar esta publicação", "filter_modal.title.status": "Filtrar uma publicação", - "filter_warning.matches_filter": "Correspondente ao filtro “{title}”", + "filter_warning.matches_filter": "Corresponder filtro “{title}”", "filtered_notifications_banner.pending_requests": "Por {count, plural, =0 {no one} one {one person} other {# people}} que você talvez conheça", "filtered_notifications_banner.title": "Notificações filtradas", "firehose.all": "Tudo", @@ -437,6 +438,7 @@ "lightbox.next": "Próximo", "lightbox.previous": "Anterior", "lightbox.zoom_in": "Voltar para o tamanho real", + "lightbox.zoom_out": "Zoom para ajustar", "limited_account_hint.action": "Exibir perfil mesmo assim", "limited_account_hint.title": "Este perfil foi ocultado pelos moderadores do {domain}.", "link_preview.author": "Por {name}", @@ -507,7 +509,7 @@ "notification.favourite": "{name} favoritou sua publicação", "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# others}} favoritaram a publicação", "notification.follow": "{name} te seguiu", - "notification.follow.name_and_others": "{name} e {count, plural, one {# other} other {# outros}} seguiu você", + "notification.follow.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} seguiram você", "notification.follow_request": "{name} quer te seguir", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# other} other {# outros}} pediu para seguir você", "notification.label.mention": "Menção", @@ -515,6 +517,7 @@ "notification.label.private_reply": "Resposta privada", "notification.label.reply": "Resposta", "notification.mention": "Menção", + "notification.mentioned_you": "{name} te mencionou", "notification.moderation-warning.learn_more": "Aprender mais", "notification.moderation_warning": "Você recebeu um aviso de moderação", "notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.", @@ -565,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Barra de filtro rápido", "notifications.column_settings.follow": "Seguidores:", "notifications.column_settings.follow_request": "Seguidores pendentes:", + "notifications.column_settings.group": "Grupo", "notifications.column_settings.mention": "Menções:", "notifications.column_settings.poll": "Enquetes:", "notifications.column_settings.push": "Notificações push", @@ -614,13 +618,13 @@ "onboarding.actions.go_to_home": "Ir para sua página inicial", "onboarding.compose.template": "Olá #Mastodon!", "onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados agora. Você pode tentar usar a busca ou navegar na página de exploração para encontrar pessoas para seguir, ou tentar novamente mais tarde.", - "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 no Mastodon", + "onboarding.follows.lead": "Sua página inicial é a principal forma de explorar o Mastodon. Quanto mais pessoas você seguir, mais ativo e interessante ele será. Para começar, aqui estão algumas sugestões:", + "onboarding.follows.title": "Personalize sua página inicial", "onboarding.profile.discoverable": "Tornar meu perfil descobrível", "onboarding.profile.discoverable_hint": "Quando você aceita a capacidade de descoberta no Mastodon, suas postagens podem aparecer nos resultados de pesquisa e nas tendências, e seu perfil pode ser sugerido a pessoas com interesses similares aos seus.", "onboarding.profile.display_name": "Nome de exibição", "onboarding.profile.display_name_hint": "Seu nome completo ou apelido…", - "onboarding.profile.lead": "Você sempre pode completar isso mais tarde nas configurações, onde ainda mais opções de personalização estão disponíveis.", + "onboarding.profile.lead": "Você pode completar isso mais tarde nas configurações, onde ainda mais opções de personalização estão disponíveis.", "onboarding.profile.note": "Biografia", "onboarding.profile.note_hint": "Você pode @mencionar outras pessoas ou usar #hashtags…", "onboarding.profile.save_and_continue": "Salvar e continuar", @@ -628,21 +632,21 @@ "onboarding.profile.upload_avatar": "Enviar imagem de perfil", "onboarding.profile.upload_header": "Carregar cabeçalho do perfil", "onboarding.share.lead": "Deixe as pessoas saberem como elas podem te encontrar no Mastodon!", - "onboarding.share.message": "Eu sou {username} no #Mastodon! Venha me seguir em {url}", + "onboarding.share.message": "Eu sou {username} no #Mastodon! Me siga em {url}", "onboarding.share.next_steps": "Possíveis próximos passos:", "onboarding.share.title": "Compartilhe seu perfil", - "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.lead": "Agora você faz parte do Mastodon, uma plataforma de mídia social única e descentralizada, onde você — e não um algoritmo — define sua própria experiência. Vamos ajudá-lo a começar nessa nova fronteira social:", + "onboarding.start.skip": "Não precisa de ajuda para começar?", "onboarding.start.title": "Você conseguiu!", - "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": "Diga olá para o mundo.", + "onboarding.steps.follow_people.body": "Seguir pessoas interessantes é o que o Mastodon tem de melhor.", + "onboarding.steps.follow_people.title": "Personalize sua página inicial", + "onboarding.steps.publish_status.body": "Diga olá para o mundo com texto, fotos, videos ou enquetes {emoji}", "onboarding.steps.publish_status.title": "Crie sua primeira publicação", - "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", - "onboarding.tips.2fa": "Você sabia? Você pode proteger sua conta configurando a autenticação dupla nas configurações de conta. Ele funciona com qualquer aplicativo de autenticação de sua escolha, nenhum número de telefone é necessário!", + "onboarding.steps.setup_profile.body": "Aumente suas interações com um perfil completo.", + "onboarding.steps.setup_profile.title": "Personalize seu perfil", + "onboarding.steps.share_profile.body": "Deixe seus amigos saberem como encontrar você no Mastodon", + "onboarding.steps.share_profile.title": "Compartilhe seu perfil no Mastodon", + "onboarding.tips.2fa": "Você sabia? Você pode proteger sua conta configurando a autenticação de dois fatores nas configurações de conta. Ela funciona com qualquer aplicativo de autenticação de sua escolha, nenhum número de telefone é necessário!", "onboarding.tips.accounts_from_other_servers": "Você sabia? Como o Mastodon é descentralizado, alguns perfis que você encontrar serão hospedados em outros servidores que não os seus. E ainda assim você pode interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de usuário!", "onboarding.tips.migration": "Você sabia? Se você sente que {domain} não é uma boa escolha de servidor para você no futuro, você pode mudar para outro servidor do Mastodon sem perder seus seguidores. Você pode até mesmo hospedar seu próprio servidor!", "onboarding.tips.verification": "Você sabia? Você pode verificar sua conta colocando um link para o seu perfil do Mastodon no seu próprio site e adicionando o site ao seu perfil. Não são necessárias taxas ou documentos!", @@ -813,7 +817,7 @@ "status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.", "status.redraft": "Excluir e rascunhar", "status.remove_bookmark": "Remover do Salvos", - "status.replied_in_thread": "Respondido na discussão", + "status.replied_in_thread": "Respondido na conversa", "status.replied_to": "Em resposta a {name}", "status.reply": "Responder", "status.replyAll": "Responder a conversa", @@ -851,6 +855,11 @@ "upload_error.poll": "Mídias não podem ser anexadas em toots com enquetes.", "upload_form.audio_description": "Descrever para deficientes auditivos", "upload_form.description": "Descrever para deficientes visuais", + "upload_form.drag_and_drop.instructions": "Para pegar um anexo de mídia, pressione espaço ou enter. Enquanto arrastar, use as setas do teclado para mover o anexo de mídia em qualquer direção. Pressione espaço ou insira novamente para soltar o anexo de mídia em sua nova posição, ou pressione escape para cancelar.", + "upload_form.drag_and_drop.on_drag_cancel": "O arrastamento foi cancelado. O anexo da mídia {item} foi descartado.", + "upload_form.drag_and_drop.on_drag_end": "O anexo {item} foi removido.", + "upload_form.drag_and_drop.on_drag_over": "O anexo de mídia {item} foi movido.", + "upload_form.drag_and_drop.on_drag_start": "Foi coletado o anexo de mídia {item}.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Alterar miniatura", "upload_form.video_description": "Descrever para deficientes auditivos ou visuais", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 6be7e03b39..bd234c14d2 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -1,12 +1,12 @@ { "about.blocks": "Servidores moderados", "about.contact": "Contacto:", - "about.disclaimer": "Mastodon é um software livre, de código aberto e uma marca registada do Mastodon gGmbH.", + "about.disclaimer": "O Mastodon é um software livre, de código aberto e uma marca registada de Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Motivo não disponível", - "about.domain_blocks.preamble": "O Mastodon geralmente permite que veja e interaja com o conteúdo de utilizadores de qualquer outra instância no fediverso. Estas são as exceções desta instância em específico.", - "about.domain_blocks.silenced.explanation": "Normalmente não verá perfis e conteúdo deste servidor, a menos que os procure explicitamente ou opte por os seguir.", + "about.domain_blocks.preamble": "O Mastodon geralmente permite ver e interagir com o conteúdo de utilizadores de qualquer outra instância no fediverso. Estas são as exceções desta instância em específico.", + "about.domain_blocks.silenced.explanation": "Normalmente não verás perfis e conteúdos deste servidor, a não ser que os procures explicitamente ou optes por segui-los.", "about.domain_blocks.silenced.title": "Limitados", - "about.domain_blocks.suspended.explanation": "Nenhum dado deste servidor será processado, armazenado ou trocado, impossibilitando qualquer interação ou comunicação com os utilizadores dessas instâncias.", + "about.domain_blocks.suspended.explanation": "Nenhum dado deste servidor será processado, armazenado ou trocado, tornando impossível qualquer interação ou comunicação com os utilizadores a partir deste servidor.", "about.domain_blocks.suspended.title": "Suspensos", "about.not_available": "Esta informação não foi disponibilizada neste servidor.", "about.powered_by": "Rede social descentralizada baseada no {mastodon}", @@ -18,9 +18,9 @@ "account.block": "Bloquear @{name}", "account.block_domain": "Bloquear domínio {domain}", "account.block_short": "Bloquear", - "account.blocked": "Bloqueado(a)", + "account.blocked": "Bloqueado", "account.cancel_follow_request": "Retirar pedido para seguir", - "account.copy": "Copiar hiperligação para o perfil", + "account.copy": "Copiar hiperligação do perfil", "account.direct": "Mencionar @{name} em privado", "account.disable_notifications": "Parar de me notificar das publicações de @{name}", "account.domain_blocked": "Domínio bloqueado", @@ -29,9 +29,9 @@ "account.endorse": "Destacar no perfil", "account.featured_tags.last_status_at": "Última publicação em {date}", "account.featured_tags.last_status_never": "Sem publicações", - "account.featured_tags.title": "#Etiquetas destacadas por {name}", + "account.featured_tags.title": "Etiquetas destacadas por {name}", "account.follow": "Seguir", - "account.follow_back": "Seguir de volta", + "account.follow_back": "Seguir também", "account.followers": "Seguidores", "account.followers.empty": "Ainda ninguém segue este utilizador.", "account.followers_counter": "{count, plural, one {{counter} seguidor} other {{counter} seguidores}}", @@ -39,39 +39,39 @@ "account.following_counter": "{count, plural, one {A seguir {counter}} other {A seguir {counter}}}", "account.follows.empty": "Este utilizador ainda não segue ninguém.", "account.go_to_profile": "Ir para o perfil", - "account.hide_reblogs": "Esconder partilhas de @{name}", + "account.hide_reblogs": "Esconder partilhas impulsionadas de @{name}", "account.in_memoriam": "Em Memória.", "account.joined_short": "Juntou-se a", - "account.languages": "Alterar línguas subscritas", + "account.languages": "Alterar idiomas subscritos", "account.link_verified_on": "O proprietário desta hiperligação foi verificado em {date}", "account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem o pode seguir.", - "account.media": "Média", + "account.media": "Multimédia", "account.mention": "Mencionar @{name}", "account.moved_to": "{name} indicou que a sua nova conta agora é:", - "account.mute": "Silenciar @{name}", - "account.mute_notifications_short": "Silenciar notificações", - "account.mute_short": "Silenciar", - "account.muted": "Silenciada", + "account.mute": "Ocultar @{name}", + "account.mute_notifications_short": "Ocultar notificações", + "account.mute_short": "Ocultar", + "account.muted": "Ocultada", "account.mutual": "Mútuo", "account.no_bio": "Nenhuma descrição fornecida.", "account.open_original_page": "Abrir a página original", "account.posts": "Publicações", "account.posts_with_replies": "Publicações e respostas", "account.report": "Denunciar @{name}", - "account.requested": "A aguardar aprovação. Clique para cancelar o pedido para seguir", - "account.requested_follow": "{name} pediu para segui-lo", + "account.requested": "A aguardar aprovação. Clica para cancelar o pedido para seguir", + "account.requested_follow": "{name} pediu para seguir-te", "account.share": "Partilhar o perfil @{name}", - "account.show_reblogs": "Mostrar partilhas de @{name}", + "account.show_reblogs": "Mostrar partilhas impulsionadas de @{name}", "account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", "account.unblock": "Desbloquear @{name}", "account.unblock_domain": "Desbloquear o domínio {domain}", "account.unblock_short": "Desbloquear", "account.unendorse": "Não destacar no perfil", "account.unfollow": "Deixar de seguir", - "account.unmute": "Deixar de silenciar @{name}", - "account.unmute_notifications_short": "Parar de silenciar notificações", - "account.unmute_short": "Deixar de silenciar", - "account_note.placeholder": "Clique para adicionar nota", + "account.unmute": "Desocultar @{name}", + "account.unmute_notifications_short": "Desocultar notificações", + "account.unmute_short": "Desocultar", + "account_note.placeholder": "Clicar para adicionar nota", "admin.dashboard.daily_retention": "Taxa de retenção de utilizadores por dia após a inscrição", "admin.dashboard.monthly_retention": "Taxa de retenção de utilizadores por mês após a inscrição", "admin.dashboard.retention.average": "Média", @@ -81,59 +81,60 @@ "admin.impact_report.instance_followers": "Seguidores que os nossos utilizadores perderiam", "admin.impact_report.instance_follows": "Seguidores que os utilizadores deles perderiam", "admin.impact_report.title": "Resumo do impacto", - "alert.rate_limited.message": "Volte a tentar depois das {retry_time, time, medium}.", + "alert.rate_limited.message": "Volta a tentar depois das {retry_time, time, medium}.", "alert.rate_limited.title": "Limite de tentativas", "alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.title": "Bolas!", - "announcement.announcement": "Anúncio", + "alt_text_badge.title": "Texto descritivo", + "announcement.announcement": "Mensagem de manutenção", "attachments_list.unprocessed": "(não processado)", "audio.hide": "Ocultar áudio", - "block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a sua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As mensagens públicas podem continuar a ser visíveis para utilizadores não autenticados.", + "block_modal.remote_users_caveat": "Vamos pedir ao servidor {domain} para respeitar a tua decisão. No entanto, não é garantido o seu cumprimento, uma vez que alguns servidores podem tratar os bloqueios de forma diferente. As publicações públicas podem continuar a ser visíveis para utilizadores não autenticados.", "block_modal.show_less": "Mostrar menos", "block_modal.show_more": "Mostrar mais", - "block_modal.they_cant_mention": "Eles não o podem mencionar ou seguir.", - "block_modal.they_cant_see_posts": "Eles não podem ver as suas publicações e você não verá as deles.", - "block_modal.they_will_know": "Eles podem ver que estão bloqueados.", + "block_modal.they_cant_mention": "Ele não te pode mencionar nem seguir.", + "block_modal.they_cant_see_posts": "Não verás as publicações dele e ele não poderá ver as tuas publicações.", + "block_modal.they_will_know": "Ele pode ver que o bloqueaste.", "block_modal.title": "Bloquear utilizador?", - "block_modal.you_wont_see_mentions": "Não verá publicações que os mencionem.", - "boost_modal.combo": "Pode clicar {combo} para não voltar a ver", + "block_modal.you_wont_see_mentions": "Não verás publicações que mencionem este utilizador.", + "boost_modal.combo": "Podes premir {combo} para não voltares a ver isto", "boost_modal.reblog": "Impulsionar a publicação?", - "boost_modal.undo_reblog": "Retirar post?", + "boost_modal.undo_reblog": "Não impulsionar a publicação?", "bundle_column_error.copy_stacktrace": "Copiar relatório de erros", "bundle_column_error.error.body": "A página solicitada não pôde ser sintetizada. Isto pode ser devido a uma falha no nosso código ou a um problema de compatibilidade com o navegador.", "bundle_column_error.error.title": "Ó, não!", - "bundle_column_error.network.body": "Houve um erro ao tentar carregar esta página. Isto pode ocorrer devido a um problema temporário com a sua conexão à internet ou a este servidor.", + "bundle_column_error.network.body": "Houve um erro ao tentar carregar esta página. Isto pode ocorrer devido a um problema temporário com a tua conexão à internet ou a este servidor.", "bundle_column_error.network.title": "Erro de rede", - "bundle_column_error.retry": "Tente de novo", + "bundle_column_error.retry": "Tenta de novo", "bundle_column_error.return": "Voltar à página inicial", - "bundle_column_error.routing.body": "A página solicitada não foi encontrada. Tem a certeza que o URL na barra de endereços está correto?", + "bundle_column_error.routing.body": "A página solicitada não foi encontrada. Tens a certeza que o URL na barra de endereços está correto?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Fechar", - "bundle_modal_error.message": "Algo de errado aconteceu enquanto este componente era carregado.", - "bundle_modal_error.retry": "Tente de novo", - "closed_registrations.other_server_instructions": "Visto que o Mastodon é descentralizado, pode criar uma conta noutro servidor e interagir com este na mesma.", + "bundle_modal_error.message": "Algo correu mal ao carregar este componente.", + "bundle_modal_error.retry": "Tenta de novo", + "closed_registrations.other_server_instructions": "Visto que o Mastodon é descentralizado, podes criar uma conta noutro servidor e interagir com este na mesma.", "closed_registrations_modal.description": "Neste momento não é possível criar uma conta em {domain}, mas lembramos que não é preciso ter uma conta especificamente em {domain} para usar o Mastodon.", "closed_registrations_modal.find_another_server": "Procurar outro servidor", - "closed_registrations_modal.preamble": "O Mastodon é descentralizado, por isso não importa onde a sua conta é criada, pois continuará a poder acompanhar e interagir com qualquer um neste servidor. Pode até alojar o seu próprio servidor!", - "closed_registrations_modal.title": "Inscrevendo-se no Mastodon", + "closed_registrations_modal.preamble": "O Mastodon é descentralizado, por isso não importa onde a tua conta é criada, pois continuarás a poder acompanhar e interagir com qualquer um neste servidor. Podes até alojar o teu próprio servidor!", + "closed_registrations_modal.title": "Criar uma conta no Mastodon", "column.about": "Sobre", - "column.blocks": "Utilizadores Bloqueados", + "column.blocks": "Utilizadores bloqueados", "column.bookmarks": "Marcadores", "column.community": "Cronologia local", "column.direct": "Menções privadas", "column.directory": "Explorar perfis", "column.domain_blocks": "Domínios bloqueados", "column.favourites": "Favoritos", - "column.firehose": "Cronologias", - "column.follow_requests": "Seguidores pendentes", + "column.firehose": "Cronologias em tempo real", + "column.follow_requests": "Pedidos de seguidores", "column.home": "Início", "column.lists": "Listas", - "column.mutes": "Utilizadores silenciados", + "column.mutes": "Utilizadores ocultados", "column.notifications": "Notificações", "column.pins": "Publicações afixadas", "column.public": "Cronologia federada", - "column_back_button.label": "Retroceder", - "column_header.hide_settings": "Esconder configurações", + "column_back_button.label": "Voltar", + "column_header.hide_settings": "Ocultar configurações", "column_header.moveLeft_settings": "Mover coluna para a esquerda", "column_header.moveRight_settings": "Mover coluna para a direita", "column_header.pin": "Afixar", @@ -141,23 +142,23 @@ "column_header.unpin": "Desafixar", "column_subheading.settings": "Configurações", "community.column_settings.local_only": "Apenas local", - "community.column_settings.media_only": "Apenas média", + "community.column_settings.media_only": "Apenas multimédia", "community.column_settings.remote_only": "Apenas remoto", "compose.language.change": "Alterar idioma", "compose.language.search": "Pesquisar idiomas...", "compose.published.body": "Publicado.", "compose.published.open": "Abrir", "compose.saved.body": "Publicação guardada.", - "compose_form.direct_message_warning_learn_more": "Conhecer mais", - "compose_form.encryption_warning": "As publicações no Mastodon não são criptografadas de ponta a ponta. Não partilhe nenhuma informação sensível através do Mastodon.", + "compose_form.direct_message_warning_learn_more": "Saber mais", + "compose_form.encryption_warning": "As publicações no Mastodon não são encriptadas de ponta a ponta. Não partilhes qualquer informação sensível através do Mastodon.", "compose_form.hashtag_warning": "Esta publicação não será listada em qualquer etiqueta, pois não é pública. Apenas as publicações públicas podem ser pesquisadas por etiquetas.", - "compose_form.lock_disclaimer": "A sua conta não é {locked}. Qualquer pessoa pode segui-lo e ver as publicações direcionadas apenas a seguidores.", + "compose_form.lock_disclaimer": "A tua conta não está {locked}. Qualquer pessoa pode seguir-te para ver as tuas publicações destinadas apenas aos teus seguidores.", "compose_form.lock_disclaimer.lock": "fechada", - "compose_form.placeholder": "Em que está a pensar?", + "compose_form.placeholder": "Em que estás a pensar?", "compose_form.poll.duration": "Duração da sondagem", "compose_form.poll.multiple": "Escolha múltipla", "compose_form.poll.option_placeholder": "Opção {number}", - "compose_form.poll.single": "Escolha uma", + "compose_form.poll.single": "Escolhe uma", "compose_form.poll.switch_to_multiple": "Alterar a sondagem para permitir várias respostas", "compose_form.poll.switch_to_single": "Alterar a sondagem para permitir uma única resposta", "compose_form.poll.type": "Estilo", @@ -165,37 +166,38 @@ "compose_form.publish_form": "Nova publicação", "compose_form.reply": "Responder", "compose_form.save_changes": "Atualizar", - "compose_form.spoiler.marked": "Texto escondido atrás de aviso", - "compose_form.spoiler.unmarked": "Juntar um aviso de conteúdo", + "compose_form.spoiler.marked": "Remover aviso de conteúdo", + "compose_form.spoiler.unmarked": "Adicionar aviso de conteúdo", "compose_form.spoiler_placeholder": "Aviso de conteúdo (opcional)", "confirmation_modal.cancel": "Cancelar", "confirmations.block.confirm": "Bloquear", "confirmations.delete.confirm": "Eliminar", - "confirmations.delete.message": "De certeza que quer eliminar esta publicação?", + "confirmations.delete.message": "De certeza que queres eliminar esta publicação?", "confirmations.delete.title": "Eliminar publicação?", "confirmations.delete_list.confirm": "Eliminar", - "confirmations.delete_list.message": "Tens a certeza de que deseja eliminar permanentemente esta lista?", + "confirmations.delete_list.message": "Tens a certeza de que desejas eliminar permanentemente esta lista?", "confirmations.delete_list.title": "Eliminar lista?", "confirmations.discard_edit_media.confirm": "Descartar", - "confirmations.discard_edit_media.message": "Tem alterações por guardar na descrição ou pré-visualização do conteúdo. Descartar mesmo assim?", + "confirmations.discard_edit_media.message": "Tens alterações por guardar na descrição da multimédia ou pré-visualização do conteúdo. Descartar mesmo assim?", "confirmations.edit.confirm": "Editar", - "confirmations.edit.message": "Editar agora irá sobrescrever a mensagem que está a compor. Tem a certeza de que deseja continuar?", - "confirmations.edit.title": "Sobrescrever publicação?", + "confirmations.edit.message": "Editar agora irás substituir a mensagem que estás a compor. Tens a certeza de que desejas continuar?", + "confirmations.edit.title": "Substituir publicação?", "confirmations.logout.confirm": "Terminar sessão", - "confirmations.logout.message": "Tem a certeza de que quer terminar a sessão?", + "confirmations.logout.message": "Tens a certeza de que queres terminar a sessão?", "confirmations.logout.title": "Terminar sessão?", - "confirmations.mute.confirm": "Silenciar", - "confirmations.redraft.confirm": "Eliminar & reescrever", - "confirmations.redraft.message": "Tem a certeza de que quer eliminar e reescrever esta publicação? Os favoritos e partilhas perder-se-ão e as respostas à publicação original ficarão órfãs.", + "confirmations.mute.confirm": "Ocultar", + "confirmations.redraft.confirm": "Eliminar e reescrever", + "confirmations.redraft.message": "Tens a certeza de que queres eliminar e tornar a escrever esta publicação? Os favoritos e as publicações impulsionadas perder-se-ão e as respostas à publicação original ficarão órfãs.", "confirmations.redraft.title": "Eliminar e reescrever publicação?", "confirmations.reply.confirm": "Responder", - "confirmations.reply.message": "Se responder agora, a mensagem que está a escrever será substituída. Tem a certeza que pretende continuar?", - "confirmations.reply.title": "Sobrescrever publicação?", + "confirmations.reply.message": "Se responderes agora, a mensagem que estás a escrever será substituída. Tens a certeza que pretendes continuar?", + "confirmations.reply.title": "Substituir publicação?", "confirmations.unfollow.confirm": "Deixar de seguir", "confirmations.unfollow.message": "De certeza que queres deixar de seguir {name}?", - "confirmations.unfollow.title": "Deixar de seguir utilizador?", + "confirmations.unfollow.title": "Deixar de seguir o utilizador?", "content_warning.hide": "Ocultar publicação", "content_warning.show": "Mostrar mesmo assim", + "content_warning.show_more": "Mostrar mais", "conversation.delete": "Eliminar conversa", "conversation.mark_as_read": "Marcar como lida", "conversation.open": "Ver conversa", @@ -205,80 +207,82 @@ "copypaste.copy_to_clipboard": "Copiar para a área de transferência", "directory.federated": "Do fediverso conhecido", "directory.local": "Apenas de {domain}", - "directory.new_arrivals": "Recém chegados", + "directory.new_arrivals": "Recém-chegados", "directory.recently_active": "Recentemente ativo", "disabled_account_banner.account_settings": "Definições da conta", - "disabled_account_banner.text": "A sua conta {disabledAccount} está presentemente desativada.", + "disabled_account_banner.text": "A tua conta {disabledAccount} está atualmente desativada.", "dismissable_banner.community_timeline": "Estas são as publicações públicas mais recentes de pessoas cujas contas são hospedadas por {domain}.", "dismissable_banner.dismiss": "Descartar", - "dismissable_banner.explore_links": "Essas histórias de notícias estão, no momento, a ser faladas por pessoas neste e noutros servidores da rede descentralizada.", - "dismissable_banner.explore_statuses": "Estas são publicações de toda a rede social que estão a ganhar popularidade atualmente. As mensagens mais recentes com mais partilhas e favoritos obtêm uma classificação mais elevada.", - "dismissable_banner.explore_tags": "Estas são hashtags que estão a ganhar força na rede social atualmente. As hashtags que são utilizadas por mais pessoas diferentes têm uma classificação mais elevada.", + "dismissable_banner.explore_links": "Estas histórias de notícias estão neste momento a serem faladas por pessoas neste e noutros servidores da rede descentralizada.", + "dismissable_banner.explore_statuses": "Estas são as publicações de toda a rede social que estão a ganhar força atualmente. As mensagens mais recentes com mais impulsos e favoritos têm uma classificação mais elevada.", + "dismissable_banner.explore_tags": "Estas são as etiquetas que estão a ganhar força na rede social atualmente. As etiquetas que são utilizadas por mais pessoas diferentes têm uma classificação mais elevada.", "dismissable_banner.public_timeline": "Estas são as publicações públicas mais recentes de pessoas na rede social que as pessoas em {domain} seguem.", "domain_block_modal.block": "Bloquear servidor", - "domain_block_modal.block_account_instead": "Bloquear @{name} em alternativa", - "domain_block_modal.they_can_interact_with_old_posts": "As pessoas deste servidor podem interagir com as suas publicações antigas.", - "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode segui-lo.", + "domain_block_modal.block_account_instead": "Em vez disso, bloquear @{name}", + "domain_block_modal.they_can_interact_with_old_posts": "As pessoas deste servidor podem interagir com as tuas publicações antigas.", + "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode seguir-te.", "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", "domain_block_modal.title": "Bloquear domínio?", - "domain_block_modal.you_wont_see_posts": "Não verá publicações ou notificações de utilizadores neste servidor.", - "domain_pill.activitypub_lets_connect": "Permite-lhe conectar e interagir com pessoas não só no Mastodon, mas também em diferentes aplicações sociais.", + "domain_block_modal.you_will_lose_num_followers": "Irás perder {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} e {followingCount, plural, one {{followingCountDisplay} pessoa que estás a seguir} other {{followingCountDisplay} pessoas que estás a seguir}}.", + "domain_block_modal.you_will_lose_relationships": "Irás perder todos os seguidores e pessoas que segues deste servidor.", + "domain_block_modal.you_wont_see_posts": "Não verás publicações ou notificações de utilizadores neste servidor.", + "domain_pill.activitypub_lets_connect": "Permite-te conectar e interagir com pessoas não só no Mastodon, mas também em diferentes aplicações sociais.", "domain_pill.activitypub_like_language": "O ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.", "domain_pill.server": "Servidor", - "domain_pill.their_handle": "O seu identificador:", - "domain_pill.their_server": "A sua casa digital, onde se encontram todas as suas publicações.", - "domain_pill.their_username": "O seu identificador único no seu servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.", + "domain_pill.their_handle": "O identificador dele:", + "domain_pill.their_server": "A casa digital deste utilizador, onde se encontram todas as suas publicações.", + "domain_pill.their_username": "O identificador único dele no seu servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em servidores diferentes.", "domain_pill.username": "Nome de utilizador", "domain_pill.whats_in_a_handle": "Em que consiste um identificador?", - "domain_pill.who_they_are": "Uma vez que os identificadores dizem quem é alguém e onde está, pode interagir com as pessoas através da rede social de .", - "domain_pill.who_you_are": "Uma vez que o seu identificador indica quem é e onde está, as pessoas podem interagir consigo através da rede social de .", - "domain_pill.your_handle": "O seu identificador:", - "domain_pill.your_server": "A sua casa digital, onde se encontram todas as suas publicações. Não gosta deste? Mude de servidor a qualquer momento e leve também os seus seguidores.", - "domain_pill.your_username": "O seu identificador único neste servidor. É possível encontrar utilizadores com o mesmo nome de utilizador em diferentes servidores.", - "embed.instructions": "Incorpore esta publicação no seu site copiando o código abaixo.", - "embed.preview": "Podes ver aqui como irá ficar:", + "domain_pill.who_they_are": "Uma vez que os identificadores dizem quem é alguém e onde está, podes interagir com as pessoas através da rede social de .", + "domain_pill.who_you_are": "Uma vez que o teu identificador indica quem és e onde estás, as pessoas podem interagir contigo através da rede social de .", + "domain_pill.your_handle": "O teu identificador:", + "domain_pill.your_server": "A tua casa digital, onde se encontram todas as tuas publicações. Não gostas deste? Muda de servidor a qualquer momento e leva também os teus seguidores.", + "domain_pill.your_username": "O teu identificador único neste servidor. É possível encontrares utilizadores com o mesmo nome de utilizador em diferentes servidores.", + "embed.instructions": "Incorpora esta publicação no teu site copiando o código abaixo.", + "embed.preview": "Eis o aspeto que terá:", "emoji_button.activity": "Atividade", "emoji_button.clear": "Limpar", - "emoji_button.custom": "Personalizar", + "emoji_button.custom": "Personalizados", "emoji_button.flags": "Bandeiras", - "emoji_button.food": "Comida & Bebida", - "emoji_button.label": "Inserir Emoji", + "emoji_button.food": "Comida e bebidas", + "emoji_button.label": "Inserir emoji", "emoji_button.nature": "Natureza", - "emoji_button.not_found": "Nenhum emoji correspondente encontrado", + "emoji_button.not_found": "Não foram encontrados emojis correspondentes", "emoji_button.objects": "Objetos", "emoji_button.people": "Pessoas", "emoji_button.recent": "Utilizados regularmente", "emoji_button.search": "Pesquisar...", "emoji_button.search_results": "Resultados da pesquisa", "emoji_button.symbols": "Símbolos", - "emoji_button.travel": "Viagens & Lugares", + "emoji_button.travel": "Viagens e lugares", "empty_column.account_hides_collections": "Este utilizador escolheu não disponibilizar esta informação", "empty_column.account_suspended": "Conta suspensa", "empty_column.account_timeline": "Sem publicações por aqui!", "empty_column.account_unavailable": "Perfil indisponível", - "empty_column.blocks": "Ainda não bloqueaste qualquer utilizador.", - "empty_column.bookmarked_statuses": "Ainda não tem nenhuma publicação marcada. Quando marcar uma, ela aparecerá aqui.", - "empty_column.community": "A cronologia local está vazia. Escreve algo público para começar!", - "empty_column.direct": "Ainda não tem qualquer menção privada. Quando enviar ou receber uma, ela irá aparecer aqui.", - "empty_column.domain_blocks": "Ainda não há qualquer domínio escondido.", - "empty_column.explore_statuses": "Nada é tendência neste momento. Volte mais tarde!", - "empty_column.favourited_statuses": "Ainda não assinalou qualquer publicação como favorita. Quando o fizer, aparecerá aqui.", - "empty_column.favourites": "Ainda ninguém assinalou esta publicação como favorita. Quando alguém o fizer, aparecerá aqui.", + "empty_column.blocks": "Ainda não bloqueaste nenhum utilizador.", + "empty_column.bookmarked_statuses": "Ainda não tens nenhuma publicação marcada. Quando marcares uma, ela aparecerá aqui.", + "empty_column.community": "A cronologia local está vazia. Escreve algo publicamente para começar!", + "empty_column.direct": "Ainda não tens qualquer menção privada. Quando enviares ou receberes uma, ela irá aparecer aqui.", + "empty_column.domain_blocks": "Ainda não há qualquer domínio bloqueado.", + "empty_column.explore_statuses": "Nada é tendência neste momento. Volta mais tarde!", + "empty_column.favourited_statuses": "Ainda não assinalaste qualquer publicação como favorita. Quando o fizeres, ela aparecerá aqui.", + "empty_column.favourites": "Ainda ninguém assinalou esta publicação como favorita. Quando alguém o fizer, ela aparecerá aqui.", "empty_column.follow_requests": "Ainda não tens nenhum pedido de seguidor. Quando receberes algum, ele irá aparecer aqui.", - "empty_column.followed_tags": "Ainda não segue nenhuma hashtag. Quando o fizer, ela aparecerá aqui.", - "empty_column.hashtag": "Não foram encontradas publicações com essa #etiqueta.", - "empty_column.home": "A sua linha cronológica inicial está vazia! Siga mais pessoas para a preencher.", - "empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.", - "empty_column.lists": "Ainda não tem qualquer lista. Quando criar uma, ela irá aparecer aqui.", - "empty_column.mutes": "Ainda não silenciaste qualquer utilizador.", - "empty_column.notification_requests": "Tudo limpo! Não há nada aqui. Quando você receber novas notificações, elas aparecerão aqui conforme as suas configurações.", - "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.", + "empty_column.followed_tags": "Ainda não segues nenhuma etiqueta. Quando o fizeres, ela aparecerá aqui.", + "empty_column.hashtag": "Não foram encontradas publicações com esta #etiqueta.", + "empty_column.home": "A tua linha cronológica inicial está vazia! Segue mais pessoas para a preencher.", + "empty_column.list": "Ainda não existem publicações nesta lista. Quando os membros desta lista fizerem novas publicações, elas aparecerão aqui.", + "empty_column.lists": "Ainda não tens listas. Quando criares uma, ela irá aparecer aqui.", + "empty_column.mutes": "Ainda não ocultaste nenhum utilizador.", + "empty_column.notification_requests": "Tudo limpo! Não há nada aqui. Quando receberes novas notificações, elas aparecerão aqui conforme as tuas configurações.", + "empty_column.notifications": "Ainda não tens quaisquer notificações. Quando outras pessoas interagirem contigo, verás isso aqui.", "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos", - "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a um problema de compatibilidade do navegador, esta página não pôde ser apresentada corretamente.", - "error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.", - "error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.", - "error.unexpected_crash.next_steps_addons": "Tente desativá-los e atualizar a página. Se isso não ajudar, poderá ainda ser possível utilizar o Mastodon através de um navegador diferente ou de uma aplicação nativa.", - "errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard", + "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a um problema de compatibilidade do navegador, esta página não pode ser apresentada corretamente.", + "error.unexpected_crash.explanation_addons": "Esta página não pode ser mostrada corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.", + "error.unexpected_crash.next_steps": "Tenta atualizar a página. Se isso não ajudar, podes usar o Mastodon através de um navegador diferente ou uma aplicação nativa.", + "error.unexpected_crash.next_steps_addons": "Tenta desativá-los e atualizar a página. Se isso não ajudar, poderá ainda ser possível utilizar o Mastodon através de um navegador diferente ou de uma aplicação nativa.", + "errors.unexpected_crash.copy_stacktrace": "Copiar o stacktrace para a área de transferência", "errors.unexpected_crash.report_issue": "Reportar problema", "explore.search_results": "Resultados da pesquisa", "explore.suggested_follows": "Pessoas", @@ -286,11 +290,11 @@ "explore.trending_links": "Notícias", "explore.trending_statuses": "Publicações", "explore.trending_tags": "#Etiquetas", - "filter_modal.added.context_mismatch_explanation": "Esta categoria de filtro não se aplica ao contexto em que acedeu a esta publicação. Se pretender que esta publicação seja filtrada também neste contexto, terá que editar o filtro.", - "filter_modal.added.context_mismatch_title": "Contexto incoerente!", - "filter_modal.added.expired_explanation": "Esta categoria de filtro expirou, necessita alterar a data de validade para que ele seja aplicado.", + "filter_modal.added.context_mismatch_explanation": "Esta categoria de filtro não se aplica ao contexto em que acedeste a esta publicação. Se pretenderes que esta publicação seja filtrada também neste contexto, terás que editar o filtro.", + "filter_modal.added.context_mismatch_title": "O contexto não coincide!", + "filter_modal.added.expired_explanation": "Esta categoria de filtro expirou, tens de alterar a data de validade para que ele seja aplicado.", "filter_modal.added.expired_title": "Filtro expirado!", - "filter_modal.added.review_and_configure": "Para rever e configurar mais detalhadamente esta categoria de filtro, vá a {settings_link}.", + "filter_modal.added.review_and_configure": "Para rever e configurar mais detalhadamente esta categoria de filtro, vai a {settings_link}.", "filter_modal.added.review_and_configure_title": "Definições do filtro", "filter_modal.added.settings_link": "página de definições", "filter_modal.added.short_explanation": "Esta publicação foi adicionada à seguinte categoria de filtro: {title}.", @@ -299,39 +303,39 @@ "filter_modal.select_filter.expired": "expirado", "filter_modal.select_filter.prompt_new": "Nova categoria: {name}", "filter_modal.select_filter.search": "Pesquisar ou criar", - "filter_modal.select_filter.subtitle": "Utilize uma categoria existente ou crie uma nova", + "filter_modal.select_filter.subtitle": "Utiliza uma categoria existente ou cria uma nova", "filter_modal.select_filter.title": "Filtrar esta publicação", "filter_modal.title.status": "Filtrar uma publicação", - "filter_warning.matches_filter": "Corresponde ao filtro “{title}”", - "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {ninguém} one {uma pessoa} other {# pessoas}} que pode conhecer", + "filter_warning.matches_filter": "Corresponde ao filtro “{title}”", + "filtered_notifications_banner.pending_requests": "De {count, plural, =0 {ninguém} one {uma pessoa} other {# pessoas}} que talvez conheças", "filtered_notifications_banner.title": "Notificações filtradas", "firehose.all": "Todas", "firehose.local": "Este servidor", "firehose.remote": "Outros servidores", "follow_request.authorize": "Autorizar", "follow_request.reject": "Rejeitar", - "follow_requests.unlocked_explanation": "Apesar de a sua não ser privada, a administração de {domain} pensa que poderá querer rever manualmente os pedidos de seguimento dessas contas.", - "follow_suggestions.curated_suggestion": "Escolha da equipe", + "follow_requests.unlocked_explanation": "Apesar da tua conta não ser privada, a administração de {domain} assinala que poderás querer rever manualmente os pedidos de seguimento destas contas.", + "follow_suggestions.curated_suggestion": "Escolha da equipa", "follow_suggestions.dismiss": "Não mostrar novamente", "follow_suggestions.featured_longer": "Escolhido a dedo pela equipa de {domain}", - "follow_suggestions.friends_of_friends_longer": "Popular entre as pessoas que segue", - "follow_suggestions.hints.featured": "Este perfil foi escolhido a dedo pela equipe {domain}.", - "follow_suggestions.hints.friends_of_friends": "Este perfil é popular entre as pessoas que você segue.", - "follow_suggestions.hints.most_followed": "Este perfil é um dos mais seguidos no {domain}.", - "follow_suggestions.hints.most_interactions": "Este perfil tem recebido recentemente muita atenção no {domain}.", - "follow_suggestions.hints.similar_to_recently_followed": "Este perfil é semelhante aos perfis que você seguiu mais recentemente.", + "follow_suggestions.friends_of_friends_longer": "Popular entre as pessoas que segues", + "follow_suggestions.hints.featured": "Este perfil foi escolhido a dedo pela equipa de {domain}.", + "follow_suggestions.hints.friends_of_friends": "Este perfil é popular entre as pessoas que estás a seguir.", + "follow_suggestions.hints.most_followed": "Este perfil é um dos mais seguidos em {domain}.", + "follow_suggestions.hints.most_interactions": "Este perfil tem recebido recentemente muita atenção em {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Este perfil é semelhante aos perfis que seguiste recentemente.", "follow_suggestions.personalized_suggestion": "Sugestão personalizada", "follow_suggestions.popular_suggestion": "Sugestão popular", "follow_suggestions.popular_suggestion_longer": "Popular em {domain}", - "follow_suggestions.similar_to_recently_followed_longer": "Semelhantes aos perfis que seguiu recentemente", + "follow_suggestions.similar_to_recently_followed_longer": "Semelhantes aos perfis que seguiste recentemente", "follow_suggestions.view_all": "Ver tudo", "follow_suggestions.who_to_follow": "Quem seguir", - "followed_tags": "Hashtags seguidas", + "followed_tags": "Etiquetas seguidas", "footer.about": "Sobre", "footer.directory": "Diretório de perfis", - "footer.get_app": "Obtém a aplicação", + "footer.get_app": "Obter a aplicação", "footer.invite": "Convidar pessoas", - "footer.keyboard_shortcuts": "Atalhos do teclado", + "footer.keyboard_shortcuts": "Atalhos de teclado", "footer.privacy_policy": "Política de privacidade", "footer.source_code": "Ver código-fonte", "footer.status": "Estado", @@ -342,9 +346,9 @@ "hashtag.column_header.tag_mode.none": "sem {additional}", "hashtag.column_settings.select.no_options_message": "Não foram encontradas sugestões", "hashtag.column_settings.select.placeholder": "Inserir #etiquetas…", - "hashtag.column_settings.tag_mode.all": "Todos estes", - "hashtag.column_settings.tag_mode.any": "Qualquer destes", - "hashtag.column_settings.tag_mode.none": "Nenhum destes", + "hashtag.column_settings.tag_mode.all": "Todas estas", + "hashtag.column_settings.tag_mode.any": "Qualquer uma destas", + "hashtag.column_settings.tag_mode.none": "Nenhuma destas", "hashtag.column_settings.tag_toggle": "Incluir etiquetas adicionais para esta coluna", "hashtag.counter_by_accounts": "{count, plural,one {{counter} participante} other {{counter} participantes}}", "hashtag.counter_by_uses": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", @@ -352,43 +356,43 @@ "hashtag.follow": "Seguir #etiqueta", "hashtag.unfollow": "Deixar de seguir #etiqueta", "hashtags.and_other": "…e {count, plural, other {mais #}}", - "hints.profiles.followers_may_be_missing": "Podem faltar seguidores neste perfil.", - "hints.profiles.follows_may_be_missing": "O número de perfis seguidos por este perfil pode faltar.", - "hints.profiles.posts_may_be_missing": "Podem faltar algumas publicações deste perfil.", - "hints.profiles.see_more_followers": "Ver mais seguidores no {domain}", - "hints.profiles.see_more_follows": "Veja mais perfis seguidos em {domain}", + "hints.profiles.followers_may_be_missing": "É possível que não estejam a ser mostrados todos os seguidores deste perfil.", + "hints.profiles.follows_may_be_missing": "É possível que não estejam a ser mostrados todos os seguidos por este perfil.", + "hints.profiles.posts_may_be_missing": "É possível que não estejam a ser mostradas todas as publicações deste perfil.", + "hints.profiles.see_more_followers": "Ver mais seguidores em {domain}", + "hints.profiles.see_more_follows": "Ver mais perfis seguidos em {domain}", "hints.profiles.see_more_posts": "Ver mais publicações em {domain}", - "hints.threads.replies_may_be_missing": "As respostas de outros servidores podem estar a faltar.", - "hints.threads.see_more": "Veja mais respostas em {domain}", + "hints.threads.replies_may_be_missing": "É possível que não estejam a ser mostradas todas as respostas de outros servidores.", + "hints.threads.see_more": "Ver mais respostas em {domain}", "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respostas", - "home.hide_announcements": "Ocultar comunicações", - "home.pending_critical_update.body": "Por favor, atualize o seu servidor Mastodon assim que possível!", + "home.hide_announcements": "Ocultar mensagens de manutenção", + "home.pending_critical_update.body": "Atualiza o teu servidor Mastodon assim que possível!", "home.pending_critical_update.link": "Ver atualizações", - "home.pending_critical_update.title": "Atualização de segurança crítica disponível!", - "home.show_announcements": "Exibir comunicações", - "ignore_notifications_modal.disclaimer": "O Mastodon não pode informar utilizadores que ignoraste as notificações deles. Ignorar notificações não irá parar as mensagens serem enviadas.", - "ignore_notifications_modal.filter_instead": "Filtrar em vez disso", - "ignore_notifications_modal.filter_to_act_users": "Ainda poderá aceitar, rejeitar, ou reportar utilizadores", + "home.pending_critical_update.title": "Está disponível uma atualização de segurança crítica!", + "home.show_announcements": "Mostrar mensagens de manutenção", + "ignore_notifications_modal.disclaimer": "O Mastodon não pode informar os utilizadores de que ignoraste as notificações deles. Ignorar as notificações não impedirá que as mensagens sejam enviadas.", + "ignore_notifications_modal.filter_instead": "Em vez disso, filtrar", + "ignore_notifications_modal.filter_to_act_users": "Ainda poderás aceitar, rejeitar ou reportar utilizadores", "ignore_notifications_modal.filter_to_avoid_confusion": "A filtragem ajuda a evitar potenciais equívocos", - "ignore_notifications_modal.filter_to_review_separately": "Pode rever as notificações filtradas separadamente", + "ignore_notifications_modal.filter_to_review_separately": "Podes rever as notificações filtradas separadamente", "ignore_notifications_modal.ignore": "Ignorar notificações", "ignore_notifications_modal.limited_accounts_title": "Ignorar notificações de contas moderadas?", "ignore_notifications_modal.new_accounts_title": "Ignorar notificações de contas novas?", - "ignore_notifications_modal.not_followers_title": "Ignorar notificações de pessoas que não o seguem?", - "ignore_notifications_modal.not_following_title": "Ignorar notificações de pessoas que não segue?", - "ignore_notifications_modal.private_mentions_title": "Ignorar notificações de Menções Privadas não solicitadas?", - "interaction_modal.description.favourite": "Com uma conta no Mastodon, pode adicionar assinalar esta publicação como favorita para que o autor saiba que gostou e guardá-la para mais tarde.", - "interaction_modal.description.follow": "Com uma conta no Mastodon, pode seguir {name} para receber as suas publicações na sua página inicial.", - "interaction_modal.description.reblog": "Com uma conta no Mastodon, pode impulsionar esta publicação para compartilhá-lo com os seus seguidores.", - "interaction_modal.description.reply": "Com uma conta no Mastodon, pode responder a esta publicação.", + "ignore_notifications_modal.not_followers_title": "Ignorar notificações de pessoas que não te seguem?", + "ignore_notifications_modal.not_following_title": "Ignorar notificações de pessoas que não segues?", + "ignore_notifications_modal.private_mentions_title": "Ignorar notificações de menções privadas não solicitadas?", + "interaction_modal.description.favourite": "Com uma conta no Mastodon, podes assinalar esta publicação como favorita para que o autor saiba que gostaste e guardá-la para mais tarde.", + "interaction_modal.description.follow": "Com uma conta no Mastodon, podes seguir {name} para receberes as suas publicações na cronologia da tua página inicial.", + "interaction_modal.description.reblog": "Com uma conta no Mastodon, podes impulsionar esta publicação para partilhá-la com os teus seguidores.", + "interaction_modal.description.reply": "Com uma conta no Mastodon, podes responder a esta publicação.", "interaction_modal.login.action": "Leve-me a casa", - "interaction_modal.login.prompt": "Domínio do seu servidor, por exemplo, mastodon.social", - "interaction_modal.no_account_yet": "Não está no Mastodon?", + "interaction_modal.login.prompt": "Domínio do teu servidor, por exemplo, mastodon.social", + "interaction_modal.no_account_yet": "Não estás no Mastodon?", "interaction_modal.on_another_server": "Num servidor diferente", "interaction_modal.on_this_server": "Neste servidor", - "interaction_modal.sign_in": "Não tem sessão iniciada neste servidor. Em que servidor tem a sua conta?", - "interaction_modal.sign_in_hint": "Dica: O domínio do seu servidor é o site onde se inscreveu. Se não se lembrar, procure o e-mail de boas-vindas na sua caixa de entrada. Também pode introduzir o seu nome de utilizador completo! (por exemplo, @Mastodon@mastodon.social)", + "interaction_modal.sign_in": "Não tens a sessão iniciada neste servidor. Em que servidor tens a tua conta?", + "interaction_modal.sign_in_hint": "Dica: o domínio do teu servidor é o site onde criaste a conta. Se não se lembrares, procura o e-mail de boas-vindas na tua caixa de entrada do e-mail. Também podes introduzir o teu nome de utilizador completo! (por exemplo, @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Assinalar a publicação de {name} como favorita", "interaction_modal.title.follow": "Seguir {name}", "interaction_modal.title.reblog": "Impulsionar a publicação de {name}", @@ -396,44 +400,46 @@ "intervals.full.days": "{number, plural, one {# dia} other {# dias}}", "intervals.full.hours": "{number, plural, one {# hora} other {# horas}}", "intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}", - "keyboard_shortcuts.back": "para voltar", - "keyboard_shortcuts.blocked": "para abrir a lista de utilizadores bloqueados", - "keyboard_shortcuts.boost": "Impulsionar a publicação", - "keyboard_shortcuts.column": "para focar uma publicação numa das colunas", - "keyboard_shortcuts.compose": "para focar na área de publicação", + "keyboard_shortcuts.back": "voltar atrás", + "keyboard_shortcuts.blocked": "abrir a lista de utilizadores bloqueados", + "keyboard_shortcuts.boost": "impulsionar a publicação", + "keyboard_shortcuts.column": "focar uma publicação numa das colunas", + "keyboard_shortcuts.compose": "focar área de texto da publicação", "keyboard_shortcuts.description": "Descrição", - "keyboard_shortcuts.direct": "para abrir a coluna de menções privadas", - "keyboard_shortcuts.down": "para mover para baixo na lista", - "keyboard_shortcuts.enter": "para expandir uma publicação", - "keyboard_shortcuts.favourite": "Assinalar como favorita", - "keyboard_shortcuts.favourites": "Abrir lista de favoritos", - "keyboard_shortcuts.federated": "para abrir a cronologia federada", + "keyboard_shortcuts.direct": "abrir a coluna de menções privadas", + "keyboard_shortcuts.down": "mover para baixo na lista", + "keyboard_shortcuts.enter": "abrir publicação", + "keyboard_shortcuts.favourite": "assinalar como favorita", + "keyboard_shortcuts.favourites": "abrir lista de favoritos", + "keyboard_shortcuts.federated": "abrir a cronologia federada", "keyboard_shortcuts.heading": "Atalhos de teclado", - "keyboard_shortcuts.home": "para abrir a cronologia inicial", + "keyboard_shortcuts.home": "abrir a cronologia na página inicial", "keyboard_shortcuts.hotkey": "Atalho", - "keyboard_shortcuts.legend": "para mostrar esta legenda", - "keyboard_shortcuts.local": "para abrir a cronologia local", - "keyboard_shortcuts.mention": "para mencionar o autor", - "keyboard_shortcuts.muted": "para abrir a lista dos utilizadores silenciados", - "keyboard_shortcuts.my_profile": "para abrir o teu perfil", - "keyboard_shortcuts.notifications": "para abrir a coluna das notificações", - "keyboard_shortcuts.open_media": "para abrir media", - "keyboard_shortcuts.pinned": "Abrir lista de publicações fixadas", - "keyboard_shortcuts.profile": "para abrir o perfil do autor", - "keyboard_shortcuts.reply": "para responder", - "keyboard_shortcuts.requests": "para abrir a lista dos pedidos de seguidor", - "keyboard_shortcuts.search": "Focar barra de pesquisa", + "keyboard_shortcuts.legend": "mostrar esta legenda", + "keyboard_shortcuts.local": "abrir a cronologia local", + "keyboard_shortcuts.mention": "mencionar o autor", + "keyboard_shortcuts.muted": "abrir a lista dos utilizadores ocultados", + "keyboard_shortcuts.my_profile": "abrir o teu perfil", + "keyboard_shortcuts.notifications": "abrir a coluna das notificações", + "keyboard_shortcuts.open_media": "abrir multimédia", + "keyboard_shortcuts.pinned": "abrir lista de publicações fixadas", + "keyboard_shortcuts.profile": "abrir o perfil do autor", + "keyboard_shortcuts.reply": "responder à publicação", + "keyboard_shortcuts.requests": "abrir a lista dos pedidos de seguidor", + "keyboard_shortcuts.search": "focar barra de pesquisa", "keyboard_shortcuts.spoilers": "para mostrar/esconder o campo AC", - "keyboard_shortcuts.start": "para abrir a coluna dos \"primeiros passos\"", - "keyboard_shortcuts.toggle_hidden": "para mostrar/esconder texto atrás de CW", - "keyboard_shortcuts.toggle_sensitivity": "mostrar/ocultar media", - "keyboard_shortcuts.toot": "para compor um novo toot", - "keyboard_shortcuts.unfocus": "para remover o foco da área de texto/pesquisa", - "keyboard_shortcuts.up": "para mover para cima na lista", + "keyboard_shortcuts.start": "abrir a coluna dos \"primeiros passos\"", + "keyboard_shortcuts.toggle_hidden": "mostrar / esconder texto atrás do aviso de conteúdo", + "keyboard_shortcuts.toggle_sensitivity": "mostrar / ocultar multimédia", + "keyboard_shortcuts.toot": "criar uma nova publicação", + "keyboard_shortcuts.unfocus": "remover o foco da área de texto / pesquisa", + "keyboard_shortcuts.up": "mover para cima na lista", "lightbox.close": "Fechar", "lightbox.next": "Próximo", "lightbox.previous": "Anterior", - "limited_account_hint.action": "Exibir perfil mesmo assim", + "lightbox.zoom_in": "Ampliar para o tamanho real", + "lightbox.zoom_out": "Ajustar para caber", + "limited_account_hint.action": "Mostrar perfil mesmo assim", "limited_account_hint.title": "Este perfil foi ocultado pelos moderadores de {domain}.", "link_preview.author": "Por {name}", "link_preview.more_from_author": "Mais de {name}", @@ -443,108 +449,109 @@ "lists.delete": "Eliminar lista", "lists.edit": "Editar lista", "lists.edit.submit": "Mudar o título", - "lists.exclusive": "Ocultar essas publicações da página inicial", + "lists.exclusive": "Ocultar estas publicações da página inicial", "lists.new.create": "Adicionar lista", "lists.new.title_placeholder": "Título da nova lista", "lists.replies_policy.followed": "Qualquer utilizador seguido", "lists.replies_policy.list": "Membros da lista", "lists.replies_policy.none": "Ninguém", - "lists.replies_policy.title": "Mostrar respostas para:", - "lists.search": "Pesquisa entre as pessoas que segues", + "lists.replies_policy.title": "Mostrar respostas a:", + "lists.search": "Pesquisar entre as pessoas que segues", "lists.subheading": "As tuas listas", "load_pending": "{count, plural, one {# novo item} other {# novos itens}}", "loading_indicator.label": "A carregar…", "media_gallery.hide": "Esconder", - "moved_to_account_banner.text": "A sua conta {disabledAccount} está, no momento, desativada, porque você migrou para {movedToAccount}.", + "moved_to_account_banner.text": "A tua conta {disabledAccount} está neste momento desativada porque migraste para {movedToAccount}.", "mute_modal.hide_from_notifications": "Ocultar das notificações", "mute_modal.hide_options": "Ocultar opções", - "mute_modal.indefinite": "Até que eu os tire do silêncio", + "mute_modal.indefinite": "Até que eu deixe de o ocultar", "mute_modal.show_options": "Mostrar opções", - "mute_modal.they_can_mention_and_follow": "Eles podem mencioná-lo e segui-lo, mas você não os verá.", - "mute_modal.they_wont_know": "Eles não saberão que foram silenciados.", - "mute_modal.title": "Silenciar utilizador?", - "mute_modal.you_wont_see_mentions": "Não verá publicações que os mencionem.", - "mute_modal.you_wont_see_posts": "Eles podem continuar a ver as suas publicações, mas você não verá as deles.", + "mute_modal.they_can_mention_and_follow": "Ele pode mencionar-te e seguir-te, mas não o verás.", + "mute_modal.they_wont_know": "Ele não saberá que o ocultaste.", + "mute_modal.title": "Ocultar utilizador?", + "mute_modal.you_wont_see_mentions": "Não verás publicações que mencionem este utilizador.", + "mute_modal.you_wont_see_posts": "Não verás as publicações dele e ele não poderá ver as tuas publicações.", "navigation_bar.about": "Sobre", "navigation_bar.administration": "Administração", "navigation_bar.advanced_interface": "Abrir na interface web avançada", "navigation_bar.blocks": "Utilizadores bloqueados", "navigation_bar.bookmarks": "Marcadores", "navigation_bar.community_timeline": "Cronologia local", - "navigation_bar.compose": "Escrever novo toot", + "navigation_bar.compose": "Escrever nova publicação", "navigation_bar.direct": "Menções privadas", "navigation_bar.discover": "Descobrir", "navigation_bar.domain_blocks": "Domínios escondidos", "navigation_bar.explore": "Explorar", "navigation_bar.favourites": "Favoritos", - "navigation_bar.filters": "Palavras silenciadas", + "navigation_bar.filters": "Palavras ocultadas", "navigation_bar.follow_requests": "Seguidores pendentes", - "navigation_bar.followed_tags": "Hashtags seguidas", + "navigation_bar.followed_tags": "Etiquetas seguidas", "navigation_bar.follows_and_followers": "Seguindo e seguidores", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Sair", "navigation_bar.moderation": "Moderação", - "navigation_bar.mutes": "Utilizadores silenciados", - "navigation_bar.opened_in_classic_interface": "Por norma, publicações, contas, e outras páginas específicas são abertas na interface web clássica.", + "navigation_bar.mutes": "Utilizadores ocultados", + "navigation_bar.opened_in_classic_interface": "Por norma, publicações, contas e outras páginas específicas são abertas na interface web clássica.", "navigation_bar.personal": "Pessoal", "navigation_bar.pins": "Publicações fixadas", "navigation_bar.preferences": "Preferências", "navigation_bar.public_timeline": "Cronologia federada", "navigation_bar.search": "Pesquisar", "navigation_bar.security": "Segurança", - "not_signed_in_indicator.not_signed_in": "Necessita de iniciar sessão para utilizar esta funcionalidade.", + "not_signed_in_indicator.not_signed_in": "Tens de iniciar a sessão para utilizares esta funcionalidade.", "notification.admin.report": "{name} denunciou {target}", "notification.admin.report_account": "{name} denunciou {count, plural, one {uma publicação} other {# publicações}} de {target} por {category}", "notification.admin.report_account_other": "{name} denunciou {count, plural, one {uma publicação} other {# publicações}} de {target}", - "notification.admin.report_statuses": "{name} denunicou {target} por {category}", + "notification.admin.report_statuses": "{name} denunciou {target} por {category}", "notification.admin.report_statuses_other": "{name} denunciou {target}", "notification.admin.sign_up": "{name} inscreveu-se", "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} inscreveram-se", - "notification.favourite": "{name} assinalou a sua publicação como favorita", - "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} assinalou a sua publicação como favorita", + "notification.favourite": "{name} assinalou a tua publicação como favorita", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} assinalaram a tua publicação como favorita", "notification.follow": "{name} começou a seguir-te", - "notification.follow.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} começaram a segui-lo", - "notification.follow_request": "{name} pediu para segui-lo", - "notification.follow_request.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} pediram para segui-lo", + "notification.follow.name_and_others": "{name} e {count, plural, one {# outro seguiram-te} other {# outros seguiram-te}}", + "notification.follow_request": "{name} pediu para seguir-te", + "notification.follow_request.name_and_others": "{name} e {count, plural, one {# outro} other {# outros}} pediram para seguir-te", "notification.label.mention": "Menção", "notification.label.private_mention": "Menção privada", "notification.label.private_reply": "Resposta privada", "notification.label.reply": "Resposta", "notification.mention": "Menção", + "notification.mentioned_you": "{name} mencionou-te", "notification.moderation-warning.learn_more": "Saber mais", - "notification.moderation_warning": "Recebeu um aviso de moderação", - "notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.", - "notification.moderation_warning.action_disable": "A sua conta foi desativada.", - "notification.moderation_warning.action_mark_statuses_as_sensitive": "Algumas das suas publicações foram assinaladas como sensíveis.", - "notification.moderation_warning.action_none": "A sua conta recebeu um aviso de moderação.", - "notification.moderation_warning.action_sensitive": "As suas publicações serão, a partir de agora, assinaladas como sensíveis.", - "notification.moderation_warning.action_silence": "A sua conta foi limitada.", - "notification.moderation_warning.action_suspend": "A sua conta foi suspensa.", - "notification.own_poll": "A sua sondagem terminou", - "notification.poll": "Terminou uma sondagem em que votou", - "notification.reblog": "{name} reforçou a tua publicação", - "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} reforçaram a sua publicação", + "notification.moderation_warning": "Recebeste um aviso de moderação", + "notification.moderation_warning.action_delete_statuses": "Algumas das tuas publicações foram removidas.", + "notification.moderation_warning.action_disable": "A tua conta foi desativada.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Algumas das tuas publicações foram assinaladas como sensíveis.", + "notification.moderation_warning.action_none": "A tua conta recebeu um aviso de moderação.", + "notification.moderation_warning.action_sensitive": "As tuas publicações serão, a partir de agora, assinaladas como sensíveis.", + "notification.moderation_warning.action_silence": "A tua conta foi limitada.", + "notification.moderation_warning.action_suspend": "A tua conta foi suspensa.", + "notification.own_poll": "A tua sondagem terminou", + "notification.poll": "Terminou uma sondagem em que votaste", + "notification.reblog": "{name} impulsionou a tua publicação", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# outro} other {# outros}} impulsionaram a tua publicação", "notification.relationships_severance_event": "Perdeu as ligações com {name}", - "notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que já não pode receber atualizações dele ou interagir com ele.", - "notification.relationships_severance_event.domain_block": "Um administrador de {from} bloqueou {target}, incluindo {followersCount} dos seus seguidores e {followingCount, plural, one {# conta} other {# contas}} que segue.", + "notification.relationships_severance_event.account_suspension": "Um administrador de {from} suspendeu {target}, o que significa que já não podes receber atualizações dele ou interagir com ele.", + "notification.relationships_severance_event.domain_block": "Um administrador de {from} bloqueou {target}, incluindo {followersCount} dos teus seguidores e {followingCount, plural, one {# conta} other {# contas}} que segues.", "notification.relationships_severance_event.learn_more": "Saber mais", - "notification.relationships_severance_event.user_domain_block": "Bloqueou {target}, removendo {followersCount} dos seus seguidores e {followingCount, plural, one {# conta} other {# contas}} que segue.", + "notification.relationships_severance_event.user_domain_block": "Bloqueaste {target}, removendo {followersCount} dos teus seguidores e {followingCount, plural, one {# conta} other {# contas}} que segues.", "notification.status": "{name} acabou de publicar", "notification.update": "{name} editou uma publicação", "notification_requests.accept": "Aceitar", - "notification_requests.accept_multiple": "{count, plural, one {Aceitar # pedidos…} other {Aceitar # pedidos…}}", + "notification_requests.accept_multiple": "{count, plural, one {Aceitar # pedido…} other {Aceitar # pedidos…}}", "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceitar pedido} other {Aceitar pedidos}}", - "notification_requests.confirm_accept_multiple.message": "Está prestes a aceitar {count, plural, one {um pedido de notificação} other {# pedidos de notificação}}. Tem a certeza de que pretende continuar?", + "notification_requests.confirm_accept_multiple.message": "Estás prestes a aceitar {count, plural, one {um pedido de notificação} other {# pedidos de notificação}}. Tens a certeza de que pretendes continuar?", "notification_requests.confirm_accept_multiple.title": "Aceitar pedidos de notificação?", "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Rejeitar pedido} other {Rejeitar pedidos}}", - "notification_requests.confirm_dismiss_multiple.message": "Está prestes a rejeitar {count, plural, one {um pedido de notificação} other {# pedidos de notificação}}. Não será fácil voltar a {count, plural, one {aceder-lhe} other {aceder-lhes}}. Tem a certeza de que pretende continuar?", + "notification_requests.confirm_dismiss_multiple.message": "Estás prestes a rejeitar {count, plural, one {um pedido de notificação} other {# pedidos de notificação}}. Não será fácil voltares a {count, plural, one {acederes-lhe} other {aceder-lhes}}. Tens a certeza de que pretendes continuar?", "notification_requests.confirm_dismiss_multiple.title": "Rejeitar pedidos de notificação?", "notification_requests.dismiss": "Descartar", "notification_requests.dismiss_multiple": "{count, plural, one {Rejeitar # pedido…} other {Rejeitar # pedidos…}}", "notification_requests.edit_selection": "Editar", "notification_requests.exit_selection": "Concluído", "notification_requests.explainer_for_limited_account": "As notificações desta conta foram filtradas porque a conta foi limitada por um moderador.", - "notification_requests.explainer_for_limited_remote_account": "As notificações desta conta foram filtradas porque a conta ou o seu servidor foram limitados por um moderador.", + "notification_requests.explainer_for_limited_remote_account": "As notificações desta conta foram filtradas porque a conta ou o servidor desta foram limitados por um moderador.", "notification_requests.maximize": "Maximizar", "notification_requests.minimize_banner": "Minimizar o cabeçalho das notificações filtradas", "notification_requests.notifications_from": "Notificações de {name}", @@ -561,10 +568,11 @@ "notifications.column_settings.filter_bar.category": "Barra de filtros rápidos", "notifications.column_settings.follow": "Novos seguidores:", "notifications.column_settings.follow_request": "Novos pedidos de seguidor:", + "notifications.column_settings.group": "Agrupar", "notifications.column_settings.mention": "Menções:", "notifications.column_settings.poll": "Resultados da sondagem:", - "notifications.column_settings.push": "Notificações Push", - "notifications.column_settings.reblog": "Reforços:", + "notifications.column_settings.push": "Notificações \"push\"", + "notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.show": "Mostrar na coluna", "notifications.column_settings.sound": "Reproduzir som", "notifications.column_settings.status": "Novas publicações:", @@ -572,18 +580,18 @@ "notifications.column_settings.unread_notifications.highlight": "Destacar notificações por ler", "notifications.column_settings.update": "Edições:", "notifications.filter.all": "Todas", - "notifications.filter.boosts": "Reforços", + "notifications.filter.boosts": "Impulsos", "notifications.filter.favourites": "Favoritos", "notifications.filter.follows": "Seguidores", "notifications.filter.mentions": "Menções", "notifications.filter.polls": "Resultados da sondagem", - "notifications.filter.statuses": "Atualizações de pessoas que você segue", + "notifications.filter.statuses": "Atualizações de pessoas que segues", "notifications.grant_permission": "Conceder permissão.", "notifications.group": "{count} notificações", "notifications.mark_as_read": "Marcar todas as notificações como lidas", - "notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente", - "notifications.permission_denied_alert": "Notificações no ambiente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente", - "notifications.permission_required": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", + "notifications.permission_denied": "As notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente", + "notifications.permission_denied_alert": "As notificações no ambiente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente", + "notifications.permission_required": "As notificações no ambiente de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", "notifications.policy.accept": "Aceitar", "notifications.policy.accept_hint": "Mostrar nas notificações", "notifications.policy.drop": "Ignorar", @@ -592,56 +600,56 @@ "notifications.policy.filter_hint": "Enviar para a caixa de notificações filtradas", "notifications.policy.filter_limited_accounts_hint": "Limitado pelos moderadores do servidor", "notifications.policy.filter_limited_accounts_title": "Contas moderadas", - "notifications.policy.filter_new_accounts.hint": "Criada nos últimos {days, plural, one {um dia} other {# dias}}", + "notifications.policy.filter_new_accounts.hint": "Criadas {days, plural, one {no último dia} other {nos últimos # dias}}", "notifications.policy.filter_new_accounts_title": "Novas contas", - "notifications.policy.filter_not_followers_hint": "Incluindo pessoas que o seguem há menos de {days, plural, one {um dia} other {# dias}}", - "notifications.policy.filter_not_followers_title": "Pessoas não te seguem", - "notifications.policy.filter_not_following_hint": "Até que você os aprove manualmente", - "notifications.policy.filter_not_following_title": "Pessoas que você não segue", - "notifications.policy.filter_private_mentions_hint": "Filtrado, a menos que seja em resposta à sua própria menção ou se você seguir o remetente", + "notifications.policy.filter_not_followers_hint": "Incluindo pessoas que te seguem há menos de {days, plural, one {um dia} other {# dias}}", + "notifications.policy.filter_not_followers_title": "Pessoas que não te seguem", + "notifications.policy.filter_not_following_hint": "Até que os aproves manualmente", + "notifications.policy.filter_not_following_title": "Pessoas que não segues", + "notifications.policy.filter_private_mentions_hint": "Filtrado, a não ser que seja em resposta à tua própria menção ou se seguires o remetente", "notifications.policy.filter_private_mentions_title": "Menções privadas não solicitadas", "notifications.policy.title": "Gerir notificações de…", "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho", - "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.", - "notifications_permission_banner.title": "Nunca perca nada", + "notifications_permission_banner.how_to_control": "Para receberes notificações quando o Mastodon não estiver aberto, ativa as notificações no ambiente de trabalho. Após isso, podes controlar precisamente que tipos de interações geram notificações no ambiente de trabalho através do botão {icon} acima.", + "notifications_permission_banner.title": "Nunca percas nada", "onboarding.action.back": "Voltar atrás", "onboarding.actions.back": "Voltar atrás", "onboarding.actions.go_to_explore": "Ver tendências atuais", - "onboarding.actions.go_to_home": "Ir para a sua página inicial", + "onboarding.actions.go_to_home": "Ir para a cronologia na tua página inicial", "onboarding.compose.template": "Olá #Mastodon!", - "onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados neste momento. Pode tentar utilizar a pesquisa ou navegar na página \"Explorar\" para encontrar pessoas para seguir ou tentar novamente mais tarde.", - "onboarding.follows.lead": "Você personaliza a sua própria página inicial. Quanto mais pessoas seguir, mais ativa e interessante ela será. Estes perfis podem ser um bom ponto de partida - pode sempre deixar de os seguir mais tarde!", - "onboarding.follows.title": "Popular no Mastodon", + "onboarding.follows.empty": "Infelizmente não é possível mostrar resultados neste momento. Podes tentar pesquisar ou navegar na página \"Explorar\" para encontrares pessoas para seguires ou tentar novamente mais tarde.", + "onboarding.follows.lead": "A cronologia na tua página inicial é a principal forma de experimentares o Mastodon. Quanto mais pessoas seguires, mais ativo e interessante será a cronologia. Para começar, aqui estão algumas sugestões:", + "onboarding.follows.title": "Personaliza a cronologia na tua página inicial", "onboarding.profile.discoverable": "Permitir que o meu perfil seja descoberto", - "onboarding.profile.discoverable_hint": "Quando opta pela possibilidade de ser descoberto no Mastodon, as suas mensagens podem aparecer nos resultados de pesquisa e nas tendências, e o seu perfil pode ser sugerido a pessoas com interesses semelhantes aos seus.", + "onboarding.profile.discoverable_hint": "Quando optas pela possibilidade de seres descoberto no Mastodon, as tuas publicações podem aparecer nos resultados de pesquisa e nas tendências, e o teu perfil pode ser sugerido a pessoas com interesses semelhantes aos teus.", "onboarding.profile.display_name": "Nome a apresentar", - "onboarding.profile.display_name_hint": "O seu nome completo ou o seu nome divertido…", - "onboarding.profile.lead": "Pode sempre completar isto mais tarde, nas configurações, onde ainda estão disponíveis mais opções de personalização.", - "onboarding.profile.note": "Bio", - "onboarding.profile.note_hint": "Pode @mencionar outras pessoas ou #hashtags…", + "onboarding.profile.display_name_hint": "O teu nome completo ou o teu nome divertido…", + "onboarding.profile.lead": "Podes sempre completar isto mais tarde, nas configurações, onde ainda estão disponíveis mais opções de personalização.", + "onboarding.profile.note": "Biografia", + "onboarding.profile.note_hint": "Podes @mencionar outras pessoas e usar #etiquetas…", "onboarding.profile.save_and_continue": "Guardar e continuar", "onboarding.profile.title": "Configuração do perfil", - "onboarding.profile.upload_avatar": "Carregar foto de perfil", - "onboarding.profile.upload_header": "Carregar cabeçalho do perfil", - "onboarding.share.lead": "Deixe as pessoas saber como o podem encontrar no Mastodon!", - "onboarding.share.message": "Eu sou {username} no #Mastodon! Venha seguir-me em {url}", + "onboarding.profile.upload_avatar": "Enviar foto de perfil", + "onboarding.profile.upload_header": "Enviar cabeçalho do perfil", + "onboarding.share.lead": "Deixa as pessoas saberem como te podem encontrar no Mastodon!", + "onboarding.share.message": "Eu sou {username} no #Mastodon! Segue-me em {url}", "onboarding.share.next_steps": "Próximos passos possíveis:", - "onboarding.share.title": "Partilhe o seu perfil", - "onboarding.start.lead": "A sua nova conta no Mastodon está pronta. Aqui está como pode tirar dela melhor proveito:", - "onboarding.start.skip": "Não precisa de ajuda para começar?", - "onboarding.start.title": "Conseguiu!", + "onboarding.share.title": "Partilha o teu perfil", + "onboarding.start.lead": "Agora fazes parte do Mastodon, uma plataforma de redes sociais única e descentralizada onde tu - e não um algoritmo - crias a tua própria experiência. Vamos dar-te início a esta nova fronteira social:", + "onboarding.start.skip": "Não precisas de ajuda para começar?", + "onboarding.start.title": "Conseguiste!", "onboarding.steps.follow_people.body": "Seguir pessoas interessantes é o propósito do Mastodon. ", - "onboarding.steps.follow_people.title": "Personalize o seu feed", - "onboarding.steps.publish_status.body": "Diga olá ao mundo com texto, fotos, vídeos ou sondagens {emoji}", - "onboarding.steps.publish_status.title": "Faça a sua primeira publicação", - "onboarding.steps.setup_profile.body": "Promova as suas interações para ter um perfil preenchido. ", - "onboarding.steps.setup_profile.title": "Personalize o seu perfil", - "onboarding.steps.share_profile.body": "Informe os seus amigos, para saberem como encontrar-lo no Mastodon!", - "onboarding.steps.share_profile.title": "Partilhe o seu perfil", - "onboarding.tips.2fa": "Sabia? Pode proteger a sua conta ativando a autenticação em duas etapas nas configurações de conta. Funciona com qualquer aplicativo TOTP à sua escolha, sem necessitar de um número de telefone!", - "onboarding.tips.accounts_from_other_servers": "Sabia? Como o Mastodon é descentralizado, alguns perfis que encontra estarão hospedados noutros servidores que não os seus. E ainda assim pode interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de utilizador!", - "onboarding.tips.migration": "Sabia? Se sentir que o {domain} não é um bom servidor para si, no futuro pode mudar para outro servidor Mastodon sem perder os seus seguidores. Pode até mesmo hospedar o seu próprio servidor!", - "onboarding.tips.verification": "Sabia que? Pode verificar a sua conta colocando uma hiperligação para o seu perfil Mastodon no seu próprio site e adicionando o site ao seu perfil. Sem taxas ou documentos!", + "onboarding.steps.follow_people.title": "Personaliza a cronologia na tua página inicial", + "onboarding.steps.publish_status.body": "Diz olá ao mundo com texto, fotos, vídeos ou sondagens {emoji}", + "onboarding.steps.publish_status.title": "Faz a tua primeira publicação", + "onboarding.steps.setup_profile.body": "Aumenta as tuas interações com um perfil completo.", + "onboarding.steps.setup_profile.title": "Personaliza o teu perfil", + "onboarding.steps.share_profile.body": "Informa os teus amigos, para saberem como podem encontrar-te no Mastodon", + "onboarding.steps.share_profile.title": "Partilha o teu perfil", + "onboarding.tips.2fa": "Sabias? Podes proteger a tua conta ativando a autenticação de dois fatores nas configurações de conta. Funciona com qualquer aplicação TOTP à tua escolha, sem necessitar de um número de telemóvel!", + "onboarding.tips.accounts_from_other_servers": "Sabias? Como o Mastodon é descentralizado, alguns perfis que encontras estarão hospedados noutros servidores que não os teus. E ainda assim podes interagir com eles perfeitamente! O servidor deles está na segunda metade do nome de utilizador!", + "onboarding.tips.migration": "Sabias? Se sentires que o {domain} não é um bom servidor para ti, no futuro podes mudar para outro servidor Mastodon sem perder os teus seguidores. Podes até mesmo hospedar o teu próprio servidor!", + "onboarding.tips.verification": "Sabias? Podes verificar a tua conta colocando uma hiperligação para o teu perfil Mastodon no teu próprio site e adicionando o site ao teu perfil. Sem taxas ou necessidade de apresentar documentos!", "password_confirmation.exceeds_maxlength": "A confirmação da palavra-passe excedeu o tamanho máximo ", "password_confirmation.mismatching": "A confirmação da palavra-passe não corresponde", "picture_in_picture.restore": "Colocá-lo de volta", @@ -651,18 +659,18 @@ "poll.total_people": "{count, plural, one {# pessoa} other {# pessoas}}", "poll.total_votes": "{count, plural, one {# voto} other {# votos}}", "poll.vote": "Votar", - "poll.voted": "Votou nesta resposta", + "poll.voted": "Votaste nesta resposta", "poll.votes": "{votes, plural, one {# voto } other {# votos}}", "poll_button.add_poll": "Adicionar uma sondagem", "poll_button.remove_poll": "Remover sondagem", - "privacy.change": "Ajustar a privacidade da publicação", + "privacy.change": "Alterar a privacidade da publicação", "privacy.direct.long": "Todos os mencionados na publicação", "privacy.direct.short": "Pessoas específicas", - "privacy.private.long": "Apenas os seus seguidores", + "privacy.private.long": "Apenas os teus seguidores", "privacy.private.short": "Seguidores", "privacy.public.long": "Qualquer pessoa no Mastodon ou não", "privacy.public.short": "Público", - "privacy.unlisted.additional": "Isto comporta-se exatamente como público, exceto que a publicação não aparecerá em feeds nem em etiquetas, explorar ou pesquisa Mastodon, mesmo que tenha optado por isso na sua conta.", + "privacy.unlisted.additional": "Este comportamento é exatamente igual ao do público, exceto que a publicação não aparecerá em cronologias, nas etiquetas, ao explorar ou na pesquisa do Mastodon, mesmo que tenhas optado por participar em toda a tua conta.", "privacy.unlisted.long": "Menos fanfarras algorítmicas", "privacy.unlisted.short": "Público silencioso", "privacy_policy.last_updated": "Última atualização em {date}", @@ -670,7 +678,7 @@ "recommended": "Recomendado", "refresh": "Atualizar", "regeneration_indicator.label": "A carregar…", - "regeneration_indicator.sublabel": "A tua página inicial está a ser preparada!", + "regeneration_indicator.sublabel": "A cronologia na tua página inicial está a ser preparada!", "relative_time.days": "{number}d", "relative_time.full.days": "{number, plural,one {# dia} other {# dias}} atrás", "relative_time.full.hours": "{number, plural,one {# hora}other {# horas}} atrás", @@ -686,52 +694,52 @@ "reply_indicator.cancel": "Cancelar", "reply_indicator.poll": "Sondagem", "report.block": "Bloquear", - "report.block_explanation": "Não verá as publicações deles. Eles não serão capazes de ver suas publicações ou de o seguir. Eles vão conseguir saber que estão bloqueados.", + "report.block_explanation": "Não verás as publicações dele. Ele não poderá ver as tuas publicações nem seguir-te. Ele saberá que foi bloqueado por ti.", "report.categories.legal": "Legal", "report.categories.other": "Outro", "report.categories.spam": "Spam", "report.categories.violation": "O conteúdo viola uma ou mais regras do servidor", - "report.category.subtitle": "Escolha o mais adequado", - "report.category.title": "Diga-nos o que se passa com esse {type}", + "report.category.subtitle": "Escolhe o mais adequado", + "report.category.title": "Diz-nos o que se passa com este(a) {type}", "report.category.title_account": "perfil", "report.category.title_status": "publicação", "report.close": "Concluído", - "report.comment.title": "Há algo mais que pensa que devemos saber?", + "report.comment.title": "Há mais alguma coisa que devamos saber?", "report.forward": "Reencaminhar para {target}", - "report.forward_hint": "A conta é de outro servidor. Enviar uma cópia da anónima da denúncia para lá também?", - "report.mute": "Silenciar", - "report.mute_explanation": "Não verá as publicações deles. Eles ainda poderão segui-lo e ver as suas publicações e não saberão que estão silenciados.", + "report.forward_hint": "A conta pertence a outro servidor. Enviar uma cópia anónima da denúncia para esse servidor também?", + "report.mute": "Ocultar", + "report.mute_explanation": "Não verás as publicações dele. Ele não poderá ver as tuas publicações nem seguir-te. Ele não saberá que o ocultaste.", "report.next": "Seguinte", "report.placeholder": "Comentários adicionais", "report.reasons.dislike": "Não gosto disto", "report.reasons.dislike_description": "Não é algo que deseje ver", "report.reasons.legal": "É ilegal", - "report.reasons.legal_description": "Acredita que isto viola a lei do seu país ou do país do servidor", + "report.reasons.legal_description": "Acreditas que isto viola a lei do teu país ou do país do servidor", "report.reasons.other": "É outra coisa", "report.reasons.other_description": "O problema não se encaixa nas outras categorias", "report.reasons.spam": "É spam", "report.reasons.spam_description": "Hiperligações maliciosas, contactos falsos ou respostas repetitivas", "report.reasons.violation": "Viola as regras do servidor", - "report.reasons.violation_description": "Está ciente de que infringe regras específicas", - "report.rules.subtitle": "Selecione tudo o que se aplicar", + "report.reasons.violation_description": "Infringe regras específicas", + "report.rules.subtitle": "Seleciona tudo o que se aplicar", "report.rules.title": "Que regras estão a ser violadas?", - "report.statuses.subtitle": "Selecione tudo o que se aplicar", + "report.statuses.subtitle": "Seleciona tudo o que se aplicar", "report.statuses.title": "Existe alguma publicação que suporte esta denúncia?", "report.submit": "Enviar", "report.target": "A denunciar {target}", "report.thanks.take_action": "Aqui estão as suas opções para controlar o que vê no Mastodon:", - "report.thanks.take_action_actionable": "Enquanto revemos a sua denúncia, pode tomar medidas contra @{name}:", + "report.thanks.take_action_actionable": "Enquanto revemos a tua denúncia, podes tomar medidas contra @{name}:", "report.thanks.title": "Não quer ver isto?", - "report.thanks.title_actionable": "Obrigado por denunciar. Iremos analisar.", + "report.thanks.title_actionable": "Obrigado por nos informares, vamos analisar a situação.", "report.unfollow": "Deixar de seguir @{name}", - "report.unfollow_explanation": "Está a seguir esta conta. Para não voltar a ver as publicações desta conta na sua página inicial, deixe de a seguir.", + "report.unfollow_explanation": "Estás a seguir esta conta. Para não voltares a ver as publicações desta conta na cronologia da tua página inicial, deixa de a seguir.", "report_notification.attached_statuses": "{count, plural,one {{count} publicação} other {{count} publicações}} em anexo", "report_notification.categories.legal": "Legal", "report_notification.categories.legal_sentence": "conteúdo ilegal", "report_notification.categories.other": "Outro", "report_notification.categories.other_sentence": "outro", "report_notification.categories.spam": "Spam", - "report_notification.categories.spam_sentence": "spam", + "report_notification.categories.spam_sentence": "publicidade indesejada / spam", "report_notification.categories.violation": "Violação de regra", "report_notification.categories.violation_sentence": "violação de regra", "report_notification.open": "Abrir denúncia", @@ -739,12 +747,12 @@ "search.placeholder": "Pesquisar", "search.quick_action.account_search": "Perfis com correspondência a {x}", "search.quick_action.go_to_account": "Ir para o perfil {x}", - "search.quick_action.go_to_hashtag": "Ir para a hashtag {x}", + "search.quick_action.go_to_hashtag": "Ir para a etiqueta {x}", "search.quick_action.open_url": "Abrir ligação no Mastodon", "search.quick_action.status_search": "Publicações com correspondência a {x}", "search.search_or_paste": "Pesquisar ou introduzir URL", "search_popout.full_text_search_disabled_message": "Não disponível em {domain}.", - "search_popout.full_text_search_logged_out_message": "Apenas disponível quando tem sessão iniciada.", + "search_popout.full_text_search_logged_out_message": "Apenas disponível com sessão iniciada.", "search_popout.language_code": "Código ISO do idioma", "search_popout.options": "Opções de pesquisa", "search_popout.quick_actions": "Ações rápidas", @@ -758,25 +766,25 @@ "search_results.see_all": "Ver todos", "search_results.statuses": "Publicações", "search_results.title": "Pesquisar por {q}", - "server_banner.about_active_users": "Pessoas que utilizaram este servidor nos últimos 30 dias (Utilizadores Ativos Mensais)", + "server_banner.about_active_users": "Pessoas que utilizaram este servidor nos últimos 30 dias (utilizadores ativos mensais)", "server_banner.active_users": "utilizadores ativos", "server_banner.administered_by": "Administrado por:", - "server_banner.is_one_of_many": "{domain} é um dos muitos servidores Mastodon independentes que pode utilizar para participar no fediverso.", + "server_banner.is_one_of_many": "{domain} é um dos muitos servidores Mastodon independentes que podes utilizar para participar no fediverso.", "server_banner.server_stats": "Estatísticas do servidor:", "sign_in_banner.create_account": "Criar conta", - "sign_in_banner.follow_anyone": "Siga alguém no fediverso e veja tudo em ordem cronológica. Sem algoritmos, anúncios ou clickbait à vista.", + "sign_in_banner.follow_anyone": "Segue qualquer pessoa no fediverso e vê tudo por ordem cronológica. Sem algoritmos, anúncios ou caça-cliques à vista.", "sign_in_banner.mastodon_is": "O Mastodon é a melhor maneira de acompanhar o que está a acontecer.", "sign_in_banner.sign_in": "Iniciar sessão", - "sign_in_banner.sso_redirect": "Inicie sessão ou registe-se", + "sign_in_banner.sso_redirect": "Inicia a sessão ou cria uma conta", "status.admin_account": "Abrir a interface de moderação para @{name}", "status.admin_domain": "Abrir interface de moderação para {domain}", "status.admin_status": "Abrir esta publicação na interface de moderação", "status.block": "Bloquear @{name}", "status.bookmark": "Guardar nos marcadores", - "status.cancel_reblog_private": "Deixar de reforçar", - "status.cannot_reblog": "Não é possível partilhar esta publicação", - "status.continued_thread": "Continuação da conserva", - "status.copy": "Copiar hiperligação para a publicação", + "status.cancel_reblog_private": "Retirar impulso", + "status.cannot_reblog": "Esta publicação não pode ser impulsionada", + "status.continued_thread": "Continuação da conversa", + "status.copy": "Copiar hiperligação da publicação", "status.delete": "Eliminar", "status.detailed_status": "Vista pormenorizada da conversa", "status.direct": "Mencionar @{name} em privado", @@ -785,56 +793,56 @@ "status.edited": "Última edição em {date}", "status.edited_x_times": "Editado {count, plural,one {{count} vez} other {{count} vezes}}", "status.embed": "Obter código de incorporação", - "status.favourite": "Assinalar como favorito", + "status.favourite": "Adicionar aos favoritos", "status.favourites": "{count, plural, one {favorito} other {favoritos}}", "status.filter": "Filtrar esta publicação", "status.history.created": "{name} criado em {date}", "status.history.edited": "{name} editado em {date}", "status.load_more": "Carregar mais", - "status.media.open": "Clique para abrir", - "status.media.show": "Clique para ver", - "status.media_hidden": "Media escondida", + "status.media.open": "Clicar para abrir", + "status.media.show": "Clicar para ver", + "status.media_hidden": "Multimédia oculta", "status.mention": "Mencionar @{name}", "status.more": "Mais", - "status.mute": "Silenciar @{name}", - "status.mute_conversation": "Silenciar conversa", - "status.open": "Expandir", + "status.mute": "Ocultar @{name}", + "status.mute_conversation": "Ocultar conversa", + "status.open": "Expandir esta publicação", "status.pin": "Afixar no perfil", "status.pinned": "Publicação afixada", "status.read_more": "Ler mais", - "status.reblog": "Partilhar", - "status.reblog_private": "Partilhar com a visibilidade original", - "status.reblogged_by": "{name} reforçou", - "status.reblogs": "{count, plural, one {partilha} other {partilhas}}", - "status.reblogs.empty": "Ainda ninguém reforçou esta publicação. Quando alguém o fizer, ele irá aparecer aqui.", - "status.redraft": "Apagar & reescrever", + "status.reblog": "Impulsionar", + "status.reblog_private": "Impulsionar com a visibilidade original", + "status.reblogged_by": "{name} impulsionou", + "status.reblogs": "{count, plural, one {impulso} other {impulsos}}", + "status.reblogs.empty": "Ainda ninguém impulsionou esta publicação. Quando alguém o fizer, aparecerá aqui.", + "status.redraft": "Eliminar e reescrever", "status.remove_bookmark": "Retirar dos marcadores", "status.replied_in_thread": "Responder na conversa", "status.replied_to": "Respondeu a {name}", "status.reply": "Responder", "status.replyAll": "Responder à conversa", "status.report": "Denunciar @{name}", - "status.sensitive_warning": "Conteúdo problemático", + "status.sensitive_warning": "Conteúdo sensível", "status.share": "Partilhar", - "status.show_less_all": "Mostrar menos para todas", - "status.show_more_all": "Mostrar mais para todas", + "status.show_less_all": "Ocultar conteúdo sensível em todas", + "status.show_more_all": "Mostrar conteúdo sensível em todas", "status.show_original": "Mostrar original", "status.title.with_attachments": "{user} publicou {attachmentCount, plural,one {um anexo} other {{attachmentCount} anexos}}", "status.translate": "Traduzir", "status.translated_from_with": "Traduzido do {lang} usando {provider}", "status.uncached_media_warning": "Pré-visualização não disponível", - "status.unmute_conversation": "Deixar de silenciar esta conversa", + "status.unmute_conversation": "Desocultar esta conversa", "status.unpin": "Desafixar do perfil", - "subscribed_languages.lead": "Após a alteração, apenas as publicações nos idiomas selecionados aparecerão na sua página inicial e listas. Não selecione nenhum para receber publicações de todos os idiomas.", + "subscribed_languages.lead": "Após a alteração, apenas as publicações nos idiomas selecionados aparecerão na cronologia da tua página inicial e das tuas listas. Não seleciones nenhum idioma para receberes publicações em todos os idiomas.", "subscribed_languages.save": "Guardar alterações", "subscribed_languages.target": "Alterar idiomas subscritos para {target}", "tabs_bar.home": "Início", "tabs_bar.notifications": "Notificações", - "time_remaining.days": "{número, plural, um {# day} outro {# days}} faltam", - "time_remaining.hours": "{número, plural, um {# hour} outro {# hours}} faltam", - "time_remaining.minutes": "{número, plural, um {# minute} outro {# minutes}} faltam", + "time_remaining.days": "{number, plural, one {# dia restante} other {# dias restantes}}", + "time_remaining.hours": "{number, plural, one {# hora restante} other {# horas restantes}}", + "time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}", "time_remaining.moments": "Momentos restantes", - "time_remaining.seconds": "{número, plural, um {# second} outro {# seconds}} faltam", + "time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}", "trends.counter_by_accounts": "{count, plural, one {{counter} pessoa} other {{counter} pessoas}} {days, plural, one {no último dia} other {nos últimos {days} dias}}", "trends.trending_now": "Tendências atuais", "ui.beforeunload": "O teu rascunho será perdido se abandonares o Mastodon.", @@ -847,6 +855,11 @@ "upload_error.poll": "Não é permitido o envio de ficheiros em sondagens.", "upload_form.audio_description": "Descreva para pessoas com diminuição da acuidade auditiva", "upload_form.description": "Descreva para pessoas com diminuição da acuidade visual", + "upload_form.drag_and_drop.instructions": "Para escolher um anexo multimédia, prima espaço ou enter. Enquanto arrasta, utilize as teclas de setas para mover o anexo multimédia em qualquer direção. Prima espaço ou enter novamente para largar o anexo multimédia na sua nova posição ou prima escape para cancelar.", + "upload_form.drag_and_drop.on_drag_cancel": "O arrastamento foi cancelado. O anexo multimédia {item} foi descartado.", + "upload_form.drag_and_drop.on_drag_end": "O anexo multimédia {item} foi descartado.", + "upload_form.drag_and_drop.on_drag_over": "O anexo multimédia {item} foi movido.", + "upload_form.drag_and_drop.on_drag_start": "O anexo multimédia {item} foi escolhido.", "upload_form.edit": "Editar", "upload_form.thumbnail": "Alterar miniatura", "upload_form.video_description": "Descreva para pessoas com diminuição da acuidade auditiva ou visual", @@ -856,8 +869,8 @@ "upload_modal.choose_image": "Escolher imagem", "upload_modal.description_placeholder": "Grave e cabisbaixo, o filho justo zelava pela querida mãe doente", "upload_modal.detect_text": "Detetar texto na imagem", - "upload_modal.edit_media": "Editar media", - "upload_modal.hint": "Clique ou arraste o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.", + "upload_modal.edit_media": "Editar multimédia", + "upload_modal.hint": "Clica ou arrasta o círculo na pré-visualização para escolher o ponto focal que será sempre visível em todas as miniaturas.", "upload_modal.preparing_ocr": "A preparar o reconhecimento de caracteres (OCR)…", "upload_modal.preview_label": "Pré-visualizar ({ratio})", "upload_progress.label": "A enviar...", @@ -868,9 +881,9 @@ "video.exit_fullscreen": "Sair do modo ecrã inteiro", "video.expand": "Expandir vídeo", "video.fullscreen": "Ecrã completo", - "video.hide": "Esconder vídeo", - "video.mute": "Silenciar", + "video.hide": "Ocultar vídeo", + "video.mute": "Desativar som", "video.pause": "Pausar", "video.play": "Reproduzir", - "video.unmute": "Deixar de silenciar" + "video.unmute": "Ativar som" } diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index a61f4b0d4f..5a80cc2df7 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -11,6 +11,7 @@ "about.not_available": "Această informație nu a fost pusă la dispoziție pe acest server.", "about.powered_by": "Media socială descentralizată furnizată de {mastodon}", "about.rules": "Reguli server", + "account.account_note_header": "Notă personală", "account.add_or_remove_from_list": "Adaugă sau elimină din liste", "account.badges.bot": "Robot", "account.badges.group": "Grup", @@ -29,11 +30,13 @@ "account.featured_tags.last_status_at": "Ultima postare pe {date}", "account.featured_tags.last_status_never": "Fără postări", "account.featured_tags.title": "Haștagurile recomandate de {name}", - "account.follow": "Abonează-te", + "account.follow": "Urmărește", "account.follow_back": "Urmăreşte înapoi", "account.followers": "Urmăritori", "account.followers.empty": "Acest utilizator nu are încă urmăritori.", + "account.followers_counter": "{count, plural, one {{counter} urmăritor} few {{counter} urmăritori} other {{counter} urmăritori}}", "account.following": "Urmăriți", + "account.following_counter": "{count, plural, one {{counter} urmărit} few {{counter} urmărit} other {{counter} urmărit}}", "account.follows.empty": "Momentan acest utilizator nu are niciun abonament.", "account.go_to_profile": "Mergi la profil", "account.hide_reblogs": "Ascunde distribuirile de la @{name}", @@ -49,6 +52,7 @@ "account.mute_notifications_short": "Amuțește notificările", "account.mute_short": "Ignoră", "account.muted": "Pus pe silențios", + "account.mutual": "Mutual", "account.no_bio": "Nicio descriere furnizată.", "account.open_original_page": "Deschide pagina originală", "account.posts": "Postări", @@ -58,12 +62,14 @@ "account.requested_follow": "{name} A cerut să vă urmărească", "account.share": "Distribuie profilul lui @{name}", "account.show_reblogs": "Afișează distribuirile de la @{name}", + "account.statuses_counter": "{count, plural, one {{counter} postare} few {{counter} postări} other {{counter} postări}}", "account.unblock": "Deblochează pe @{name}", "account.unblock_domain": "Deblochează domeniul {domain}", "account.unblock_short": "Deblochează", "account.unendorse": "Nu promova pe profil", "account.unfollow": "Nu mai urmări", "account.unmute": "Nu mai ignora pe @{name}", + "account.unmute_notifications_short": "Dezamuțire notificări", "account.unmute_short": "Reafișare", "account_note.placeholder": "Click to add a note", "admin.dashboard.daily_retention": "Rata de retenţie a utilizatorului pe zi după înregistrare", @@ -71,11 +77,14 @@ "admin.dashboard.retention.average": "În medie", "admin.dashboard.retention.cohort": "Înregistrări lunar", "admin.dashboard.retention.cohort_size": "Utilizatori noi", + "admin.impact_report.instance_followers": "Urmăritori pe care utilizatorii noștri i-ar pierde", + "admin.impact_report.instance_follows": "Urmăritori pe care utilizatorii lor i-ar pierde", "admin.impact_report.title": "Rezumatul impactului", "alert.rate_limited.message": "Vă rugăm să reîncercați după {retry_time, time, medium}.", "alert.rate_limited.title": "Debit limitat", "alert.unexpected.message": "A apărut o eroare neașteptată.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Text alternativ", "announcement.announcement": "Anunț", "attachments_list.unprocessed": "(neprocesate)", "audio.hide": "Ascunde audio", @@ -183,7 +192,9 @@ "dismissable_banner.community_timeline": "Acestea sunt cele mai recente postări publice de la persoane ale căror conturi sunt găzduite de {domain}.", "dismissable_banner.dismiss": "Renunțare", "dismissable_banner.explore_links": "În acest moment, oamenii vorbesc despre aceste știri, pe acesta dar și pe alte servere ale rețelei descentralizate.", + "dismissable_banner.explore_statuses": "Acestea sunt postări de peste tot din rețeaua de socializare care câștigă teren azi. Postările mai noi cu mai multe amplificări și favorite sunt clasate mai sus.", "dismissable_banner.explore_tags": "Aceste hashtag-uri câștigă teren în rândul oamenilor de pe acesta și pe alte servere ale rețelei descentralizate chiar acum.", + "dismissable_banner.public_timeline": "Acestea sunt cele mai recente postări publice de la persoane de pe social web pe care le urmăresc oamenii de pe {domain}.", "embed.instructions": "Integrează această postare în site-ul tău copiind codul de mai jos.", "embed.preview": "Iată cum va arăta:", "emoji_button.activity": "Activități", @@ -295,6 +306,8 @@ "interaction_modal.no_account_yet": "Nu ești încă pe Mastodon?", "interaction_modal.on_another_server": "Pe un alt server", "interaction_modal.on_this_server": "Pe acest server", + "interaction_modal.sign_in": "Nu sunteți autentificat la acest server. Unde este găzduit contul dvs.?", + "interaction_modal.sign_in_hint": "Sfat: acesta este site-ul web pe care v-ați înscris. Dacă nu vă amintiți, căutați e-mailul de bun venit în inboxul dvs. De asemenea, puteți introduce numele de utilizator complet! (de exemplu, @Mastodon@mastodon.social)", "interaction_modal.title.follow": "Urmărește pe {name}", "interaction_modal.title.reblog": "Distribuie postarea lui {name}", "interaction_modal.title.reply": "Răspunde postării lui {name}", @@ -344,6 +357,7 @@ "lists.delete": "Șterge lista", "lists.edit": "Modifică lista", "lists.edit.submit": "Schimbă titlul", + "lists.exclusive": "Ascundeți aceste postări de acasă", "lists.new.create": "Adaugă o listă", "lists.new.title_placeholder": "Titlu pentru noua listă", "lists.replies_policy.followed": "Tuturor persoanelor la care te-ai abonat", @@ -427,10 +441,14 @@ "onboarding.follows.empty": "Din păcate, nu pot fi afișate rezultate chiar acum. Poți încerca să cauți sau să navighezi pe pagina de explorare pentru a găsi oameni pe care să-i urmărești sau încearcă iar mai târziu.", "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.profile.lead": "Puteți completa întotdeauna acest lucru mai târziu în setări, unde sunt disponibile și mai multe opțiuni de personalizare.", "onboarding.share.lead": "Spune-le oamenilor cum te pot găsi pe Mastodon!", "onboarding.share.message": "Sunt {username} pe #Mastodon! Vino și urmărește-mă pe {url}", + "onboarding.share.next_steps": "Pașii următori posibili:", + "onboarding.share.title": "Partajați-vă profilul", "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": "Ați reușit!", "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.", @@ -439,7 +457,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": "Știați că? Vă puteți securiza contul prin configurarea autentificării cu doi factori în setările contului dvs. Funcționează cu orice aplicație TOTP la alegerea dvs., niciun număr de telefon nu este necesar!", + "onboarding.tips.accounts_from_other_servers": "Știați că? Deoarece Mastodon este decentralizat, unele profiluri pe care le întâlniți vor fi găzduite pe alte servere decât ale dvs. Și totuși puteți interacționa cu ele fără probleme! Serverul lor se află în a doua jumătate a numelui lor de utilizator!", "onboarding.tips.migration": "Știai că? Dacă simți că {domain} nu este o alegere bună de server in viitor, te poți muta pe un alt server de Mastodon fără a-ți pierde urmăritorii. Poți găzdui chiar si propriul server!", + "onboarding.tips.verification": "Știați că? Puteți să vă verificați contul punând un link către profilul dumneavoastră Mastodon pe propriul site și adăugând site-ul web la profilul dvs. Nu sunt necesare taxe sau documente!", "picture_in_picture.restore": "Pune-l înapoi", "poll.closed": "Închis", "poll.refresh": "Reîncarcă", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 9bd2ed5b4e..9eaee382fa 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -3,8 +3,8 @@ "about.contact": "Связаться:", "about.disclaimer": "Mastodon — свободное программное обеспечение с открытым исходным кодом и торговая марка Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Причина не указана", - "about.domain_blocks.preamble": "Mastodon обычно позволяет просматривать содержимое и взаимодействовать с другими пользователями любых серверов в Федиверсе. Вот исключения, сделанные конкретно для этого сервера.", - "about.domain_blocks.silenced.explanation": "Как правило, вы не увидите профили и контент с этого сервера, если вы явно не будете их искать или не подпишетесь на них.", + "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": "Заблокирован", @@ -17,14 +17,14 @@ "account.badges.group": "Группа", "account.block": "Заблокировать @{name}", "account.block_domain": "Заблокировать {domain}", - "account.block_short": "Блокировать", - "account.blocked": "Заблокировано", + "account.block_short": "Заблокировать", + "account.blocked": "Заблокирован(а)", "account.cancel_follow_request": "Отозвать запрос на подписку", - "account.copy": "Скопировать ссылку на профиль", - "account.direct": "Лично упоминать @{name}", + "account.copy": "Копировать ссылку на профиль", + "account.direct": "Упомянуть @{name} лично", "account.disable_notifications": "Не уведомлять о постах от @{name}", "account.domain_blocked": "Домен заблокирован", - "account.edit_profile": "Редактировать профиль", + "account.edit_profile": "Редактировать", "account.enable_notifications": "Уведомлять о постах от @{name}", "account.endorse": "Рекомендовать в профиле", "account.featured_tags.last_status_at": "Последний пост {date}", @@ -34,26 +34,26 @@ "account.follow_back": "Подписаться в ответ", "account.followers": "Подписчики", "account.followers.empty": "На этого пользователя пока никто не подписан.", - "account.followers_counter": "{count, plural, one {{counter} последователя} other {{counter} последователей}}", + "account.followers_counter": "{count, plural, one {{counter} подписчик} few {{counter} подписчика} other {{counter} подписчиков}}", "account.following": "Подписки", - "account.following_counter": "{count, plural, one {{counter} последующий} other {{counter} последующие}}", + "account.following_counter": "{count, plural, one {# подписка} many {# подписок} other {# подписки}}", "account.follows.empty": "Этот пользователь пока ни на кого не подписался.", "account.go_to_profile": "Перейти к профилю", "account.hide_reblogs": "Скрыть продвижения от @{name}", - "account.in_memoriam": "В Памяти.", - "account.joined_short": "Присоединился", + "account.in_memoriam": "In Memoriam.", + "account.joined_short": "Дата регистрации", "account.languages": "Изменить языки подписки", "account.link_verified_on": "Владение этой ссылкой было проверено {date}", - "account.locked_info": "Это закрытый аккаунт. Его владелец вручную одобряет подписчиков.", + "account.locked_info": "Это закрытая учётная запись. Её владелец вручную одобряет подписчиков.", "account.media": "Медиа", "account.mention": "Упомянуть @{name}", - "account.moved_to": "У {name} теперь новый аккаунт:", + "account.moved_to": "У {name} теперь новая учётная запись:", "account.mute": "Игнорировать @{name}", "account.mute_notifications_short": "Отключить уведомления", - "account.mute_short": "Приглушить", + "account.mute_short": "Игнорировать", "account.muted": "Игнорируется", - "account.mutual": "Взаимно", - "account.no_bio": "Описание не предоставлено.", + "account.mutual": "Взаимные подписки", + "account.no_bio": "Описание профиля отсутствует.", "account.open_original_page": "Открыть исходную страницу", "account.posts": "Посты", "account.posts_with_replies": "Посты и ответы", @@ -62,58 +62,60 @@ "account.requested_follow": "{name} отправил(а) вам запрос на подписку", "account.share": "Поделиться профилем @{name}", "account.show_reblogs": "Показывать продвижения от @{name}", + "account.statuses_counter": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}", "account.unblock": "Разблокировать @{name}", "account.unblock_domain": "Разблокировать {domain}", "account.unblock_short": "Разблокировать", "account.unendorse": "Не рекомендовать в профиле", "account.unfollow": "Отписаться", - "account.unmute": "Убрать {name} из игнорируемых", + "account.unmute": "Не игнорировать @{name}", "account.unmute_notifications_short": "Включить уведомления", "account.unmute_short": "Не игнорировать", "account_note.placeholder": "Текст заметки", "admin.dashboard.daily_retention": "Уровень удержания пользователей после регистрации, в днях", "admin.dashboard.monthly_retention": "Уровень удержания пользователей после регистрации, в месяцах", - "admin.dashboard.retention.average": "Среднее", + "admin.dashboard.retention.average": "В среднем", "admin.dashboard.retention.cohort": "Месяц регистрации", "admin.dashboard.retention.cohort_size": "Новые пользователи", "admin.impact_report.instance_accounts": "Профили учетных записей, которые будут удалены", - "admin.impact_report.instance_followers": "Последователи, которых потеряют наши пользователи", - "admin.impact_report.instance_follows": "Последователи, которых потеряют наши пользователи", + "admin.impact_report.instance_followers": "Подписчики, которых потеряют наши пользователи", + "admin.impact_report.instance_follows": "Подписчики, которых потеряют их пользователи", "admin.impact_report.title": "Резюме воздействия", - "alert.rate_limited.message": "Пожалуйста, повторите после {retry_time, time, medium}.", - "alert.rate_limited.title": "Ограничение количества запросов", + "alert.rate_limited.message": "Подождите до {retry_time, time, medium}, прежде чем делать что-либо ещё.", + "alert.rate_limited.title": "Слишком много запросов", "alert.unexpected.message": "Произошла непредвиденная ошибка.", - "alert.unexpected.title": "Упс!", + "alert.unexpected.title": "Ой!", + "alt_text_badge.title": "Альтернативный текст", "announcement.announcement": "Объявление", "attachments_list.unprocessed": "(не обработан)", "audio.hide": "Скрыть аудио", - "block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение. Однако, соблюдение требований не гарантировано, поскольку некоторые серверы могут работать с блокировками по-разному. Публичные записи по-прежнему могут быть видны неавторизованным пользователям.", + "block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение, однако соблюдение им блокировки не гарантировано, поскольку некоторые серверы могут по-разному обрабатывать запросы. Публичные посты по-прежнему могут быть видны неавторизованным пользователям.", "block_modal.show_less": "Показать меньше", "block_modal.show_more": "Показать больше", - "block_modal.they_cant_mention": "Он не может упоминать или подписываться на вас.", - "block_modal.they_cant_see_posts": "Он не может видеть ваши сообщения, и вы не увидите его.", - "block_modal.they_will_know": "Он может видеть, что он заблокирован.", + "block_modal.they_cant_mention": "Он не сможет упоминать вас или подписаться на вас.", + "block_modal.they_cant_see_posts": "Он не сможет видеть ваши посты, а вы не будете видеть его посты.", + "block_modal.they_will_know": "Он будет знать, что вы его блокируете.", "block_modal.title": "Заблокировать пользователя?", - "block_modal.you_wont_see_mentions": "Вы не увидите записи, которые упоминают его.", + "block_modal.you_wont_see_mentions": "Вы не увидите посты, которые его упоминают.", "boost_modal.combo": "{combo}, чтобы пропустить это в следующий раз", - "boost_modal.reblog": "Повысить пост?", - "boost_modal.undo_reblog": "Разгрузить пост?", - "bundle_column_error.copy_stacktrace": "Скопировать отчет об ошибке", + "boost_modal.reblog": "Продвинуть пост?", + "boost_modal.undo_reblog": "Отменить продвижение?", + "bundle_column_error.copy_stacktrace": "Копировать отчёт об ошибке", "bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это может быть вызвано ошибкой в нашем коде или проблемой совместимости браузера.", "bundle_column_error.error.title": "О нет!", - "bundle_column_error.network.body": "При загрузке этой страницы произошла ошибка. Это может быть связано с Вашим Интернет-соединением или неполадками на сервере.", + "bundle_column_error.network.body": "При загрузке этой страницы произошла ошибка. Это может быть вызвано временными проблемами с вашим подключением к интернету или ошибкой на сервере.", "bundle_column_error.network.title": "Ошибка сети", "bundle_column_error.retry": "Попробовать снова", "bundle_column_error.return": "Вернуться на главную", - "bundle_column_error.routing.body": "Запрошенная страница не найдена. Вы уверены, что URL в адресной строке правильный?", + "bundle_column_error.routing.body": "Запрошенная страница не найдена. Вы уверены, что в адресной строке указан правильный URL?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Закрыть", "bundle_modal_error.message": "Что-то пошло не так при загрузке этого компонента.", "bundle_modal_error.retry": "Попробовать снова", - "closed_registrations.other_server_instructions": "Поскольку Mastodon децентрализован, вы можете создать учетную запись на другом сервере и всё ещё взаимодействовать с этим сервером.", - "closed_registrations_modal.description": "Создание учетной записи на {domain} в настоящее время невозможно, но имейте в виду, что для использования Mastodon вам не нужен аккаунт именно на {domain}.", + "closed_registrations.other_server_instructions": "Поскольку Mastodon децентрализован, вы можете зарегистрироваться на другом сервере и всё равно взаимодействовать с этим сервером.", + "closed_registrations_modal.description": "Зарегистрироваться на {domain} сейчас не выйдет, но имейте в виду, что вам не нужна учётная запись именно на {domain}, чтобы использовать Mastodon.", "closed_registrations_modal.find_another_server": "Найти другой сервер", - "closed_registrations_modal.preamble": "Mastodon децентрализован, поэтому независимо от того, где вы создадите свою учетную запись, вы сможете следить и взаимодействовать с кем угодно на этом сервере. Вы даже можете разместить свой собственный сервер!", + "closed_registrations_modal.preamble": "Mastodon децентрализован, поэтому независимо от того, где именно вы зарегистрируетесь, вы сможете подписываться и взаимодействовать с кем угодно на этом сервере. Вы даже можете создать свой собственный сервер!", "closed_registrations_modal.title": "Регистрация в Mastodon", "column.about": "О проекте", "column.blocks": "Заблокированные пользователи", @@ -122,14 +124,14 @@ "column.direct": "Личные упоминания", "column.directory": "Просмотр профилей", "column.domain_blocks": "Заблокированные домены", - "column.favourites": "Избранные", + "column.favourites": "Избранное", "column.firehose": "Живая лента", "column.follow_requests": "Запросы на подписку", "column.home": "Главная", "column.lists": "Списки", "column.mutes": "Игнорируемые пользователи", "column.notifications": "Уведомления", - "column.pins": "Закреплённый пост", + "column.pins": "Закреплённые посты", "column.public": "Глобальная лента", "column_back_button.label": "Назад", "column_header.hide_settings": "Скрыть настройки", @@ -141,60 +143,61 @@ "column_subheading.settings": "Настройки", "community.column_settings.local_only": "Только локальные", "community.column_settings.media_only": "Только с медиафайлами", - "community.column_settings.remote_only": "Только удалённые", + "community.column_settings.remote_only": "Только с других серверов", "compose.language.change": "Изменить язык", - "compose.language.search": "Поиск языков...", - "compose.published.body": "Запись опубликована.", + "compose.language.search": "Найти язык...", + "compose.published.body": "Пост опубликован.", "compose.published.open": "Открыть", - "compose.saved.body": "Запись сохранена.", - "compose_form.direct_message_warning_learn_more": "Подробнее", + "compose.saved.body": "Пост отредактирован.", + "compose_form.direct_message_warning_learn_more": "Узнать больше", "compose_form.encryption_warning": "Посты в Mastodon не защищены сквозным шифрованием. Не делитесь конфиденциальной информацией через Mastodon.", - "compose_form.hashtag_warning": "Этот пост не будет виден ни под одним из хэштегов, так как он не публичный. Только публичные посты можно найти по хэштегу.", + "compose_form.hashtag_warning": "Этот пост не появится в поиске по хэштегам, так как он не обозначен как публичный. Только публичные посты можно найти по хэштегу.", "compose_form.lock_disclaimer": "Ваша учётная запись {locked}. Любой пользователь сможет подписаться на вас и просматривать посты для подписчиков.", "compose_form.lock_disclaimer.lock": "не закрыта", "compose_form.placeholder": "О чём думаете?", - "compose_form.poll.duration": "Продолжительность опроса", + "compose_form.poll.duration": "Продолжительность", "compose_form.poll.multiple": "Несколько вариантов ответа", "compose_form.poll.option_placeholder": "Вариант {number}", "compose_form.poll.single": "Выберите один", - "compose_form.poll.switch_to_multiple": "Разрешить выбор нескольких вариантов", - "compose_form.poll.switch_to_single": "Переключить в режим выбора одного ответа", - "compose_form.poll.type": "Стиль", + "compose_form.poll.switch_to_multiple": "Переключить в режим выбора нескольких вариантов ответа", + "compose_form.poll.switch_to_single": "Переключить в режим выбора одного варианта ответа", + "compose_form.poll.type": "Тип", "compose_form.publish": "Опубликовать", "compose_form.publish_form": "Опубликовать", "compose_form.reply": "Ответить", "compose_form.save_changes": "Сохранить", - "compose_form.spoiler.marked": "Текст скрыт за предупреждением", - "compose_form.spoiler.unmarked": "Текст не скрыт", - "compose_form.spoiler_placeholder": "Предупреждение о контенте (опционально)", + "compose_form.spoiler.marked": "Удалить предупреждение о содержании", + "compose_form.spoiler.unmarked": "Добавить предупреждение о содержании", + "compose_form.spoiler_placeholder": "Предупреждение о содержании (необязательно)", "confirmation_modal.cancel": "Отмена", "confirmations.block.confirm": "Заблокировать", "confirmations.delete.confirm": "Удалить", "confirmations.delete.message": "Вы уверены, что хотите удалить этот пост?", "confirmations.delete.title": "Удалить пост?", "confirmations.delete_list.confirm": "Удалить", - "confirmations.delete_list.message": "Вы действительно хотите навсегда удалить этот список?", + "confirmations.delete_list.message": "Вы уверены, что хотите навсегда удалить этот список?", "confirmations.delete_list.title": "Удалить список?", - "confirmations.discard_edit_media.confirm": "Отменить", - "confirmations.discard_edit_media.message": "У вас есть несохранённые изменения описания мультимедиа или предпросмотра, отменить их?", + "confirmations.discard_edit_media.confirm": "Сбросить", + "confirmations.discard_edit_media.message": "У вас есть несохранённые изменения, касающиеся описания медиа или области предпросмотра, сбросить их?", "confirmations.edit.confirm": "Редактировать", - "confirmations.edit.message": "В данный момент, редактирование перезапишет составляемое вами сообщение. Вы уверены, что хотите продолжить?", - "confirmations.edit.title": "Переписать сообщение?", + "confirmations.edit.message": "Если вы начнёте редактировать сейчас, то набираемый в данный момент пост будет стёрт. Вы уверены, что хотите продолжить?", + "confirmations.edit.title": "Стереть несохранённый черновик поста?", "confirmations.logout.confirm": "Выйти", "confirmations.logout.message": "Вы уверены, что хотите выйти?", "confirmations.logout.title": "Выйти?", "confirmations.mute.confirm": "Игнорировать", "confirmations.redraft.confirm": "Удалить и исправить", - "confirmations.redraft.message": "Вы уверены, что хотите удалить и переписать этот пост? Отметки «избранного», продвижения и ответы к оригинальному посту будут удалены.", - "confirmations.redraft.title": "Удалим и исправим пост?", + "confirmations.redraft.message": "Вы уверены, что хотите удалить этот пост и создать его заново? Взаимодействия, такие как добавление в избранное или продвижение, будут потеряны, а ответы к оригинальному посту перестанут на него ссылаться.", + "confirmations.redraft.title": "Удалить и создать пост заново?", "confirmations.reply.confirm": "Ответить", - "confirmations.reply.message": "При ответе, текст набираемого поста будет очищен. Продолжить?", - "confirmations.reply.title": "Перепишем пост?", + "confirmations.reply.message": "Если вы начнёте составлять ответ сейчас, то набираемый в данный момент пост будет стёрт. Вы уверены, что хотите продолжить?", + "confirmations.reply.title": "Стереть несохранённый черновик поста?", "confirmations.unfollow.confirm": "Отписаться", "confirmations.unfollow.message": "Вы уверены, что хотите отписаться от {name}?", "confirmations.unfollow.title": "Отписаться?", "content_warning.hide": "Скрыть пост", "content_warning.show": "Всё равно показать", + "content_warning.show_more": "Развернуть", "conversation.delete": "Удалить беседу", "conversation.mark_as_read": "Отметить как прочитанное", "conversation.open": "Просмотр беседы", @@ -202,43 +205,45 @@ "copy_icon_button.copied": "Скопировано в буфер обмена", "copypaste.copied": "Скопировано", "copypaste.copy_to_clipboard": "Копировать в буфер обмена", - "directory.federated": "Со всей федерации", + "directory.federated": "Со всего федивёрса", "directory.local": "Только с {domain}", "directory.new_arrivals": "Новички", "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": "Эти сообщения со связанных серверов сети сейчас набирают популярность.", + "dismissable_banner.explore_statuses": "Эти посты привлекают людей на этом и других серверах децентрализованной сети прямо сейчас.", "dismissable_banner.explore_tags": "Эти хэштеги привлекают людей на этом и других серверах децентрализованной сети прямо сейчас.", - "dismissable_banner.public_timeline": "Это самые последние публичные сообщения от людей в социальной сети, за которыми подписались пользователи {domain}.", + "dismissable_banner.public_timeline": "Это самые новые публичные посты от тех пользователей этого и других серверов децентрализованной сети, на которых подписываются пользователи {domain}.", "domain_block_modal.block": "Заблокировать сервер", - "domain_block_modal.block_account_instead": "Заблокировать @{name} вместо", - "domain_block_modal.they_can_interact_with_old_posts": "Люди с этого сервера могут взаимодействовать с вашими старыми записями.", - "domain_block_modal.they_cant_follow": "Никто из этого сервера не может подписываться на вас.", - "domain_block_modal.they_wont_know": "Он не будет знать, что его заблокировали.", + "domain_block_modal.block_account_instead": "Заблокировать @{name}", + "domain_block_modal.they_can_interact_with_old_posts": "Пользователи с этого сервера смогут взаимодействовать с вашими старыми постами.", + "domain_block_modal.they_cant_follow": "Пользователи с этого сервера не смогут подписаться на вас.", + "domain_block_modal.they_wont_know": "Пользователи с этого сервера не будут знать, что вы их блокируете.", "domain_block_modal.title": "Заблокировать домен?", - "domain_block_modal.you_wont_see_posts": "Вы не будете видеть записи или уведомления от пользователей на этом сервере.", - "domain_pill.activitypub_lets_connect": "Это позволяет вам общаться и взаимодействовать с людьми не только на Mastodon, но и в различных социальных приложениях.", - "domain_pill.activitypub_like_language": "ActivityPub как язык Mastodon говорит с другими социальными сетями.", + "domain_block_modal.you_will_lose_num_followers": "Вы потеряете {followersCount, plural, one {{followersCountDisplay} подписчика} few {{followersCountDisplay} подписчика} other {{followersCountDisplay} подписчиков}} и {followingCount, plural, one {{followingCountDisplay} подписку} few {{followingCountDisplay} подписки} other {{followingCountDisplay} подписок}}.", + "domain_block_modal.you_will_lose_relationships": "Вы потеряете все подписки и всех подписчиков с этого сервера.", + "domain_block_modal.you_wont_see_posts": "Вы не будете видеть посты или уведомления от пользователей с этого сервера.", + "domain_pill.activitypub_lets_connect": "Благодаря ему вы можете связываться и взаимодействовать не только с пользователями Mastodon, но и с пользователями других платформ.", + "domain_pill.activitypub_like_language": "ActivityPub это язык, на котором Mastodon говорит с другими социальными сетями.", "domain_pill.server": "Сервер", - "domain_pill.their_handle": "Его бейдж:", - "domain_pill.their_server": "Цифровой дом, где находятся все записи.", - "domain_pill.their_username": "Уникальный идентификатор на сервере. Возможно найти пользователей с одним и тем же именем пользователя на разных серверах.", + "domain_pill.their_handle": "Адрес пользователя:", + "domain_pill.their_server": "Цифровой дом пользователя, где находятся все его посты.", + "domain_pill.their_username": "Уникальный идентификатор пользователя на его сервере. На разных серверах могут встречаться люди с тем же именем пользователя.", "domain_pill.username": "Имя пользователя", - "domain_pill.whats_in_a_handle": "Что такое бейдж?", - "domain_pill.who_they_are": "Поскольку бейджи говорят о том, кто и где находится, вы можете взаимодействовать с людьми в социальной сети .", - "domain_pill.who_you_are": "Поскольку ваш бейдж говорит о том, кто вы и где находитесь, люди могут взаимодействовать с вами через социальную сеть .", - "domain_pill.your_handle": "Ваш бейдж:", - "domain_pill.your_server": "Сервер, где живут все ваши посты. Этот не нравится? Поменяй сервер в любое время вместе со своими подписчиками.", - "domain_pill.your_username": "Ваш уникальный идентификатор на этом сервере. Вы можете найти пользователей с одним именем пользователя на разных серверах.", + "domain_pill.whats_in_a_handle": "Что это значит?", + "domain_pill.who_they_are": "Поскольку адрес позволяет однозначно определить, кто и где находится, вы можете взаимодействовать с пользователями социальной сети .", + "domain_pill.who_you_are": "Поскольку ваш адрес позволяет однозначно определить, кто вы и где находитесь, пользователи социальной сети могут взаимодействовать с вами.", + "domain_pill.your_handle": "Ваш адрес:", + "domain_pill.your_server": "Ваш цифровой дом, где находятся все ваши посты. Если вам не нравится этот сервер, вы можете в любое время перенести свою учётную запись на другой сервер, не теряя подписчиков.", + "domain_pill.your_username": "Ваш уникальный идентификатор на этом сервере. На разных серверах могут встречаться люди с тем же именем пользователя.", "embed.instructions": "Встройте этот пост на свой сайт, скопировав следующий код:", "embed.preview": "Так это будет выглядеть:", "emoji_button.activity": "Занятия", "emoji_button.clear": "Очистить", - "emoji_button.custom": "С этого узла", + "emoji_button.custom": "С этого сервера", "emoji_button.flags": "Флаги", "emoji_button.food": "Еда и напитки", "emoji_button.label": "Вставить эмодзи", @@ -251,28 +256,28 @@ "emoji_button.search_results": "Результаты поиска", "emoji_button.symbols": "Символы", "emoji_button.travel": "Путешествия и места", - "empty_column.account_hides_collections": "Данный пользователь решил не предоставлять эту информацию", - "empty_column.account_suspended": "Учетная запись заблокирована", + "empty_column.account_hides_collections": "Пользователь предпочёл не раскрывать эту информацию", + "empty_column.account_suspended": "Учётная запись заблокирована", "empty_column.account_timeline": "Здесь нет постов!", "empty_column.account_unavailable": "Профиль недоступен", "empty_column.blocks": "Вы ещё никого не заблокировали.", - "empty_column.bookmarked_statuses": "У вас пока нет постов в закладках. Как добавите один, он отобразится здесь.", + "empty_column.bookmarked_statuses": "У вас пока нет закладок. Когда вы добавляете пост в закладки, он появляется здесь.", "empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!", "empty_column.direct": "У вас пока нет личных сообщений. Как только вы отправите или получите сообщение, оно появится здесь.", - "empty_column.domain_blocks": "Скрытых доменов пока нет.", + "empty_column.domain_blocks": "Заблокированных доменов пока нет.", "empty_column.explore_statuses": "Нет актуального. Проверьте позже!", "empty_column.favourited_statuses": "Вы не добавили ни один пост в «Избранное». Как только вы это сделаете, он появится здесь.", "empty_column.favourites": "Никто ещё не добавил этот пост в «Избранное». Как только кто-то это сделает, это отобразится здесь.", "empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.", "empty_column.followed_tags": "Вы еще не подписались ни на один хэштег. Когда вы это сделаете, они появятся здесь.", - "empty_column.hashtag": "С этим хэштегом пока ещё ничего не постили.", + "empty_column.hashtag": "С этим хэштегом пока ещё ничего не публиковали.", "empty_column.home": "Ваша лента совсем пуста! Подписывайтесь на других, чтобы заполнить её.", - "empty_column.list": "В этом списке пока ничего нет.", + "empty_column.list": "В этом списке пока ничего нет. Когда пользователи в списке публикуют новые посты, они появляются здесь.", "empty_column.lists": "У вас ещё нет списков. Созданные вами списки будут показаны здесь.", "empty_column.mutes": "Вы ещё никого не добавляли в список игнорируемых.", "empty_column.notification_requests": "Здесь ничего нет! Когда вы получите новые уведомления, они здесь появятся согласно вашим настройкам.", "empty_column.notifications": "У вас пока нет уведомлений. Взаимодействуйте с другими, чтобы завести разговор.", - "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других узлов, чтобы заполнить ленту", + "empty_column.public": "Здесь ничего нет! Опубликуйте что-нибудь или подпишитесь на пользователей с других серверов, чтобы заполнить ленту", "error.unexpected_crash.explanation": "Из-за несовместимого браузера или ошибки в нашем коде, эта страница не может быть корректно отображена.", "error.unexpected_crash.explanation_addons": "Эта страница не может быть корректно отображена. Скорее всего, эта ошибка вызвана расширением браузера или инструментом автоматического перевода.", "error.unexpected_crash.next_steps": "Попробуйте обновить страницу. Если проблема не исчезает, используйте Mastodon из-под другого браузера или приложения.", @@ -291,21 +296,21 @@ "filter_modal.added.expired_title": "Истёкший фильтр!", "filter_modal.added.review_and_configure": "Для просмотра и настройки этой категории фильтра, перейдите в {settings_link}.", "filter_modal.added.review_and_configure_title": "Настройки фильтра", - "filter_modal.added.settings_link": "страница настроек", + "filter_modal.added.settings_link": "настройки", "filter_modal.added.short_explanation": "Этот пост был добавлен в следующую категорию фильтра: {title}.", "filter_modal.added.title": "Фильтр добавлен!", "filter_modal.select_filter.context_mismatch": "не применяется к этому контексту", - "filter_modal.select_filter.expired": "истекло", + "filter_modal.select_filter.expired": "истёкший", "filter_modal.select_filter.prompt_new": "Новая категория: {name}", "filter_modal.select_filter.search": "Поиск или создание", "filter_modal.select_filter.subtitle": "Используйте существующую категорию или создайте новую", "filter_modal.select_filter.title": "Фильтровать этот пост", "filter_modal.title.status": "Фильтровать пост", - "filter_warning.matches_filter": "Соответствует фильтру \"{title}\"", - "filtered_notifications_banner.pending_requests": "Вы можете знать {count, plural, =0 {ни один} one {один человек} other {# люди}}", + "filter_warning.matches_filter": "Соответствует фильтру \"{title}\"", + "filtered_notifications_banner.pending_requests": "От {count, plural, =0 {не известных вам людей} one {# возможно вам известного человека} other {# возможно вам известных человек}}", "filtered_notifications_banner.title": "Отфильтрованные уведомления", - "firehose.all": "Все", - "firehose.local": "Текущий сервер", + "firehose.all": "Всё вместе", + "firehose.local": "Этот сервер", "firehose.remote": "Другие серверы", "follow_request.authorize": "Авторизовать", "follow_request.reject": "Отказать", @@ -333,9 +338,9 @@ "footer.keyboard_shortcuts": "Сочетания клавиш", "footer.privacy_policy": "Политика конфиденциальности", "footer.source_code": "Исходный код", - "footer.status": "Статус", + "footer.status": "Состояние сервера", "generic.saved": "Сохранено", - "getting_started.heading": "Начать", + "getting_started.heading": "Добро пожаловать", "hashtag.column_header.tag_mode.all": "и {additional}", "hashtag.column_header.tag_mode.any": "или {additional}", "hashtag.column_header.tag_mode.none": "без {additional}", @@ -345,20 +350,20 @@ "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} участник} few {{counter} участников} many {{counter} участников} other {{counter} участников}}", - "hashtag.counter_by_uses": "{count, plural, one {{counter} сообщение} few {{counter} сообщения} many {{counter} сообщения} other {{counter} сообщения}}", - "hashtag.counter_by_uses_today": "{count, plural, one {{counter} сообщение} other {{counter} сообщений}} сегодня", + "hashtag.counter_by_accounts": "{count, plural, one {{counter} пользователь} few {{counter} пользователя} other {{counter} пользователей}}", + "hashtag.counter_by_uses": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}", + "hashtag.counter_by_uses_today": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}} сегодня", "hashtag.follow": "Подписаться на новые посты", "hashtag.unfollow": "Отписаться", - "hashtags.and_other": "...и {count, plural, other {# ещё}}", - "hints.profiles.followers_may_be_missing": "Последователи для этого профиля могут отсутствовать.", - "hints.profiles.follows_may_be_missing": "Фолловеры для этого профиля могут отсутствовать.", - "hints.profiles.posts_may_be_missing": "Некоторые сообщения из этого профиля могут отсутствовать.", - "hints.profiles.see_more_followers": "Посмотреть больше подписчиков на {domain}", - "hints.profiles.see_more_follows": "Смотрите другие материалы по теме {domain}", - "hints.profiles.see_more_posts": "Посмотреть другие сообщения на {domain}", + "hashtags.and_other": "…и {count, plural, other {ещё #}}", + "hints.profiles.followers_may_be_missing": "Подписчики этого профиля могут отсутствовать.", + "hints.profiles.follows_may_be_missing": "Подписки этого профиля могут отсутствовать.", + "hints.profiles.posts_may_be_missing": "Некоторые сообщения этого профиля могут отсутствовать.", + "hints.profiles.see_more_followers": "Перейдите на {domain}, чтобы увидеть всех подписчиков", + "hints.profiles.see_more_follows": "Перейдите на {domain}, чтобы увидеть все подписки", + "hints.profiles.see_more_posts": "Перейдите на {domain}, чтобы увидеть все посты", "hints.threads.replies_may_be_missing": "Ответы с других серверов могут отсутствовать.", - "hints.threads.see_more": "Посмотреть другие ответы на {domain}", + "hints.threads.see_more": "Перейдите на {domain}, чтобы увидеть все ответы", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", "home.hide_announcements": "Скрыть объявления", @@ -366,17 +371,17 @@ "home.pending_critical_update.link": "Посмотреть обновления", "home.pending_critical_update.title": "Доступно критическое обновление безопасности!", "home.show_announcements": "Показать объявления", - "ignore_notifications_modal.disclaimer": "Mastodon не может сообщить пользователям, что вы проигнорировали их уведомления. Игнорирование уведомлений не остановит отправку самих сообщений.", - "ignore_notifications_modal.filter_instead": "Фильтр вместо", - "ignore_notifications_modal.filter_to_act_users": "Вы и далее сможете принять, отвергнуть и жаловаться на пользователей", - "ignore_notifications_modal.filter_to_avoid_confusion": "Фильтрация помогает избежать потенциальной путаницы", - "ignore_notifications_modal.filter_to_review_separately": "Вы можете просматривать отфильтрованные уведомления отдельно", + "ignore_notifications_modal.disclaimer": "Mastodon не может сообщить пользователям, что вы игнорируете их уведомления. Игнорирование уведомлений не остановит отправку самих сообщений.", + "ignore_notifications_modal.filter_instead": "Фильтровать", + "ignore_notifications_modal.filter_to_act_users": "Вы по-прежнему сможете принимать и отклонять запросы, а также отправлять жалобы на пользователей", + "ignore_notifications_modal.filter_to_avoid_confusion": "Фильтрация поможет избежать возможной путаницы", + "ignore_notifications_modal.filter_to_review_separately": "Отфильтрованные уведомления можно просматривать отдельно", "ignore_notifications_modal.ignore": "Игнорировать уведомления", - "ignore_notifications_modal.limited_accounts_title": "Игнорировать уведомления от модерируемых аккаунтов?", - "ignore_notifications_modal.new_accounts_title": "Игнорировать уведомления от новых аккаунтов?", - "ignore_notifications_modal.not_followers_title": "Игнорировать уведомления от людей, которые не следят за вами?", - "ignore_notifications_modal.not_following_title": "Игнорировать уведомления от людей, за которыми вы не следите?", - "ignore_notifications_modal.private_mentions_title": "Игнорировать уведомления о нежелательных личных сообщениях?", + "ignore_notifications_modal.limited_accounts_title": "Игнорировать уведомления от модерируемых учётных записей?", + "ignore_notifications_modal.new_accounts_title": "Игнорировать уведомления от новых учётных записей?", + "ignore_notifications_modal.not_followers_title": "Игнорировать уведомления от людей, не подписанных на вас?", + "ignore_notifications_modal.not_following_title": "Игнорировать уведомления от людей, на которых вы не подписаны?", + "ignore_notifications_modal.private_mentions_title": "Игнорировать уведомления о нежелательных личных упоминаниях?", "interaction_modal.description.favourite": "С учётной записью Mastodon, вы можете добавить этот пост в избранное, чтобы сохранить его на будущее и дать автору знать, что пост вам понравился.", "interaction_modal.description.follow": "С учётной записью Mastodon вы можете подписаться на {name}, чтобы получать их посты в своей домашней ленте.", "interaction_modal.description.reblog": "С учётной записью Mastodon, вы можете продвинуть этот пост, чтобы поделиться им со своими подписчиками.", @@ -390,7 +395,7 @@ "interaction_modal.sign_in_hint": "Совет: Это сайт, на котором вы зарегистрировались. Если вы не помните, найдите приветственное письмо в своем почтовом ящике. Вы также можете ввести свое полное имя пользователя! (например, @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "Добавить пост {name} в избранное", "interaction_modal.title.follow": "Подписаться на {name}", - "interaction_modal.title.reblog": "Продвинуть публикацию {name}", + "interaction_modal.title.reblog": "Продвинуть пост {name}", "interaction_modal.title.reply": "Ответить на пост {name}", "intervals.full.days": "{number, plural, one {# день} few {# дня} other {# дней}}", "intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}", @@ -404,8 +409,8 @@ "keyboard_shortcuts.direct": "чтобы открыть столбец личных упоминаний", "keyboard_shortcuts.down": "вниз по списку", "keyboard_shortcuts.enter": "открыть пост", - "keyboard_shortcuts.favourite": "Добавить пост в избранное", - "keyboard_shortcuts.favourites": "Открыть «Избранное»", + "keyboard_shortcuts.favourite": "добавить пост в избранное", + "keyboard_shortcuts.favourites": "открыть «Избранные»", "keyboard_shortcuts.federated": "перейти к глобальной ленте", "keyboard_shortcuts.heading": "Сочетания клавиш", "keyboard_shortcuts.home": "перейти к домашней ленте", @@ -413,7 +418,7 @@ "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": "открыть вложение", @@ -423,15 +428,17 @@ "keyboard_shortcuts.requests": "перейти к запросам на подписку", "keyboard_shortcuts.search": "перейти к поиску", "keyboard_shortcuts.spoilers": "показать/скрыть поле предупреждения о содержании", - "keyboard_shortcuts.start": "Перейти к разделу \"Начать\"", + "keyboard_shortcuts.start": "перейти к разделу \"добро пожаловать\"", "keyboard_shortcuts.toggle_hidden": "показать/скрыть текст за предупреждением", - "keyboard_shortcuts.toggle_sensitivity": "Показать/скрыть медиафайлы", + "keyboard_shortcuts.toggle_sensitivity": "показать/скрыть медиафайлы", "keyboard_shortcuts.toot": "начать писать новый пост", "keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска", "keyboard_shortcuts.up": "вверх по списку", "lightbox.close": "Закрыть", "lightbox.next": "Далее", "lightbox.previous": "Назад", + "lightbox.zoom_in": "Масштаб до фактического размера", + "lightbox.zoom_out": "Масштаб по размеру экрана", "limited_account_hint.action": "Все равно показать профиль", "limited_account_hint.title": "Этот профиль был скрыт модераторами {domain}.", "link_preview.author": "Автор: {name}", @@ -442,11 +449,11 @@ "lists.delete": "Удалить список", "lists.edit": "Изменить список", "lists.edit.submit": "Изменить название", - "lists.exclusive": "Скрыть эти сообщения из дома", + "lists.exclusive": "Не показывать посты из этого списка в домашней ленте", "lists.new.create": "Создать список", "lists.new.title_placeholder": "Название для нового списка", - "lists.replies_policy.followed": "Любой подписанный пользователь", - "lists.replies_policy.list": "Пользователи в списке", + "lists.replies_policy.followed": "Все пользователи, на которых вы подписаны", + "lists.replies_policy.list": "Другие пользователи в списке", "lists.replies_policy.none": "Никого", "lists.replies_policy.title": "Показать ответы только:", "lists.search": "Искать среди подписок", @@ -456,26 +463,26 @@ "media_gallery.hide": "Скрыть", "moved_to_account_banner.text": "Ваша учетная запись {disabledAccount} в настоящее время заморожена, потому что вы переехали на {movedToAccount}.", "mute_modal.hide_from_notifications": "Скрыть из уведомлений", - "mute_modal.hide_options": "Скрыть параметры", - "mute_modal.indefinite": "Пока я не разблокирую их", + "mute_modal.hide_options": "Скрыть опции", + "mute_modal.indefinite": "Бессрочно", "mute_modal.show_options": "Показать опции", - "mute_modal.they_can_mention_and_follow": "Они могут упоминать и следить за вами, но вы не будете их видеть.", - "mute_modal.they_wont_know": "Они не будут знать, что их заглушили.", - "mute_modal.title": "Заглушить пользователя?", - "mute_modal.you_wont_see_mentions": "Вы не увидите постов, которые их упоминают.", - "mute_modal.you_wont_see_posts": "Они по-прежнему смогут видеть ваши посты, но вы не сможете видеть их посты.", + "mute_modal.they_can_mention_and_follow": "Он сможет упоминать вас и подписаться на вас, но вы этого не увидите.", + "mute_modal.they_wont_know": "Он не будет знать, что вы его игнорируете.", + "mute_modal.title": "Игнорировать пользователя?", + "mute_modal.you_wont_see_mentions": "Вы не увидите посты, которые его упоминают.", + "mute_modal.you_wont_see_posts": "Он по-прежнему сможет видеть ваши посты, но вы не будете видеть его посты.", "navigation_bar.about": "О проекте", - "navigation_bar.administration": "Администрация", - "navigation_bar.advanced_interface": "Включить многоколоночный интерфейс", + "navigation_bar.administration": "Администрирование", + "navigation_bar.advanced_interface": "Открыть в многоколоночном интерфейсе", "navigation_bar.blocks": "Заблокированные пользователи", "navigation_bar.bookmarks": "Закладки", "navigation_bar.community_timeline": "Локальная лента", "navigation_bar.compose": "Создать новый пост", "navigation_bar.direct": "Личные упоминания", "navigation_bar.discover": "Изучайте", - "navigation_bar.domain_blocks": "Скрытые домены", + "navigation_bar.domain_blocks": "Заблокированные домены", "navigation_bar.explore": "Обзор", - "navigation_bar.favourites": "Избранные", + "navigation_bar.favourites": "Избранное", "navigation_bar.filters": "Игнорируемые слова", "navigation_bar.follow_requests": "Запросы на подписку", "navigation_bar.followed_tags": "Отслеживаемые хэштеги", @@ -492,25 +499,27 @@ "navigation_bar.search": "Поиск", "navigation_bar.security": "Безопасность", "not_signed_in_indicator.not_signed_in": "Вам нужно войти, чтобы иметь доступ к этому ресурсу.", - "notification.admin.report": "{name} сообщил о {target}", - "notification.admin.report_account": "{name} сообщил {count, plural, one {один пост} other {# постов}} от {target} для {category}", - "notification.admin.report_account_other": "{name} сообщил {count, plural, one {одно сообщение} other {# сообщений}} от {target}", - "notification.admin.report_statuses": "{name} сообщил {target} для {category}", - "notification.admin.report_statuses_other": "{name} сообщает {target}", - "notification.admin.sign_up": "{name} зарегистрирован", - "notification.admin.sign_up.name_and_others": "{name} и {count, plural, one {# другой} other {# другие}} подписались", + "notification.admin.report": "{name} пожаловался на {target}", + "notification.admin.report_account": "{name} пожаловался на {count, plural, one {# пост} few {# поста} other {# постов}} от пользователя {target} по причине: {category}", + "notification.admin.report_account_other": "{name} пожаловался на {count, plural, one {# пост} few {# поста} other {# постов}} от пользователя {target}", + "notification.admin.report_statuses": "{name} пожаловался на {target} по причине: {category}", + "notification.admin.report_statuses_other": "{name} пожаловался на {target}", + "notification.admin.sign_up": "{name} зарегистрировался", + "notification.admin.sign_up.name_and_others": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} зарегистрировались", "notification.favourite": "{name} добавил(а) ваш пост в избранное", - "notification.favourite.name_and_others_with_link": "{name} и {count, plural, one {# другие} other {# другие}} отдали предпочтение вашему посту", + "notification.favourite.name_and_others_with_link": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} добавили ваш пост в избранное", "notification.follow": "{name} подписался (-лась) на вас", + "notification.follow.name_and_others": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} подписались на вас", "notification.follow_request": "{name} отправил запрос на подписку", - "notification.follow_request.name_and_others": "{name} и {count, plural, one {# другие} other {# другие}} последовали за тобой", + "notification.follow_request.name_and_others": "{name} и ещё {count, plural, one {#} other {# других}} подписались на вас", "notification.label.mention": "Упоминание", - "notification.label.private_mention": "Частное упоминание", - "notification.label.private_reply": "Частный ответ", - "notification.label.reply": "Ответить", + "notification.label.private_mention": "Личное упоминание", + "notification.label.private_reply": "Приватный ответ", + "notification.label.reply": "Ответ", "notification.mention": "Упоминание", + "notification.mentioned_you": "{name} упомянул(а) вас", "notification.moderation-warning.learn_more": "Узнать больше", - "notification.moderation_warning": "Вы получили предупреждение от модерации", + "notification.moderation_warning": "Модераторы вынесли вам предупреждение", "notification.moderation_warning.action_delete_statuses": "Некоторые из ваших публикаций были удалены.", "notification.moderation_warning.action_disable": "Ваша учётная запись была отключена.", "notification.moderation_warning.action_mark_statuses_as_sensitive": "Некоторые из ваших сообщений были отмечены как деликатные.", @@ -518,42 +527,48 @@ "notification.moderation_warning.action_sensitive": "С этого момента ваши сообщения будут помечены как деликатные.", "notification.moderation_warning.action_silence": "Ваша учётная запись была ограничена.", "notification.moderation_warning.action_suspend": "Действие вашей учётной записи приостановлено.", - "notification.own_poll": "Ваш опрос закончился", - "notification.poll": "Голосование, в котором вы приняли участие, завершилось", + "notification.own_poll": "Ваш опрос завершился", + "notification.poll": "Опрос, в котором вы приняли участие, завершился", "notification.reblog": "{name} продвинул(а) ваш пост", - "notification.reblog.name_and_others_with_link": "{name} и {count, plural, one {# other} other {# others}} увеличили ваш пост", + "notification.reblog.name_and_others_with_link": "{name} и ещё {count, plural, one {# пользователь} few {# пользователя} other {# пользователей}} продвинули ваш пост", "notification.relationships_severance_event": "Потеряно соединение с {name}", "notification.relationships_severance_event.account_suspension": "Администратор {from} заблокировал {target}, что означает, что вы больше не сможете получать обновления от них или взаймодествовать с ними.", "notification.relationships_severance_event.domain_block": "Администратор {from} заблокировал {target} включая {followersCount} ваших подписчиков и {followingCount, plural, one {# аккаунт} few {# аккаунта} other {# аккаунтов}}, на которые вы подписаны.", "notification.relationships_severance_event.learn_more": "Узнать больше", "notification.relationships_severance_event.user_domain_block": "Вы заблокировали {target} включая {followersCount} ваших подписчиков и {followingCount, plural, one {# аккаунт} few {# аккаунта} other {# аккаунтов}}, на которые вы подписаны.", - "notification.status": "{name} только что запостил", + "notification.status": "{name} опубликовал(а) новый пост", "notification.update": "{name} изменил(а) пост", "notification_requests.accept": "Принять", - "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Принять запрос} other {Принять запросы}}", - "notification_requests.confirm_accept_multiple.title": "Принимать запросы на уведомления?", - "notification_requests.confirm_dismiss_multiple.title": "Отклонять запросы на уведомления?", + "notification_requests.accept_multiple": "{count, plural, one {Принять # запрос…} few {Принять # запроса…} other {Принять # запросов…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, other {Принять запросы}}", + "notification_requests.confirm_accept_multiple.message": "Вы собираетесь принять {count, plural, one {# запрос на показ уведомлений} few {# запроса на показ уведомлений} other {# запросов на показ уведомлений}}. Продолжить?", + "notification_requests.confirm_accept_multiple.title": "Принять запросы на уведомления?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, other {Отклонить запросы}}", + "notification_requests.confirm_dismiss_multiple.message": "Вы собираетесь отклонить {count, plural, one {# запрос на показ уведомлений} few {# запроса на показ уведомлений} other {# запросов на показ уведомлений}}. Вы не сможете просмотреть {count, plural, other {их}} потом. Продолжить?", + "notification_requests.confirm_dismiss_multiple.title": "Отклонить запросы на уведомления?", "notification_requests.dismiss": "Отклонить", - "notification_requests.edit_selection": "Редактировать", + "notification_requests.dismiss_multiple": "{count, plural, one {Отклонить # запрос…} few {Отклонить # запроса…} other {Отклонить # запросов…}}", + "notification_requests.edit_selection": "Изменить", "notification_requests.exit_selection": "Готово", - "notification_requests.explainer_for_limited_account": "Уведомления от этой учетной записи были отфильтрованы, поскольку учетная запись была ограничена модератором.", - "notification_requests.explainer_for_limited_remote_account": "Уведомления от этой учетной записи были отфильтрованы, поскольку учетная запись или ее сервер были ограничены модератором.", + "notification_requests.explainer_for_limited_account": "Эта учётная запись ограничена модератором, поэтому уведомления от неё были отфильтрованы.", + "notification_requests.explainer_for_limited_remote_account": "Эта учётная запись или её сервер ограничены модератором, поэтому уведомления от неё были отфильтрованы.", "notification_requests.maximize": "Развернуть", - "notification_requests.minimize_banner": "Минимизация баннера отфильтрованных уведомлений", + "notification_requests.minimize_banner": "Свернуть панель отфильтрованных уведомлений в значок", "notification_requests.notifications_from": "Уведомления от {name}", "notification_requests.title": "Отфильтрованные уведомления", "notification_requests.view": "Просмотр уведомлений", "notifications.clear": "Очистить уведомления", "notifications.clear_confirmation": "Вы уверены, что хотите очистить все уведомления?", - "notifications.clear_title": "Сбросить уведомления?", + "notifications.clear_title": "Очистить уведомления?", "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.favourite": "Ваш пост добавили в избранное:", + "notifications.column_settings.filter_bar.advanced": "Показать все категории", + "notifications.column_settings.filter_bar.category": "Панель быстрых фильтров", "notifications.column_settings.follow": "У вас новый подписчик:", "notifications.column_settings.follow_request": "Новые запросы на подписку:", + "notifications.column_settings.group": "Группировать", "notifications.column_settings.mention": "Вас упомянули в посте:", "notifications.column_settings.poll": "Опрос, в котором вы приняли участие, завершился:", "notifications.column_settings.push": "Пуш-уведомления", @@ -563,41 +578,42 @@ "notifications.column_settings.status": "Новые посты:", "notifications.column_settings.unread_notifications.category": "Непрочитанные уведомления", "notifications.column_settings.unread_notifications.highlight": "Выделять непрочитанные уведомления", - "notifications.column_settings.update": "Правки:", + "notifications.column_settings.update": "Пост был отредактирован:", "notifications.filter.all": "Все", "notifications.filter.boosts": "Продвижения", "notifications.filter.favourites": "Избранное", - "notifications.filter.follows": "Подписки", + "notifications.filter.follows": "Новые подписчики", "notifications.filter.mentions": "Упоминания", "notifications.filter.polls": "Результаты опросов", "notifications.filter.statuses": "Обновления от людей, на которых вы подписаны", "notifications.grant_permission": "Предоставить разрешение.", "notifications.group": "{count} уведомл.", - "notifications.mark_as_read": "Отмечать все уведомления прочитанными", + "notifications.mark_as_read": "Отметить все уведомления прочитанными", "notifications.permission_denied": "Уведомления на рабочем столе недоступны, так как вы запретили их отправку в браузере. Проверьте настройки для сайта, чтобы включить их обратно.", "notifications.permission_denied_alert": "Уведомления на рабочем столе недоступны, так как вы ранее отклонили запрос на их отправку.", "notifications.permission_required": "Чтобы включить уведомления на рабочем столе, необходимо разрешить их в браузере.", - "notifications.policy.accept": "Принять", - "notifications.policy.accept_hint": "Показать в уведомлениях", - "notifications.policy.drop": "Игнорируем", - "notifications.policy.drop_hint": "Отправить в пустоту, чтобы никогда больше не увидеть", - "notifications.policy.filter": "Фильтр", - "notifications.policy.filter_hint": "Отправка в папку фильтрованных уведомлений", - "notifications.policy.filter_limited_accounts_hint": "Ограничено модераторами сервера", - "notifications.policy.filter_limited_accounts_title": "Модерируемые аккаунты", - "notifications.policy.filter_new_accounts.hint": "Создано в течение последних {days, plural, one {один день} few {# дней} many {# дней} other {# дня}}", + "notifications.policy.accept": "Принимать", + "notifications.policy.accept_hint": "Показывать в уведомлениях", + "notifications.policy.drop": "Игнорировать", + "notifications.policy.drop_hint": "Отправлять в пустоту, чтобы никогда больше не увидеть", + "notifications.policy.filter": "Фильтровать", + "notifications.policy.filter_hint": "Отправлять в раздел отфильтрованных уведомлений", + "notifications.policy.filter_limited_accounts_hint": "Ограниченные модераторами сервера", + "notifications.policy.filter_limited_accounts_title": "Модерируемые учётные записи", + "notifications.policy.filter_new_accounts.hint": "Созданные в течение {days, plural, one {последнего # дня} other {последних # дней}}", "notifications.policy.filter_new_accounts_title": "Новые учётные записи", + "notifications.policy.filter_not_followers_hint": "Включая людей, которые подписаны на вас меньше чем {days, plural, one {# день} few {# дня} other {# дней}}", "notifications.policy.filter_not_followers_title": "Люди, не подписанные на вас", "notifications.policy.filter_not_following_hint": "Пока вы не одобрите их вручную", "notifications.policy.filter_not_following_title": "Люди, на которых вы не подписаны", - "notifications.policy.filter_private_mentions_hint": "Фильтруется, если только это не ответ на ваше собственное упоминание или если вы подписаны на отправителя", + "notifications.policy.filter_private_mentions_hint": "Фильтруются, если только это не ответ на ваше собственное упоминание или если вы подписаны на отправителя", "notifications.policy.filter_private_mentions_title": "Нежелательные личные упоминания", - "notifications.policy.title": "………Управлять уведомлениями от…", + "notifications.policy.title": "Управление уведомлениями", "notifications_permission_banner.enable": "Включить уведомления", "notifications_permission_banner.how_to_control": "Получайте уведомления даже когда Mastodon закрыт, включив уведомления на рабочем столе. А чтобы лишний шум не отвлекал, вы можете настроить какие уведомления вы хотите получать, нажав на кнопку {icon} выше.", "notifications_permission_banner.title": "Будьте в курсе происходящего", - "onboarding.action.back": "Вернуть меня", - "onboarding.actions.back": "Вернуть меня", + "onboarding.action.back": "Верните меня", + "onboarding.actions.back": "Верните меня", "onboarding.actions.go_to_explore": "Посмотреть, что актуально", "onboarding.actions.go_to_home": "Перейти к домашней ленте новостей", "onboarding.compose.template": "Привет, #Mastodon!", @@ -615,7 +631,7 @@ "onboarding.profile.title": "Настройка профиля", "onboarding.profile.upload_avatar": "Загрузить фотографию профиля", "onboarding.profile.upload_header": "Загрузить заголовок профиля", - "onboarding.share.lead": "Расскажите людям, как они могут найти вас на Mastodon!", + "onboarding.share.lead": "Расскажите людям, как найти вас на Mastodon!", "onboarding.share.message": "Я {username} на #Mastodon! Следуйте за мной по адресу {url}", "onboarding.share.next_steps": "Возможные дальнейшие шаги:", "onboarding.share.title": "Поделиться вашим профилем", @@ -630,9 +646,9 @@ "onboarding.steps.setup_profile.title": "Настройте свой профиль", "onboarding.steps.share_profile.body": "Расскажите своим друзьям как найти вас на Mastodon!", "onboarding.steps.share_profile.title": "Поделитесь вашим профилем", - "onboarding.tips.2fa": "Знаете ли вы? Вы можете защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не требуется!", + "onboarding.tips.2fa": "А вы знали? Можно защитить свой аккаунт, настроив двухфакторную аутентификацию в настройках аккаунта. Она работает с любым приложением TOTP по вашему выбору, номер телефона не нужен!", "onboarding.tips.accounts_from_other_servers": "Знали ли вы? Поскольку Mastodon децентрализован, некоторые профили, с которыми вы столкнетесь, будут размещены на серверах, отличных от вашего. И все же вы можете взаимодействовать с ними без проблем! Их сервер находится во второй половине имени пользователя!", - "onboarding.tips.migration": "Знаете ли вы? Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих последователей. Вы даже можете разместить свой собственный сервер!", + "onboarding.tips.migration": "Знаете ли вы? Если вы чувствуете, что {domain} не подходит вам в качестве сервера в будущем, вы можете переехать на другой сервер Mastodon без потери своих подписчиков. Вы даже можете разместить свой собственный сервер!", "onboarding.tips.verification": "Знали ли вы? Вы можете подтвердить свою учетную запись, разместив ссылку на свой профиль Mastodon на собственном сайте и добавив сайт в свой профиль. Никаких сборов или документов не требуется!", "password_confirmation.exceeds_maxlength": "Срок подтверждения пароля превышает максимальную длину пароля", "password_confirmation.mismatching": "Введенные пароли не совпадают.", @@ -651,10 +667,10 @@ "privacy.direct.long": "Все упомянутые в посте", "privacy.direct.short": "Определённые люди", "privacy.private.long": "Только ваши подписчики", - "privacy.private.short": "Подписчики", - "privacy.public.long": "Любой, находящийся на Mastodon и вне его", + "privacy.private.short": "Для подписчиков", + "privacy.public.long": "Кто угодно в интернете", "privacy.public.short": "Публичный", - "privacy.unlisted.additional": "Работает точно так же, как public, за исключением того, что пост не будет отображаться в прямых лентах, хэштегах, исследованиях или поиске Mastodon, даже если ваш аккаунт подписан на это на уровне всего аккаунта.", + "privacy.unlisted.additional": "Похоже на «Публичный» за исключением того, что пост не появится ни в живых лентах, ни в лентах хэштегов, ни в разделе «Обзор», ни в поиске Mastodon, даже если вы разрешили поиск по своим постам в настройках профиля.", "privacy.unlisted.long": "Меньше алгоритмических фанфар", "privacy.unlisted.short": "Тихий публичный", "privacy_policy.last_updated": "Последнее обновление {date}", @@ -674,15 +690,15 @@ "relative_time.minutes": "{number} мин", "relative_time.seconds": "{number} с", "relative_time.today": "сегодня", - "reply_indicator.attachments": "{count, plural, one {# вложение} other {# вложения}}", + "reply_indicator.attachments": "{count, plural, one {# вложение} few {# вложения} other {# вложений}}", "reply_indicator.cancel": "Отмена", "reply_indicator.poll": "Опрос", "report.block": "Заблокировать", "report.block_explanation": "Вы перестанете видеть посты этого пользователя, и он(а) больше не сможет подписаться на вас и читать ваши посты. Он(а) сможет понять, что вы заблокировали его/её.", - "report.categories.legal": "Правовая информация", + "report.categories.legal": "Нарушение закона", "report.categories.other": "Другое", "report.categories.spam": "Спам", - "report.categories.violation": "Содержимое нарушает одно или несколько правил узла", + "report.categories.violation": "Содержимое нарушает одно или несколько правил сервера", "report.category.subtitle": "Выберите наиболее подходящее", "report.category.title": "Расскажите нам, что не так с {type}", "report.category.title_account": "этим профилем", @@ -690,7 +706,7 @@ "report.close": "Готово", "report.comment.title": "Есть ли что-нибудь ещё, что нам стоит знать?", "report.forward": "Переслать в {target}", - "report.forward_hint": "Эта учётная запись расположена на другом узле. Отправить туда анонимную копию вашей жалобы?", + "report.forward_hint": "Эта учётная запись расположена на другом сервере. Отправить туда анонимную копию вашей жалобы?", "report.mute": "Игнорировать", "report.mute_explanation": "Вы не будете видеть их посты. Они по-прежнему могут подписываться на вас и видеть ваши посты, но не будут знать, что они в списке игнорируемых.", "report.next": "Далее", @@ -718,13 +734,13 @@ "report.unfollow": "Отписаться от @{name}", "report.unfollow_explanation": "Вы подписаны на этого пользователя. Чтобы не видеть его/её посты в своей домашней ленте, отпишитесь от него/неё.", "report_notification.attached_statuses": "{count, plural, one {{count} сообщение} few {{count} сообщения} many {{count} сообщений} other {{count} сообщений}} вложено", - "report_notification.categories.legal": "Правовая информация", - "report_notification.categories.legal_sentence": "срамной контент", - "report_notification.categories.other": "Прочее", + "report_notification.categories.legal": "Нарушение закона", + "report_notification.categories.other": "Другое", "report_notification.categories.other_sentence": "другое", "report_notification.categories.spam": "Спам", "report_notification.categories.spam_sentence": "спам", "report_notification.categories.violation": "Нарушение правил", + "report_notification.categories.violation_sentence": "нарушение правила", "report_notification.open": "Открыть жалобу", "search.no_recent_searches": "Недавние запросы отсутствуют", "search.placeholder": "Поиск", @@ -752,33 +768,34 @@ "server_banner.about_active_users": "Люди, заходившие на этот сервер за последние 30 дней (ежемесячные активные пользователи)", "server_banner.active_users": "активные пользователи", "server_banner.administered_by": "Управляется:", - "server_banner.is_one_of_many": "{domain} - это один из многих независимых серверов Mastodon, которые вы можете использовать для участия в fediverse.", + "server_banner.is_one_of_many": "{domain} — это один из многих независимых серверов Mastodon, которые вы можете использовать, чтобы присоединиться к сети Fediverse.", "server_banner.server_stats": "Статистика сервера:", - "sign_in_banner.create_account": "Создать учётную запись", - "sign_in_banner.follow_anyone": "Следите за любым человеком в федеральной вселенной и смотрите все в хронологическом порядке. Никаких алгоритмов, рекламы или клик бейта.", - "sign_in_banner.mastodon_is": "Mastodon - лучший способ быть в курсе всего происходящего.", + "sign_in_banner.create_account": "Зарегистрироваться", + "sign_in_banner.follow_anyone": "Подписывайтесь на кого угодно в федивёрсе и читайте ленту в хронологическом порядке. Никаких алгоритмов, рекламы или кликбейта.", + "sign_in_banner.mastodon_is": "Mastodon — лучший способ быть в курсе всего происходящего.", "sign_in_banner.sign_in": "Войти", "sign_in_banner.sso_redirect": "Войдите или Зарегистрируйтесь", "status.admin_account": "Открыть интерфейс модератора для @{name}", - "status.admin_domain": "Открыть интерфейс модерации {domain}", + "status.admin_domain": "Открыть интерфейс модератора для {domain}", "status.admin_status": "Открыть этот пост в интерфейсе модератора", "status.block": "Заблокировать @{name}", - "status.bookmark": "Сохранить в закладки", - "status.cancel_reblog_private": "Не продвигать", + "status.bookmark": "Добавить в закладки", + "status.cancel_reblog_private": "Отменить продвижение", "status.cannot_reblog": "Этот пост не может быть продвинут", - "status.continued_thread": "Продолжение темы", + "status.continued_thread": "Продолжение треда", "status.copy": "Скопировать ссылку на пост", "status.delete": "Удалить", "status.detailed_status": "Подробный просмотр обсуждения", - "status.direct": "Лично упоминать @{name}", - "status.direct_indicator": "Личные упоминания", - "status.edit": "Изменить", + "status.direct": "Упомянуть @{name} лично", + "status.direct_indicator": "Личное упоминание", + "status.edit": "Редактировать", "status.edited": "Дата последнего изменения: {date}", "status.edited_x_times": "{count, plural, one {{count} изменение} many {{count} изменений} other {{count} изменения}}", - "status.embed": "Получить код для встраивания", - "status.favourite": "Избранное", + "status.embed": "Встроить на свой сайт", + "status.favourite": "Добавить в избранное", + "status.favourites": "{count, plural, other {в избранном}}", "status.filter": "Фильтровать этот пост", - "status.history.created": "{name} создал {date}", + "status.history.created": "{name} создал(а) {date}", "status.history.edited": "{name} отредактировал(а) {date}", "status.load_more": "Загрузить остальное", "status.media.open": "Нажмите, чтобы открыть.", @@ -795,26 +812,27 @@ "status.reblog": "Продвинуть", "status.reblog_private": "Продвинуть для своей аудитории", "status.reblogged_by": "{name} продвинул(а)", + "status.reblogs": "{count, plural, one {продвижение} few {продвижения} other {продвижений}}", "status.reblogs.empty": "Никто ещё не продвинул этот пост. Как только кто-то это сделает, они появятся здесь.", "status.redraft": "Создать заново", "status.remove_bookmark": "Убрать из закладок", - "status.replied_in_thread": "Ответил в теме", + "status.replied_in_thread": "Ответил(а) в треде", "status.replied_to": "Ответил(а) {name}", "status.reply": "Ответить", "status.replyAll": "Ответить всем", - "status.report": "Пожаловаться", + "status.report": "Пожаловаться на @{name}", "status.sensitive_warning": "Содержимое «деликатного характера»", "status.share": "Поделиться", "status.show_less_all": "Свернуть все спойлеры в ветке", "status.show_more_all": "Развернуть все спойлеры в ветке", "status.show_original": "Показать оригинал", - "status.title.with_attachments": "{user} размещено {attachmentCount, plural, one {вложение} other {{attachmentCount} вложений}}", + "status.title.with_attachments": "{user} опубликовал {attachmentCount, plural, one {{attachmentCount} вложение} few {{attachmentCount} вложения} other {{attachmentCount} вложений}}", "status.translate": "Перевод", - "status.translated_from_with": "Переведено с {lang}, используя {provider}", - "status.uncached_media_warning": "Прослушивание недоступно", + "status.translated_from_with": "Переведено с {lang} с помощью {provider}", + "status.uncached_media_warning": "Предварительный просмотр недоступен", "status.unmute_conversation": "Не игнорировать обсуждение", "status.unpin": "Открепить от профиля", - "subscribed_languages.lead": "Посты только на выбранных языках будут отображаться на вашей домашней странице и в списке лент после изменения. Выберите «Нет», чтобы получать посты на всех языках.", + "subscribed_languages.lead": "Посты лишь на выбранных языках будут появляться в вашей домашней ленте и в списках после изменения. Снимите выбор, чтобы получать посты на всех языках.", "subscribed_languages.save": "Сохранить изменения", "subscribed_languages.target": "Изменить языки подписки для {target}", "tabs_bar.home": "Главная", @@ -824,7 +842,7 @@ "time_remaining.minutes": "{number, plural, one {осталась # минута} few {осталось # минуты} many {осталось # минут} other {осталось # минут}}", "time_remaining.moments": "остались считанные мгновения", "time_remaining.seconds": "{number, plural, one {# секунда} many {# секунд} other {# секунды}}", - "trends.counter_by_accounts": "{count, plural, few {{counter} человека} other {{counter} человек}} за {days, plural, one {последний день} few {последние {days} дня} other {последние {days} дней}}", + "trends.counter_by_accounts": "{count, plural, few {{counter} человека} other {{counter} человек}} за {days, plural, one {последний {days} день} few {последние {days} дня} other {последние {days} дней}}", "trends.trending_now": "Самое актуальное", "ui.beforeunload": "Ваш черновик будет утерян, если вы покинете Mastodon.", "units.short.billion": "{count} млрд", @@ -836,7 +854,12 @@ "upload_error.poll": "К опросам нельзя прикреплять файлы.", "upload_form.audio_description": "Опишите аудиофайл для людей с нарушением слуха", "upload_form.description": "Добавьте описание для людей с нарушениями зрения:", - "upload_form.edit": "Изменить", + "upload_form.drag_and_drop.instructions": "Чтобы подобрать прикрепленный файл, нажмите \"Пробел\" (Space) или \"Ввод\" (Enter). При перетаскивании используйте клавиши со стрелками, чтобы переместить прикрепленные файлы в любом направлении. Нажмите \"Пробел\" (Space) или \"Ввод\" (Enter) еще раз, чтобы переместить вложение в новое место, или нажмите кнопку \"Выйти\" (Escape), чтобы отменить.", + "upload_form.drag_and_drop.on_drag_cancel": "Перетаскивание было отменено. Вложение медиа {item} было удалено.", + "upload_form.drag_and_drop.on_drag_end": "Медиа вложение {item} было удалено.", + "upload_form.drag_and_drop.on_drag_over": "Медиа вложение {item} было перемещено.", + "upload_form.drag_and_drop.on_drag_start": "Загружается медиафайл {item}.", + "upload_form.edit": "Редактировать", "upload_form.thumbnail": "Изменить обложку", "upload_form.video_description": "Опишите видео для людей с нарушением слуха или зрения", "upload_modal.analyzing_picture": "Обработка изображения…", @@ -847,11 +870,11 @@ "upload_modal.detect_text": "Найти текст на картинке", "upload_modal.edit_media": "Изменить файл", "upload_modal.hint": "Нажмите и перетащите круг в предпросмотре в точку фокуса, которая всегда будет видна на эскизах.", - "upload_modal.preparing_ocr": "Подготовка распознования…", + "upload_modal.preparing_ocr": "Подготовка распознавания…", "upload_modal.preview_label": "Предпросмотр ({ratio})", "upload_progress.label": "Загрузка...", "upload_progress.processing": "Обработка…", - "username.taken": "Данное имя пользователя уже занято. Выберите другое.", + "username.taken": "Это имя пользователя уже занято. Выберите другое", "video.close": "Закрыть видео", "video.download": "Загрузить файл", "video.exit_fullscreen": "Покинуть полноэкранный режим", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index bb7d062b95..4ee5627388 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Màssimu de rechestas barigadu", "alert.unexpected.message": "Ddoe est istada una faddina.", "alert.unexpected.title": "Oh!", + "alt_text_badge.title": "Testu alternativu", "announcement.announcement": "Annùntziu", "attachments_list.unprocessed": "(non protzessadu)", "audio.hide": "Cua s'àudio", @@ -97,6 +98,8 @@ "block_modal.title": "Boles blocare s'utente?", "block_modal.you_wont_see_mentions": "No as a bìdere is publicatziones chi mèntovent custa persone.", "boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit", + "boost_modal.reblog": "Boles potentziare sa publicatzione?", + "boost_modal.undo_reblog": "Boles tzessare de potentziare sa publicatzione?", "bundle_column_error.copy_stacktrace": "Còpia s'informe de faddina", "bundle_column_error.error.body": "Sa pàgina pedida non faghiat a dda renderizare. Diat pòdere èssere pro neghe de una faddina in su còdighe nostru, o de unu problema de cumpatibilidade de su navigadore.", "bundle_column_error.error.title": "Oh, no!", @@ -104,11 +107,15 @@ "bundle_column_error.network.title": "Faddina de connessione", "bundle_column_error.retry": "Torra·bi a proare", "bundle_column_error.return": "Torra a sa pàgina printzipale", + "bundle_column_error.routing.body": "Impossìbile agatare sa pàgina rechesta. Seguru chi s'URL in sa barra de indiritzos est curretu?", "bundle_column_error.routing.title": "404", "bundle_modal_error.close": "Serra", "bundle_modal_error.message": "Faddina in su carrigamentu de custu cumponente.", "bundle_modal_error.retry": "Torra·bi a proare", + "closed_registrations.other_server_instructions": "Dae chi Mastodon est detzentralizadu, podes creare unu contu in un'àteru serbidore e interagire cun custu.", + "closed_registrations_modal.description": "Sa creatzione de contos in {domain} no est possìbile in custu momentu, però tene in cunsideru chi non tenes bisòngiu de unu contu ispetzìficu in {domain} pro impreare Mastodon.", "closed_registrations_modal.find_another_server": "Agata un'àteru serbidore", + "closed_registrations_modal.title": "Su registru a Mastodon", "column.about": "Informatziones", "column.blocks": "Persones blocadas", "column.bookmarks": "Sinnalibros", @@ -142,6 +149,7 @@ "compose.published.open": "Aberi", "compose.saved.body": "Publicatzione sarvada.", "compose_form.direct_message_warning_learn_more": "Àteras informatziones", + "compose_form.encryption_warning": "Is publicatziones a Mastodon no sunt critografados a nodu terminale. Non cumpartzas informatziones delicadas in Mastodon.", "compose_form.hashtag_warning": "Custa publicatzione no at a èssere ammustrada in peruna eticheta, dae chi no est pùblica. Isceti is publicatziones pùblicas podent èssere chircadas cun etichetas.", "compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.", "compose_form.lock_disclaimer.lock": "blocadu", @@ -171,15 +179,23 @@ "confirmations.discard_edit_media.confirm": "Iscarta", "confirmations.discard_edit_media.message": "Tenes modìficas non sarvadas a is descritziones o a is anteprimas de is cuntenutos, ddas boles iscartare su matessi?", "confirmations.edit.confirm": "Modìfica", + "confirmations.edit.message": "Modifichende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?", + "confirmations.edit.title": "Boles subraiscrìere sa publicatzione?", "confirmations.logout.confirm": "Essi·nche", "confirmations.logout.message": "Seguru chi boles essire?", + "confirmations.logout.title": "Boles serrare sa sessione?", "confirmations.mute.confirm": "A sa muda", "confirmations.redraft.confirm": "Cantzella e torra a fàghere", "confirmations.redraft.message": "Seguru chi boles cantzellare e torrare a fàghere custa publicatzione? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.", + "confirmations.redraft.title": "Boles cantzellare e torrare a iscrìere sa publicatzione?", "confirmations.reply.confirm": "Risponde", "confirmations.reply.message": "Rispondende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?", + "confirmations.reply.title": "Boles subraiscrìere sa publicatzione?", "confirmations.unfollow.confirm": "Non sigas prus", "confirmations.unfollow.message": "Seguru chi non boles sighire prus a {name}?", + "confirmations.unfollow.title": "Boles tzessare de sighire s'utente?", + "content_warning.hide": "Cua sa publicatzione", + "content_warning.show": "Ammustra·dda su pròpiu", "conversation.delete": "Cantzella arresonada", "conversation.mark_as_read": "Signala comente lèghidu", "conversation.open": "Ammustra arresonada", @@ -193,7 +209,10 @@ "directory.recently_active": "Cun atividade dae pagu", "disabled_account_banner.account_settings": "Cunfiguratziones de su contu", "disabled_account_banner.text": "Su contu tuo {disabledAccount} no est ativu.", + "dismissable_banner.community_timeline": "Custas sunt is publicatziones pùblicas prus reghentes dae gente cun contu in {domain}.", "dismissable_banner.dismiss": "Iscarta", + "dismissable_banner.explore_links": "Custas sunt is istòrias de noas prus cumpartzidas in sa rete oe. Is istòrias prus noas publicadas dae gente prus diversa ant a èssere priorizadas.", + "dismissable_banner.explore_statuses": "Custas sunt publicatziones dae sa rete detzentralizada chi sunt retzende atentzione oe. Is publicatziones prus noas cun prus cumpartziduras e preferèntzias ant a èssere priorizadas.", "domain_block_modal.block": "Bloca su serbidore", "domain_block_modal.block_account_instead": "Bloca imbetzes a @{name}", "domain_block_modal.they_can_interact_with_old_posts": "Is persones de custu serbidore podent ancora interagire cun is publicatziones betzas tuas.", @@ -207,6 +226,7 @@ "domain_pill.their_handle": "S'identificadore suo:", "domain_pill.their_server": "Sa domo digitale sua, in ue istant totu is publicatziones suas.", "domain_pill.username": "Nòmine de utente", + "domain_pill.whats_in_a_handle": "Ite est un'identificadore?", "domain_pill.your_handle": "S'identificadore tuo:", "domain_pill.your_server": "Sa domo digitale tua, in ue istant totu is publicatziones tuas. Custa non t'agradat? Tràmuda serbidore in cale si siat momentu e bati·ti fintzas in fatu is sighidores tuos.", "domain_pill.your_username": "S'identificadore ùnicu tuo in custu serbidore. Si podent agatare utentes cun su matessi nòmine de utente in àteros serbidores.", @@ -254,6 +274,7 @@ "explore.trending_links": "Noas", "explore.trending_statuses": "Publicatziones", "explore.trending_tags": "Etichetas", + "filter_modal.added.context_mismatch_title": "Su cuntestu non currispondet.", "filter_modal.added.expired_title": "Filtru iscadidu.", "filter_modal.added.review_and_configure_title": "Cunfiguratziones de filtru", "filter_modal.added.settings_link": "pàgina de cunfiguratzione", @@ -277,7 +298,13 @@ "follow_suggestions.featured_longer": "Seberadu a manu dae s'iscuadra de {domain}", "follow_suggestions.friends_of_friends_longer": "Populare intre persones chi sighis", "follow_suggestions.hints.featured": "Custu profilu est istadu seberadu a manu dae s'iscuadra {domain}.", + "follow_suggestions.personalized_suggestion": "Cussìgiu personalizadu", + "follow_suggestions.popular_suggestion": "Cussìgiu populare", + "follow_suggestions.popular_suggestion_longer": "Populare a {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Profilos sìmiles a is chi as sighidu de reghente", "follow_suggestions.view_all": "Ammustra totu", + "follow_suggestions.who_to_follow": "Chie sighire", + "followed_tags": "Etichetas sighidas", "footer.about": "Informatziones", "footer.directory": "Diretòriu de profilos", "footer.get_app": "Otene s'aplicatzione", @@ -302,6 +329,11 @@ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}} oe", "hashtag.follow": "Sighi su hashtag", "hashtag.unfollow": "Non sigas prus s'eticheta", + "hashtags.and_other": "… e {count, plural, one {un'àteru} other {àteros #}}", + "hints.profiles.posts_may_be_missing": "Podet èssere chi ammanchent tzertas publicatziones de custu profilu.", + "hints.profiles.see_more_posts": "Bide prus publicatziones a {domain}", + "hints.threads.replies_may_be_missing": "Podet èssere chi ammanchent rispostas dae àteros serbidores.", + "hints.threads.see_more": "Bide prus rispostas a {domain}", "home.column_settings.show_reblogs": "Ammustra is cumpartziduras", "home.column_settings.show_replies": "Ammustra rispostas", "home.hide_announcements": "Cua annùntzios", @@ -309,7 +341,14 @@ "home.pending_critical_update.link": "Ammustra is atualizatziones", "home.pending_critical_update.title": "Atualizatzione de seguresa crìtica a disponimentu.", "home.show_announcements": "Ammustra annùntzios", + "ignore_notifications_modal.disclaimer": "Mastodon non podet informare is utentes chi as innioradu is notìficas issoro. Inniorare notìficas no at a evitare chi s'imbient is messàgios.", + "ignore_notifications_modal.filter_instead": "Opuru filtra", + "ignore_notifications_modal.filter_to_act_users": "As a pòdere ancora atzetare, refudare o sinnalare a utentes", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtrare agiudat a evitare possìbiles confusiones", "interaction_modal.description.reply": "Podes rispòndere a custa publicatzione cun unu contu de Mastodon.", + "interaction_modal.login.action": "Torra a sa pàgina printzipale", + "interaction_modal.login.prompt": "Su domìniu de su serbidore domèsticu tuo, pro esempru mastodon.social", + "interaction_modal.no_account_yet": "Non ses in Mastodon?", "interaction_modal.on_this_server": "In custu serbidore", "interaction_modal.title.follow": "Sighi a {name}", "interaction_modal.title.reply": "Risponde a sa publicatzione de {name}", @@ -353,11 +392,13 @@ "lightbox.next": "Imbeniente", "lightbox.previous": "Pretzedente", "limited_account_hint.title": "Custu profilu est istadu cuadu dae sa moderatzione de {domain}.", + "link_preview.shares": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}}", "lists.account.add": "Agiunghe a sa lista", "lists.account.remove": "Boga dae sa lista", "lists.delete": "Cantzella sa lista", "lists.edit": "Modìfica sa lista", "lists.edit.submit": "Muda su tìtulu", + "lists.exclusive": "Cua custas publicatziones dae sa pàgina printzipale", "lists.new.create": "Agiunghe lista", "lists.new.title_placeholder": "Tìtulu de sa lista noa", "lists.replies_policy.followed": "Cale si siat persone chi sighis", @@ -368,7 +409,20 @@ "lists.subheading": "Is listas tuas", "load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}", "loading_indicator.label": "Carrighende…", + "media_gallery.hide": "Cua", + "moved_to_account_banner.text": "Su contu tuo {disabledAccount} est disativadu in custu momentu ca est istadu tramudadu a {movedToAccount}.", + "mute_modal.hide_from_notifications": "Cua dae is notìficas", + "mute_modal.hide_options": "Cua is optziones", + "mute_modal.indefinite": "Fintzas a cando no apo a torrare a ativare is notìficas", + "mute_modal.show_options": "Ammustra is optziones", + "mute_modal.they_can_mention_and_follow": "Ti podent mentovare e sighire, però no ddos as a bìdere.", + "mute_modal.they_wont_know": "No ant a ischire chi ddos as postu a sa muda.", + "mute_modal.title": "Boles pònnere a custu contu a sa muda?", + "mute_modal.you_wont_see_mentions": "No as a bìdere is publicatziones chi mèntovent a custa persone.", + "mute_modal.you_wont_see_posts": "At a pòdere bìdere is publicatziones tuas, però tue no as a bìdere cussas suas.", "navigation_bar.about": "Informatziones", + "navigation_bar.administration": "Amministratzione", + "navigation_bar.advanced_interface": "Aberi s'interfache web avantzada", "navigation_bar.blocks": "Persones blocadas", "navigation_bar.bookmarks": "Sinnalibros", "navigation_bar.community_timeline": "Lìnia de tempus locale", @@ -380,10 +434,13 @@ "navigation_bar.favourites": "Preferidos", "navigation_bar.filters": "Faeddos a sa muda", "navigation_bar.follow_requests": "Rechestas de sighidura", + "navigation_bar.followed_tags": "Etichetas sighidas", "navigation_bar.follows_and_followers": "Gente chi sighis e sighiduras", "navigation_bar.lists": "Listas", "navigation_bar.logout": "Essi", + "navigation_bar.moderation": "Moderatzione", "navigation_bar.mutes": "Persones a sa muda", + "navigation_bar.opened_in_classic_interface": "Publicatziones, contos e àteras pàginas ispetzìficas sunt abertas in manera predefinida in s'interfache web clàssica.", "navigation_bar.personal": "Informatziones personales", "navigation_bar.pins": "Publicatziones apicadas", "navigation_bar.preferences": "Preferèntzias", @@ -391,10 +448,23 @@ "navigation_bar.search": "Chirca", "navigation_bar.security": "Seguresa", "not_signed_in_indicator.not_signed_in": "Ti depes identificare pro atzèdere a custa resursa.", + "notification.admin.report": "{name} at sinnaladu a {target}", + "notification.admin.report_account": "{name} at sinnaladu {count, plural, one {una publicatzione} other {# publicatziones}} dae {target} pro {category}", + "notification.admin.report_account_other": "{name} at sinnaladu {count, plural, one {una publicatzione} other {# publicatziones}} dae {target}", + "notification.admin.report_statuses": "{name} at sinnaladu a {target} pro {category}", + "notification.admin.report_statuses_other": "{name} at sinnaladu a {target}", "notification.admin.sign_up": "{name} at aderidu", + "notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} si sunt registradas", "notification.favourite": "{name} at marcadu comente a preferidu s'istadu tuo", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant marcadu sa publicatzione tua comente preferida", "notification.follow": "{name} ti sighit", "notification.follow_request": "{name} at dimandadu de ti sighire", + "notification.follow_request.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant pedidu de ti sighire", + "notification.label.mention": "Mèntovu", + "notification.label.private_mention": "Mèntovu privadu", + "notification.label.private_reply": "Risposta privada", + "notification.label.reply": "Risposta", + "notification.mention": "Mèntovu", "notification.moderation-warning.learn_more": "Àteras informatziones", "notification.moderation_warning": "T'ant imbiadu un'avisu de moderatzione", "notification.moderation_warning.action_delete_statuses": "Unas cantas de is publicatziones tuas sunt istadas cantzelladas.", @@ -407,12 +477,30 @@ "notification.own_poll": "Sondàgiu acabbadu", "notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu", "notification.reblog": "{name} at cumpartzidu sa publicatzione tua", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant potentziadu sa publicatzione tua", "notification.relationships_severance_event": "Connessiones pèrdidas cun {name}", + "notification.relationships_severance_event.account_suspension": "S'amministratzione de {from} at suspèndidu a {target}; custu bolet nàrrere chi non podes prus retzire atualizatziones dae in cue o interagire cun cussos contos.", + "notification.relationships_severance_event.domain_block": "S'amministratzione de {from} at blocadu a {target}, incluende {followersCount} sighiduras tuas e {followingCount, plural, one {un'àteru contu} other {àteros # contos}} chi sighis.", "notification.relationships_severance_event.learn_more": "Àteras informatziones", + "notification.relationships_severance_event.user_domain_block": "As blocadu a {target}, bogadu a {followersCount} contos chi ti sighint e {followingCount, plural, one {un'àteru contu} other {àteros # contos}} chi sighis.", "notification.status": "{name} at publicadu cosa", "notification.update": "{name} at modificadu una publicatzione", "notification_requests.accept": "Atzeta", + "notification_requests.accept_multiple": "{count, plural, one {Atzeta una rechesta…} other {Atzeta # rechestas…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Atzeta sa rechesta} other {Atzeta is rechestas}}", + "notification_requests.confirm_accept_multiple.message": "Ses atzetende {count, plural, one {una rechesta de notìfica} other {# rechestas de notìfica}}. Seguru chi boles sighire?", + "notification_requests.confirm_accept_multiple.title": "Boles atzetare is rechestas de notìfica?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Iscarta sa rechesta} other {Iscarta is rechestas}}", + "notification_requests.confirm_dismiss_multiple.message": "Ses acanta de iscartare {count, plural, one {una rechesta de notìfica} other {# rechestas de notìfica}}. No nche {count, plural, one {} other {}} as a pòdere prus atzèdere in manera sèmplitze. Seguru chi boles sighire?", + "notification_requests.confirm_dismiss_multiple.title": "Boles iscartare is rechestas de notìfica?", "notification_requests.dismiss": "Iscarta", + "notification_requests.dismiss_multiple": "{count, plural, one {Iscarta una rechesta…} other {Iscarta # rechestas…}}", + "notification_requests.edit_selection": "Modifica", + "notification_requests.exit_selection": "Fatu", + "notification_requests.explainer_for_limited_account": "Is notìficas de custu contu sunt istadas filtradas, ca su contu est istadu limitadu dae sa moderatzione.", + "notification_requests.explainer_for_limited_remote_account": "Is notìficas de custu contu sunt istadas filtradas, ca su contu o su serbidore suo est istadu limitadu dae sa moderatzione.", + "notification_requests.maximize": "Ismànnia", + "notification_requests.minimize_banner": "Mìnima su bànner de notìficas filtradas", "notification_requests.notifications_from": "Notìficas dae {name}", "notification_requests.title": "Notìficas filtradas", "notifications.clear": "Lìmpia notìficas", @@ -472,6 +560,11 @@ "poll_button.add_poll": "Agiunghe unu sondàgiu", "poll_button.remove_poll": "Cantzella su sondàgiu", "privacy.change": "Modìfica s'istadu de riservadesa", + "privacy.direct.long": "Totu is utentes mentovados in sa publicatzione", + "privacy.direct.short": "Persones ispetzìficas", + "privacy.private.long": "Isceti chie ti sighit", + "privacy.private.short": "Sighiduras", + "privacy.public.long": "Cale si siat persone a intro o a foras de Mastodon", "privacy.public.short": "Pùblicu", "privacy_policy.last_updated": "Ùrtima atualizatzione: {date}", "privacy_policy.title": "Polìtica de riservadesa", @@ -497,34 +590,64 @@ "report.categories.legal": "Giurìdicu", "report.categories.other": "Àteru", "report.categories.spam": "Àliga", + "report.category.subtitle": "Sèbera sa currispondèntzia prus arta", + "report.category.title": "Nara·nos ite sutzedet cun custu {type}", "report.category.title_account": "profilu", "report.category.title_status": "publicatzione", "report.close": "Fatu", + "report.comment.title": "Nch'at àteru chi depamus ischire?", "report.forward": "Torra a imbiare a {target}", "report.forward_hint": "Custu contu est de un'àteru serbidore. Ddi boles imbiare puru una còpia anònima de custu informe?", "report.mute": "A sa muda", + "report.mute_explanation": "No as a bìdere is publicatziones suas. Ti podet ancora sighire e bìdere is publicatziones, ma no at a ischire chi dd'as postu a sa muda.", "report.next": "Imbeniente", "report.placeholder": "Cummentos additzionales", "report.reasons.dislike": "Non mi praghet", "report.reasons.dislike_description": "Est una cosa chi non boles bìdere", "report.reasons.legal": "Illegale", "report.reasons.other": "Un'àtera cosa", + "report.reasons.other_description": "Su problema non currispondet a is àteras categorias", "report.reasons.spam": "Est àliga", + "report.rules.subtitle": "Seletziona totu is chi àplichent", + "report.statuses.subtitle": "Seletziona totu is chi àplichent", "report.submit": "Imbia", "report.target": "Informende de {target}", + "report.thanks.title": "Non boles bìdere custu?", + "report.thanks.title_actionable": "Gràtzias de sa sinnalatzione, dd'amus a averiguare.", "report.unfollow": "Non sigas prus a @{name}", + "report.unfollow_explanation": "Ses sighende custu contu. Si non boles bìdere is publicatziones suas in sa pàgina printzipale tua, no ddu sigas prus.", "report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached", "report_notification.categories.legal": "Giurìdicu", "report_notification.categories.legal_sentence": "cuntenutu illegale", "report_notification.categories.other": "Àteru", "report_notification.categories.other_sentence": "àteru", "report_notification.categories.spam": "Àliga", + "report_notification.categories.spam_sentence": "àliga", + "report_notification.open": "Aberi una sinnalatzione", + "search.no_recent_searches": "Nissuna chirca reghente", "search.placeholder": "Chirca", + "search.quick_action.account_search": "Profilos chi currispondent cun {x}", + "search.quick_action.go_to_account": "Bae a su profilu {x}", + "search.quick_action.go_to_hashtag": "Bae a s'eticheta {x}", + "search.quick_action.open_url": "Aberi s'URL in Mastodon", + "search.quick_action.status_search": "Publicatziones chi currispondent cun {x}", + "search.search_or_paste": "Chirca o incolla un'URL", + "search_popout.full_text_search_disabled_message": "No a disponimentu a {domain}.", + "search_popout.full_text_search_logged_out_message": "Isceti a disponimentu cun sa sessione aberta.", + "search_popout.language_code": "Còdighe de limba ISO", + "search_popout.options": "Optziones de chirca", + "search_popout.quick_actions": "Atziones lestras", + "search_popout.recent": "Chircas reghentes", + "search_popout.specific_date": "data ispetzìfica", "search_popout.user": "utente", "search_results.accounts": "Profilos", "search_results.all": "Totus", "search_results.hashtags": "Etichetas", + "search_results.nothing_found": "Impossìbile agatare currispondèntzias pro custos tèrmines de chirca", + "search_results.see_all": "Bide totu", "search_results.statuses": "Publicatziones", + "search_results.title": "Chirca {q}", + "server_banner.about_active_users": "Gente chi at impreadu custu serbidore is ùrtimas 30 dies (Utentes cun Atividade a su Mese)", "server_banner.active_users": "utentes ativos", "server_banner.administered_by": "Amministradu dae:", "server_banner.server_stats": "Istatìsticas de su serbidore:", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index c14f1cc51a..7a04c214ae 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -69,6 +69,11 @@ "announcement.announcement": "Annooncement", "attachments_list.unprocessed": "(No processed)", "audio.hide": "Stow audio", + "block_modal.remote_users_caveat": "We will ask the server {domain} tae respect yer decision. Awtho mind compliance isnae a guarantee, sin some servers may haundle blocks differently. Public posts may yet be visible tae non-loggit-in uisers.", + "block_modal.they_cant_mention": "Thay cannae mention or follae you.", + "block_modal.they_cant_see_posts": "Thay cannae see yer posts and you willnae see thairs.", + "block_modal.they_will_know": "Thay can see that they're blockit.", + "block_modal.title": "Block uiser?", "boost_modal.combo": "Ye kin chap {combo} tae dingie this neist tim", "bundle_column_error.copy_stacktrace": "Copy error report", "bundle_column_error.error.body": "The requestit page cuidnae be rennert. Hit cuid be doon tae a bug in wir code, or a brooser compatability issue.", @@ -113,9 +118,11 @@ "community.column_settings.remote_only": "Remote ainly", "compose.language.change": "Chynge Leid", "compose.language.search": "Seirch leids...", + "compose.published.body": "Post published.", + "compose.saved.body": "Post saved.", "compose_form.direct_message_warning_learn_more": "Lairn mair", "compose_form.encryption_warning": "Posts on Mastodon isnae en-tae-en encryptit. Dinnae share onie sensitive information ower 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.hashtag_warning": "This post willnae be listit under ony hashtag fir it is unlistit. Only public posts can be searched by hashtag.", "compose_form.lock_disclaimer": "Yer accoont isnae {locked}. Awbody kin follae ye for tae luik at yer follaer-ainly posts.", "compose_form.lock_disclaimer.lock": "lockit", "compose_form.placeholder": "Whit's on yer mind?", @@ -125,6 +132,7 @@ "compose_form.publish_form": "Publish", "compose_form.spoiler.marked": "Tak aff the content warnin", "compose_form.spoiler.unmarked": "Pit on a content warnin", + "compose_form.spoiler_placeholder": "Content warnin (optional)", "confirmation_modal.cancel": "Stap", "confirmations.block.confirm": "Dingie", "confirmations.delete.confirm": "Delete", @@ -133,6 +141,7 @@ "confirmations.delete_list.message": "Ye shair thit ye'r wantin fir tae delete this post fir ever?", "confirmations.discard_edit_media.confirm": "Fling awa", "confirmations.discard_edit_media.message": "Ye'v chynges tae the media description or preview thit ye'v no saved, fling them awa onie weys?", + "confirmations.edit.message": "Editin the noo will owerwrit the message yer componin. Are ye suir yer wantin tae proceed?", "confirmations.logout.confirm": "Log oot", "confirmations.logout.message": "Ye shair thit ye'r wantin tae log oot?", "confirmations.mute.confirm": "Wheesht", @@ -183,7 +192,7 @@ "empty_column.explore_statuses": "Naethin is trendin the noo. Check back efter!", "empty_column.follow_requests": "Ye dinnae hae onie follaer requests yit. Whan ye get ane, it'll shaw up here.", "empty_column.hashtag": "There naethin in this hashtag yit.", - "empty_column.home": "Yer hame timeline is toum! Follae mair fowk fir tae full it up. {suggestions}", + "empty_column.home": "Yer hame timeline is toum! Follae mair fowk fir tae full it up.", "empty_column.list": "There naethin in this list yit. Whan memmers o this list publish new posts, ye'll see them here.", "empty_column.lists": "Ye dinnae hae onie lists yit. Ance ye mak ane, it'll shaw up here.", "empty_column.mutes": "Ye'v no wheesht onie uisers yit.", @@ -500,7 +509,7 @@ "status.show_less_all": "Shaw less fir aw", "status.show_more_all": "Shaw mair fir aw", "status.show_original": "Shaw original", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {{attachmentCount} attachments}}", "status.translate": "Owerset", "status.translated_from_with": "Owerset fae {lang} uisin {provider}", "status.unmute_conversation": "Unwheesht conversation", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index ddf341584c..396daeee75 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -33,7 +33,7 @@ "account.follow": "Sledovať", "account.follow_back": "Sledovať späť", "account.followers": "Sledovatelia", - "account.followers.empty": "Tento účet ešte nikto nesleduje.", + "account.followers.empty": "Ešte nikto nesleduje tohto užívateľa.", "account.followers_counter": "{count, plural, one {{counter} sledujúci} other {{counter} sledujúci}}", "account.following": "Sledovaný účet", "account.following_counter": "{count, plural, one {{counter} sledovaných} other {{counter} sledovaných}}", @@ -85,12 +85,14 @@ "alert.rate_limited.title": "Priveľa žiadostí", "alert.unexpected.message": "Vyskytla sa nečakaná chyba.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Alternatívny popis", "announcement.announcement": "Oznámenie", "attachments_list.unprocessed": "(nespracované)", "audio.hide": "Skryť zvuk", "block_modal.show_less": "Zobraziť menej", "block_modal.show_more": "Zobraziť viac", "block_modal.they_cant_mention": "Nemôžu ťa spomenúť, alebo nasledovať.", + "block_modal.they_cant_see_posts": "On/a nemôže vidieť tvoje príspevky a ty neuvidíš jej/ho.", "block_modal.they_will_know": "Môžu vidieť, že sú zablokovaní/ý.", "block_modal.title": "Blokovať užívateľa?", "block_modal.you_wont_see_mentions": "Neuvidíš príspevky, ktoré ich spomínajú.", @@ -193,6 +195,7 @@ "confirmations.unfollow.title": "Prestať sledovať užívateľa?", "content_warning.hide": "Skryť príspevok", "content_warning.show": "Aj tak zobraziť", + "content_warning.show_more": "Ukázať viac", "conversation.delete": "Vymazať konverzáciu", "conversation.mark_as_read": "Označiť ako prečítanú", "conversation.open": "Zobraziť konverzáciu", @@ -218,6 +221,7 @@ "domain_block_modal.they_cant_follow": "Nikto z tohoto servera ťa nemôže nasledovať.", "domain_block_modal.they_wont_know": "Nebude vedieť, že bol/a zablokovaný/á.", "domain_block_modal.title": "Blokovať doménu?", + "domain_block_modal.you_will_lose_relationships": "Stratíš všetkých sledovateľov a ľudí, ktorých ty na tomto serveri nasleduješ.", "domain_block_modal.you_wont_see_posts": "Neuvidíš príspevky, ani oboznámenia od užívateľov na tomto serveri.", "domain_pill.activitypub_like_language": "ActivityPub je ako jazyk, ktorým Mastodon hovorí s ostatnými sociálnymi sieťami.", "domain_pill.server": "Server", @@ -290,7 +294,6 @@ "filter_modal.select_filter.subtitle": "Použite existujúcu kategóriu alebo vytvorte novú", "filter_modal.select_filter.title": "Filtrovanie tohto príspevku", "filter_modal.title.status": "Filtrovanie príspevku", - "filter_warning.matches_filter": "Zhody triedenia “{title}”", "filtered_notifications_banner.title": "Filtrované oznámenia", "firehose.all": "Všetko", "firehose.local": "Tento server", @@ -300,6 +303,8 @@ "follow_requests.unlocked_explanation": "Aj keď váš účet nie je uzamknutý, tím domény {domain} si myslel, že môžete chcieť skontrolovať žiadosti o sledovanie z týchto účtov manuálne.", "follow_suggestions.curated_suggestion": "Výber redakcie", "follow_suggestions.dismiss": "Znova nezobrazovať", + "follow_suggestions.featured_longer": "Ručne vybrané tímom {domain}", + "follow_suggestions.friends_of_friends_longer": "Populárne medzi ľudmi ktorých nasleduješ", "follow_suggestions.hints.featured": "Tento profil bol ručne zvolený tímom domény {domain}.", "follow_suggestions.hints.friends_of_friends": "Tento profil je obľúbený medzi účtami, ktoré sledujete.", "follow_suggestions.hints.most_followed": "Tento profil patrí na doméne {domain} medzi najsledovanejšie.", @@ -337,6 +342,14 @@ "hashtag.follow": "Sledovať hashtag", "hashtag.unfollow": "Prestať sledovať hashtag", "hashtags.and_other": "…a {count, plural, other {# ďalších}}", + "hints.profiles.followers_may_be_missing": "Nasledovatelia tohto profilu môžu chýbať.", + "hints.profiles.follows_may_be_missing": "Nasledovatelia tohto profilu môžu chýbať.", + "hints.profiles.posts_may_be_missing": "Niektoré príspevky z tohto profilu môžu chýbať.", + "hints.profiles.see_more_followers": "Pozri viac nasledovateľov na {domain}", + "hints.profiles.see_more_follows": "Pozri viac nasledovateľov na {domain}", + "hints.profiles.see_more_posts": "Pozri viac príspevkov na {domain}", + "hints.threads.replies_may_be_missing": "Odpovede z ostatných serverov môžu chýbať.", + "hints.threads.see_more": "Pozri viac odpovedí na {domain}", "home.column_settings.show_reblogs": "Zobraziť zdieľania", "home.column_settings.show_replies": "Zobraziť odpovede", "home.hide_announcements": "Skryť oznámenia", @@ -344,7 +357,15 @@ "home.pending_critical_update.link": "Zobraziť aktualizácie", "home.pending_critical_update.title": "Je dostupná kritická bezpečnostná aktualizácia.", "home.show_announcements": "Zobraziť oznámenia", + "ignore_notifications_modal.filter_instead": "Radšej triediť", + "ignore_notifications_modal.filter_to_act_users": "Stále budeš môcť akceptovať, odmietnuť, alebo nahlásiť užívateľov", + "ignore_notifications_modal.filter_to_avoid_confusion": "Triedenie pomáha vyvarovať sa možnému zmäteniu", "ignore_notifications_modal.ignore": "Ignoruj upozornenia", + "ignore_notifications_modal.limited_accounts_title": "Ignorovať oboznámenia z obmedzených účtov?", + "ignore_notifications_modal.new_accounts_title": "Nevšímať si oznámenia z nových účtov?", + "ignore_notifications_modal.not_followers_title": "Nevšímať si oznámenia od ľudí, ktorí ťa nenasledujú?", + "ignore_notifications_modal.not_following_title": "Nevšímať si oznámenia od ľudí, ktorých nenasleduješ?", + "ignore_notifications_modal.private_mentions_title": "Nevšímať si oznámenia o nevyžiadaných súkromných spomínaniach?", "interaction_modal.description.favourite": "S účtom na Mastodone môžete tento príspevok ohviezdičkovať, tak dať autorovi vedieť, že sa vám páči, a uložiť si ho na neskôr.", "interaction_modal.description.follow": "S účtom na Mastodone môžete {name} sledovať a vidieť ich príspevky vo svojom domovskom kanáli.", "interaction_modal.description.reblog": "S účtom na Mastodone môžete tento príspevok zdeľať so svojimi sledovateľmi.", @@ -400,10 +421,12 @@ "lightbox.close": "Zatvoriť", "lightbox.next": "Ďalej", "lightbox.previous": "Späť", + "lightbox.zoom_out": "Priblížiť na mieru", "limited_account_hint.action": "Aj tak zobraziť profil", "limited_account_hint.title": "Tento profil bol skrytý správcami servera {domain}.", "link_preview.author": "Autor: {name}", "link_preview.more_from_author": "Viac od {name}", + "link_preview.shares": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}", "lists.account.add": "Pridať do zoznamu", "lists.account.remove": "Odstrániť zo zoznamu", "lists.delete": "Vymazať zoznam", @@ -426,7 +449,11 @@ "mute_modal.hide_options": "Skryť možnosti", "mute_modal.indefinite": "Pokiaľ ich neodtíšim", "mute_modal.show_options": "Zobraziť možnosti", + "mute_modal.they_can_mention_and_follow": "Môže ťa spomenúť a nasledovať, ale ty ho/ju neuvidíš.", + "mute_modal.they_wont_know": "Nebude vedieť, že bol/a stíšený/á.", "mute_modal.title": "Stíšiť užívateľa?", + "mute_modal.you_wont_see_mentions": "Neuvidíš príspevky, ktoré ho/ju spomínajú.", + "mute_modal.you_wont_see_posts": "Stále uvidí tvoje príspevky, ale ty neuvidíš jeho/jej.", "navigation_bar.about": "O tomto serveri", "navigation_bar.administration": "Spravovanie", "navigation_bar.advanced_interface": "Otvoriť v pokročilom webovom rozhraní", @@ -456,6 +483,7 @@ "navigation_bar.security": "Zabezpečenie", "not_signed_in_indicator.not_signed_in": "Ak chcete získať prístup k tomuto zdroju, prihláste sa.", "notification.admin.report": "Účet {name} nahlásil {target}", + "notification.admin.report_statuses": "{name} nahlásil/a {target} za {category}", "notification.admin.report_statuses_other": "{name} nahlásil/a {target}", "notification.admin.sign_up": "Nová registráciu účtu {name}", "notification.favourite": "{name} hviezdičkuje váš príspevok", @@ -466,12 +494,18 @@ "notification.label.private_reply": "Súkromná odpoveď", "notification.label.reply": "Odpoveď", "notification.mention": "Zmienka", + "notification.mentioned_you": "{name} ťa spomenul/a", "notification.moderation-warning.learn_more": "Zisti viac", + "notification.moderation_warning": "Dostal/a si varovanie od moderátora", "notification.moderation_warning.action_delete_statuses": "Niektoré z tvojich príspevkov boli odstránené.", "notification.moderation_warning.action_disable": "Tvoj účet bol vypnutý.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Niektoré tvoje príspevky boli označené za chúlostivé.", + "notification.moderation_warning.action_none": "Tvoj účet dostal upozornenie od moderátora.", + "notification.moderation_warning.action_sensitive": "Tvoje príspevky budú odteraz označované ako chúlostivé.", "notification.moderation_warning.action_silence": "Tvoj účet bol obmedzený.", "notification.moderation_warning.action_suspend": "Tvoj účet bol pozastavený.", "notification.own_poll": "Vaša anketa sa skončila", + "notification.poll": "Anketa, v ktorej si hlasoval/a, skončila", "notification.reblog": "{name} zdieľa váš príspevok", "notification.relationships_severance_event": "Stratené prepojenia s {name}", "notification.relationships_severance_event.account_suspension": "Správca z {from} pozastavil/a {target}, čo znamená, že od nich viac nemôžeš dostávať aktualizácie, alebo s nimi interaktovať.", @@ -479,11 +513,12 @@ "notification.status": "{name} uverejňuje niečo nové", "notification.update": "{name} upravuje príspevok", "notification_requests.accept": "Prijať", + "notification_requests.confirm_accept_multiple.title": "Priať požiadavku o oboznámenia?", "notification_requests.dismiss": "Zamietnuť", "notification_requests.edit_selection": "Uprav", "notification_requests.exit_selection": "Hotovo", "notification_requests.notifications_from": "Oboznámenia od {name}", - "notification_requests.title": "Filtrované oboznámenia", + "notification_requests.title": "Filtrované oznámenia", "notification_requests.view": "Zobraz upozornenia", "notifications.clear": "Vyčistiť upozornenia", "notifications.clear_confirmation": "Určite chcete nenávratne odstrániť všetky svoje upozornenia?", @@ -495,6 +530,7 @@ "notifications.column_settings.filter_bar.advanced": "Zobraziť všetky kategórie", "notifications.column_settings.follow": "Nové sledovania od:", "notifications.column_settings.follow_request": "Nové žiadosti o sledovanie od:", + "notifications.column_settings.group": "Skupina", "notifications.column_settings.mention": "Označenia:", "notifications.column_settings.poll": "Výsledky ankety:", "notifications.column_settings.push": "Upozornenia push", @@ -518,13 +554,18 @@ "notifications.permission_denied": "Upozornenia na ploche sú nedostupné pre už skôr zamietnutú požiadavku prehliadača", "notifications.permission_denied_alert": "Upozornenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá", "notifications.permission_required": "Upozornenia na ploche sú nedostupné, pretože neboli udelené potrebné povolenia.", + "notifications.policy.accept": "Prijať", + "notifications.policy.accept_hint": "Ukáž v oznámeniach", "notifications.policy.drop": "Ignoruj", "notifications.policy.filter": "Triediť", + "notifications.policy.filter_limited_accounts_hint": "Obmedzené moderátormi servera", "notifications.policy.filter_limited_accounts_title": "Moderované účty", "notifications.policy.filter_new_accounts_title": "Nové účty", "notifications.policy.filter_not_followers_title": "Ľudia, ktorí ťa nenasledujú", + "notifications.policy.filter_not_following_hint": "Pokiaľ ich ručne neschváliš", "notifications.policy.filter_not_following_title": "Ľudia, ktorých nenasleduješ", "notifications.policy.filter_private_mentions_title": "Nevyžiadané priame spomenutia", + "notifications.policy.title": "Spravuj oznámenia od…", "notifications_permission_banner.enable": "Povoliť upozornenia 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": "Nenechajte si nič ujsť", @@ -535,7 +576,7 @@ "onboarding.compose.template": "Ahoj, #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": "Váš domovský kanál je váš hlavný spôsob objavovania Mastodonu. Čím viac ľudí sledujete, tým bude aktívnejší a zaujímavejší. Tu je pár tipov na začiatok:", - "onboarding.follows.title": "Prispôsobte si svoj domovský kanál", + "onboarding.follows.title": "Prispôsob si svoj domovský kanál", "onboarding.profile.discoverable": "Nastavte svoj profil ako objaviteľný", "onboarding.profile.discoverable_hint": "Keď si na Mastodone zapnete objaviteľnosť, vaše príspevky sa môžu zobrazovať vo výsledkoch vyhľadávania a v populárnych. Váš profil môže byť navyše navrhovaný ľuďom, s ktorými máte podobné záujmy.", "onboarding.profile.display_name": "Používateľské meno", @@ -594,7 +635,7 @@ "recommended": "Odporúčané", "refresh": "Obnoviť", "regeneration_indicator.label": "Načítavanie…", - "regeneration_indicator.sublabel": "Váš domovský kanál sa pripravuje.", + "regeneration_indicator.sublabel": "Tvoj domovský kanál sa pripravuje!", "relative_time.days": "{number} dní", "relative_time.full.days": "Pred {number, plural, one {# dňom} other {# dňami}}", "relative_time.full.hours": "Pred {number, plural, one {# hodinou} other {# hodinami}}", @@ -684,8 +725,10 @@ "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ívne účty", "server_banner.administered_by": "Správa servera:", + "server_banner.is_one_of_many": "{domain} je jeden z mnohých nezávislých Mastodon serverov, ktoré môžeš použiť na zúčastňovanie sa v rámci fediversa.", "server_banner.server_stats": "Štatistiky servera:", "sign_in_banner.create_account": "Vytvoriť účet", + "sign_in_banner.mastodon_is": "Mastodon je najlepšia cesta ako udržať krok s tým, čo sa deje.", "sign_in_banner.sign_in": "Prihlásiť sa", "sign_in_banner.sso_redirect": "Prihlásenie alebo registrácia", "status.admin_account": "Moderovať @{name}", @@ -695,6 +738,7 @@ "status.bookmark": "Pridať záložku", "status.cancel_reblog_private": "Zrušiť zdieľanie", "status.cannot_reblog": "Tento príspevok nie je možné zdieľať", + "status.continued_thread": "Pokračujúce vlákno", "status.copy": "Kopírovať odkaz na príspevok", "status.delete": "Vymazať", "status.detailed_status": "Podrobný náhľad celej konverzácie", @@ -725,6 +769,7 @@ "status.reblogs.empty": "Nikto ešte tento príspevok nezdieľal. Keď tak niekto urobí, zobrazí sa to tu.", "status.redraft": "Vymazať a prepísať", "status.remove_bookmark": "Odstrániť záložku", + "status.replied_in_thread": "Odpovedal/a vo vlákne", "status.replied_to": "Odpoveď na {name}", "status.reply": "Odpovedať", "status.replyAll": "Odpovedať vo vlákne", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 71bee6822b..42b77ebe50 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -1,10 +1,10 @@ { "about.blocks": "Moderirani strežniki", "about.contact": "Stik:", - "about.disclaimer": "Mastodon je prosto, odprto-kodno programje in blagovna znamka Mastodon gGmbH.", + "about.disclaimer": "Mastodon je prosto, odprtokodno programje in blagovna znamka podjetja Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Razlog ni na voljo", - "about.domain_blocks.preamble": "Mastodon vam splošno omogoča ogled vsebin in interakcijo z uporabniki iz vseh drugih strežnikov v fediverzumu. To so izjeme, opravljene na tem strežniku.", - "about.domain_blocks.silenced.explanation": "V splošnem ne boste videli profilov in vsebin s tega strežnika, če jih eksplicino ne poiščete ali nanje naročite s sledenjem.", + "about.domain_blocks.preamble": "Mastodon vam na splošno omogoča ogled vsebin in interakcijo z uporabniki z vseh drugih strežnikov v fediverzumu. Tu so navedene izjeme, ki jih postavlja ta strežnik.", + "about.domain_blocks.silenced.explanation": "V splošnem ne boste videli profilov in vsebin s tega strežnika, razen če jih izrecno poiščete ali jim začnete slediti.", "about.domain_blocks.silenced.title": "Omejeno", "about.domain_blocks.suspended.explanation": "Nobeni podatki s tega strežnika ne bodo obdelani, shranjeni ali izmenjani, zaradi česar je nemogoča kakršna koli interakcija ali komunikacija z uporabniki s tega strežnika.", "about.domain_blocks.suspended.title": "Suspendiran", @@ -29,11 +29,11 @@ "account.endorse": "Izpostavi v profilu", "account.featured_tags.last_status_at": "Zadnja objava {date}", "account.featured_tags.last_status_never": "Ni objav", - "account.featured_tags.title": "Izpostavljeni ključniki {name}", + "account.featured_tags.title": "Izpostavljeni ključniki osebe {name}", "account.follow": "Sledi", "account.follow_back": "Sledi nazaj", "account.followers": "Sledilci", - "account.followers.empty": "Nihče ne sledi temu uporabniku.", + "account.followers.empty": "Nihče še ne sledi temu uporabniku.", "account.followers_counter": "{count, plural, one {{counter} sledilec} two {{counter} sledilca} few {{counter} sledilci} other {{counter} sledilcev}}", "account.following": "Sledim", "account.following_counter": "{count, plural, one {{counter} sleden} two {{counter} sledena} few {{counter} sledeni} other {{counter} sledenih}}", @@ -45,9 +45,9 @@ "account.languages": "Spremeni naročene jezike", "account.link_verified_on": "Lastništvo te povezave je bilo preverjeno {date}", "account.locked_info": "Stanje zasebnosti računa je nastavljeno na zaklenjeno. Lastnik ročno pregleda, kdo ga lahko spremlja.", - "account.media": "Mediji", + "account.media": "Predstavnosti", "account.mention": "Omeni @{name}", - "account.moved_to": "{name} nakazuje, da ima zdaj nov račun:", + "account.moved_to": "{name} sporoča, da ima zdaj nov račun:", "account.mute": "Utišaj @{name}", "account.mute_notifications_short": "Utišaj obvestila", "account.mute_short": "Utišaj", @@ -68,14 +68,14 @@ "account.unblock_short": "Odblokiraj", "account.unendorse": "Ne vključi v profil", "account.unfollow": "Ne sledi več", - "account.unmute": "Odtišaj @{name}", + "account.unmute": "Povrni glas @{name}", "account.unmute_notifications_short": "Izklopi utišanje obvestil", - "account.unmute_short": "Odtišaj", - "account_note.placeholder": "Kliknite za dodajanje opombe", + "account.unmute_short": "Povrni glas", + "account_note.placeholder": "Kliknite, da dodate opombo", "admin.dashboard.daily_retention": "Mera ohranjanja uporabnikov po dnevih od registracije", "admin.dashboard.monthly_retention": "Mera ohranjanja uporabnikov po mesecih od registracije", "admin.dashboard.retention.average": "Povprečje", - "admin.dashboard.retention.cohort": "Mesec prijave", + "admin.dashboard.retention.cohort": "Mesec registracije", "admin.dashboard.retention.cohort_size": "Novi uporabniki", "admin.impact_report.instance_accounts": "Profili računov, ki bi jih s tem izbrisali", "admin.impact_report.instance_followers": "Sledilci, ki bi jih izgubili naši uporabniki", @@ -85,23 +85,26 @@ "alert.rate_limited.title": "Hitrost omejena", "alert.unexpected.message": "Zgodila se je nepričakovana napaka.", "alert.unexpected.title": "Ojoj!", - "announcement.announcement": "Obvestilo", + "alt_text_badge.title": "Nadomestno besedilo", + "announcement.announcement": "Oznanilo", "attachments_list.unprocessed": "(neobdelano)", "audio.hide": "Skrij zvok", - "block_modal.remote_users_caveat": "Od strežnika {domain} bomo zahtevali, da spoštuje vašo odločitev. Izpolnjevanje zahteve ni zagotovljeno, ker nekateri strežniki blokiranja obravnavajo drugače. Javne objave bodo morda še vedno vidne neprijavljenim uporabnikom.", + "block_modal.remote_users_caveat": "Strežnik {domain} bomo pozvali, naj spoštuje vašo odločitev. Kljub temu pa ni gotovo, da bo strežnik prošnjo upošteval, saj nekateri strežniki blokiranja obravnavajo drugače. Javne objave bodo morda še vedno vidne neprijavljenim uporabnikom.", "block_modal.show_less": "Pokaži manj", "block_modal.show_more": "Pokaži več", - "block_modal.they_cant_mention": "Ne morejo vas omenjati ali vam slediti.", - "block_modal.they_cant_see_posts": "Ne vidijo vaših objav, vi pa ne njihovih.", - "block_modal.they_will_know": "Ne morejo videti, da so blokirani.", - "block_modal.title": "Blokiraj uporabnika?", - "block_modal.you_wont_see_mentions": "Objav, ki jih omenjajo, ne boste videli.", - "boost_modal.combo": "Če želite preskočiti to, lahko pritisnete {combo}", + "block_modal.they_cant_mention": "Ne more vas omenjati ali vam slediti.", + "block_modal.they_cant_see_posts": "Ne vidi vaših objav, vi pa ne njegovih.", + "block_modal.they_will_know": "Ne more videti, da je blokiran.", + "block_modal.title": "Blokiram uporabnika?", + "block_modal.you_wont_see_mentions": "Objav, ki ga omenjajo, ne boste videli.", + "boost_modal.combo": "Če želite naslednjič to preskočiti, lahko pritisnete {combo}", + "boost_modal.reblog": "Izpostavim objavo?", + "boost_modal.undo_reblog": "Ali želite preklicati izpostavitev objave?", "bundle_column_error.copy_stacktrace": "Kopiraj poročilo o napaki", "bundle_column_error.error.body": "Zahtevane strani ni mogoče upodobiti. Vzrok težave je morda hrošč v naši kodi ali pa nezdružljivost z brskalnikom.", "bundle_column_error.error.title": "Oh, ne!", "bundle_column_error.network.body": "Pri poskusu nalaganja te strani je prišlo do napake. Vzrok je lahko začasna težava z vašo internetno povezavo ali s tem strežnikom.", - "bundle_column_error.network.title": "Napaka v omrežju", + "bundle_column_error.network.title": "Omrežna napaka", "bundle_column_error.retry": "Poskusi znova", "bundle_column_error.return": "Nazaj domov", "bundle_column_error.routing.body": "Zahtevane strani ni mogoče najti. Ali ste prepričani, da je naslov URL v naslovni vrstici pravilen?", @@ -110,9 +113,9 @@ "bundle_modal_error.message": "Med nalaganjem te komponente je prišlo do napake.", "bundle_modal_error.retry": "Poskusi znova", "closed_registrations.other_server_instructions": "Ker je Mastodon decentraliziran, lahko ustvarite račun na drugem strežniku in ste še vedno v interakciji s tem.", - "closed_registrations_modal.description": "Odpiranje računa na {domain} trenutno ni možno, upoštevajte pa, da ne potrebujete računa prav na {domain}, da bi uporabljali Mastodon.", + "closed_registrations_modal.description": "Odpiranje računa na domeni {domain} trenutno ni možno, upoštevajte pa, da ne potrebujete računa prav na domeni {domain}, da bi uporabljali Mastodon.", "closed_registrations_modal.find_another_server": "Najdi drug strežnik", - "closed_registrations_modal.preamble": "Mastodon je decentraliziran, kar pomeni, da ni pomembno, kje ustvarite svoj račun; od koder koli je omogočeno sledenje in interakcija z vsemi s tega strežnika. Strežnik lahko gostite tudi sami!", + "closed_registrations_modal.preamble": "Mastodon je decentraliziran, kar pomeni, da ni pomembno, kje ustvarite svoj račun; od koder koli je mogoče slediti in komunicirati z vsemi s tega strežnika. Strežnik lahko gostite tudi sami!", "closed_registrations_modal.title": "Registracija v Mastodon", "column.about": "O programu", "column.blocks": "Blokirani uporabniki", @@ -123,7 +126,7 @@ "column.domain_blocks": "Blokirane domene", "column.favourites": "Priljubljeni", "column.firehose": "Viri v živo", - "column.follow_requests": "Sledi prošnjam", + "column.follow_requests": "Prošnje za sledenje", "column.home": "Domov", "column.lists": "Seznami", "column.mutes": "Utišani uporabniki", @@ -139,25 +142,25 @@ "column_header.unpin": "Odpni", "column_subheading.settings": "Nastavitve", "community.column_settings.local_only": "Samo krajevno", - "community.column_settings.media_only": "Samo mediji", + "community.column_settings.media_only": "Samo predstavnosti", "community.column_settings.remote_only": "Samo oddaljeno", "compose.language.change": "Spremeni jezik", - "compose.language.search": "Poišči jezik ...", + "compose.language.search": "Poišči jezike ...", "compose.published.body": "Objavljeno.", "compose.published.open": "Odpri", "compose.saved.body": "Objava shranjena.", - "compose_form.direct_message_warning_learn_more": "Izvej več", - "compose_form.encryption_warning": "Objave na Mastodonu niso šifrirane od kraja do kraja. Prek Mastodona ne delite nobenih občutljivih informacij.", + "compose_form.direct_message_warning_learn_more": "Več o tem", + "compose_form.encryption_warning": "Objave na Mastodonu niso šifrirane od konca do konca. Prek Mastodona ne delite nobenih občutljivih informacij.", "compose_form.hashtag_warning": "Ta objava ne bo navedena pod nobenim ključnikom, ker ni javna. Samo javne objave lahko iščete s ključniki.", "compose_form.lock_disclaimer": "Vaš račun ni {locked}. Vsakdo vam lahko sledi in si ogleda objave, ki so namenjene samo sledilcem.", "compose_form.lock_disclaimer.lock": "zaklenjen", "compose_form.placeholder": "O čem razmišljate?", "compose_form.poll.duration": "Trajanje ankete", - "compose_form.poll.multiple": "Več možnosti", + "compose_form.poll.multiple": "Izbira več možnosti", "compose_form.poll.option_placeholder": "Možnost {number}", "compose_form.poll.single": "Izberite eno možnost", - "compose_form.poll.switch_to_multiple": "Spremenite anketo, da omogočite več izbir", - "compose_form.poll.switch_to_single": "Spremenite anketo, da omogočite eno izbiro", + "compose_form.poll.switch_to_multiple": "Spremenite anketo, da omogočite izbiro več možnosti", + "compose_form.poll.switch_to_single": "Spremenite anketo, da omogočite izbiro ene možnosti", "compose_form.poll.type": "Slog", "compose_form.publish": "Objavi", "compose_form.publish_form": "Objavi", @@ -175,30 +178,33 @@ "confirmations.delete_list.message": "Ali ste prepričani, da želite trajno izbrisati ta seznam?", "confirmations.delete_list.title": "Želite izbrisati seznam?", "confirmations.discard_edit_media.confirm": "Opusti", - "confirmations.discard_edit_media.message": "Imate ne shranjene spremembe za medijski opis ali predogled; jih želite kljub temu opustiti?", + "confirmations.discard_edit_media.message": "Spremenjenega opisa predstavnosti ali predogleda niste shranili. Želite spremembe kljub temu opustiti?", "confirmations.edit.confirm": "Uredi", "confirmations.edit.message": "Urejanje bo prepisalo sporočilo, ki ga trenutno sestavljate. Ali ste prepričani, da želite nadaljevati?", "confirmations.edit.title": "Želite prepisati objavo?", "confirmations.logout.confirm": "Odjava", "confirmations.logout.message": "Ali ste prepričani, da se želite odjaviti?", "confirmations.logout.title": "Se želite odjaviti?", - "confirmations.mute.confirm": "Utišanje", + "confirmations.mute.confirm": "Utišaj", "confirmations.redraft.confirm": "Izbriši in preoblikuj", - "confirmations.redraft.message": "Ali ste prepričani, da želite izbrisati ta status in ga preoblikovati? Vzljubi in izpostavitve bodo izgubljeni, odgovori na izvirno objavo pa bodo osiroteli.", - "confirmations.redraft.title": "Želite izbrisati in predelati objavo?", + "confirmations.redraft.message": "Ali ste prepričani, da želite izbrisati to objavo in jo preoblikovati? Izkazi priljubljenosti in izpostavitve bodo izgubljeni, odgovori na izvirno objavo pa bodo osiroteli.", + "confirmations.redraft.title": "Želite izbrisati in preoblikovati objavo?", "confirmations.reply.confirm": "Odgovori", "confirmations.reply.message": "Odgovarjanje bo prepisalo sporočilo, ki ga trenutno sestavljate. Ali ste prepričani, da želite nadaljevati?", "confirmations.reply.title": "Želite prepisati objavo?", "confirmations.unfollow.confirm": "Ne sledi več", "confirmations.unfollow.message": "Ali ste prepričani, da ne želite več slediti {name}?", "confirmations.unfollow.title": "Želite nehati spremljati uporabnika?", + "content_warning.hide": "Skrij objavo", + "content_warning.show": "Vseeno pokaži", + "content_warning.show_more": "Pokaži več", "conversation.delete": "Izbriši pogovor", "conversation.mark_as_read": "Označi kot prebrano", "conversation.open": "Pokaži pogovor", "conversation.with": "Z {names}", "copy_icon_button.copied": "Kopirano v odložišče", "copypaste.copied": "Kopirano", - "copypaste.copy_to_clipboard": "Kopiraj na odložišče", + "copypaste.copy_to_clipboard": "Kopiraj v odložišče", "directory.federated": "Iz znanega fediverzuma", "directory.local": "Samo iz {domain}", "directory.new_arrivals": "Novi prišleki", @@ -217,22 +223,24 @@ "domain_block_modal.they_cant_follow": "Nihče s tega strežnika vam ne more slediti.", "domain_block_modal.they_wont_know": "Ne bodo vedeli, da so blokirani.", "domain_block_modal.title": "Blokiraj domeno?", + "domain_block_modal.you_will_lose_num_followers": "Izgubili boste {followersCount, plural, one {{followersCountDisplay} sledilca} two {{followersCountDisplay} sledilca} few {{followersCountDisplay} sledilce} other {{followersCountDisplay} sledilcev}} in {followingCount, plural, one {{followingCountDisplay} osebo, ki ji sledite} two {{followingCountDisplay} osebi, ki jima sledite} few {{followingCountDisplay} osebe, ki jim sledite} other {{followingCountDisplay} oseb, ki jim sledite}}.", + "domain_block_modal.you_will_lose_relationships": "Izgubili boste vse sledilce in ljudi, ki jim sledite na tem strežniku.", "domain_block_modal.you_wont_see_posts": "Objav ali obvestil uporabnikov s tega strežnika ne boste videli.", - "domain_pill.activitypub_lets_connect": "Omogoča vam povezovanje in interakcijo z ljudmi, ki niso samo na Mastodonu, ampak tudi na drugih družabnih platformah.", - "domain_pill.activitypub_like_language": "Protokol ActivityPub je kot jezik, s katerim se Mastodon pogovarja z drugimi družabnimi omrežji.", + "domain_pill.activitypub_lets_connect": "Omogoča vam povezovanje in interakcijo z ljudmi, ki niso samo na Mastodonu, ampak tudi na drugih družbenih platformah.", + "domain_pill.activitypub_like_language": "Protokol ActivityPub je kot jezik, v katerem se Mastodon pogovarja z drugimi družabnimi omrežji.", "domain_pill.server": "Strežnik", - "domain_pill.their_handle": "Njihova ročica:", - "domain_pill.their_server": "Njihovo digitalno domovanje, kjer bivajo vse njihove objave.", - "domain_pill.their_username": "Njihov edinstveni identifikator na njihovem strežniku. Uporabnike z istim uporabniškim imenom lahko najdete na različnih strežnikih.", + "domain_pill.their_handle": "Njegova/njena ročica:", + "domain_pill.their_server": "Njegovo/njeno digitalno domovanje, kjer bivajo vse njegove/njene objave.", + "domain_pill.their_username": "Njegov/njen edinstveni identifikator na njegovem/njenem strežniku. Uporabnike z istim uporabniškim imenom lahko najdete na različnih strežnikih.", "domain_pill.username": "Uporabniško ime", "domain_pill.whats_in_a_handle": "Kaj je v ročici?", - "domain_pill.who_they_are": "Ker ročice povedo, kdo je kdo in kje so, ste lahko z osebami v interakciji prek družabnega spleta .", - "domain_pill.who_you_are": "Ker ročice povedo, kdo ste in kje ste, ste lahko z osebami v interakciji prek družabnega spleta .", + "domain_pill.who_they_are": "Ker ročice povedo, kdo je kdo in kje je, lahko komunicirate z ljudmi po vsem spletu družbenih .", + "domain_pill.who_you_are": "Ker ročice povedo, kdo ste in kje ste, lahko komunicirate z ljudmi po vsem spletu družbenih .", "domain_pill.your_handle": "Vaša ročica:", - "domain_pill.your_server": "Vaše digitalno domovanje, kjer bivajo vse vaše objave. Vam ta ni všeč? Prenesite ga med strežniki kadar koli in z njim tudi svoje sledilce.", + "domain_pill.your_server": "Vaše digitalno domovanje, kjer bivajo vse vaše objave. Vam ni všeč? Kadar koli ga prenesite med strežniki in z njim tudi svoje sledilce.", "domain_pill.your_username": "Vaš edinstveni identifikator na tem strežniku. Uporabnike z istim uporabniškim imenom je možno najti na različnih strežnikih.", "embed.instructions": "Vstavite to objavo na svojo spletno stran tako, da kopirate spodnjo kodo.", - "embed.preview": "Tako bo izgledalo:", + "embed.preview": "Takole bo videti:", "emoji_button.activity": "Dejavnost", "emoji_button.clear": "Počisti", "emoji_button.custom": "Po meri", @@ -248,33 +256,33 @@ "emoji_button.search_results": "Rezultati iskanja", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Potovanja in kraji", - "empty_column.account_hides_collections": "Ta uporabnik se je odločil, da te informacije ne bo dal na voljo", + "empty_column.account_hides_collections": "Ta uporabnik se je odločil, da te informacije ne bo delil", "empty_column.account_suspended": "Račun je suspendiran", "empty_column.account_timeline": "Tukaj ni objav!", "empty_column.account_unavailable": "Profil ni na voljo", "empty_column.blocks": "Niste še blokirali nobenega uporabnika.", "empty_column.bookmarked_statuses": "Zaenkrat še nimate zaznamovanih objav. Ko objavo zaznamujete, se pojavi tukaj.", - "empty_column.community": "Krajevna časovnica je prazna. Napišite nekaj javnega, da se bo snežna kepa zakotalila!", + "empty_column.community": "Krajevna časovnica je prazna. Napišite nekaj javnega, da se začne polniti!", "empty_column.direct": "Nimate še nobenih zasebnih omemb. Ko jih boste poslali ali prejeli, se bodo prikazale tukaj.", "empty_column.domain_blocks": "Zaenkrat ni blokiranih domen.", - "empty_column.explore_statuses": "Trenutno ni nič v trendu. Preverite znova kasneje!", - "empty_column.favourited_statuses": "Nimate priljubljenih objav. Ko boste vzljubili kakšno, bo prikazana tukaj.", - "empty_column.favourites": "Nihče še ni vzljubil te objave. Ko jo bo nekdo, se bo pojavila tukaj.", + "empty_column.explore_statuses": "Trenutno ni novih trendov. Preverite znova kasneje!", + "empty_column.favourited_statuses": "Nimate priljubljenih objav. Ko boste kakšno dodali med priljubljene, bo prikazana tukaj.", + "empty_column.favourites": "Nihče še ni vzljubil te objave. Ko jo bo nekdo, bo naveden tukaj.", "empty_column.follow_requests": "Nimate prošenj za sledenje. Ko boste prejeli kakšno, se bo prikazala tukaj.", - "empty_column.followed_tags": "Zaenkrat ne sledite še nobenemu ključniku. Ko boste, se bodo pojavili tukaj.", - "empty_column.hashtag": "V tem ključniku še ni nič.", - "empty_column.home": "Vaša domača časovnica je prazna! Sledite več osebam, da jo zapolnite. {suggestions}", - "empty_column.list": "Na tem seznamu ni ničesar. Ko bodo člani tega seznama objavili nove statuse, se bodo pojavili tukaj.", + "empty_column.followed_tags": "Zaenkrat ne sledite še nobenemu ključniku. Ko boste, se bo pojavil tukaj.", + "empty_column.hashtag": "V tem ključniku ni še nič.", + "empty_column.home": "Vaša domača časovnica je prazna! Sledite več osebam, da jo zapolnite.", + "empty_column.list": "Na tem seznamu ni ničesar. Ko bodo člani tega seznama kaj objavili, se bodo te objave pojavile tukaj.", "empty_column.lists": "Nimate seznamov. Ko ga boste ustvarili, se bo prikazal tukaj.", "empty_column.mutes": "Niste utišali še nobenega uporabnika.", "empty_column.notification_requests": "Vse prebrano! Tu ni ničesar več. Ko prejmete nova obvestila, se bodo pojavila tu glede na vaše nastavitve.", "empty_column.notifications": "Nimate še nobenih obvestil. Povežite se z drugimi, da začnete pogovor.", - "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov", + "empty_column.public": "Tukaj ni ničesar! Napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov, da se bo napolnilo", "error.unexpected_crash.explanation": "Zaradi hrošča v naši kodi ali težave z združljivostjo brskalnika te strani ni mogoče ustrezno prikazati.", - "error.unexpected_crash.explanation_addons": "Te strani ni mogoče ustrezno prikazati. To napako najverjetneje povzroča dodatek briskalnika ali samodejna orodja za prevajanje.", + "error.unexpected_crash.explanation_addons": "Te strani ni mogoče ustrezno prikazati. To napako najverjetneje povzroča dodatek brskalnika ali samodejna orodja za prevajanje.", "error.unexpected_crash.next_steps": "Poskusite osvežiti stran. Če to ne pomaga, boste morda še vedno lahko uporabljali Mastodon prek drugega brskalnika ali z domorodno aplikacijo.", "error.unexpected_crash.next_steps_addons": "Poskusite jih onemogočiti in osvežiti stran. Če to ne pomaga, boste morda še vedno lahko uporabljali Mastodon prek drugega brskalnika ali z domorodno aplikacijo.", - "errors.unexpected_crash.copy_stacktrace": "Kopiraj sledenje skladu na odložišče", + "errors.unexpected_crash.copy_stacktrace": "Kopiraj sled sklada na odložišče", "errors.unexpected_crash.report_issue": "Prijavi težavo", "explore.search_results": "Rezultati iskanja", "explore.suggested_follows": "Ljudje", @@ -284,7 +292,7 @@ "explore.trending_tags": "Ključniki", "filter_modal.added.context_mismatch_explanation": "Ta kategorija filtra ne velja za kontekst, v katerem ste dostopali do te objave. Če želite, da je objava filtrirana tudi v tem kontekstu, morate urediti filter.", "filter_modal.added.context_mismatch_title": "Neujemanje konteksta!", - "filter_modal.added.expired_explanation": "Ta kategorija filtra je pretekla, morali boste spremeniti datum veljavnosti, da bo veljal še naprej.", + "filter_modal.added.expired_explanation": "Ta kategorija filtra je pretekla. Morali boste spremeniti datum veljavnosti, da bo veljal še naprej.", "filter_modal.added.expired_title": "Filter je pretekel!", "filter_modal.added.review_and_configure": "Če želite pregledati in nadalje prilagoditi kategorijo filtra, obiščite {settings_link}.", "filter_modal.added.review_and_configure_title": "Nastavitve filtra", @@ -298,6 +306,8 @@ "filter_modal.select_filter.subtitle": "Uporabite obstoječo kategorijo ali ustvarite novo", "filter_modal.select_filter.title": "Filtriraj to objavo", "filter_modal.title.status": "Filtrirajte objavo", + "filter_warning.matches_filter": "Se ujema s filtrom »{title}«", + "filtered_notifications_banner.pending_requests": "Od {count, plural, =0 {nikogar, ki bi ga poznali} one {nekoga, ki ga morda poznate} two {dveh ljudi, ki ju morda poznate} other {ljudi, ki jih morda poznate}}", "filtered_notifications_banner.title": "Filtrirana obvestila", "firehose.all": "Vse", "firehose.local": "Ta strežnik", @@ -345,9 +355,15 @@ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} objava} two {{counter} objavi} few {{counter} objav} other {{counter} objav}}", "hashtag.follow": "Sledi ključniku", "hashtag.unfollow": "Nehaj slediti ključniku", - "hashtags.and_other": "…in še {count, plural, other {#}}", + "hashtags.and_other": "… in še {count, plural, other {#}}", + "hints.profiles.followers_may_be_missing": "Sledilci za ta profil morda manjkajo.", + "hints.profiles.follows_may_be_missing": "Osebe, ki jim ta profil sledi, morda manjkajo.", "hints.profiles.posts_may_be_missing": "Nekatere objave s tega profila morda manjkajo.", + "hints.profiles.see_more_followers": "Pokaži več sledilcev na {domain}", + "hints.profiles.see_more_follows": "Pokaži več sledenih ljudi na zbirališču {domain}", + "hints.profiles.see_more_posts": "Pokaži več objav na {domain}", "hints.threads.replies_may_be_missing": "Odgovori z drugih strežnikov morda manjkajo.", + "hints.threads.see_more": "Pokaži več odgovorov na {domain}", "home.column_settings.show_reblogs": "Pokaži izpostavitve", "home.column_settings.show_replies": "Pokaži odgovore", "home.hide_announcements": "Skrij obvestila", @@ -355,9 +371,17 @@ "home.pending_critical_update.link": "Glejte posodobitve", "home.pending_critical_update.title": "Na voljo je kritična varnostna posodobbitev!", "home.show_announcements": "Pokaži obvestila", + "ignore_notifications_modal.disclaimer": "Mastodon ne more obveščati uporabnikov, da ste prezrli njihova obvestila. Tudi če jih prezrete, jih lahko uporabniki še vedno pošiljajo.", + "ignore_notifications_modal.filter_instead": "Raje filtriraj", + "ignore_notifications_modal.filter_to_act_users": "Še vedno boste lahko sprejeli, zavrnili ali prijavili uporabnike", "ignore_notifications_modal.filter_to_avoid_confusion": "Filtriranje pomaga pri izogibanju morebitni zmedi", "ignore_notifications_modal.filter_to_review_separately": "Filtrirana obvestila lahko pregledate ločeno", "ignore_notifications_modal.ignore": "Prezri obvestila", + "ignore_notifications_modal.limited_accounts_title": "Naj prezrem obvestila moderiranih računov?", + "ignore_notifications_modal.new_accounts_title": "Naj prezrem obvestila novih računov?", + "ignore_notifications_modal.not_followers_title": "Naj prezrem obvestila ljudi, ki vam ne sledijo?", + "ignore_notifications_modal.not_following_title": "Naj prezrem obvestila ljudi, ki jim ne sledite?", + "ignore_notifications_modal.private_mentions_title": "Naj prezrem obvestila od nezaželenih zasebnih omemb?", "interaction_modal.description.favourite": "Z računom na Mastodonu lahko to objavo postavite med priljubljene in tako avtorju nakažete, da jo cenite, in jo shranite za kasneje.", "interaction_modal.description.follow": "Z računom na Mastodonu lahko sledite {name}, da prejemate njihove objave v svoj domači vir.", "interaction_modal.description.reblog": "Z računom na Mastodonu lahko izpostavite to objavo, tako da jo delite s svojimi sledilci.", @@ -397,7 +421,7 @@ "keyboard_shortcuts.muted": "Odpri seznam utišanih uporabnikov", "keyboard_shortcuts.my_profile": "Odprite svoj profil", "keyboard_shortcuts.notifications": "Odpri stolpec z obvestili", - "keyboard_shortcuts.open_media": "Odpri medij", + "keyboard_shortcuts.open_media": "Odpri predstavnost", "keyboard_shortcuts.pinned": "Odpri seznam pripetih objav", "keyboard_shortcuts.profile": "Odpri avtorjev profil", "keyboard_shortcuts.reply": "Odgovori na objavo", @@ -406,16 +430,18 @@ "keyboard_shortcuts.spoilers": "Pokaži/skrij polje CW", "keyboard_shortcuts.start": "Odpri stolpec \"začni\"", "keyboard_shortcuts.toggle_hidden": "Pokaži/skrij besedilo za CW", - "keyboard_shortcuts.toggle_sensitivity": "Pokaži/skrij medije", + "keyboard_shortcuts.toggle_sensitivity": "Pokaži/skrij predstavnosti", "keyboard_shortcuts.toot": "Začni povsem novo objavo", "keyboard_shortcuts.unfocus": "Odstrani pozornost z območja za sestavljanje besedila/iskanje", "keyboard_shortcuts.up": "Premakni navzgor po seznamu", "lightbox.close": "Zapri", "lightbox.next": "Naslednji", "lightbox.previous": "Prejšnji", + "lightbox.zoom_in": "Približaj na dejansko velikost", + "lightbox.zoom_out": "Čez cel prikaz", "limited_account_hint.action": "Vseeno pokaži profil", "limited_account_hint.title": "Profil so moderatorji strežnika {domain} skrili.", - "link_preview.author": "Avtor_ica {name}", + "link_preview.author": "Avtor/ica {name}", "link_preview.more_from_author": "Več od {name}", "link_preview.shares": "{count, plural, one {{counter} objava} two {{counter} objavi} few {{counter} objave} other {{counter} objav}}", "lists.account.add": "Dodaj na seznam", @@ -434,6 +460,7 @@ "lists.subheading": "Vaši seznami", "load_pending": "{count, plural, one {# nov element} two {# nova elementa} few {# novi elementi} other {# novih elementov}}", "loading_indicator.label": "Nalaganje …", + "media_gallery.hide": "Skrij", "moved_to_account_banner.text": "Vaš račun {disabledAccount} je trenutno onemogočen, ker ste se prestavili na {movedToAccount}.", "mute_modal.hide_from_notifications": "Skrijte se pred obvestili", "mute_modal.hide_options": "Skrij možnosti", @@ -445,6 +472,7 @@ "mute_modal.you_wont_see_mentions": "Objav, ki jih omenjajo, ne boste videli.", "mute_modal.you_wont_see_posts": "Še vedno vidijo vaše objave, vi pa ne njihovih.", "navigation_bar.about": "O Mastodonu", + "navigation_bar.administration": "Upravljanje", "navigation_bar.advanced_interface": "Odpri v naprednem spletnem vmesniku", "navigation_bar.blocks": "Blokirani uporabniki", "navigation_bar.bookmarks": "Zaznamki", @@ -461,6 +489,7 @@ "navigation_bar.follows_and_followers": "Sledenja in sledilci", "navigation_bar.lists": "Seznami", "navigation_bar.logout": "Odjava", + "navigation_bar.moderation": "Moderiranje", "navigation_bar.mutes": "Utišani uporabniki", "navigation_bar.opened_in_classic_interface": "Objave, računi in druge specifične strani se privzeto odprejo v klasičnem spletnem vmesniku.", "navigation_bar.personal": "Osebno", @@ -476,13 +505,19 @@ "notification.admin.report_statuses": "{name} je prijavil/a {target} zaradi {category}", "notification.admin.report_statuses_other": "{name} je prijavil/a {target}", "notification.admin.sign_up": "{name} se je vpisal/a", + "notification.admin.sign_up.name_and_others": "Prijavili so se {name} in {count, plural, one {# druga oseba} two {# drugi osebi} few {# druge osebe} other {# drugih oseb}}", "notification.favourite": "{name} je vzljubil/a vašo objavo", + "notification.favourite.name_and_others_with_link": "{name} in {count, plural, one {# druga oseba} two {# drugi osebi} few {# druge osebe} other {# drugih oseb}} je dodalo vašo objavo med priljubljene", "notification.follow": "{name} vam sledi", + "notification.follow.name_and_others": "{name} in {count, plural, one {# druga oseba sta ti sledila} two {# drugi osebi so ti sledili} few {# druge osebe so ti sledili} other {# drugih oseb ti je sledilo}}", "notification.follow_request": "{name} vam želi slediti", + "notification.follow_request.name_and_others": "{name} in {count, plural, one {# druga oseba bi ti rada sledila} two {# drugi osebi bi ti radi sledili} few {# druge osebe bi ti radi sledili} other {# drugih oseb bi ti radi sledili}}", + "notification.label.mention": "Omemba", "notification.label.private_mention": "Zasebna omemba", "notification.label.private_reply": "Zasebni odgovor", "notification.label.reply": "Odgovori", "notification.mention": "Omemba", + "notification.mentioned_you": "{name} vas je omenil/a", "notification.moderation-warning.learn_more": "Več o tem", "notification.moderation_warning": "Prejeli ste opozorilo moderatorjev", "notification.moderation_warning.action_delete_statuses": "Nekatere vaše objave so odstranjene.", @@ -495,6 +530,7 @@ "notification.own_poll": "Vaša anketa je zaključena", "notification.poll": "Anketa, v kateri ste sodelovali, je zaključena", "notification.reblog": "{name} je izpostavila/a vašo objavo", + "notification.reblog.name_and_others_with_link": "{name} in {count, plural, one {# druga oseba sta izpostavila tvojo objavo} two {# drugi osebi so izpostavili tvojo objavo} few {# druge osebe so izpostavili tvojo objavo} other {# drugih oseb so izpostavili tvojo objavo}}", "notification.relationships_severance_event": "Povezave z {name} prekinjene", "notification.relationships_severance_event.account_suspension": "Skrbnik na {from} je suspendiral račun {target}, kar pomeni, da od računa ne morete več prejemati posodobitev ali imeti z njim interakcij.", "notification.relationships_severance_event.domain_block": "Skrbnik na {from} je blokiral domeno {target}, vključno z vašimi sledilci ({followersCount}) in {followingCount, plural, one {# računom, ki mu sledite} two {# računoma, ki jima sledite} few {# računi, ki jim sledite} other {# računi, ki jim sledite}}.", @@ -503,11 +539,21 @@ "notification.status": "{name} je pravkar objavil/a", "notification.update": "{name} je uredil(a) objavo", "notification_requests.accept": "Sprejmi", + "notification_requests.accept_multiple": "{count, plural, one {Sprejmi # prošnjo …} two {Sprejmi # prošnji …} few {Sprejmi # prošnje …} other {Sprejmi # prošenj …}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Sprejmi prošnjo} two {Sprejmi prošnji} other {Sprejmi prošnje}}", + "notification_requests.confirm_accept_multiple.message": "Sprejeti nameravate {count, plural, one {eno prošnjo za obvestila} two {dve prošnji za obvestila} few {# prošnje za obvestila} other {# prošenj za obvestila}}. Ali ste prepričani?", + "notification_requests.confirm_accept_multiple.title": "Ali želite sprejeti zahteve za obvestila?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Zavrni prošnjo} two {Zavrni prošnji} other {Zavrni prošnje}}", + "notification_requests.confirm_dismiss_multiple.message": "Zavrniti nameravate {count, plural, one {eno prošnjo za obvestila} two {dve prošnji za obvestila} few {# prošnje za obvestila} other {# prošenj za obvestila}}. Do {count, plural, one {nje} two {njiju} other {njih}} ne boste več mogli dostopati. Ali ste prepričani?", "notification_requests.confirm_dismiss_multiple.title": "Želite opustiti zahteve za obvestila?", "notification_requests.dismiss": "Zavrni", + "notification_requests.dismiss_multiple": "{count, plural, one {Zavrni # prošnjo …} two {Zavrni # prošnji …} few {Zavrni # prošnje …} other {Zavrni # prošenj …}}", "notification_requests.edit_selection": "Uredi", "notification_requests.exit_selection": "Opravljeno", + "notification_requests.explainer_for_limited_account": "Obvestila za ta račun so bila filtrirana, ker je ta račun omejil moderator.", + "notification_requests.explainer_for_limited_remote_account": "Obvestila za ta račun so bila filtrirana, ker je račun ali njegov strežnik omejil moderator.", "notification_requests.maximize": "Maksimiraj", + "notification_requests.minimize_banner": "Zloži pasico filtriranih obvestil", "notification_requests.notifications_from": "Obvestila od {name}", "notification_requests.title": "Filtrirana obvestila", "notification_requests.view": "Pokaži obvestila", @@ -522,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Vrstica za hitro filtriranje", "notifications.column_settings.follow": "Novi sledilci:", "notifications.column_settings.follow_request": "Nove prošnje za sledenje:", + "notifications.column_settings.group": "Združi", "notifications.column_settings.mention": "Omembe:", "notifications.column_settings.poll": "Rezultati ankete:", "notifications.column_settings.push": "Potisna obvestila", @@ -548,6 +595,9 @@ "notifications.policy.accept": "Sprejmi", "notifications.policy.accept_hint": "Pokaži med obvestili", "notifications.policy.drop": "Prezri", + "notifications.policy.drop_hint": "Pošlji v pozabo, od koder se nikdar nič ne vrne", + "notifications.policy.filter": "Filtriraj", + "notifications.policy.filter_hint": "Pošlji med filtrirana prejeta obvestila", "notifications.policy.filter_limited_accounts_hint": "Omejeno s strani moderatorjev strežnika", "notifications.policy.filter_limited_accounts_title": "Moderirani računi", "notifications.policy.filter_new_accounts.hint": "Ustvarjen v {days, plural, one {zadnjem # dnevu} two {zadnjih # dnevih} few {zadnjih # dnevih} other {zadnjih # dnevih}}", @@ -576,7 +626,7 @@ "onboarding.profile.display_name_hint": "Vaše polno ime ali lažno ime ...", "onboarding.profile.lead": "To lahko vedno dokončate med nastavitvami, kjer je na voljo še več možnosti prilagajanja.", "onboarding.profile.note": "Biografija", - "onboarding.profile.note_hint": "Druge osebe lahko @omenite ali #ključite ...", + "onboarding.profile.note_hint": "Lahko @omenite druge osebe ali dodate #ključnike ...", "onboarding.profile.save_and_continue": "Shrani in nadaljuj", "onboarding.profile.title": "Nastavitev profila", "onboarding.profile.upload_avatar": "Naloži sliko profila", @@ -664,7 +714,7 @@ "report.reasons.dislike": "Ni mi všeč", "report.reasons.dislike_description": "To ni tisto, kar želim videti", "report.reasons.legal": "To ni legalno", - "report.reasons.legal_description": "Ste mnenja, da krši zakonodajo vaše države ali države strežnika", + "report.reasons.legal_description": "Sem mnenja, da krši zakonodajo moje države ali države strežnika", "report.reasons.other": "Gre za nekaj drugega", "report.reasons.other_description": "Težava ne sodi v druge kategorije", "report.reasons.spam": "To je neželena vsebina", @@ -676,10 +726,10 @@ "report.statuses.subtitle": "Izberite vse, kar ustreza", "report.statuses.title": "Ali so kakšne objave, ki dokazujejo trditve iz te prijave?", "report.submit": "Pošlji", - "report.target": "Prijavi {target}", + "report.target": "Prijavljate {target}", "report.thanks.take_action": "Tukaj so vaše možnosti za nadzor tistega, kar vidite na Mastodonu:", "report.thanks.take_action_actionable": "Medtem, ko to pregledujemo, lahko proti @{name} ukrepate:", - "report.thanks.title": "Ali ne želite tega videti?", + "report.thanks.title": "Ali ne želite videti tega?", "report.thanks.title_actionable": "Hvala za prijavo, bomo preverili.", "report.unfollow": "Ne sledi več @{name}", "report.unfollow_explanation": "Temu računu sledite. Da ne boste več videli njegovih objav v svojem domačem viru, mu prenehajte slediti.", @@ -703,7 +753,7 @@ "search.search_or_paste": "Iščite ali prilepite URL", "search_popout.full_text_search_disabled_message": "Ni dostopno na {domain}.", "search_popout.full_text_search_logged_out_message": "Na voljo le, če ste prijavljeni.", - "search_popout.language_code": "Koda ISO jezika", + "search_popout.language_code": "Jezikovna koda ISO", "search_popout.options": "Možnosti iskanja", "search_popout.quick_actions": "Hitra dejanja", "search_popout.recent": "Nedavna iskanja", @@ -733,6 +783,7 @@ "status.bookmark": "Dodaj med zaznamke", "status.cancel_reblog_private": "Prekliči izpostavitev", "status.cannot_reblog": "Te objave ni mogoče izpostaviti", + "status.continued_thread": "Nadaljevanje niti", "status.copy": "Kopiraj povezavo do objave", "status.delete": "Izbriši", "status.detailed_status": "Podroben pogled pogovora", @@ -741,7 +792,8 @@ "status.edit": "Uredi", "status.edited": "Zadnje urejanje {date}", "status.edited_x_times": "Urejeno {count, plural, one {#-krat} two {#-krat} few {#-krat} other {#-krat}}", - "status.favourite": "Priljubljen_a", + "status.embed": "Pridobite kodo za vgradnjo", + "status.favourite": "Priljubljen/a", "status.favourites": "{count, plural, one {priljubitev} two {priljubitvi} few {priljubitve} other {priljubitev}}", "status.filter": "Filtriraj to objavo", "status.history.created": "{name}: ustvarjeno {date}", @@ -749,7 +801,7 @@ "status.load_more": "Naloži več", "status.media.open": "Kliknite za odpiranje", "status.media.show": "Kliknite za prikaz", - "status.media_hidden": "Mediji so skriti", + "status.media_hidden": "Predstavnosti so skrite", "status.mention": "Omeni @{name}", "status.more": "Več", "status.mute": "Utišaj @{name}", @@ -765,6 +817,7 @@ "status.reblogs.empty": "Nihče še ni izpostavil te objave. Ko se bo to zgodilo, se bodo pojavile tukaj.", "status.redraft": "Izbriši in preoblikuj", "status.remove_bookmark": "Odstrani zaznamek", + "status.replied_in_thread": "Odgovor iz niti", "status.replied_to": "Odgovoril/a {name}", "status.reply": "Odgovori", "status.replyAll": "Odgovori na nit", @@ -774,7 +827,7 @@ "status.show_less_all": "Prikaži manj za vse", "status.show_more_all": "Pokaži več za vse", "status.show_original": "Pokaži izvirnik", - "status.title.with_attachments": "{user} je objavil_a {attachmentCount, plural, one {{attachmentCount} priponko} two {{attachmentCount} priponki} few {{attachmentCount} priponke} other {{attachmentCount} priponk}}", + "status.title.with_attachments": "{user} je objavil/a {attachmentCount, plural, one {{attachmentCount} priponko} two {{attachmentCount} priponki} few {{attachmentCount} priponke} other {{attachmentCount} priponk}}", "status.translate": "Prevedi", "status.translated_from_with": "Prevedeno iz {lang} s pomočjo {provider}", "status.uncached_media_warning": "Predogled ni na voljo", @@ -802,6 +855,11 @@ "upload_error.poll": "Prenos datoteke z anketami ni dovoljen.", "upload_form.audio_description": "Opiši za osebe z okvaro sluha", "upload_form.description": "Opišite za slabovidne", + "upload_form.drag_and_drop.instructions": "Predstavnostno priponko lahko poberete tako, da pritisnete preslednico ali vnašalko. S puščicami na tipkovnici premikate priponko v posamezno smer. Priponko lahko odložite na novem položaju s ponovnim pritiskom na preslednico ali vnašalko ali pa dejanje prekličete s tipko ubežnica.", + "upload_form.drag_and_drop.on_drag_cancel": "Premikanje priponke je preklicano. Predstavnostna priponka {item} je padla nazaj na prejšnje mesto.", + "upload_form.drag_and_drop.on_drag_end": "Predstavnostna priponka {item} je padla nazaj.", + "upload_form.drag_and_drop.on_drag_over": "Priponka {item} je bila premaknjena.", + "upload_form.drag_and_drop.on_drag_start": "Pobrana priponka {item}.", "upload_form.edit": "Uredi", "upload_form.thumbnail": "Spremeni sličico", "upload_form.video_description": "Opišite za osebe z okvaro sluha in/ali vida", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 084ac9945f..ea92d611f3 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Të ndalet ndjekja e përdoruesit?", "content_warning.hide": "Fshihe postimin", "content_warning.show": "Shfaqe, sido qoftë", + "content_warning.show_more": "Shfaq më tepër", "conversation.delete": "Fshije bisedën", "conversation.mark_as_read": "Vëri shenjë si të lexuar", "conversation.open": "Shfaq bisedën", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re", "filter_modal.select_filter.title": "Filtroje këtë postim", "filter_modal.title.status": "Filtroni një postim", - "filter_warning.matches_filter": "Ka përkim me filtrin “{title}”", + "filter_warning.matches_filter": "Ka përkim me filtrin “{title}”", "filtered_notifications_banner.pending_requests": "Nga {count, plural, =0 {askush} one {një person} other {# vetë}} që mund të njihni", "filtered_notifications_banner.title": "Njoftime të filtruar", "firehose.all": "Krejt", @@ -508,7 +509,7 @@ "notification.favourite": "{name} i vuri shenjë postimit tuaj si të parapëlqyer", "notification.favourite.name_and_others_with_link": "{name} dhe {count, plural, one {# tjetër} other {# të tjerë}} i vunë shenjë postimit tuaj si të parapëlqyer", "notification.follow": "{name} zuri t’ju ndjekë", - "notification.follow.name_and_others": "Ju ndoqi {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}", + "notification.follow.name_and_others": "Ju ndoqi {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}", "notification.follow_request": "{name} ka kërkuar t’ju ndjekë", "notification.follow_request.name_and_others": "Ka kërkuar t’ju ndjekë {name} dhe {count, plural, one {# tjetër} other {# të tjerë}}", "notification.label.mention": "Përmendje", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Përgjigje private", "notification.label.reply": "Përgjigje", "notification.mention": "Përmendje", + "notification.mentioned_you": "{name} ju ka përmendur", "notification.moderation-warning.learn_more": "Mësoni më tepër", "notification.moderation_warning": "Ju është dhënë një sinjalizim moderimi", "notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Shtyllë filtrimesh të shpejta", "notifications.column_settings.follow": "Ndjekës të rinj:", "notifications.column_settings.follow_request": "Kërkesa të reja për ndjekje:", + "notifications.column_settings.group": "Grupoji", "notifications.column_settings.mention": "Përmendje:", "notifications.column_settings.poll": "Përfundime pyetësori:", "notifications.column_settings.push": "Njoftime Push", @@ -852,6 +855,11 @@ "upload_error.poll": "Me pyetësorët s’lejohet ngarkim kartelash.", "upload_form.audio_description": "Përshkruajeni për persona me dëgjim të kufizuar", "upload_form.description": "Përshkruajeni për persona me probleme shikimi", + "upload_form.drag_and_drop.instructions": "Që të merrni një bashkëngjitje media, shtypni tastin Space ose Enter. Teksa bëhet tërheqje, përdorni tastet shigjetë për ta shpënë bashkëngjitjen media në cilëndo drejtori që doni. Shtypni sërish Space ose Enter që të lihet bashkëngjitja media në pozicionin e vet të ri, ose shtypni Esc, që të anulohet veprimi.", + "upload_form.drag_and_drop.on_drag_cancel": "Tërheqja u anulua. Bashkëngjitja media {item} u la.", + "upload_form.drag_and_drop.on_drag_end": "Bashkëngjitja media {item} u la.", + "upload_form.drag_and_drop.on_drag_over": "Bashkëngjitja media {item} u lëviz.", + "upload_form.drag_and_drop.on_drag_start": "U mor bashkëngjitja media {item}.", "upload_form.edit": "Përpunoni", "upload_form.thumbnail": "Ndryshoni miniaturën", "upload_form.video_description": "Përshkruajeni për persona me dëgjim të kufizuar ose probleme shikimi", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index b1e5a95edf..2ff8be55ab 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -22,7 +22,7 @@ "account.cancel_follow_request": "Återkalla din begäran om att få följa", "account.copy": "Kopiera länk till profil", "account.direct": "Nämn @{name} privat", - "account.disable_notifications": "Sluta notifiera mig när @{name} gör inlägg", + "account.disable_notifications": "Sluta meddela mig när @{name} skriver ett inlägg", "account.domain_blocked": "Domän blockerad", "account.edit_profile": "Redigera profil", "account.enable_notifications": "Notifiera mig när @{name} gör inlägg", @@ -44,7 +44,7 @@ "account.joined_short": "Gick med", "account.languages": "Ändra vilka språk du helst vill se i ditt flöde", "account.link_verified_on": "Ägarskap för denna länk kontrollerades den {date}", - "account.locked_info": "För detta konto har ägaren valt att manuellt godkänna vem som kan följa hen.", + "account.locked_info": "Detta konto har låst integritetsstatus. Ägaren väljer manuellt vem som kan följa det.", "account.media": "Media", "account.mention": "Nämn @{name}", "account.moved_to": "{name} har indikerat att hen har ett nytt konto:", @@ -82,9 +82,10 @@ "admin.impact_report.instance_follows": "Följare som deras användare skulle förlora", "admin.impact_report.title": "Sammanfattning av påverkan", "alert.rate_limited.message": "Vänligen försök igen efter {retry_time, time, medium}.", - "alert.rate_limited.title": "Mängd begränsad", + "alert.rate_limited.title": "Hastighetsbegränsad", "alert.unexpected.message": "Ett oväntat fel uppstod.", "alert.unexpected.title": "Hoppsan!", + "alt_text_badge.title": "Alt-Text", "announcement.announcement": "Meddelande", "attachments_list.unprocessed": "(obehandlad)", "audio.hide": "Dölj audio", @@ -97,6 +98,8 @@ "block_modal.title": "Blockera användare?", "block_modal.you_wont_see_mentions": "Du kommer inte att se inlägg som nämner dem.", "boost_modal.combo": "Du kan trycka på {combo} för att hoppa över detta nästa gång", + "boost_modal.reblog": "Boosta inlägg?", + "boost_modal.undo_reblog": "Avboosta inlägg?", "bundle_column_error.copy_stacktrace": "Kopiera felrapport", "bundle_column_error.error.body": "Den begärda sidan kunde inte visas. Det kan bero på ett fel i vår kod eller ett problem med webbläsarens kompatibilitet.", "bundle_column_error.error.title": "Åh nej!", @@ -118,7 +121,7 @@ "column.blocks": "Blockerade användare", "column.bookmarks": "Bokmärken", "column.community": "Lokal tidslinje", - "column.direct": "Privata nämningar", + "column.direct": "Privata omnämnande", "column.directory": "Bläddra bland profiler", "column.domain_blocks": "Blockerade domäner", "column.favourites": "Favoriter", @@ -191,9 +194,10 @@ "confirmations.reply.title": "Skriva över inlägget?", "confirmations.unfollow.confirm": "Avfölj", "confirmations.unfollow.message": "Är du säker på att du vill avfölja {name}?", - "confirmations.unfollow.title": "Avfölj %s?", + "confirmations.unfollow.title": "Avfölj användare?", "content_warning.hide": "Dölj inlägg", "content_warning.show": "Visa ändå", + "content_warning.show_more": "Visa mer", "conversation.delete": "Radera konversation", "conversation.mark_as_read": "Markera som läst", "conversation.open": "Visa konversation", @@ -219,6 +223,8 @@ "domain_block_modal.they_cant_follow": "Ingen från denna server kan följa dig.", "domain_block_modal.they_wont_know": "De kommer inte veta att de har blockerats.", "domain_block_modal.title": "Blockera domän?", + "domain_block_modal.you_will_lose_num_followers": "Du kommer att förlora {followersCount, plural, other {{followersCountDisplay} följare}} och {followingCount, plural, one {{followingCountDisplay} person du följer} other {{followingCountDisplay} personer du följer}}.", + "domain_block_modal.you_will_lose_relationships": "Du kommer att förlora alla följare och personer du följer från denna server.", "domain_block_modal.you_wont_see_posts": "Du kommer inte att se inlägg eller meddelanden från användare på den här servern.", "domain_pill.activitypub_lets_connect": "Det låter dig ansluta och interagera med människor inte bara på Mastodon, men även på andra sociala appar.", "domain_pill.activitypub_like_language": "ActivityPub är som språket Mastodon talar med andra sociala nätverk.", @@ -257,7 +263,7 @@ "empty_column.blocks": "Du har ännu ej blockerat några användare.", "empty_column.bookmarked_statuses": "Du har inte bokmärkt några inlägg än. När du bokmärker ett inlägg kommer det synas här.", "empty_column.community": "Den lokala tidslinjen är tom. Skriv något offentligt för att sätta bollen i rullning!", - "empty_column.direct": "Du har inga privata nämningar. När du skickar eller tar emot ett direktmeddelande kommer det att visas här.", + "empty_column.direct": "Du har inga privata omnämninande. När du skickar eller tar emot ett direktmeddelande kommer det att visas här.", "empty_column.domain_blocks": "Det finns ännu inga dolda domäner.", "empty_column.explore_statuses": "Ingenting är trendigt just nu. Kom tillbaka senare!", "empty_column.favourited_statuses": "Du har inga favoritmarkerade inlägg ännu. När du favoritmärker ett så kommer det att dyka upp här.", @@ -265,7 +271,7 @@ "empty_column.follow_requests": "Du har inga följarförfrågningar än. När du får en kommer den visas här.", "empty_column.followed_tags": "Du följer inga hashtaggar ännu. När du gör det kommer de att dyka upp här.", "empty_column.hashtag": "Det finns inget i denna hashtag ännu.", - "empty_column.home": "Din hemma-tidslinje är tom! Följ fler användare för att fylla den. {suggestions}", + "empty_column.home": "Din hemma-tidslinje är tom! Följ fler användare för att fylla den.", "empty_column.list": "Det finns inget i denna lista än. När listmedlemmar publicerar nya inlägg kommer de synas här.", "empty_column.lists": "Du har inga listor än. När skapar en kommer den dyka upp här.", "empty_column.mutes": "Du har ännu inte tystat några användare.", @@ -300,6 +306,7 @@ "filter_modal.select_filter.subtitle": "Använd en befintlig kategori eller skapa en ny", "filter_modal.select_filter.title": "Filtrera detta inlägg", "filter_modal.title.status": "Filtrera ett inlägg", + "filter_warning.matches_filter": "Matchar filtret \"{title}\"", "filtered_notifications_banner.pending_requests": "Från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner", "filtered_notifications_banner.title": "Filtrerade aviseringar", "firehose.all": "Allt", @@ -374,12 +381,12 @@ "ignore_notifications_modal.new_accounts_title": "Vill du ignorera aviseringar från nya konton?", "ignore_notifications_modal.not_followers_title": "Vill du ignorera aviseringar från personer som inte följer dig?", "ignore_notifications_modal.not_following_title": "Vill du blockera aviseringar från personer som du inte följer dig?", - "ignore_notifications_modal.private_mentions_title": "Vill du ignorera aviseringar från oönskade privata omnämningar?", + "ignore_notifications_modal.private_mentions_title": "Vill du ignorera aviseringar från oombedda privata omnämnanden?", "interaction_modal.description.favourite": "Med ett Mastodon-konto kan du favoritmarkera detta inlägg för att visa författaren att du gillar det och för att spara det till senare.", - "interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se hens inlägg i ditt hemflöde.", + "interaction_modal.description.follow": "Med ett Mastodon-konto kan du följa {name} för att se deras inlägg i ditt hemflöde.", "interaction_modal.description.reblog": "Med ett Mastodon-konto kan du boosta detta inlägg för att dela den med dina egna följare.", "interaction_modal.description.reply": "Med ett Mastodon-konto kan du svara på detta inlägg.", - "interaction_modal.login.action": "Ta hem mig", + "interaction_modal.login.action": "Ta mig hem", "interaction_modal.login.prompt": "Domän för din hemserver, t.ex. mastodon.social", "interaction_modal.no_account_yet": "Inte på Mastodon?", "interaction_modal.on_another_server": "På en annan server", @@ -396,40 +403,42 @@ "keyboard_shortcuts.back": "Gå bakåt", "keyboard_shortcuts.blocked": "Öppna listan över blockerade användare", "keyboard_shortcuts.boost": "Boosta inlägg", - "keyboard_shortcuts.column": "för att fokusera en status i en av kolumnerna", - "keyboard_shortcuts.compose": "för att fokusera skrivfältet", + "keyboard_shortcuts.column": "Fokusera kolumn", + "keyboard_shortcuts.compose": "Fokusera skrivfältet", "keyboard_shortcuts.description": "Beskrivning", - "keyboard_shortcuts.direct": "för att öppna privata nämningskolumnen", - "keyboard_shortcuts.down": "för att flytta nedåt i listan", + "keyboard_shortcuts.direct": "för att öppna privata omnämnandekolumnen", + "keyboard_shortcuts.down": "Flytta ner i listan", "keyboard_shortcuts.enter": "Öppna inlägg", "keyboard_shortcuts.favourite": "Favoritmarkera inlägg", "keyboard_shortcuts.favourites": "Öppna favoritlistan", "keyboard_shortcuts.federated": "Öppna federerad tidslinje", "keyboard_shortcuts.heading": "Tangentbordsgenvägar", - "keyboard_shortcuts.home": "för att öppna Hem-tidslinjen", + "keyboard_shortcuts.home": "Öppna Hemtidslinjen", "keyboard_shortcuts.hotkey": "Kommando", - "keyboard_shortcuts.legend": "för att visa denna översikt", - "keyboard_shortcuts.local": "för att öppna Lokal tidslinje", - "keyboard_shortcuts.mention": "för att nämna skaparen", + "keyboard_shortcuts.legend": "Visa denna översikt", + "keyboard_shortcuts.local": "Öppna lokal tidslinje", + "keyboard_shortcuts.mention": "Nämna skaparen", "keyboard_shortcuts.muted": "Öppna listan över tystade användare", - "keyboard_shortcuts.my_profile": "för att öppna din profil", - "keyboard_shortcuts.notifications": "för att öppna Meddelanden", - "keyboard_shortcuts.open_media": "öppna media", + "keyboard_shortcuts.my_profile": "Öppna din profil", + "keyboard_shortcuts.notifications": "Öppna meddelanden", + "keyboard_shortcuts.open_media": "Öppna media", "keyboard_shortcuts.pinned": "Öppna listan över fästa inlägg", - "keyboard_shortcuts.profile": "för att öppna skaparens profil", + "keyboard_shortcuts.profile": "Öppna författarens profil", "keyboard_shortcuts.reply": "Svara på inlägg", - "keyboard_shortcuts.requests": "för att öppna Följförfrågningar", - "keyboard_shortcuts.search": "för att fokusera sökfältet", - "keyboard_shortcuts.spoilers": "visa/dölja CW-fält", - "keyboard_shortcuts.start": "för att öppna \"Kom igång\"-kolumnen", - "keyboard_shortcuts.toggle_hidden": "för att visa/gömma text bakom CW", - "keyboard_shortcuts.toggle_sensitivity": "för att visa/gömma media", + "keyboard_shortcuts.requests": "Öppna följförfrågningar", + "keyboard_shortcuts.search": "Fokusera sökfältet", + "keyboard_shortcuts.spoilers": "Visa/dölja CW-fält", + "keyboard_shortcuts.start": "Öppna \"Kom igång\"-kolumnen", + "keyboard_shortcuts.toggle_hidden": "Visa/gömma text bakom CW", + "keyboard_shortcuts.toggle_sensitivity": "Visa/gömma media", "keyboard_shortcuts.toot": "Starta nytt inlägg", - "keyboard_shortcuts.unfocus": "för att avfokusera skrivfält/sökfält", - "keyboard_shortcuts.up": "för att flytta uppåt i listan", + "keyboard_shortcuts.unfocus": "Avfokusera skrivfält/sökfält", + "keyboard_shortcuts.up": "Flytta uppåt i listan", "lightbox.close": "Stäng", "lightbox.next": "Nästa", "lightbox.previous": "Tidigare", + "lightbox.zoom_in": "Zooma till faktisk storlek", + "lightbox.zoom_out": "Zooma för att passa", "limited_account_hint.action": "Visa profil ändå", "limited_account_hint.title": "Denna profil har dolts av {domain}s moderatorer.", "link_preview.author": "Av {name}", @@ -463,22 +472,24 @@ "mute_modal.you_wont_see_mentions": "Du kommer inte att se inlägg som nämner dem.", "mute_modal.you_wont_see_posts": "De kan fortfarande se dina inlägg, men du kan inte se deras.", "navigation_bar.about": "Om", + "navigation_bar.administration": "Administration", "navigation_bar.advanced_interface": "Öppna i avancerat webbgränssnitt", "navigation_bar.blocks": "Blockerade användare", "navigation_bar.bookmarks": "Bokmärken", "navigation_bar.community_timeline": "Lokal tidslinje", "navigation_bar.compose": "Författa nytt inlägg", - "navigation_bar.direct": "Privata nämningar", + "navigation_bar.direct": "Privata omnämnande", "navigation_bar.discover": "Upptäck", "navigation_bar.domain_blocks": "Dolda domäner", "navigation_bar.explore": "Utforska", "navigation_bar.favourites": "Favoriter", "navigation_bar.filters": "Tystade ord", "navigation_bar.follow_requests": "Följförfrågningar", - "navigation_bar.followed_tags": "Utvalda hashtags", + "navigation_bar.followed_tags": "Följda hashtaggar", "navigation_bar.follows_and_followers": "Följer och följare", "navigation_bar.lists": "Listor", "navigation_bar.logout": "Logga ut", + "navigation_bar.moderation": "Moderering", "navigation_bar.mutes": "Tystade användare", "navigation_bar.opened_in_classic_interface": "Inlägg, konton och andra specifika sidor öppnas som standard i det klassiska webbgränssnittet.", "navigation_bar.personal": "Personligt", @@ -498,14 +509,15 @@ "notification.favourite": "{name} favoritmarkerade ditt inlägg", "notification.favourite.name_and_others_with_link": "{name} och {count, plural, one {# annan} other {# andra}} har favoritmarkerat ditt inlägg", "notification.follow": "{name} följer dig", - "notification.follow.name_and_others": "{name} och {count, plural, one {# en annan} other {# andra}} följer dig", + "notification.follow.name_and_others": "{name} och {count, plural, one {# annan} other {# andra}} följer dig", "notification.follow_request": "{name} har begärt att följa dig", "notification.follow_request.name_and_others": "{name} och {count, plural, one {# en annan} other {# andra}} har bett att följa dig", "notification.label.mention": "Nämn", - "notification.label.private_mention": "Privat nämning", + "notification.label.private_mention": "Privat omnämnande", "notification.label.private_reply": "Privata svar", "notification.label.reply": "Svar", "notification.mention": "Nämn", + "notification.mentioned_you": "{name} nämnde dig", "notification.moderation-warning.learn_more": "Läs mer", "notification.moderation_warning": "Du har fått en moderationsvarning", "notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.", @@ -556,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Snabbfilter", "notifications.column_settings.follow": "Nya följare:", "notifications.column_settings.follow_request": "Ny följ-förfrågan:", + "notifications.column_settings.group": "Gruppera", "notifications.column_settings.mention": "Omnämningar:", "notifications.column_settings.poll": "Omröstningsresultat:", "notifications.column_settings.push": "Push-aviseringar", @@ -602,11 +615,11 @@ "onboarding.action.back": "Ta mig tillbaka", "onboarding.actions.back": "Ta mig tillbaka", "onboarding.actions.go_to_explore": "See what's trending", - "onboarding.actions.go_to_home": "Go to your home feed", + "onboarding.actions.go_to_home": "Ta mig till mitt hemflöde", "onboarding.compose.template": "Hallå #Mastodon!", "onboarding.follows.empty": "Tyvärr kan inga resultat visas just nu. Du kan prova att använda sökfunktionen eller utforska sidan för att hitta personer att följa, eller försök igen senare.", - "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.follows.lead": "Ditt hemflöde är det primära sättet att uppleva Mastodon. Ju fler människor du följer, desto mer aktiv och intressant blir det. För att komma igång, är här några förslag:", + "onboarding.follows.title": "Anpassa ditt hemflöde", "onboarding.profile.discoverable": "Gör min profil upptäckbar", "onboarding.profile.discoverable_hint": "När du väljer att vara upptäckbar på Mastodon kan dina inlägg visas i sök- och trendresultat, och din profil kan föreslås för personer med liknande intressen som du.", "onboarding.profile.display_name": "Visningsnamn", @@ -627,7 +640,7 @@ "onboarding.start.title": "Du klarade det!", "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.publish_status.body": "Säg hej till världen med text, foton, videor eller omröstningar {emoji}", "onboarding.steps.publish_status.title": "Gör ditt första inlägg", "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", @@ -718,8 +731,8 @@ "report.thanks.take_action_actionable": "Medan vi granskar detta kan du vidta åtgärder mot {name}:", "report.thanks.title": "Vill du inte se det här?", "report.thanks.title_actionable": "Tack för att du rapporterar, vi kommer att titta på detta.", - "report.unfollow": "Sluta följ @{username}", - "report.unfollow_explanation": "Du följer detta konto. Avfölj hen för att inte se hens inlägg i ditt hemflöde.", + "report.unfollow": "Sluta följ @{name}", + "report.unfollow_explanation": "Du följer detta konto. Avfölj det för att inte se dess inlägg i ditt hemflöde.", "report_notification.attached_statuses": "bifogade {count, plural, one {{count} inlägg} other {{count} inlägg}}", "report_notification.categories.legal": "Rättsligt", "report_notification.categories.legal_sentence": "olagligt innehåll", @@ -759,7 +772,7 @@ "server_banner.is_one_of_many": "{domain} är en av de många oberoende Mastodon-servrar som du kan använda för att delta i Fediversen.", "server_banner.server_stats": "Serverstatistik:", "sign_in_banner.create_account": "Skapa konto", - "sign_in_banner.follow_anyone": "Följ vem som helst över Fediverse och se allt i kronologisk ordning. Inga algoritmer, inga annonser och inga klickbeten i sikte.", + "sign_in_banner.follow_anyone": "Följ vem som helst över Fediversum och se allt i kronologisk ordning. Inga algoritmer, annonser eller klickbeten i sikte.", "sign_in_banner.mastodon_is": "Mastodon är det bästa sättet att hänga med i vad som händer.", "sign_in_banner.sign_in": "Logga in", "sign_in_banner.sso_redirect": "Logga in eller registrera dig", @@ -770,11 +783,12 @@ "status.bookmark": "Bokmärk", "status.cancel_reblog_private": "Sluta boosta", "status.cannot_reblog": "Detta inlägg kan inte boostas", + "status.continued_thread": "Fortsatt tråd", "status.copy": "Kopiera inläggslänk", "status.delete": "Radera", "status.detailed_status": "Detaljerad samtalsvy", - "status.direct": "Nämn @{name} privat", - "status.direct_indicator": "Privat nämning", + "status.direct": "Omnämn @{name} privat", + "status.direct_indicator": "Privat omnämnande", "status.edit": "Redigera", "status.edited": "Senast ändrad {date}", "status.edited_x_times": "Redigerad {count, plural, one {{count} gång} other {{count} gånger}}", @@ -803,6 +817,7 @@ "status.reblogs.empty": "Ingen har boostat detta inlägg än. När någon gör det kommer de synas här.", "status.redraft": "Radera & gör om", "status.remove_bookmark": "Ta bort bokmärke", + "status.replied_in_thread": "Svarade i tråden", "status.replied_to": "Svarade på {name}", "status.reply": "Svara", "status.replyAll": "Svara på tråden", @@ -812,7 +827,7 @@ "status.show_less_all": "Visa mindre för alla", "status.show_more_all": "Visa mer för alla", "status.show_original": "Visa original", - "status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}", + "status.title.with_attachments": "{user} lade upp {attachmentCount, plural, one {en bilaga} other {{attachmentCount} bilagor}}", "status.translate": "Översätt", "status.translated_from_with": "Översatt från {lang} med {provider}", "status.uncached_media_warning": "Förhandsvisning inte tillgänglig", @@ -840,6 +855,11 @@ "upload_error.poll": "Filuppladdning tillåts inte med omröstningar.", "upload_form.audio_description": "Beskriv för personer med hörselnedsättning", "upload_form.description": "Beskriv för synskadade", + "upload_form.drag_and_drop.instructions": "För att plocka upp en mediebilaga, tryck på mellanslag eller enter. Använd piltangenterna för att flytta mediebilagan. Tryck på mellanslag eller enter igen för att släppa mediebilagan i sin nya position, eller tryck på escape för att avbryta.", + "upload_form.drag_and_drop.on_drag_cancel": "Flytten avbröts. Mediebilagan {item} släpptes.", + "upload_form.drag_and_drop.on_drag_end": "Mediebilagan {item} släpptes.", + "upload_form.drag_and_drop.on_drag_over": "Mediebilagan {item} flyttades.", + "upload_form.drag_and_drop.on_drag_start": "Mediebilagan {item} plockades upp.", "upload_form.edit": "Redigera", "upload_form.thumbnail": "Ändra miniatyr", "upload_form.video_description": "Beskriv för personer med hörsel- eller synnedsättning", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 40fbd7f7bd..b7aa196d7c 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -235,6 +235,7 @@ "search.placeholder": "శోధన", "search_results.hashtags": "హాష్ ట్యాగ్లు", "search_results.statuses": "టూట్లు", + "search_results.title": "{q}", "sign_in_banner.sign_in": "Sign in", "status.admin_account": "@{name} కొరకు సమన్వయ వినిమయసీమను తెరువు", "status.admin_status": "సమన్వయ వినిమయసీమలో ఈ స్టేటస్ ను తెరవండి", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 160b6ec4e6..6bc92281d8 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -97,7 +97,7 @@ "block_modal.they_will_know": "เขาสามารถเห็นว่ามีการปิดกั้นเขา", "block_modal.title": "ปิดกั้นผู้ใช้?", "block_modal.you_wont_see_mentions": "คุณจะไม่เห็นโพสต์ที่กล่าวถึงเขา", - "boost_modal.combo": "คุณสามารถกด {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป", + "boost_modal.combo": "คุณสามารถกดปุ่ม {combo} เพื่อข้ามสิ่งนี้ในครั้งถัดไป", "boost_modal.reblog": "ดันโพสต์?", "boost_modal.undo_reblog": "เลิกดันโพสต์?", "bundle_column_error.copy_stacktrace": "คัดลอกรายงานข้อผิดพลาด", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "เลิกติดตามผู้ใช้?", "content_warning.hide": "ซ่อนโพสต์", "content_warning.show": "แสดงต่อไป", + "content_warning.show_more": "แสดงเพิ่มเติม", "conversation.delete": "ลบการสนทนา", "conversation.mark_as_read": "ทำเครื่องหมายว่าอ่านแล้ว", "conversation.open": "ดูการสนทนา", @@ -222,6 +223,8 @@ "domain_block_modal.they_cant_follow": "ไม่มีใครจากเซิร์ฟเวอร์นี้สามารถติดตามคุณ", "domain_block_modal.they_wont_know": "เขาจะไม่ทราบว่ามีการปิดกั้นเขา", "domain_block_modal.title": "ปิดกั้นโดเมน?", + "domain_block_modal.you_will_lose_num_followers": "คุณจะสูญเสีย {followersCount, plural, other {{followersCountDisplay} ผู้ติดตาม}}และ {followingCount, plural, other {{followingCountDisplay} คนที่คุณติดตาม}}", + "domain_block_modal.you_will_lose_relationships": "คุณจะสูญเสียผู้ติดตามและผู้คนที่คุณติดตามทั้งหมดจากเซิร์ฟเวอร์นี้", "domain_block_modal.you_wont_see_posts": "คุณจะไม่เห็นโพสต์หรือการแจ้งเตือนจากผู้ใช้ในเซิร์ฟเวอร์นี้", "domain_pill.activitypub_lets_connect": "โปรโตคอลช่วยให้คุณเชื่อมต่อและโต้ตอบกับผู้คนไม่ใช่แค่ใน Mastodon แต่ทั่วทั้งแอปสังคมต่าง ๆ เช่นกัน", "domain_pill.activitypub_like_language": "ActivityPub เป็นเหมือนภาษาที่ Mastodon พูดกับเครือข่ายสังคมอื่น ๆ", @@ -303,7 +306,7 @@ "filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่", "filter_modal.select_filter.title": "กรองโพสต์นี้", "filter_modal.title.status": "กรองโพสต์", - "filter_warning.matches_filter": "ตรงกับตัวกรอง “{title}”", + "filter_warning.matches_filter": "ตรงกับตัวกรอง “{title}”", "filtered_notifications_banner.pending_requests": "จาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก", "filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่", "firehose.all": "ทั้งหมด", @@ -434,6 +437,8 @@ "lightbox.close": "ปิด", "lightbox.next": "ถัดไป", "lightbox.previous": "ก่อนหน้า", + "lightbox.zoom_in": "ซูมเป็นขนาดจริง", + "lightbox.zoom_out": "ซูมให้พอดี", "limited_account_hint.action": "แสดงโปรไฟล์ต่อไป", "limited_account_hint.title": "มีการซ่อนโปรไฟล์นี้โดยผู้กลั่นกรองของ {domain}", "link_preview.author": "โดย {name}", @@ -504,7 +509,7 @@ "notification.favourite": "{name} ได้ชื่นชอบโพสต์ของคุณ", "notification.favourite.name_and_others_with_link": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ชื่นชอบโพสต์ของคุณ", "notification.follow": "{name} ได้ติดตามคุณ", - "notification.follow.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ติดตามคุณ", + "notification.follow.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ติดตามคุณ", "notification.follow_request": "{name} ได้ขอติดตามคุณ", "notification.follow_request.name_and_others": "{name} และ {count, plural, other {# อื่น ๆ}} ได้ขอติดตามคุณ", "notification.label.mention": "การกล่าวถึง", @@ -512,6 +517,7 @@ "notification.label.private_reply": "การตอบกลับแบบส่วนตัว", "notification.label.reply": "การตอบกลับ", "notification.mention": "การกล่าวถึง", + "notification.mentioned_you": "{name} ได้กล่าวถึงคุณ", "notification.moderation-warning.learn_more": "เรียนรู้เพิ่มเติม", "notification.moderation_warning": "คุณได้รับคำเตือนการกลั่นกรอง", "notification.moderation_warning.action_delete_statuses": "เอาโพสต์บางส่วนของคุณออกแล้ว", @@ -562,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "แถบตัวกรองด่วน", "notifications.column_settings.follow": "ผู้ติดตามใหม่:", "notifications.column_settings.follow_request": "คำขอติดตามใหม่:", + "notifications.column_settings.group": "จัดกลุ่ม", "notifications.column_settings.mention": "การกล่าวถึง:", "notifications.column_settings.poll": "ผลลัพธ์การสำรวจความคิดเห็น:", "notifications.column_settings.push": "การแจ้งเตือนแบบผลัก", @@ -848,6 +855,11 @@ "upload_error.poll": "ไม่อนุญาตการอัปโหลดไฟล์โดยมีการสำรวจความคิดเห็น", "upload_form.audio_description": "อธิบายสำหรับผู้ที่สูญเสียการได้ยิน", "upload_form.description": "อธิบายสำหรับผู้คนที่พิการทางการมองเห็นหรือมีสายตาเลือนราง", + "upload_form.drag_and_drop.instructions": "เพื่อหยิบไฟล์แนบสื่อ กดปุ่มเว้นวรรคหรือขึ้นบรรทัดใหม่ ขณะลาก ใช้ปุ่มลูกศรเพื่อย้ายไฟล์แนบสื่อในทิศทางใดก็ตามที่กำหนด กดปุ่มเว้นวรรคหรือขึ้นบรรทัดใหม่อีกครั้งเพื่อปล่อยไฟล์แนบสื่อในตำแหน่งใหม่ หรือกดปุ่ม Escape เพื่อยกเลิก", + "upload_form.drag_and_drop.on_drag_cancel": "ยกเลิกการลากแล้ว ปล่อยไฟล์แนบสื่อ {item} แล้ว", + "upload_form.drag_and_drop.on_drag_end": "ปล่อยไฟล์แนบสื่อ {item} แล้ว", + "upload_form.drag_and_drop.on_drag_over": "ย้ายไฟล์แนบสื่อ {item} แล้ว", + "upload_form.drag_and_drop.on_drag_start": "หยิบไฟล์แนบสื่อ {item} แล้ว", "upload_form.edit": "แก้ไข", "upload_form.thumbnail": "เปลี่ยนภาพขนาดย่อ", "upload_form.video_description": "อธิบายสำหรับผู้คนที่พิการทางการได้ยิน ได้ยินไม่ชัด พิการทางการมองเห็น หรือมีสายตาเลือนราง", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index ba5395b7bd..5ae8734f84 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -1,13 +1,17 @@ { "about.blocks": "ma lawa", "about.contact": "toki:", + "about.disclaimer": "ilo Masoton la jan ale li lawa e ona li pana e pona tawa ona. kulupu esun Mastodon gGmbH li lawa e nimi ona.", "about.domain_blocks.no_reason_available": "mi sona ala e tan", "about.domain_blocks.preamble": "ilo Masoton li ken e ni: sina lukin e toki jan pi ma ilo mute. sina ken toki tawa ona lon kulupu ma. taso, ma ni li ken ala e ni tawa ma ni:", "about.domain_blocks.silenced.explanation": "sina lukin ala e toki e jan tan ma ni. taso, sina wile la, sina ken ni.", - "about.domain_blocks.silenced.title": "ken lili lukin", + "about.domain_blocks.silenced.title": "ken lukin lili ", + "about.domain_blocks.suspended.explanation": "sona ale pi ma ni li kama pali ala, li kama esun ala, li kama awen ala la sina ken ala toki tawa jan pi ma ni.", "about.domain_blocks.suspended.title": "weka", "about.not_available": "lon kulupu ni la sina ken alasa ala e sona ni.", + "about.powered_by": "lipu kulupu pi jan lawa mute tan {mastodon}", "about.rules": "lawa kulupu", + "account.account_note_header": "sona pi sina taso", "account.add_or_remove_from_list": "o ante e lipu jan", "account.badges.bot": "ilo nanpa li lawa e ni", "account.badges.group": "kulupu", @@ -15,27 +19,31 @@ "account.block_domain": "o weka e ma {domain}", "account.block_short": "o weka e jan tawa mi", "account.blocked": "jan li weka tawa mi", - "account.cancel_follow_request": "o pini kute", + "account.cancel_follow_request": "o kute ala", "account.copy": "o pali same e linja pi lipu jan", "account.direct": "len la o mu e @{name}", "account.disable_notifications": "@{name} li toki la o mu ala e mi", - "account.domain_blocked": "ma ni li weka tawa sina", + "account.domain_blocked": "sina wile ala lukin e ma ni", "account.edit_profile": "o ante e lipu mi", "account.enable_notifications": "@{name} li toki la o toki e toki ona tawa mi", "account.endorse": "lipu jan la o suli e ni", "account.featured_tags.last_status_at": "sitelen pini pi jan ni li lon tenpo {date}", "account.featured_tags.last_status_never": "toki ala li lon", + "account.featured_tags.title": "{name} la kulupu ni pi toki suli li pona", "account.follow": "o kute", "account.follow_back": "jan ni li kute e sina. o kute", "account.followers": "jan kute", "account.followers.empty": "jan ala li kute e jan ni", + "account.followers_counter": "{count, plural, other {jan {counter} li kute e ona}}", "account.following": "sina kute e jan ni", + "account.following_counter": "{count, plural, other {ona li kute e jan {counter}}}", "account.follows.empty": "jan ni li kute e jan ala", "account.go_to_profile": "o tawa lipu jan", "account.hide_reblogs": "o lukin ala e pana toki tan @{name}", "account.in_memoriam": "jan ni li moli. pona o tawa ona.", "account.joined_short": "li kama", "account.languages": "sina wile lukin e sitelen pi toki seme", + "account.link_verified_on": "{date} la mi sona e ni: jan seme li jo e lipu ni", "account.locked_info": "sina wile kute e jan ni la ona o toki e ken", "account.media": "sitelen", "account.mention": "o toki e jan @{name}", @@ -43,62 +51,92 @@ "account.mute": "o len e @{name}", "account.mute_notifications_short": "o kute ala e mu tan jan ni", "account.mute_short": "o kute ala", - "account.muted": "sina len e jan ni", - "account.no_bio": "lipu li weka", + "account.muted": "sina kute ala e jan ni", + "account.mutual": "jan pona sona", + "account.no_bio": "lipu li weka.", "account.open_original_page": "o open e lipu open", "account.posts": "toki suli", "account.posts_with_replies": "toki ale", - "account.report": "jan @{name} la o toki tawa lawa", - "account.requested": "jan ni o ken e kute sina. sina pini wile kute la o luka e ni", - "account.requested_follow": "{name} li wile kute e sina", + "account.report": "jan @{name} la o toki e ike tawa lawa", + "account.requested": "jan ni o ken e kute sina", + "account.requested_follow": "jan {name} li wile kute e sina", "account.share": "o pana e lipu jan @{name}", "account.show_reblogs": "o lukin e pana toki tan @{name}", + "account.statuses_counter": "{count, plural, other {toki {counter}}}", "account.unblock": "o weka ala e jan {name}", "account.unblock_domain": "o weka ala e ma {domain}", "account.unblock_short": "o pini weka", "account.unendorse": "lipu jan la o suli ala e ni", - "account.unfollow": "o pini kute", + "account.unfollow": "o kute ala", "account.unmute": "o len ala e @{name}", "account.unmute_notifications_short": "o kute e mu tan jan ni", "account.unmute_short": "o len ala", + "account_note.placeholder": "o luka e ni la sona pi sina taso", + "admin.dashboard.daily_retention": "nanpa pi awen jan lon tenpo suno", + "admin.dashboard.monthly_retention": "nanpa pi awen jan lon tenpo mun", "admin.dashboard.retention.average": "sama", "admin.dashboard.retention.cohort": "tenpo mun open", "admin.dashboard.retention.cohort_size": "jan sin", + "admin.impact_report.instance_accounts": "ni li pakala li weka e lipu jan ni", + "admin.impact_report.instance_followers": "jan pi ma mi li weka tan jan kute ni", + "admin.impact_report.instance_follows": "ma ante li weka tan jan kute ni", + "admin.impact_report.title": "sona pi pakala kulupu", "alert.rate_limited.message": "tenpo {retry_time, time, medium} la o pali awen", + "alert.rate_limited.title": "ilo ni li lili e ken sina", "alert.unexpected.message": "pakala li lon", "alert.unexpected.title": "pakala a!", + "alt_text_badge.title": "toki sona sitelen", "announcement.announcement": "toki suli", + "attachments_list.unprocessed": "(nasin open)", "audio.hide": "o len e kalama", - "block_modal.show_less": "o lili e lukin", - "block_modal.show_more": "o mute e lukin", - "block_modal.they_cant_mention": "ona li ken ala toki e sina li ken ala alasa e sina", + "block_modal.remote_users_caveat": "mi pana e wile sina tawa ma {domain}. taso, o sona: ma li ken kepeken nasin len ante la pakala li ken lon. toki pi lukin ale la jan pi ma ala li ken lukin.", + "block_modal.show_less": "o pana e lili", + "block_modal.show_more": "o pana e mute", + "block_modal.they_cant_mention": "ona li ken ala toki tawa sina li ken ala kute e sina.", + "block_modal.they_cant_see_posts": "ona li ken ala lukin e toki sina. sina ken ala lukin e toki ona.", + "block_modal.they_will_know": "ona li sona e ni: sina weka e lukin ona.", "block_modal.title": "o weka ala weka e jan", + "block_modal.you_wont_see_mentions": "jan li toki e nimi ona la sina lukin ala e toki ni.", "boost_modal.combo": "sina ken luka e nena {combo} tawa ni: sina wile ala luka e nena lon tenpo kama", + "boost_modal.reblog": "o wawa ala wawa e toki?", + "boost_modal.undo_reblog": "o weka ala weka e wawa toki?", "bundle_column_error.copy_stacktrace": "o awen e sona pakala lon ilo sina", "bundle_column_error.error.body": "ilo li ken ala pana e lipu ni. ni li ken tan pakala ilo.", - "bundle_column_error.error.title": "ike a!", + "bundle_column_error.error.title": "pakala a!", + "bundle_column_error.network.body": "mi lukin pana e lipu la, pakala li lon. ken la, pakala li tan ilo nanpa sina. ken la, pakala li tan ilo nanpa suli pi ma kulupu ni.", "bundle_column_error.network.title": "pakala la ilo sina li toki ala tawa ilo ante", - "bundle_column_error.retry": "o ni sin", - "bundle_column_error.return": "o tawa tomo", + "bundle_column_error.retry": "o alasa sin", + "bundle_column_error.return": "o tawa open", "bundle_column_error.routing.body": "ilo li sona ala e lipu wile. sina pana ala pana e nasin pona tawa lipu?", "bundle_column_error.routing.title": "pakala nanpa 404", "bundle_modal_error.close": "o pini", "bundle_modal_error.message": "ilo li wile kama e ijo ni, taso pakala li lon.", - "bundle_modal_error.retry": "o ni sin", + "bundle_modal_error.retry": "o alasa sin", + "closed_registrations.other_server_instructions": "kulupu Masoton la lawa mute li lon. sina ken pali e sijelo lon ma ante la sina awen ken lukin e ijo pi ma ni.", + "closed_registrations_modal.description": "tenpo ni la, sina ken ala pali e jan lon ma {domain}. taso sina wile kepeken ilo Masoton la, sina ken pali e jan lon ma ante lon ala ma {domain}.", "closed_registrations_modal.find_another_server": "o alasa e ma ante", + "closed_registrations_modal.preamble": "ilo Masoton li lon ilo wan ala. sina kepeken ma ante la sina ken lukin li ken kute e jan pi ma ni. sina wile la, sina ken pali e ma sin!", + "closed_registrations_modal.title": "sina kama lon kulupu Masoton", "column.about": "sona", "column.blocks": "kulupu pi jan weka", "column.bookmarks": "awen toki", "column.community": "linja tenpo pi ma ni", + "column.direct": "mu len", + "column.directory": "o lukin e jan", + "column.domain_blocks": "ma pi wile ala lukin", "column.favourites": "ijo pona", "column.firehose": "toki pi tenpo ni", "column.follow_requests": "wile alasa pi jan ante", "column.home": "lipu open", "column.lists": "kulupu lipu", "column.mutes": "jan len", + "column.notifications": "mu pi sona sin", "column.pins": "toki sewi", + "column.public": "toki pi ma poka ale", "column_back_button.label": "o tawa monsi", "column_header.hide_settings": "o len e lawa", + "column_header.moveLeft_settings": "poki toki ni o tawa ni ←", + "column_header.moveRight_settings": "poki toki ni o tawa ni →", "column_header.pin": "o sewi", "column_header.show_settings": "o lukin e lawa", "column_header.unpin": "o sewi ala", @@ -113,11 +151,13 @@ "compose.saved.body": "ilo li awen e ijo pana sina.", "compose_form.direct_message_warning_learn_more": "o kama sona e ijo ante", "compose_form.encryption_warning": "toki li len ala lon ilo Masoton ꞏ o pana ala e sona suli len lon ilo Masoton", + "compose_form.lock_disclaimer": "lipu sina li open, li {locked} ala. jan ale li ken kama kute e sina, li ken lukin e toki sama ni.", + "compose_form.lock_disclaimer.lock": "pini", "compose_form.placeholder": "sina wile toki e seme?", "compose_form.poll.duration": "tenpo pana", "compose_form.poll.multiple": "pana mute", "compose_form.poll.option_placeholder": "ken nanpa {number}", - "compose_form.poll.single": "pana pi wan taso", + "compose_form.poll.single": "o wile e wan taso", "compose_form.poll.switch_to_multiple": "o ante e nasin pana. pana mute o ken", "compose_form.poll.switch_to_single": "o ante e nasin pana. pana wan taso o lon", "compose_form.poll.type": "nasin", @@ -126,31 +166,45 @@ "compose_form.reply": "o toki lon ijo ni", "compose_form.save_changes": "o sin e ni", "compose_form.spoiler.marked": "o weka e toki pi ijo ike ken", - "confirmation_modal.cancel": "o pini", + "compose_form.spoiler.unmarked": "o pali e toki pi ijo ike ken", + "compose_form.spoiler_placeholder": "toki pi ijo ike ken (sina ken ala e ni)", + "confirmation_modal.cancel": "o weka", "confirmations.block.confirm": "o weka", "confirmations.delete.confirm": "o weka", "confirmations.delete.message": "sina wile ala wile weka e toki ni?", + "confirmations.delete.title": "o weka ala weka e toki?", "confirmations.delete_list.confirm": "o weka", "confirmations.delete_list.message": "sina wile ala wile weka e lipu ni?", + "confirmations.delete_list.title": "o weka ala weka e kulupu lipu?", "confirmations.discard_edit_media.confirm": "o weka", "confirmations.discard_edit_media.message": "toki sitelen anu lukin lili sitelen la ante pi awen ala li lon. sina wile weka e ante ni?", "confirmations.edit.confirm": "o ante", "confirmations.edit.message": "sina ante e toki sina la toki pali sina li weka. sina wile ala wile e ni?", + "confirmations.edit.title": "o weka ala weka e toki? ni la, toki li kama toki sin.", "confirmations.logout.confirm": "o weka", "confirmations.logout.message": "sina wile ala wile weka", + "confirmations.logout.title": "o weka?", "confirmations.mute.confirm": "o len", "confirmations.redraft.confirm": "o weka o pali sin e toki", "confirmations.redraft.message": "pali sin e toki ni la sina wile ala wile weka e ona? sina ni la suli pi toki ni en wawa pi toki ni li weka. kin la toki lon toki ni li jo e mama ala.", + "confirmations.redraft.title": "ni li weka li pali sin e toki ni.", "confirmations.reply.confirm": "toki lon toki ni", "confirmations.reply.message": "sina toki lon toki ni la toki pali sina li weka. sina wile ala wile e ni?", - "confirmations.unfollow.confirm": "o pini kute", + "confirmations.reply.title": "sina wile ala wile weka e toki lon?", + "confirmations.unfollow.confirm": "o kute ala", "confirmations.unfollow.message": "sina o wile ala wile pini kute e jan {name}?", + "confirmations.unfollow.title": "sina wile ala wile pini kute?", + "content_warning.hide": "o len", + "content_warning.show": "o lukin", + "content_warning.show_more": "o lukin", "conversation.delete": "o weka e toki ni", "conversation.mark_as_read": "ni o sin ala", "conversation.open": "o lukin e toki", "conversation.with": "lon {names}", "copy_icon_button.copied": "toki li awen lon ilo sina", + "copypaste.copied": "sina jo e toki", "copypaste.copy_to_clipboard": "o awen lon ilo sina", + "directory.federated": "tan lipu ante sona", "directory.local": "tan {domain} taso", "directory.new_arrivals": "jan pi kama sin", "directory.recently_active": "jan lon tenpo poka", @@ -163,11 +217,25 @@ "dismissable_banner.explore_tags": "suni ni la jan mute li lukin e toki pi toki ni. jan mute li kepeken toki la toki ni li lon sewi.", "dismissable_banner.public_timeline": "toki ni li sin. jan li pali e toki ni la jan ante mute pi ma {domain} li kute e jan ni.", "domain_block_modal.block": "o weka e ma", + "domain_block_modal.they_wont_know": "ona li sona ala e ni: sina weka e ona.", + "domain_block_modal.title": "sina wile weka ala weka e ma?", + "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural, other {jan {followersCountDisplay}}} li kute e sina la, ona kama kute ala e sina. sina kute e {followingCount, plural,other {jan {followingCountDisplay}}} la, sina kama kute ala e ona.", + "domain_block_modal.you_will_lose_relationships": "jan li lon kulupu ni la ona kute e sina la, ona li kama kute ala e sina. jan li lon kulupu ni la sina kute e ona la, sina kama kute ala e ona.", "domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni", "domain_pill.server": "ma", + "domain_pill.their_handle": "nimi pi ona taso li ni:", + "domain_pill.their_server": "ni li ma ona lon ilo. toki ale ona li lon ma ni.", + "domain_pill.their_username": "ni li nimi ona lon ma ni. jan mute li lon ma ante la, nimi ona li ken sama.", "domain_pill.username": "nimi jan", + "domain_pill.whats_in_a_handle": "seme li lon nimi?", + "domain_pill.who_they_are": "nimi ilo la sona jan en sona ma li lon. ni la sina ken toki tawa jan ni lon .", + "domain_pill.your_handle": "nimi sina:", + "domain_pill.your_server": "ni li ma sina lon ilo. toki ale sina li lon ma ni. ma li ike tawa sina la, sina ken tawa ma ante. ni la jan kute sina li tawa sama.", + "domain_pill.your_username": "ni li nimi sina. ma sina la, sina taso li jo e ona. jan mute li lon ma ante la, ona li ken jo e nimi sama.", + "embed.instructions": "o pana e toki ni la, toki li lon lipu ante. ", "embed.preview": "ni li jo e sitelen ni:", "emoji_button.activity": "musi", + "emoji_button.clear": "o weka", "emoji_button.flags": "len ma", "emoji_button.food": "moku", "emoji_button.label": "o pana e sitelen pilin", @@ -175,11 +243,13 @@ "emoji_button.not_found": "sitelen pilin ala li lon", "emoji_button.objects": "ijo", "emoji_button.people": "jan", + "emoji_button.recent": "kepeken suli", "emoji_button.search": "o alasa...", "emoji_button.search_results": "ijo pi alasa ni", "emoji_button.symbols": "sitelen", "emoji_button.travel": "ma en tawa", "empty_column.account_hides_collections": "jan ni li wile len e sona ni", + "empty_column.account_suspended": "lipu ni li weka", "empty_column.account_timeline": "toki ala li lon!", "empty_column.account_unavailable": "ken ala lukin e lipu jan", "empty_column.blocks": "jan ala li weka tawa sina.", @@ -201,6 +271,7 @@ "explore.title": "o alasa", "explore.trending_links": "sin", "explore.trending_statuses": "toki", + "explore.trending_tags": "kulupu pi lipu suli", "filter_modal.added.settings_link": "lipu lawa", "filter_modal.select_filter.expired": "tenpo pini", "filter_modal.select_filter.search": "o alasa anu pali", @@ -209,6 +280,7 @@ "firehose.remote": "kulupu ante", "follow_request.authorize": "o ken", "follow_request.reject": "o ala", + "follow_suggestions.dismiss": "mi wile lukin sin ala e ni", "follow_suggestions.hints.friends_of_friends": "jan kute sina li lukin mute e toki pi jan ni.", "follow_suggestions.hints.most_followed": "jan mute lon ma {domain} li kute e jan ni.", "follow_suggestions.hints.most_interactions": "tenpo poka la jan mute pi ma {domain} li lukin mute e toki pi jan ni.", @@ -228,15 +300,22 @@ "hashtag.column_settings.tag_mode.all": "ale ni", "hashtag.column_settings.tag_mode.any": "wan ni", "hashtag.column_settings.tag_mode.none": "ala ni", + "hashtag.counter_by_accounts": "{count, plural, other {jan {counter}}}", + "hashtag.counter_by_uses": "{count, plural, other {toki {counter}}}", + "hashtag.follow": "o kute e kulupu lipu", + "hashtag.unfollow": "o kute ala e kulupu lipu", + "home.column_settings.show_reblogs": "lukin e wawa", "home.pending_critical_update.link": "o lukin e ijo ilo sin", "interaction_modal.login.action": "o lon tomo", "interaction_modal.on_another_server": "lon ma ante", "interaction_modal.on_this_server": "lon ma ni", + "interaction_modal.sign_in_hint": "ni li ma pi ilo nanpa ni: ona li pali e jan sina lon ona. sona sina ni li weka la, o lukin e lipu. kin la, sina ken pana e nimi jan suli sina a! (ni li ken ni: @Mastodon@mastodon.social)", "interaction_modal.title.favourite": "o suli e toki {name}", "interaction_modal.title.follow": "o kute e {name}", "interaction_modal.title.reblog": "o wawa e toki {name}", "interaction_modal.title.reply": "o toki lon toki pi jan {name}", "intervals.full.days": "{number, plural, other {suni #}}", + "intervals.full.hours": "{number, plural, other {tenpo suli #}}", "keyboard_shortcuts.blocked": "o lukin e lipu sina pi jan weka", "keyboard_shortcuts.boost": "o pana sin e toki", "keyboard_shortcuts.down": "o tawa anpa lon lipu", @@ -261,9 +340,12 @@ "lists.edit.submit": "o ante e nimi", "lists.exclusive": "o len e toki lon lipu open", "lists.new.create": "o sin e kulupu lipu", + "lists.new.title_placeholder": "nimi pi kulupu sin", "lists.replies_policy.followed": "jan kute ale", "lists.replies_policy.list": "jan pi kulupu ni taso", "lists.replies_policy.none": "jan ala", + "lists.replies_policy.title": "jan ni li ken lukin e toki lili:", + "lists.search": "o alasa lon kulupu jan ni: sina kute e ona", "lists.subheading": "kulupu lipu sina", "load_pending": "{count, plural, other {ijo sin #}}", "loading_indicator.label": "ni li kama…", @@ -271,6 +353,7 @@ "navigation_bar.about": "sona", "navigation_bar.blocks": "jan weka", "navigation_bar.compose": "o pali e toki sin", + "navigation_bar.domain_blocks": "kulupu pi ma weka", "navigation_bar.favourites": "ijo pona", "navigation_bar.filters": "nimi len", "navigation_bar.lists": "kulupu lipu", @@ -301,13 +384,32 @@ "notifications.filter.polls": "pana lon pana ni", "onboarding.action.back": "o tawa monsi", "onboarding.actions.back": "o tawa monsi", - "onboarding.compose.template": "toki a, #Mastodon o!", + "onboarding.actions.go_to_explore": "seme li pona tawa jan mute", + "onboarding.actions.go_to_home": "o tawa lipu open mi", + "onboarding.compose.template": "toki a, kulupu #Mastodon o!", + "onboarding.follows.lead": "lipu open li nasin nanpa wan pi ilo Masoton. sina kute e jan mute la, musi mute li lon. open la, ni li ken pona:", + "onboarding.follows.title": "o ante e lipu open sina", "onboarding.profile.display_name": "nimi tawa jan ante", + "onboarding.profile.lead": "sina ken pana e ni lon tenpo kama, lon lipu pi ante nasin. ona la, nasin ante mute li lon.", "onboarding.profile.note": "sona sina", "onboarding.share.lead": "o toki lon nasin Masoton pi alasa sina tawa jan", "onboarding.share.message": "ilo #Mastodon la mi jan {username} a! o kute e mi lon ni: {url}", + "onboarding.share.next_steps": "ken la ni li pali kama pona:", + "onboarding.share.title": "o pana e lipu sina", + "onboarding.start.lead": "ni la sina lon kulupu Masoton. kulupu ante ala li sama ona. ona li jo e jan lawa pi wan taso ala. ilo li pana ala e ijo pi wile ala tawa sina, sina ken lon e wile sina. nasin kulupu sin ni la mi o open:", + "onboarding.start.skip": "sina wile ala kama sona e nasin open anu seme?", "onboarding.start.title": "sina o kama pona a!", + "onboarding.steps.follow_people.body": "lipu Masoton la, sina ken kute e jan namako.", + "onboarding.steps.follow_people.title": "o ante e lipu open sina", + "onboarding.steps.publish_status.body": "o toki tawa ale kepeken sitelen nimi, kepeken sitelen kule, kepeken sitelen tawa, kepeken alasa sona kulupu {emoji}", + "onboarding.steps.publish_status.title": "o pali e toki suli sina nanpa wan", + "onboarding.steps.setup_profile.body": "lipu sina li jo e sona mute la jan mute li wile toki tawa sina.", + "onboarding.steps.setup_profile.title": "o ante e lipu sina", + "onboarding.steps.share_profile.body": "jan pona sina o ken alasa e sina lon lipu Masoton", + "onboarding.steps.share_profile.title": "o pana e lipu sina", + "onboarding.tips.accounts_from_other_servers": "sina sona ala sona? kulupu Masoton li jo e jan lawa mute e ma mute la, sina ken lukin e jan pi ma ilo ante. taso sina ken toki tawa ona kepeken wawa lili a! nimi jan la, nimi nanpa wan li nimi jan, nimi nanpa tu li nimi ma!", "onboarding.tips.migration": "sina sona ala sona e ni? tenpo kama la sina pilin ike tawa ma {domain} la, sina ken tawa ma ante lon ilo Masoton. jan li kute e sina la jan ni li awen kute e sina. kin la sina ken lawa e ma pi sina taso a!", + "onboarding.tips.verification": "sina sona ala sona? sina ken pana e lipu ilo sina tawa lipu sina pi ilo Masoton. sina ken pala e lipu sina pi ilo Masoton tawa lipu ilo sina. sina ni tu la, jan ale li sona e ni: nimi sina la sina toki e lon. ni li wile ala e mani e lipu jan lawa a!", "poll.closed": "ona li pini", "poll.total_people": "{count, plural, other {jan #}}", "poll.total_votes": "{count, plural, other {pana #}}", @@ -332,7 +434,7 @@ "report.category.title": "ike seme li lon {type} ni", "report.category.title_account": "lipu", "report.category.title_status": "toki", - "report.close": "o pini", + "report.close": "ale li pona", "report.mute": "o kute ala e ona", "report.mute_explanation": "sina kama ala lukin e ijo pana ona. ona li awen ken kute e sina li awen ken lukin e sina li sona ala e weka kute sina e weka lukin sina.", "report.next": "awen", @@ -341,13 +443,20 @@ "report.reasons.other": "ni li ike tan ante", "report.reasons.spam": "ni li ike tan toki mute", "report.thanks.title": "sina wile ala lukin e ni anu seme?", - "report.unfollow": "o pini kute e {name}", + "report.unfollow": "o kute ala e {name}", "report_notification.categories.legal": "ike tawa nasin lawa", "report_notification.categories.other": "ante", + "search.no_recent_searches": "alasa ala li lon tenpo poka", "search.placeholder": "o alasa", "search.quick_action.go_to_account": "o tawa lipu jan {x}", "search_popout.language_code": "nimi toki kepeken nasin ISO", + "search_popout.recent": "alasa pi tenpo poka", + "search_popout.specific_date": "tenpo suno wan", + "search_popout.user": "jan", + "search_results.accounts": "lipu jan", "search_results.all": "ale", + "search_results.hashtags": "kulupu pi toki suli", + "search_results.nothing_found": "nimi alasa ni la mi lukin e ala", "search_results.see_all": "ale", "search_results.statuses": "toki", "search_results.title": "o alasa e {q}", @@ -369,6 +478,8 @@ "status.pin": "o sewi lon lipu sina", "status.pinned": "toki sewi", "status.reblog": "o wawa", + "status.reblogged_by": "jan {name} li wawa", + "status.reblogs.empty": "jan ala li wawa e toki ni. jan li wawa la, nimi ona li sitelen lon ni.", "status.share": "o pana tawa ante", "status.show_less_all": "o lili e ale", "status.show_more_all": "o suli e ale", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 6feae5d137..335922c8b0 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -21,7 +21,7 @@ "account.blocked": "Engellendi", "account.cancel_follow_request": "Takip isteğini geri çek", "account.copy": "Gönderi bağlantısını kopyala", - "account.direct": "@{name} kullanıcısına özelden değin", + "account.direct": "@{name} kullanıcısına özel olarak değin", "account.disable_notifications": "@{name} kişisinin gönderi bildirimlerini kapat", "account.domain_blocked": "Alan adı engellendi", "account.edit_profile": "Profili düzenle", @@ -81,7 +81,7 @@ "admin.impact_report.instance_followers": "Kullanıcılarımızın kaybedeceği takipçiler", "admin.impact_report.instance_follows": "Kullanıcılarının kaybedeceği takipçiler", "admin.impact_report.title": "Etki özeti", - "alert.rate_limited.message": "Lütfen {retry_time, time, medium} saatinden sonra tekrar deneyin.", + "alert.rate_limited.message": "Lütfen sonra tekrar deneyin {retry_time, time, medium}.", "alert.rate_limited.title": "Aşırı istek gönderildi", "alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.title": "Hay aksi!", @@ -92,11 +92,11 @@ "block_modal.remote_users_caveat": "{domain} sunucusundan kararınıza saygı duymasını isteyeceğiz. Ancak, Uymaları garanti değildir çünkü bazı sunucular engellemeyi farklı şekilde yapıyorlar. Herkese açık gönderiler giriş yapmamış kullanıcılara görüntülenmeye devam edebilir.", "block_modal.show_less": "Daha az göster", "block_modal.show_more": "Daha fazla göster", - "block_modal.they_cant_mention": "Sizden bahsedemez veya sizi takip edemezler.", + "block_modal.they_cant_mention": "Size değinemez veya sizi takip edemezler.", "block_modal.they_cant_see_posts": "Onlar sizin gönderilerinizi görmeye devam edebilir, ancak siz onlarınkini göremezsiniz.", "block_modal.they_will_know": "Engellendiklerini görebiliyorlar.", "block_modal.title": "Kullanıcıyı engelle?", - "block_modal.you_wont_see_mentions": "Onlardan bahseden gönderiler göremezsiniz.", + "block_modal.you_wont_see_mentions": "Onlara değinen gönderileri göremezsiniz.", "boost_modal.combo": "Bir daha ki sefere {combo} tuşuna basabilirsin", "boost_modal.reblog": "Gönderiyi yeniden paylaş?", "boost_modal.undo_reblog": "Gönderinin yeniden paylaşımını geri al?", @@ -121,10 +121,10 @@ "column.blocks": "Engellenen kullanıcılar", "column.bookmarks": "Yer İşaretleri", "column.community": "Yerel ağ akışı", - "column.direct": "Özel değinmeler", + "column.direct": "Özel mesajlar", "column.directory": "Profillere göz at", "column.domain_blocks": "Engellenen alan adları", - "column.favourites": "Favorilerin", + "column.favourites": "Gözdelerin", "column.firehose": "Anlık Akışlar", "column.follow_requests": "Takip istekleri", "column.home": "Anasayfa", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Kullanıcıyı takipten çık?", "content_warning.hide": "Gönderiyi gizle", "content_warning.show": "Yine de göster", + "content_warning.show_more": "Daha fazla göster", "conversation.delete": "Sohbeti sil", "conversation.mark_as_read": "Okundu olarak işaretle", "conversation.open": "Sohbeti görüntüle", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur", "filter_modal.select_filter.title": "Bu gönderiyi süzgeçle", "filter_modal.title.status": "Bir gönderi süzgeçle", - "filter_warning.matches_filter": "“{title}” filtresiyle eşleşiyor", + "filter_warning.matches_filter": "“{title}” filtresiyle eşleşiyor", "filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}}", "filtered_notifications_banner.title": "Filtrelenmiş bildirimler", "firehose.all": "Tümü", @@ -338,7 +339,7 @@ "footer.privacy_policy": "Gizlilik politikası", "footer.source_code": "Kaynak kodu görüntüle", "footer.status": "Durum", - "generic.saved": "Kaydedildi", + "generic.saved": "Kaydet", "getting_started.heading": "Başlarken", "hashtag.column_header.tag_mode.all": "ve {additional}", "hashtag.column_header.tag_mode.any": "ya da {additional}", @@ -405,7 +406,7 @@ "keyboard_shortcuts.column": "Sütunlardan birindeki duruma odaklanmak için", "keyboard_shortcuts.compose": "Yazma alanına odaklanmak için", "keyboard_shortcuts.description": "Açıklama", - "keyboard_shortcuts.direct": "özel değinmeler sütununu açmak için", + "keyboard_shortcuts.direct": "özel mesajlar sütununu açmak için", "keyboard_shortcuts.down": "Listede aşağıya inmek için", "keyboard_shortcuts.enter": "Gönderiyi açınız", "keyboard_shortcuts.favourite": "Gönderiyi favorilerine ekle", @@ -477,7 +478,7 @@ "navigation_bar.bookmarks": "Yer İşaretleri", "navigation_bar.community_timeline": "Yerel ağ akışı", "navigation_bar.compose": "Yeni gönderi yaz", - "navigation_bar.direct": "Özel değinmeler", + "navigation_bar.direct": "Özel mesajlar", "navigation_bar.discover": "Keşfet", "navigation_bar.domain_blocks": "Engellenen alan adları", "navigation_bar.explore": "Keşfet", @@ -508,7 +509,7 @@ "notification.favourite": "{name} gönderinizi beğendi", "notification.favourite.name_and_others_with_link": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} gönderinizi beğendi", "notification.follow": "{name} seni takip etti", - "notification.follow.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} sizi takip etti", + "notification.follow.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} sizi takip etti", "notification.follow_request": "{name} size takip isteği gönderdi", "notification.follow_request.name_and_others": "{name} ve {count, plural, one {# diğer kişi} other {# diğer kişi}} size takip etme isteği gönderdi", "notification.label.mention": "Bahsetme", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Özel yanıt", "notification.label.reply": "Yanıt", "notification.mention": "Bahsetme", + "notification.mentioned_you": "{name} sizden söz etti", "notification.moderation-warning.learn_more": "Daha fazlası", "notification.moderation_warning": "Hesabınız bir denetim uyarısı aldı", "notification.moderation_warning.action_delete_statuses": "Bazı gönderileriniz kaldırıldı.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Hızlı filtre çubuğu", "notifications.column_settings.follow": "Yeni takipçiler:", "notifications.column_settings.follow_request": "Yeni takip istekleri:", + "notifications.column_settings.group": "Grupla", "notifications.column_settings.mention": "Bahsetmeler:", "notifications.column_settings.poll": "Anket sonuçları:", "notifications.column_settings.push": "Anlık bildirimler", @@ -604,10 +607,10 @@ "notifications.policy.filter_not_following_hint": "Onları manuel olarak onaylayana kadar", "notifications.policy.filter_not_following_title": "Takip etmediğin kullanıcılar", "notifications.policy.filter_private_mentions_hint": "Kendi değinmenize yanıt veya takip ettiğiniz kullanıcıdan değilse filtrelenir", - "notifications.policy.filter_private_mentions_title": "İstenmeyen özel değinmeler", + "notifications.policy.filter_private_mentions_title": "İstenmeyen özel mesajlar", "notifications.policy.title": "Şundan bildirimleri yönet…", "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir", - "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.", + "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra, yukarıdaki{icon} düğmesi aracılığıyla hangi etkileşim türlerinin masaüstü bildirimi oluşturacağını tam olarak kontrol edebilirsiniz.", "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın", "onboarding.action.back": "Beni geri götür", "onboarding.actions.back": "Beni geri götür", @@ -812,7 +815,7 @@ "status.reblogged_by": "{name} yeniden paylaştı", "status.reblogs": "{count, plural, one {yeniden paylaşım} other {yeniden paylaşım}}", "status.reblogs.empty": "Henüz hiç kimse bu gönderiyi yeniden paylaşmadı. Herhangi bir kullanıcı yeniden paylaştığında burada görüntülenecek.", - "status.redraft": "Sil,Düzenle ve Yeniden paylaş", + "status.redraft": "Sil,Düzenle ve yeniden-paylaş", "status.remove_bookmark": "Yer işaretini kaldır", "status.replied_in_thread": "Akışta yanıtlandı", "status.replied_to": "{name} kullanıcısına yanıt verdi", @@ -852,6 +855,11 @@ "upload_error.poll": "Anketlerde dosya yüklemesine izin verilmez.", "upload_form.audio_description": "İşitme kaybı olan kişiler için yazı ekleyiniz", "upload_form.description": "Görme engelliler için açıklama", + "upload_form.drag_and_drop.instructions": "Bir medya eklentisini taşımak için, boşluk veya enter tuşuna basın. Sürükleme sırasında medya eklentisini herhangi bir yöne hareket ettirmek için ok tuşlarını kullanın. Medya eklentisini yeni konumuna bırakmak için tekrar boşluk veya enter tuşuna basın veya işlemi iptal etmek için escape tuşuna basın.", + "upload_form.drag_and_drop.on_drag_cancel": "Sürükleme iptal edildi. Medya eklentisi {item} bırakıldı.", + "upload_form.drag_and_drop.on_drag_end": "Medya eklentisi {item} bırakıldı.", + "upload_form.drag_and_drop.on_drag_over": "Medya eklentisi {item} hareket ettirildi.", + "upload_form.drag_and_drop.on_drag_start": "Medya eklentisi {item} tutuldu.", "upload_form.edit": "Düzenle", "upload_form.thumbnail": "Küçük resmi değiştir", "upload_form.video_description": "İşitme kaybı veya görme engeli olan kişiler için açıklama ekleyiniz", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 08bb7979a1..e691201069 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -16,8 +16,10 @@ "account.badges.group": "Төркем", "account.block": "@{name} кулланучыны блоклау", "account.block_domain": "{domain} доменын блоклау", + "account.block_short": "Блокла", "account.blocked": "Блокланган", "account.cancel_follow_request": "Киләсе сорау", + "account.copy": "Профиль сылтамасын күчереп ал", "account.disable_notifications": "@{name} язулары өчен белдерүләр сүндерү", "account.domain_blocked": "Домен блокланган", "account.edit_profile": "Профильне үзгәртү", @@ -42,6 +44,8 @@ "account.mention": "@{name} искәртү", "account.moved_to": "{name} аларның яңа счеты хәзер күрсәтте:", "account.mute": "@{name} кулланучыга әһәмият бирмәү", + "account.mute_notifications_short": "Искәртүләрне сүндер", + "account.mute_short": "Тавышсыз", "account.muted": "Әһәмият бирмәнгән", "account.open_original_page": "Чыганак битен ачу", "account.posts": "Язма", @@ -57,6 +61,7 @@ "account.unendorse": "Профильдә тәкъдим итмәү", "account.unfollow": "Язылуны туктату", "account.unmute": "Kабызыгыз @{name}", + "account.unmute_notifications_short": "Искәртүләрне кабыз", "account.unmute_short": "Kабызыгыз", "account_note.placeholder": "Click to add a note", "admin.dashboard.daily_retention": "Теркәлгәннән соң икенче көнне кулланучыларны тоту коэффициенты", @@ -68,10 +73,14 @@ "alert.rate_limited.title": "Тариф чикләнгән", "alert.unexpected.message": "Көтелмәгән хата булды.", "alert.unexpected.title": "Абау!", + "alt_text_badge.title": "Альт текст", "announcement.announcement": "Игълан", "attachments_list.unprocessed": "(чимал)", "audio.hide": "Аудионы яшерү", + "block_modal.title": "Кулланучыны блокларгамы?", "boost_modal.combo": "Сез баса аласыз {combo} киләсе тапкыр моны сагыну өчен", + "boost_modal.reblog": "Язманы күтәрергәме?", + "boost_modal.undo_reblog": "Язманы күтәрмәскәме?", "bundle_column_error.copy_stacktrace": "Күчереп алу хата турында Отчет", "bundle_column_error.error.body": "Соралган бит күрсәтелә алмый. Бу безнең кодтагы хата яки браузерга туры килү проблемасы аркасында булырга мөмкин.", "bundle_column_error.error.title": "Әй, юк!", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 1753d0bebe..51b0d99750 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Відписатися від користувача?", "content_warning.hide": "Сховати допис", "content_warning.show": "Усе одно показати", + "content_warning.show_more": "Показати більше", "conversation.delete": "Видалити бесіду", "conversation.mark_as_read": "Позначити як прочитане", "conversation.open": "Переглянути бесіду", @@ -305,8 +306,8 @@ "filter_modal.select_filter.subtitle": "Використати наявну категорію або створити нову", "filter_modal.select_filter.title": "Фільтрувати цей допис", "filter_modal.title.status": "Фільтрувати допис", - "filter_warning.matches_filter": "Збігається з фільтром “{title}”", - "filtered_notifications_banner.pending_requests": "Від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, котрих ви можете знати", + "filter_warning.matches_filter": "Збігається з фільтром “{title}”", + "filtered_notifications_banner.pending_requests": "Від {count, plural, =0 {жодної особи} one {однієї особи} few {# осіб} many {# осіб} other {# особи}}, яких ви можете знати", "filtered_notifications_banner.title": "Відфільтровані сповіщення", "firehose.all": "Всі", "firehose.local": "Цей сервер", @@ -508,7 +509,7 @@ "notification.favourite": "Ваш допис сподобався {name}", "notification.favourite.name_and_others_with_link": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} вподобали ваш допис", "notification.follow": "{name} підписалися на вас", - "notification.follow.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} стежать за вами", + "notification.follow.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} стежать за вами", "notification.follow_request": "{name} відправили запит на підписку", "notification.follow_request.name_and_others": "{name} та {count, plural, one {# інший} few {# інших} many {# інших} other {# інший}} надсилають вам запит на стеження", "notification.label.mention": "Згадка", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Приватна відповідь", "notification.label.reply": "Відповідь", "notification.mention": "Згадка", + "notification.mentioned_you": "{name} згадує вас", "notification.moderation-warning.learn_more": "Докладніше", "notification.moderation_warning": "Ви отримали попередження модерації", "notification.moderation_warning.action_delete_statuses": "Деякі з ваших дописів було вилучено.", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Панель швидкого фільтра", "notifications.column_settings.follow": "Нові підписники:", "notifications.column_settings.follow_request": "Нові запити на підписку:", + "notifications.column_settings.group": "Групувати", "notifications.column_settings.mention": "Згадки:", "notifications.column_settings.poll": "Результати опитування:", "notifications.column_settings.push": "Push-сповіщення", @@ -852,6 +855,11 @@ "upload_error.poll": "Не можна завантажувати файли до опитувань.", "upload_form.audio_description": "Опишіть для людей із вадами слуху", "upload_form.description": "Опишіть для людей з вадами зору", + "upload_form.drag_and_drop.instructions": "Щоб вибрати медіавкладення, натисніть пробіл або Enter. Під час перетягування, використайте клавіші зі стрілками для переміщення вкладення в будь-якому напрямку. Натисніть пробіл або Enter знову, щоб залишити медіавкладення в новому положенні, або натисніть клавішу Escape, щоб скасувати.", + "upload_form.drag_and_drop.on_drag_cancel": "Перетягування скасовано. Медіавкладення {item} прибрано.", + "upload_form.drag_and_drop.on_drag_end": "Медіавкладення {item} прибрано.", + "upload_form.drag_and_drop.on_drag_over": "Медіавкладення {item} переміщено.", + "upload_form.drag_and_drop.on_drag_start": "Медіавкладення {item} вибрано.", "upload_form.edit": "Змінити", "upload_form.thumbnail": "Змінити мініатюру", "upload_form.video_description": "Опишіть для людей із вадами слуху або зору", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 770dcbaef5..5582827469 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "Bỏ theo dõi", "content_warning.hide": "Ẩn lại", "content_warning.show": "Nhấn để xem", + "content_warning.show_more": "Hiện thêm", "conversation.delete": "Xóa tin nhắn này", "conversation.mark_as_read": "Đánh dấu là đã đọc", "conversation.open": "Xem toàn bộ tin nhắn", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới", "filter_modal.select_filter.title": "Lọc tút này", "filter_modal.title.status": "Lọc một tút", - "filter_warning.matches_filter": "Khớp bộ lọc “{title}”", + "filter_warning.matches_filter": "Khớp bộ lọc “{title}”", "filtered_notifications_banner.pending_requests": "Từ {count, plural, =0 {không ai} other {# người}} bạn có thể biết", "filtered_notifications_banner.title": "Thông báo đã lọc", "firehose.all": "Toàn bộ", @@ -441,7 +442,7 @@ "limited_account_hint.action": "Vẫn cứ xem", "limited_account_hint.title": "Người này đã bị ẩn bởi quản trị viên {domain}.", "link_preview.author": "Bởi {name}", - "link_preview.more_from_author": "Thêm từ {name}", + "link_preview.more_from_author": "Viết bởi {name}", "link_preview.shares": "{count, plural, other {{counter} lượt chia sẻ}}", "lists.account.add": "Thêm vào danh sách", "lists.account.remove": "Xóa khỏi danh sách", @@ -505,10 +506,10 @@ "notification.admin.report_statuses_other": "{name} báo cáo {target}", "notification.admin.sign_up": "{name} tham gia máy chủ của bạn", "notification.admin.sign_up.name_and_others": "{name} và {count, plural, other {# người}} đã đăng ký", - "notification.favourite": "{name} thích tút của bạn", + "notification.favourite": "{name} đã thích tút của bạn", "notification.favourite.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã thích tút của bạn", - "notification.follow": "{name} theo dõi bạn", - "notification.follow.name_and_others": "{name} và {count, plural, other {# người khác}} đã theo dõi bạn", + "notification.follow": "{name} đã theo dõi bạn", + "notification.follow.name_and_others": "{name} và {count, plural, other {# người khác}} theo dõi bạn", "notification.follow_request": "{name} yêu cầu theo dõi bạn", "notification.follow_request.name_and_others": "{name} và {count, plural, other {# người khác}} đã yêu cầu theo dõi bạn", "notification.label.mention": "Lượt nhắc", @@ -516,6 +517,7 @@ "notification.label.private_reply": "Trả lời riêng", "notification.label.reply": "Trả lời", "notification.mention": "Lượt nhắc", + "notification.mentioned_you": "{name} nhắc đến bạn", "notification.moderation-warning.learn_more": "Tìm hiểu", "notification.moderation_warning": "Bạn vừa nhận một cảnh báo kiểm duyệt", "notification.moderation_warning.action_delete_statuses": "Một vài tút của bạn bị gỡ.", @@ -526,7 +528,7 @@ "notification.moderation_warning.action_silence": "Tài khoản của bạn đã bị hạn chế.", "notification.moderation_warning.action_suspend": "Tài khoản của bạn đã bị vô hiệu hóa.", "notification.own_poll": "Cuộc bình chọn của bạn đã kết thúc", - "notification.poll": "Cuộc bình chọn có bạn tham gia đã kết thúc", + "notification.poll": "Cuộc bình chọn mà bạn tham gia đã kết thúc", "notification.reblog": "{name} đăng lại tút của bạn", "notification.reblog.name_and_others_with_link": "{name} và {count, plural, other {# người khác}} đã đăng lại tút của bạn", "notification.relationships_severance_event": "Mất kết nối với {name}", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "Thanh lọc nhanh", "notifications.column_settings.follow": "Người theo dõi:", "notifications.column_settings.follow_request": "Yêu cầu theo dõi:", + "notifications.column_settings.group": "Nhóm", "notifications.column_settings.mention": "Lượt nhắc đến:", "notifications.column_settings.poll": "Kết quả bình chọn:", "notifications.column_settings.push": "Thông báo đẩy", @@ -708,12 +711,12 @@ "report.mute_explanation": "Bạn sẽ không còn thấy tút của người này. Họ vẫn có thể thấy tút của bạn hoặc theo dõi bạn. Họ không biết là bạn đã chặn họ.", "report.next": "Tiếp theo", "report.placeholder": "Thêm lưu ý", - "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.dislike": "Tôi không thích", + "report.reasons.dislike_description": "Đây không phải thứ mà bạn muốn thấy", "report.reasons.legal": "Vi phạm pháp luật", "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.other": "Lý do khác", + "report.reasons.other_description": "Vấn đề không thuộc những mục trên", "report.reasons.spam": "Đây là spam", "report.reasons.spam_description": "Liên kết độc hại, giả tương tác hoặc trả lời lặp đi lặp lại", "report.reasons.violation": "Vi phạm nội quy máy chủ", @@ -742,7 +745,7 @@ "report_notification.open": "Mở báo cáo", "search.no_recent_searches": "Gần đây chưa tìm gì", "search.placeholder": "Tìm kiếm", - "search.quick_action.account_search": "Người có tên {x}", + "search.quick_action.account_search": "Người tên {x}", "search.quick_action.go_to_account": "Xem trang {x}", "search.quick_action.go_to_hashtag": "Xem hashtag {x}", "search.quick_action.open_url": "Mở liên kết trong Mastodon", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 0a4505d4ee..914eb30e91 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -27,7 +27,7 @@ "account.edit_profile": "修改个人资料", "account.enable_notifications": "当 @{name} 发布嘟文时通知我", "account.endorse": "在个人资料中推荐此用户", - "account.featured_tags.last_status_at": "最近发言于 {date}", + "account.featured_tags.last_status_at": "上次发言于 {date}", "account.featured_tags.last_status_never": "暂无嘟文", "account.featured_tags.title": "{name} 的精选标签", "account.follow": "关注", @@ -36,7 +36,7 @@ "account.followers.empty": "目前无人关注此用户。", "account.followers_counter": "{count, plural, other {{counter} 关注者}}", "account.following": "正在关注", - "account.following_counter": "{count, plural, other {{counter} 关注}}", + "account.following_counter": "{count, plural, other {{counter} 正在关注}}", "account.follows.empty": "此用户目前未关注任何人。", "account.go_to_profile": "前往个人资料页", "account.hide_reblogs": "隐藏来自 @{name} 的转嘟", @@ -44,7 +44,7 @@ "account.joined_short": "加入于", "account.languages": "更改订阅语言", "account.link_verified_on": "此链接的所有权已在 {date} 检查", - "account.locked_info": "此账户已锁嘟。账户所有者会手动审核关注者。", + "account.locked_info": "此账号已锁嘟。账号所有人会手动审核新关注者。", "account.media": "媒体", "account.mention": "提及 @{name}", "account.moved_to": "{name} 的新账号是:", @@ -59,8 +59,8 @@ "account.posts_with_replies": "嘟文和回复", "account.report": "举报 @{name}", "account.requested": "正在等待对方同意。点击取消发送关注请求", - "account.requested_follow": "{name} 已经向你发送了关注请求", - "account.share": "分享 @{name} 的个人资料页", + "account.requested_follow": "{name} 向你发送了关注请求", + "account.share": "分享 @{name} 的个人资料", "account.show_reblogs": "显示来自 @{name} 的转嘟", "account.statuses_counter": "{count, plural, other {{counter} 条嘟文}}", "account.unblock": "取消屏蔽 @{name}", @@ -77,9 +77,9 @@ "admin.dashboard.retention.average": "平均", "admin.dashboard.retention.cohort": "注册月份", "admin.dashboard.retention.cohort_size": "新用户", - "admin.impact_report.instance_accounts": "将要删除的账户资料", - "admin.impact_report.instance_followers": "本实例用户即将丢失的关注者", - "admin.impact_report.instance_follows": "对方实例用户将会丢失的关注者", + "admin.impact_report.instance_accounts": "将被删除的账号", + "admin.impact_report.instance_followers": "本站用户即将丢失的关注者", + "admin.impact_report.instance_follows": "对方站点用户即将丢失的关注者", "admin.impact_report.title": "影响摘要", "alert.rate_limited.message": "请在 {retry_time, time, medium} 后重试。", "alert.rate_limited.title": "频率受限", @@ -89,17 +89,17 @@ "announcement.announcement": "公告", "attachments_list.unprocessed": "(未处理)", "audio.hide": "隐藏音频", - "block_modal.remote_users_caveat": "我们将要求服务器 {domain} 尊重您的决定。然而,我们无法保证对方一定遵从,因为某些服务器可能会以不同的方案处理屏蔽操作。公开嘟文仍然可能对未登录的用户可见。", - "block_modal.show_less": "隐藏", + "block_modal.remote_users_caveat": "我们将要求站点 {domain} 尊重你的决定。然而,我们无法保证对方一定遵从,因为某些站点可能会以不同的方案处理屏蔽操作。公开嘟文仍然可能对未登录用户可见。", + "block_modal.show_less": "折叠", "block_modal.show_more": "显示更多", "block_modal.they_cant_mention": "他们不能提及或关注你。", "block_modal.they_cant_see_posts": "他们看不到你的嘟文,你也看不到他们的嘟文。", - "block_modal.they_will_know": "他们将能看到他们被屏蔽。", - "block_modal.title": "是否屏蔽该用户?", + "block_modal.they_will_know": "对方将能看到自己被屏蔽。", + "block_modal.title": "确定要屏蔽此用户?", "block_modal.you_wont_see_mentions": "你将不会看到提及他们的嘟文。", "boost_modal.combo": "下次按住 {combo} 即可跳过此提示", - "boost_modal.reblog": "是否转嘟?", - "boost_modal.undo_reblog": "是否取消转嘟?", + "boost_modal.reblog": "是否要转嘟?", + "boost_modal.undo_reblog": "是否要取消转嘟?", "bundle_column_error.copy_stacktrace": "复制错误报告", "bundle_column_error.error.body": "请求的页面无法渲染,可能是代码出现错误或浏览器存在兼容性问题。", "bundle_column_error.error.title": "糟糕!", @@ -112,15 +112,15 @@ "bundle_modal_error.close": "关闭", "bundle_modal_error.message": "载入这个组件时发生了错误。", "bundle_modal_error.retry": "重试", - "closed_registrations.other_server_instructions": "基于 Mastodon 去中心化的特性,你可以在其它服务器上创建账号并继续与此服务器互动。", - "closed_registrations_modal.description": "您目前无法在 {domain} 上创建账户,但请注意,使用 Mastodon 并非需要专门在 {domain} 上注册账户。", + "closed_registrations.other_server_instructions": "基于 Mastodon 去中心化的特性,你可以其他服务器上创建账号,并继续与此服务器互动。", + "closed_registrations_modal.description": "你目前无法在 {domain} 上创建账号,但请注意,使用 Mastodon 并非需要专门在 {domain} 上注册账号。", "closed_registrations_modal.find_another_server": "查找其他服务器", "closed_registrations_modal.preamble": "Mastodon 是去中心化的,所以无论在哪个实例创建账号,都可以关注本服务器上的账号并与之交流。 或者你还可以自己搭建实例!", "closed_registrations_modal.title": "注册 Mastodon 账号", "column.about": "关于", "column.blocks": "屏蔽的用户", "column.bookmarks": "书签", - "column.community": "本站时间轴", + "column.community": "本站时间线", "column.direct": "私下提及", "column.directory": "浏览用户资料", "column.domain_blocks": "已屏蔽的域名", @@ -132,7 +132,7 @@ "column.mutes": "已隐藏的用户", "column.notifications": "通知", "column.pins": "置顶嘟文", - "column.public": "跨站公共时间轴", + "column.public": "跨站公共时间线", "column_back_button.label": "返回", "column_header.hide_settings": "隐藏设置", "column_header.moveLeft_settings": "将此栏左移", @@ -142,8 +142,8 @@ "column_header.unpin": "取消置顶", "column_subheading.settings": "设置", "community.column_settings.local_only": "仅限本站", - "community.column_settings.media_only": "仅限媒体", - "community.column_settings.remote_only": "仅限外部", + "community.column_settings.media_only": "仅媒体", + "community.column_settings.remote_only": "仅外站", "compose.language.change": "更改语言", "compose.language.search": "搜索语言...", "compose.published.body": "嘟文已发布。", @@ -151,9 +151,9 @@ "compose.saved.body": "嘟文已保存。", "compose_form.direct_message_warning_learn_more": "详细了解", "compose_form.encryption_warning": "Mastodon 上的嘟文未经端到端加密。请勿在 Mastodon 上分享敏感信息。", - "compose_form.hashtag_warning": "这条嘟文被设置为“不公开”,因此它不会出现在任何话题标签的列表下。只有公开的嘟文才能通过话题标签进行搜索。", - "compose_form.lock_disclaimer": "你的账户没有{locked}。任何人都可以在关注你后立即查看仅关注者可见的嘟文。", - "compose_form.lock_disclaimer.lock": "开启保护", + "compose_form.hashtag_warning": "这条嘟文被设置为“不公开”,因此它不会出现在任何话题的列表下。只有公开的嘟文才能通过话题进行搜索。", + "compose_form.lock_disclaimer": "你的账号没有{locked}。任何人都可以在关注你后立即查看仅关注者可见的嘟文。", + "compose_form.lock_disclaimer.lock": "锁嘟", "compose_form.placeholder": "想写什么?", "compose_form.poll.duration": "投票期限", "compose_form.poll.multiple": "多选", @@ -161,11 +161,11 @@ "compose_form.poll.single": "单选", "compose_form.poll.switch_to_multiple": "将投票改为多选", "compose_form.poll.switch_to_single": "将投票改为单选", - "compose_form.poll.type": "样式", + "compose_form.poll.type": "类型", "compose_form.publish": "发布", - "compose_form.publish_form": "发布", + "compose_form.publish_form": "发嘟", "compose_form.reply": "回复", - "compose_form.save_changes": "更新", + "compose_form.save_changes": "更改", "compose_form.spoiler.marked": "移除内容警告", "compose_form.spoiler.unmarked": "添加内容警告", "compose_form.spoiler_placeholder": "内容警告 (可选)", @@ -173,30 +173,31 @@ "confirmations.block.confirm": "屏蔽", "confirmations.delete.confirm": "删除", "confirmations.delete.message": "你确定要删除这条嘟文吗?", - "confirmations.delete.title": "确认删除嘟文?", + "confirmations.delete.title": "确定要删除嘟文?", "confirmations.delete_list.confirm": "删除", - "confirmations.delete_list.message": "确定永久删除这个列表吗?", - "confirmations.delete_list.title": "确认删除列表?", + "confirmations.delete_list.message": "确定要永久删除此列表吗?", + "confirmations.delete_list.title": "确定要删除列表?", "confirmations.discard_edit_media.confirm": "丢弃", - "confirmations.discard_edit_media.message": "您还有未保存的媒体描述或预览修改,仍要丢弃吗?", + "confirmations.discard_edit_media.message": "你还有未保存的媒体描述或预览修改,仍要丢弃吗?", "confirmations.edit.confirm": "编辑", "confirmations.edit.message": "编辑此消息将会覆盖当前正在撰写的信息。仍要继续吗?", - "confirmations.edit.title": "确认覆盖嘟文?", + "confirmations.edit.title": "确定要重写嘟文?", "confirmations.logout.confirm": "退出登录", "confirmations.logout.message": "确定要退出登录吗?", - "confirmations.logout.title": "是否退出登录?", + "confirmations.logout.title": "确定要退出登录?", "confirmations.mute.confirm": "隐藏", "confirmations.redraft.confirm": "删除并重新编辑", "confirmations.redraft.message": "确定删除这条嘟文并重写吗?所有相关的喜欢和转嘟都将丢失,嘟文的回复也会失去关联。", "confirmations.redraft.title": "是否删除并重新编辑嘟文?", "confirmations.reply.confirm": "回复", "confirmations.reply.message": "回复此消息将会覆盖当前正在编辑的信息。确定继续吗?", - "confirmations.reply.title": "确认覆盖嘟文?", + "confirmations.reply.title": "是否重写嘟文?", "confirmations.unfollow.confirm": "取消关注", "confirmations.unfollow.message": "你确定要取消关注 {name} 吗?", - "confirmations.unfollow.title": "是否取消关注用户?", + "confirmations.unfollow.title": "确定要取消关注用户?", "content_warning.hide": "隐藏嘟文", - "content_warning.show": "仍然显示", + "content_warning.show": "仍要显示", + "content_warning.show_more": "展开", "conversation.delete": "删除对话", "conversation.mark_as_read": "标记为已读", "conversation.open": "查看对话", @@ -204,12 +205,12 @@ "copy_icon_button.copied": "已复制到剪贴板", "copypaste.copied": "已复制", "copypaste.copy_to_clipboard": "复制到剪贴板", - "directory.federated": "来自已知的联邦宇宙", + "directory.federated": "来自已知联邦宇宙", "directory.local": "仅来自 {domain}", "directory.new_arrivals": "新来者", "directory.recently_active": "最近活跃", "disabled_account_banner.account_settings": "账号设置", - "disabled_account_banner.text": "您的账号 {disabledAccount} 目前已被禁用。", + "disabled_account_banner.text": "你的账号 {disabledAccount} 目前已被禁用。", "dismissable_banner.community_timeline": "这些是来自 {domain} 用户的最新公开嘟文。", "dismissable_banner.dismiss": "忽略", "dismissable_banner.explore_links": "这些新闻故事正被本站和分布式网络上其他站点的用户谈论。", @@ -218,33 +219,33 @@ "dismissable_banner.public_timeline": "这些是在 {domain} 上关注的人们最新发布的公开嘟文。", "domain_block_modal.block": "屏蔽服务器", "domain_block_modal.block_account_instead": "改为屏蔽 @{name}", - "domain_block_modal.they_can_interact_with_old_posts": "来自该服务器的人可以与你之前的嘟文交互。", - "domain_block_modal.they_cant_follow": "此服务器上没有人可以关注你。", - "domain_block_modal.they_wont_know": "他们不会知道自己被屏蔽。", - "domain_block_modal.title": "屏蔽该域名?", + "domain_block_modal.they_can_interact_with_old_posts": "该站点的用户可以与你之前的嘟文交互。", + "domain_block_modal.they_cant_follow": "该站点上将没有人可以关注你。", + "domain_block_modal.they_wont_know": "对方不会知道自己被屏蔽。", + "domain_block_modal.title": "确定要屏蔽此域名?", "domain_block_modal.you_will_lose_num_followers": "你将失去 {followersCount, plural, other {{followersCountDisplay} 名关注者}}和 {followingCount, plural, other {{followingCountDisplay} 名关注}}。", - "domain_block_modal.you_will_lose_relationships": "你将失去在此实例上的所有关注和关注者。", + "domain_block_modal.you_will_lose_relationships": "你将丢失该站点上的所有关注与关注者。", "domain_block_modal.you_wont_see_posts": "你将不会看到此服务器上用户的嘟文或通知。", - "domain_pill.activitypub_lets_connect": "它让你不仅能与Mastodon上的人交流互动,还能与其它不同社交应用上的人联系。", - "domain_pill.activitypub_like_language": "ActivityPub就像Mastodon与其它社交网络交流时使用的语言。", + "domain_pill.activitypub_lets_connect": "它可以让你与不同社交应用上的人交流互动,而不仅限于 Mastodon。", + "domain_pill.activitypub_like_language": "ActivityPub 好比 Mastodon 与其它社交网络交流时使用的语言。", "domain_pill.server": "服务器", - "domain_pill.their_handle": "它们的代号:", - "domain_pill.their_server": "它们的数字家园,它们的所有嘟文都存放在那里。", - "domain_pill.their_username": "它们在它们的服务器上的唯一标识符。在不同的服务器上可能会找到相同用户名的用户。", + "domain_pill.their_handle": "对方用户名:", + "domain_pill.their_server": "对方的数字家园,对方的所有嘟文都存放在那里。", + "domain_pill.their_username": "对方在其服务器上的唯一标识。不同服务器上可能会存在相同用户名的用户。", "domain_pill.username": "用户名", - "domain_pill.whats_in_a_handle": "代号里都有什么?", - "domain_pill.who_they_are": "代号可以告诉你一个人是谁和在哪里,所以你可以在社交网络上与的人们互动。", - "domain_pill.who_you_are": "你的代号可以告诉别人你是谁和你在哪里,这样社交网络上来自的人们就可以与你互动。", - "domain_pill.your_handle": "你的代号:", - "domain_pill.your_server": "你的数字家园,你的所有嘟文都存放在这里。不喜欢这个服务器吗?随时带上你的关注者一起迁移到其它服务器。", - "domain_pill.your_username": "你在这个服务器上的唯一标识符。在不同的服务器上可能会找到相同用户名的用户。", + "domain_pill.whats_in_a_handle": "用户名的构成", + "domain_pill.who_they_are": "用户名可以表明用户的身份和其所在站点,这样你就可以通过在社交网络和人们互动。", + "domain_pill.who_you_are": "用户名可以表明你的身份和你所在的站点,这样人们就可以通过在社交网络与你互动。", + "domain_pill.your_handle": "你的用户名:", + "domain_pill.your_server": "你的数字家园,你的所有嘟文都在此存储。不喜欢这里吗?你可以随时迁移到其它服务器,并带上你的关注者。", + "domain_pill.your_username": "你在此服务器上的唯一标识。不同服务器上可能存在相同用户名的用户。", "embed.instructions": "复制下列代码以在你的网站中嵌入此嘟文。", - "embed.preview": "它会像这样显示出来:", + "embed.preview": "这是它的预览效果:", "emoji_button.activity": "活动", "emoji_button.clear": "清除", "emoji_button.custom": "自定义", "emoji_button.flags": "旗帜", - "emoji_button.food": "食物和饮料", + "emoji_button.food": "食物与饮料", "emoji_button.label": "插入表情符号", "emoji_button.nature": "自然", "emoji_button.not_found": "未找到匹配的表情符号", @@ -254,27 +255,27 @@ "emoji_button.search": "搜索…", "emoji_button.search_results": "搜索结果", "emoji_button.symbols": "符号", - "emoji_button.travel": "旅行和地点", - "empty_column.account_hides_collections": "该用户选择不提供此信息", - "empty_column.account_suspended": "账户已被停用", + "emoji_button.travel": "旅行与地点", + "empty_column.account_hides_collections": "该用户选择不公开此信息", + "empty_column.account_suspended": "账号已被停用", "empty_column.account_timeline": "这里没有嘟文!", "empty_column.account_unavailable": "个人资料不可用", "empty_column.blocks": "你还未屏蔽任何用户。", - "empty_column.bookmarked_statuses": "你还没有给任何嘟文添加过书签。在你添加书签后,嘟文就会显示在这里。", - "empty_column.community": "本站时间轴暂时没有内容,快写点什么让它动起来吧!", + "empty_column.bookmarked_statuses": "你还没有给任何嘟文添加书签。添加书签后的嘟文会显示在这里。", + "empty_column.community": "本站时间线还没有内容,写点什么并公开发布,让它活跃起来吧!", "empty_column.direct": "你还未使用过私下提及。当你发出或者收到私下提及时,它将显示在此。", "empty_column.domain_blocks": "暂且没有被屏蔽的站点。", "empty_column.explore_statuses": "目前没有热门内容,稍后再来看看吧!", "empty_column.favourited_statuses": "你没有喜欢过任何嘟文。喜欢过的嘟文会显示在这里。", "empty_column.favourites": "没有人喜欢过这条嘟文。如果有人喜欢了,就会显示在这里。", "empty_column.follow_requests": "你还没有收到任何关注请求。当你收到一个关注请求时,它会出现在这里。", - "empty_column.followed_tags": "您还没有关注任何话题标签。 当您关注后,它们会出现在这里。", - "empty_column.hashtag": "这个话题标签下暂时没有内容。", - "empty_column.home": "你的主页时间线是空的!快去关注更多人吧。 {suggestions}", + "empty_column.followed_tags": "你还没有关注任何话题。 当你关注后,它们会出现在这里。", + "empty_column.hashtag": "该话题下暂无内容。", + "empty_column.home": "你的主页时间线还没有内容!快去关注更多人吧。", "empty_column.list": "列表中还没有任何内容。当列表成员发布新嘟文时,它们将出现在这里。", "empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。", "empty_column.mutes": "你没有隐藏任何用户。", - "empty_column.notification_requests": "都看完了!这里没有任何未读通知。当收到新的通知时,它们将根据您的设置显示在这里。", + "empty_column.notification_requests": "一扫而空!这里没有任何未读通知。当收到新的通知时,将根据你的设置显示在这里。", "empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。", "empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了", "error.unexpected_crash.explanation": "此页面无法正确显示,这可能是因为我们的代码中有错误,也可能是因为浏览器兼容问题。", @@ -288,53 +289,53 @@ "explore.title": "探索", "explore.trending_links": "新闻", "explore.trending_statuses": "嘟文", - "explore.trending_tags": "话题标签", - "filter_modal.added.context_mismatch_explanation": "此过滤器类别不适用访问过嘟文的环境中。如要在此环境中过滤嘟文,你必须编辑此过滤器。", - "filter_modal.added.context_mismatch_title": "环境不匹配!", - "filter_modal.added.expired_explanation": "此过滤器类别已过期,你需要修改到期日期才能应用。", - "filter_modal.added.expired_title": "过滤器已过期!", - "filter_modal.added.review_and_configure": "要审核并进一步配置此过滤器分类,请前往{settings_link}。", - "filter_modal.added.review_and_configure_title": "过滤器设置", + "explore.trending_tags": "话题", + "filter_modal.added.context_mismatch_explanation": "这条过滤规则不适用于你当前访问此嘟文的场景。要在此场景下过滤嘟文,你必须编辑此过滤规则。", + "filter_modal.added.context_mismatch_title": "场景不匹配!", + "filter_modal.added.expired_explanation": "此过滤规则类别已过期,你需要修改到期日期才能应用。", + "filter_modal.added.expired_title": "过滤规则已过期!", + "filter_modal.added.review_and_configure": "要检查并进一步配置这条过滤规则,请前往{settings_link}。", + "filter_modal.added.review_and_configure_title": "过滤规则设置", "filter_modal.added.settings_link": "设置页面", - "filter_modal.added.short_explanation": "此嘟文已添加到以下过滤器类别:{title}。", - "filter_modal.added.title": "过滤器已添加 !", - "filter_modal.select_filter.context_mismatch": "不适用于此环境", + "filter_modal.added.short_explanation": "此嘟文已被添加到以下过滤规则:{title}。", + "filter_modal.added.title": "已添加过滤规则 !", + "filter_modal.select_filter.context_mismatch": "不适用于此场景", "filter_modal.select_filter.expired": "已过期", "filter_modal.select_filter.prompt_new": "新类别:{name}", "filter_modal.select_filter.search": "搜索或创建", - "filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别", + "filter_modal.select_filter.subtitle": "使用已存在类别,或创建新类别", "filter_modal.select_filter.title": "过滤此嘟文", "filter_modal.title.status": "过滤一条嘟文", - "filter_warning.matches_filter": "命中过滤规则 “{title}”", + "filter_warning.matches_filter": "命中过滤规则 “{title}”", "filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}", - "filtered_notifications_banner.title": "通知(已过滤)", + "filtered_notifications_banner.title": "被过滤的通知", "firehose.all": "全部", "firehose.local": "此服务器", "firehose.remote": "其他服务器", "follow_request.authorize": "同意", "follow_request.reject": "拒绝", - "follow_requests.unlocked_explanation": "尽管你没有锁嘟,但是 {domain} 的工作人员认为你也许会想手动审核审核这些账号的关注请求。", + "follow_requests.unlocked_explanation": "尽管你没有锁嘟,但是 {domain} 的站务人员认为你也许会想手动审核这些账号的关注请求。", "follow_suggestions.curated_suggestion": "站务人员精选", "follow_suggestions.dismiss": "不再显示", "follow_suggestions.featured_longer": "由 {domain} 管理团队精选", "follow_suggestions.friends_of_friends_longer": "在你关注的人中很受欢迎", - "follow_suggestions.hints.featured": "该用户已被 {domain} 管理团队精选。", - "follow_suggestions.hints.friends_of_friends": "该用户在你关注的人中很受欢迎。", + "follow_suggestions.hints.featured": "该账号已被 {domain} 管理团队精选。", + "follow_suggestions.hints.friends_of_friends": "该账号在你关注的人中很受欢迎。", "follow_suggestions.hints.most_followed": "该用户是 {domain} 上关注度最高的用户之一。", - "follow_suggestions.hints.most_interactions": "该用户最近在 {domain} 上获得了很多关注。", - "follow_suggestions.hints.similar_to_recently_followed": "该用户与你最近关注的用户类似。", + "follow_suggestions.hints.most_interactions": "该用户最近在 {domain} 获得了很多关注。", + "follow_suggestions.hints.similar_to_recently_followed": "该用户与你最近关注的人类似。", "follow_suggestions.personalized_suggestion": "个性化建议", "follow_suggestions.popular_suggestion": "热门建议", "follow_suggestions.popular_suggestion_longer": "在 {domain} 上很受欢迎", "follow_suggestions.similar_to_recently_followed_longer": "与你近期关注的用户相似", "follow_suggestions.view_all": "查看全部", "follow_suggestions.who_to_follow": "推荐关注", - "followed_tags": "关注的话题标签", + "followed_tags": "已关注话题", "footer.about": "关于", - "footer.directory": "用户目录", + "footer.directory": "用户列表", "footer.get_app": "获取应用", "footer.invite": "邀请", - "footer.keyboard_shortcuts": "快捷键列表", + "footer.keyboard_shortcuts": "快捷键", "footer.privacy_policy": "隐私政策", "footer.source_code": "查看源代码", "footer.status": "状态", @@ -344,7 +345,7 @@ "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.select.placeholder": "输入话题…", "hashtag.column_settings.tag_mode.all": "全部", "hashtag.column_settings.tag_mode.any": "任一", "hashtag.column_settings.tag_mode.none": "无一", @@ -352,12 +353,12 @@ "hashtag.counter_by_accounts": "{count, plural,other {{counter} 人讨论}}", "hashtag.counter_by_uses": "{count, plural, other {{counter} 条嘟文}}", "hashtag.counter_by_uses_today": "今日 {count, plural, other {{counter} 条嘟文}}", - "hashtag.follow": "关注话题标签", - "hashtag.unfollow": "取消关注话题标签", + "hashtag.follow": "关注话题", + "hashtag.unfollow": "取消关注话题", "hashtags.and_other": "… 和另外 {count, plural, other {# 个话题}}", - "hints.profiles.followers_may_be_missing": "该账户的关注者列表可能没有完全显示。", - "hints.profiles.follows_may_be_missing": "该账户的关注列表可能没有完全显示。", - "hints.profiles.posts_may_be_missing": "该账户的嘟文可能没有完全显示。", + "hints.profiles.followers_may_be_missing": "该账号的关注者列表可能没有完全显示。", + "hints.profiles.follows_may_be_missing": "该账号的关注列表可能没有完全显示。", + "hints.profiles.posts_may_be_missing": "该账号的嘟文可能没有完全显示。", "hints.profiles.see_more_followers": "在 {domain} 查看更多关注者", "hints.profiles.see_more_follows": "在 {domain} 查看更多关注", "hints.profiles.see_more_posts": "在 {domain} 查看更多嘟文", @@ -368,7 +369,7 @@ "home.hide_announcements": "隐藏公告", "home.pending_critical_update.body": "请尽快更新你的 Mastodon 服务器!", "home.pending_critical_update.link": "查看更新", - "home.pending_critical_update.title": "紧急安全更新可用!", + "home.pending_critical_update.title": "有紧急安全更新!", "home.show_announcements": "显示公告", "ignore_notifications_modal.disclaimer": "Mastodon无法通知对方用户你忽略了他们的通知。忽略通知不会阻止消息本身的发送。", "ignore_notifications_modal.filter_instead": "改为过滤", @@ -377,21 +378,21 @@ "ignore_notifications_modal.filter_to_review_separately": "你可以单独查看被过滤的通知", "ignore_notifications_modal.ignore": "忽略通知", "ignore_notifications_modal.limited_accounts_title": "是否忽略来自受限账号的通知?", - "ignore_notifications_modal.new_accounts_title": "是否忽略来自新账户的通知?", + "ignore_notifications_modal.new_accounts_title": "是否忽略来自新账号的通知?", "ignore_notifications_modal.not_followers_title": "是否忽略未关注你的人的通知?", "ignore_notifications_modal.not_following_title": "是否忽略你未关注的人的通知?", "ignore_notifications_modal.private_mentions_title": "是否忽略不请自来的私下提及?", - "interaction_modal.description.favourite": "只需一个 Mastodon 账号,即可喜欢这条嘟文,对嘟文的作者展示您欣赏的态度,并保存嘟文以供日后使用。", - "interaction_modal.description.follow": "拥有一个 Mastodon 账号,你可以关注 {name} 并在自己的主页上接收对方的新嘟文。", - "interaction_modal.description.reblog": "拥有一个 Mastodon 账号,你可以向自己的关注者们转发此嘟文。", - "interaction_modal.description.reply": "拥有一个 Mastodon 账号,你可以回复此嘟文。", + "interaction_modal.description.favourite": "只需一个 Mastodon 账号,即可喜欢这条嘟文,向作者展示你欣赏的态度,并将其保存以供日后查看。", + "interaction_modal.description.follow": "只需一个 Mastodon 账号,即可关注 {name} 并在自己的主页接收对方的新嘟文。", + "interaction_modal.description.reblog": "只需一个 Mastodon 账号,即可转发此嘟文,向你的关注者分享它。", + "interaction_modal.description.reply": "只需一个 Mastodon 账号,即可回复此嘟文。", "interaction_modal.login.action": "转到主页", - "interaction_modal.login.prompt": "您所入驻的服务器域名,如:mastodon.social", - "interaction_modal.no_account_yet": "不在 Mastodon 上?", + "interaction_modal.login.prompt": "你所入驻的站点域名,如:mastodon.social", + "interaction_modal.no_account_yet": "还没加入 Mastodon?", "interaction_modal.on_another_server": "在另一服务器", "interaction_modal.on_this_server": "在此服务器", - "interaction_modal.sign_in": "您尚未登录此服务器,您的账号托管在哪?", - "interaction_modal.sign_in_hint": "提示:这是您注册的网站,如果您不记得了,请在邮箱的收件箱中查找欢迎邮件。您还可以输入完整的用户名!(例如 @Mastodon@mastodon.social)", + "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} 的嘟文", @@ -402,7 +403,7 @@ "keyboard_shortcuts.back": "返回上一页", "keyboard_shortcuts.blocked": "打开被屏蔽用户列表", "keyboard_shortcuts.boost": "转嘟", - "keyboard_shortcuts.column": "选择某栏", + "keyboard_shortcuts.column": "选中某栏", "keyboard_shortcuts.compose": "选择输入框", "keyboard_shortcuts.description": "说明", "keyboard_shortcuts.direct": "打开私下提及栏", @@ -410,12 +411,12 @@ "keyboard_shortcuts.enter": "展开嘟文", "keyboard_shortcuts.favourite": "喜欢嘟文", "keyboard_shortcuts.favourites": "打开喜欢列表", - "keyboard_shortcuts.federated": "打开跨站时间轴", + "keyboard_shortcuts.federated": "打开跨站时间线", "keyboard_shortcuts.heading": "快捷键列表", - "keyboard_shortcuts.home": "打开主页时间轴", + "keyboard_shortcuts.home": "打开主页时间线", "keyboard_shortcuts.hotkey": "快捷键", "keyboard_shortcuts.legend": "显示此列表", - "keyboard_shortcuts.local": "打开本站时间轴", + "keyboard_shortcuts.local": "打开本站时间线", "keyboard_shortcuts.mention": "提及嘟文作者", "keyboard_shortcuts.muted": "打开隐藏用户列表", "keyboard_shortcuts.my_profile": "打开你的个人资料", @@ -425,7 +426,7 @@ "keyboard_shortcuts.profile": "打开作者的个人资料", "keyboard_shortcuts.reply": "回复嘟文", "keyboard_shortcuts.requests": "打开关注请求列表", - "keyboard_shortcuts.search": "选择搜索框", + "keyboard_shortcuts.search": "选中搜索框", "keyboard_shortcuts.spoilers": "显示或隐藏被折叠的正文", "keyboard_shortcuts.start": "打开“开始使用”栏", "keyboard_shortcuts.toggle_hidden": "显示或隐藏被折叠的正文", @@ -451,31 +452,31 @@ "lists.exclusive": "在主页中隐藏这些嘟文", "lists.new.create": "新建列表", "lists.new.title_placeholder": "新列表的标题", - "lists.replies_policy.followed": "任何被关注的用户", + "lists.replies_policy.followed": "所有我关注的用户", "lists.replies_policy.list": "列表成员", - "lists.replies_policy.none": "无人", - "lists.replies_policy.title": "显示回复:", + "lists.replies_policy.none": "不显示", + "lists.replies_policy.title": "回复显示范围:", "lists.search": "搜索你关注的人", "lists.subheading": "你的列表", "load_pending": "{count} 项", "loading_indicator.label": "加载中…", "media_gallery.hide": "隐藏", - "moved_to_account_banner.text": "您的账号 {disabledAccount} 已禁用,因为您已迁移到 {movedToAccount}。", + "moved_to_account_banner.text": "你的账号 {disabledAccount} 已禁用,因为你已迁移到 {movedToAccount}。", "mute_modal.hide_from_notifications": "从通知中隐藏", "mute_modal.hide_options": "隐藏选项", "mute_modal.indefinite": "直到我取消隐藏他们", "mute_modal.show_options": "显示选项", - "mute_modal.they_can_mention_and_follow": "他们可以提及和关注你,但是你看不到他们。", - "mute_modal.they_wont_know": "它们不会知道自己已被隐藏。", - "mute_modal.title": "隐藏用户?", - "mute_modal.you_wont_see_mentions": "你看不到提及他们的嘟文。", - "mute_modal.you_wont_see_posts": "他们可以看到你的嘟文,但是你看不到他们的。", + "mute_modal.they_can_mention_and_follow": "对方可以提及和关注你,但是你看不到对方。", + "mute_modal.they_wont_know": "对方不会知道自己被隐藏。", + "mute_modal.title": "隐藏该用户?", + "mute_modal.you_wont_see_mentions": "你看不到提及对方的嘟文。", + "mute_modal.you_wont_see_posts": "对方可以看到你的嘟文,但是你看不到对方的。", "navigation_bar.about": "关于", "navigation_bar.administration": "管理", "navigation_bar.advanced_interface": "在高级网页界面中打开", "navigation_bar.blocks": "已屏蔽的用户", "navigation_bar.bookmarks": "书签", - "navigation_bar.community_timeline": "本站时间轴", + "navigation_bar.community_timeline": "本站时间线", "navigation_bar.compose": "撰写新嘟文", "navigation_bar.direct": "私下提及", "navigation_bar.discover": "发现", @@ -484,20 +485,20 @@ "navigation_bar.favourites": "喜欢", "navigation_bar.filters": "忽略的关键词", "navigation_bar.follow_requests": "关注请求", - "navigation_bar.followed_tags": "关注的话题标签", - "navigation_bar.follows_and_followers": "关注和粉丝", + "navigation_bar.followed_tags": "关注的话题", + "navigation_bar.follows_and_followers": "关注与关注者", "navigation_bar.lists": "列表", "navigation_bar.logout": "退出登录", - "navigation_bar.moderation": "运营", + "navigation_bar.moderation": "审核", "navigation_bar.mutes": "已隐藏的用户", - "navigation_bar.opened_in_classic_interface": "嘟文、账户和其他特定页面默认在经典网页界面中打开。", + "navigation_bar.opened_in_classic_interface": "嘟文页、个人资料与其他某些页面默认在经典网页界面中打开。", "navigation_bar.personal": "个人", "navigation_bar.pins": "置顶嘟文", - "navigation_bar.preferences": "首选项", - "navigation_bar.public_timeline": "跨站公共时间轴", + "navigation_bar.preferences": "偏好设置", + "navigation_bar.public_timeline": "跨站时间线", "navigation_bar.search": "搜索", "navigation_bar.security": "安全", - "not_signed_in_indicator.not_signed_in": "您需要登录才能访问此资源。", + "not_signed_in_indicator.not_signed_in": "你需要登录才能访问此资源。", "notification.admin.report": "{name} 举报了 {target}", "notification.admin.report_account": "{name} 举报了来自 {target} 的 {count, plural, other {# 条嘟文}},原因为 {category}", "notification.admin.report_account_other": "{name} 举报了来自 {target} 的 {count, plural, other {# 条嘟文}}", @@ -507,8 +508,8 @@ "notification.admin.sign_up.name_and_others": "{name} 和 {count, plural, other {另外 # 人}}注册了", "notification.favourite": "{name} 喜欢了你的嘟文", "notification.favourite.name_and_others_with_link": "{name} 和 {count, plural, other {另外 # 人}} 喜欢了你的嘟文", - "notification.follow": "{name} 开始关注你", - "notification.follow.name_and_others": "{name} 和 {count, plural, other {另外 # 人}} 关注了你", + "notification.follow": "{name} 关注了你", + "notification.follow.name_and_others": "{name} 和 {count, plural, other {另外 # 人}} 关注了你", "notification.follow_request": "{name} 向你发送了关注请求", "notification.follow_request.name_and_others": "{name} 和 {count, plural, other {另外 # 人}} 向你发送了关注请求", "notification.label.mention": "提及", @@ -516,23 +517,24 @@ "notification.label.private_reply": "私人回复", "notification.label.reply": "回复", "notification.mention": "提及", - "notification.moderation-warning.learn_more": "了解更多", + "notification.mentioned_you": "{name} 提到了你", + "notification.moderation-warning.learn_more": "详细了解", "notification.moderation_warning": "你收到了一条管理警告", "notification.moderation_warning.action_delete_statuses": "你的一些嘟文已被移除。", "notification.moderation_warning.action_disable": "你的账号已被禁用。", "notification.moderation_warning.action_mark_statuses_as_sensitive": "你的一些嘟文已被标记为敏感内容。", "notification.moderation_warning.action_none": "你的账号收到了管理警告。", "notification.moderation_warning.action_sensitive": "今后你的嘟文都会被标记为敏感内容。", - "notification.moderation_warning.action_silence": "你的账号已被限制。", - "notification.moderation_warning.action_suspend": "你的账号已被封禁.", + "notification.moderation_warning.action_silence": "你的账号已被隐藏。", + "notification.moderation_warning.action_suspend": "你的账号已被封禁。", "notification.own_poll": "你的投票已经结束", "notification.poll": "你参与的一项投票已结束", "notification.reblog": "{name} 转发了你的嘟文", "notification.reblog.name_and_others_with_link": "{name} 和 {count, plural, other {另外 # 人}} 转嘟了你的嘟文", "notification.relationships_severance_event": "与 {name} 的联系已断开", - "notification.relationships_severance_event.account_suspension": "一名来自 {from} 的管理员已经封禁了{target},这意味着你将无法再收到他们的更新或与他们互动。", - "notification.relationships_severance_event.domain_block": "一名来自 {from} 的管理员已经屏蔽了 {target},其中包括你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。", - "notification.relationships_severance_event.learn_more": "了解更多", + "notification.relationships_severance_event.account_suspension": "{from} 的管理员封禁了 {target},这意味着你将无法再收到对方的更新或与其互动。", + "notification.relationships_severance_event.domain_block": "{from} 的管理员屏蔽了 {target},其中包括你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。", + "notification.relationships_severance_event.learn_more": "详细了解", "notification.relationships_severance_event.user_domain_block": "你已经屏蔽了 {target},移除了你的 {followersCount} 个关注者和 {followingCount, plural, other {# 个关注}}。", "notification.status": "{name} 刚刚发布嘟文", "notification.update": "{name} 编辑了嘟文", @@ -544,20 +546,20 @@ "notification_requests.confirm_dismiss_multiple.button": "{count, plural, other {拒绝请求}}", "notification_requests.confirm_dismiss_multiple.message": "你将要拒绝 {count, plural, other {# 个通知请求}}。你将无法再轻易访问{count, plural, other {它们}}。是否继续?", "notification_requests.confirm_dismiss_multiple.title": "是否拒绝通知请求?", - "notification_requests.dismiss": "拒绝", + "notification_requests.dismiss": "忽略", "notification_requests.dismiss_multiple": "{count, plural, other {拒绝 # 个请求…}}", "notification_requests.edit_selection": "编辑", "notification_requests.exit_selection": "完成", - "notification_requests.explainer_for_limited_account": "来自该账户的通知已被过滤,因为该账户已被管理员限制。", - "notification_requests.explainer_for_limited_remote_account": "来自该账户的通知已被过滤,因为该账户或其所在的实例已被管理员限制。", + "notification_requests.explainer_for_limited_account": "来自该账号的通知已被过滤,因为该账号已被管理员限制。", + "notification_requests.explainer_for_limited_remote_account": "来自该账号的通知已被过滤,因为该账号或其所在的实例已被管理员限制。", "notification_requests.maximize": "最大化", - "notification_requests.minimize_banner": "最小化被过滤通知的横幅", + "notification_requests.minimize_banner": "最小化被过滤通知横幅", "notification_requests.notifications_from": "来自 {name} 的通知", - "notification_requests.title": "通知(已过滤)", + "notification_requests.title": "被过滤的通知", "notification_requests.view": "查看通知", "notifications.clear": "清空通知列表", - "notifications.clear_confirmation": "你确定要永久清空通知列表吗?", - "notifications.clear_title": "是否清空通知?", + "notifications.clear_confirmation": "确定要永久清空通知列表吗?", + "notifications.clear_title": "确定要清空通知?", "notifications.column_settings.admin.report": "新举报:", "notifications.column_settings.admin.sign_up": "新注册:", "notifications.column_settings.alert": "桌面通知", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "快速筛选栏", "notifications.column_settings.follow": "新粉丝:", "notifications.column_settings.follow_request": "新关注请求:", + "notifications.column_settings.group": "分组", "notifications.column_settings.mention": "提及:", "notifications.column_settings.poll": "投票结果:", "notifications.column_settings.push": "推送通知", @@ -594,17 +597,17 @@ "notifications.policy.drop": "忽略", "notifications.policy.drop_hint": "送入虚空,再也不查看", "notifications.policy.filter": "过滤", - "notifications.policy.filter_hint": "发送到被过滤通知收件箱", - "notifications.policy.filter_limited_accounts_hint": "被实例管理员限制", + "notifications.policy.filter_hint": "发送到被过滤通知列表", + "notifications.policy.filter_limited_accounts_hint": "被服务器管理员限制的账号", "notifications.policy.filter_limited_accounts_title": "受限账号", - "notifications.policy.filter_new_accounts.hint": "在 {days, plural, other {# 天}}内创建的账户", - "notifications.policy.filter_new_accounts_title": "新账户", - "notifications.policy.filter_not_followers_hint": "包括关注你少于 {days, plural, other {# 天}}的人", - "notifications.policy.filter_not_followers_title": "未关注你的人", - "notifications.policy.filter_not_following_hint": "直到你手动批准", - "notifications.policy.filter_not_following_title": "你没有关注的人", - "notifications.policy.filter_private_mentions_hint": "过滤通知,除非通知是在回复提及你自己的内容,或发送者是你关注的人", - "notifications.policy.filter_private_mentions_title": "不请自来的提及", + "notifications.policy.filter_new_accounts.hint": "注册未满 {days, plural, other {# 天}} 的账号", + "notifications.policy.filter_new_accounts_title": "新账号", + "notifications.policy.filter_not_followers_hint": "包括关注你未满 {days, plural, other {# 天}}的人", + "notifications.policy.filter_not_followers_title": "没有关注你的人", + "notifications.policy.filter_not_following_hint": "需要你手动批准", + "notifications.policy.filter_not_following_title": "需要你手动批准", + "notifications.policy.filter_private_mentions_hint": "过滤通知,除非对应嘟文是在回复你的私下提及,或来自你关注的人。", + "notifications.policy.filter_private_mentions_title": "不请自来的私下提及", "notifications.policy.title": "管理来自 … 的通知", "notifications_permission_banner.enable": "启用桌面通知", "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。你可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", @@ -614,41 +617,41 @@ "onboarding.actions.go_to_explore": "看看有什么新鲜事", "onboarding.actions.go_to_home": "转到主页动态", "onboarding.compose.template": "你好 #Mastodon!", - "onboarding.follows.empty": "很抱歉,现在无法显示任何结果。您可以尝试使用搜索或浏览探索页面来查找要关注的人,或稍后再试。", + "onboarding.follows.empty": "很抱歉,现在无法显示任何结果。你可以尝试使用搜索或浏览探索页面来查找要关注的人,或稍后再试。", "onboarding.follows.lead": "你管理你自己的家庭饲料。你关注的人越多,它将越活跃和有趣。 这些配置文件可能是一个很好的起点——你可以随时取消关注它们!", - "onboarding.follows.title": "定制您的主页动态", - "onboarding.profile.discoverable": "让我的资料卡可被他人发现", - "onboarding.profile.discoverable_hint": "当你选择在 Mastodon 上启用发现功能时,你的嘟文可能会出现在搜索结果和热门中,你的账户可能会被推荐给与你兴趣相似的人。", + "onboarding.follows.title": "定制你的主页动态", + "onboarding.profile.discoverable": "让我的账号可被他人发现", + "onboarding.profile.discoverable_hint": "当你在 Mastodon 上启用发现功能时,你的嘟文可能会出现在搜索结果与热门中,你的账号可能会被推荐给与你兴趣相似的人。", "onboarding.profile.display_name": "昵称", "onboarding.profile.display_name_hint": "你的全名或昵称…", "onboarding.profile.lead": "你可以稍后在设置中完成此操作,设置中有更多的自定义选项。", "onboarding.profile.note": "简介", - "onboarding.profile.note_hint": "你可以提及 @其他人 或 #标签…", + "onboarding.profile.note_hint": "你可以提及 @其他人 或使用 #话题…", "onboarding.profile.save_and_continue": "保存并继续", "onboarding.profile.title": "设置个人资料", "onboarding.profile.upload_avatar": "上传头像", - "onboarding.profile.upload_header": "上传资料卡头图", + "onboarding.profile.upload_header": "上传账号封面图", "onboarding.share.lead": "让人们知道他们如何在Mastodon找到你!", "onboarding.share.message": "我是来自 #Mastodon 的 {username}!请在 {url} 关注我。", "onboarding.share.next_steps": "可能的下一步:", "onboarding.share.title": "分享你的个人资料", - "onboarding.start.lead": "你的新 Mastodon 帐户已准备好。下面是如何最大限度地利用它:", + "onboarding.start.lead": "你的新 Mastodon 账号已准备好。下面是如何最大限度地利用它:", "onboarding.start.skip": "想要在前面跳过吗?", "onboarding.start.title": "你已经成功了!", "onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.", - "onboarding.steps.follow_people.title": "定制您的主页动态", + "onboarding.steps.follow_people.title": "定制你的主页动态", "onboarding.steps.publish_status.body": "向世界问声好吧。", "onboarding.steps.publish_status.title": "发布你的第一篇嘟文", - "onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.", - "onboarding.steps.setup_profile.title": "自定义你的个人资料", - "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", + "onboarding.steps.setup_profile.body": "完善个人资料,提升你的互动体验。", + "onboarding.steps.setup_profile.title": "自定义你的账号", + "onboarding.steps.share_profile.body": "让你的朋友知道怎样在 Mastodon 找到你", "onboarding.steps.share_profile.title": "分享你的个人资料", - "onboarding.tips.2fa": "你知道吗?你可以在账户设置中配置双因素认证来保护账户安全。可以使用你选择的任何 TOTP 应用,无需电话号码!", - "onboarding.tips.accounts_from_other_servers": "你知道吗? 既然Mastodon是去中心化的,你所看到的一些账户将被托管在你以外的服务器上。 但你可以无缝地与他们交互!他们的服务器在他们的用户名的后半部分!", - "onboarding.tips.migration": "您知道吗? 如果你觉得你喜欢 {domain} 不是您未来的一个伟大的服务器选择。 您可以移动到另一个 Mastodon 服务器而不失去您的关注者。 您甚至可以主持您自己的服务器!", - "onboarding.tips.verification": "您知道吗? 您可以通过在自己的网站上放置一个链接到您的 Mastodon 个人资料并将网站添加到您的个人资料来验证您的帐户。 无需收费或文书工作!", + "onboarding.tips.2fa": "你知道吗?你可以在账号设置中配置双因素认证来保护账号安全。可以使用你选择的任何 TOTP 应用,无需电话号码!", + "onboarding.tips.accounts_from_other_servers": "你知道吗? Mastodon 是去中心化的,所以你看到的一些账号实际上是在别的服务器上。不过你仍然可以和他们无缝交流!他们的服务器地址就在他们用户名的后半部分!", + "onboarding.tips.migration": "你知道吗?如果你将来觉得 {domain} 不再符合您的需求,你可以在保留现有关注者的情况下迁移至其他 Mastodon 服务器。你甚至可以部署自己的服务器!", + "onboarding.tips.verification": "你知道吗? 你可以在自己的网站上添加指向你 Mastodon 个人资料的链接,并在你的 Mastodon 个人资料中添加对应的网站链接,以此来验证您的账号。此验证方式无需任何费用或文件。", "password_confirmation.exceeds_maxlength": "密码确认超过最大密码长度", - "password_confirmation.mismatching": "密码确认不匹配", + "password_confirmation.mismatching": "确认密码与密码不一致。", "picture_in_picture.restore": "恢复", "poll.closed": "已关闭", "poll.refresh": "刷新", @@ -661,13 +664,13 @@ "poll_button.add_poll": "发起投票", "poll_button.remove_poll": "移除投票", "privacy.change": "设置嘟文的可见范围", - "privacy.direct.long": "帖子中提到的每个人", + "privacy.direct.long": "嘟文中提到的每个人", "privacy.direct.short": "特定的人", - "privacy.private.long": "仅限您的关注者", + "privacy.private.long": "仅限你的关注者", "privacy.private.short": "关注者", "privacy.public.long": "所有 Mastodon 内外的人", "privacy.public.short": "公开", - "privacy.unlisted.additional": "该模式的行为与“公开”完全相同,只是帖子不会出现在实时动态、话题标签、探索或 Mastodon 搜索中,即使你已在账户级设置中选择加入。", + "privacy.unlisted.additional": "此模式的行为与“公开”类似,只是嘟文不会出现在实时动态、话题、探索或 Mastodon 搜索页面中,即使您已全局开启了对应的发现设置。", "privacy.unlisted.long": "减少算法影响", "privacy.unlisted.short": "悄悄公开", "privacy_policy.last_updated": "最近更新于 {date}", @@ -677,11 +680,11 @@ "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.days": "{number, plural, other {# 天}}前", + "relative_time.full.hours": "{number, plural, other {# 小时}}前", "relative_time.full.just_now": "刚刚", - "relative_time.full.minutes": "{number, plural, one {# 分钟} other {# 分钟}}前", - "relative_time.full.seconds": "{number, plural, one {# 秒} other {# 秒}}前", + "relative_time.full.minutes": "{number, plural, other {# 分钟}}前", + "relative_time.full.seconds": "{number, plural, other {# 秒}}前", "relative_time.hours": "{number} 小时前", "relative_time.just_now": "刚刚", "relative_time.minutes": "{number} 分钟前", @@ -698,7 +701,7 @@ "report.categories.violation": "内容违反一条或多条服务器规则", "report.category.subtitle": "选择最佳匹配", "report.category.title": "告诉我们此 {type} 存在的问题", - "report.category.title_account": "个人资料", + "report.category.title_account": "账号", "report.category.title_status": "嘟文", "report.close": "完成", "report.comment.title": "还有什么你认为我们应该知道的吗?", @@ -719,17 +722,17 @@ "report.reasons.violation": "违反服务器规则", "report.reasons.violation_description": "你清楚它违反了特定的规则", "report.rules.subtitle": "选择所有适用选项", - "report.rules.title": "哪些规则被违反了?", + "report.rules.title": "违反了哪些规则?", "report.statuses.subtitle": "选择所有适用选项", "report.statuses.title": "是否有任何嘟文可以支持这一报告?", "report.submit": "提交", "report.target": "举报 {target}", - "report.thanks.take_action": "以下是您控制您在 Mastodon 上能看到哪些内容的选项:", + "report.thanks.take_action": "以下是你控制你在 Mastodon 上能看到哪些内容的选项:", "report.thanks.take_action_actionable": "在我们审阅这个问题时,你可以对 @{name} 采取行动", "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.legal_sentence": "非法内容", @@ -742,11 +745,11 @@ "report_notification.open": "打开举报", "search.no_recent_searches": "无最近搜索", "search.placeholder": "搜索", - "search.quick_action.account_search": "匹配 {x} 的个人资料", - "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.account_search": "包含 {x} 的账号", + "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.search_or_paste": "搜索或输入网址", "search_popout.full_text_search_disabled_message": "在 {domain} 不可用", "search_popout.full_text_search_logged_out_message": "只有登录后才可用。", @@ -754,41 +757,41 @@ "search_popout.options": "搜索选项", "search_popout.quick_actions": "快捷操作", "search_popout.recent": "最近搜索", - "search_popout.specific_date": "指定日期", + "search_popout.specific_date": "具体日期", "search_popout.user": "用户", "search_results.accounts": "用户", "search_results.all": "全部", - "search_results.hashtags": "话题标签", + "search_results.hashtags": "话题", "search_results.nothing_found": "无法找到符合这些搜索词的任何内容", "search_results.see_all": "查看全部", "search_results.statuses": "嘟文", "search_results.title": "搜索 {q}", - "server_banner.about_active_users": "过去 30 天内使用此服务器的人(每月活跃用户)", + "server_banner.about_active_users": "过去 30 天内使用此服务器的人(月活跃用户)", "server_banner.active_users": "活跃用户", "server_banner.administered_by": "本站管理员:", - "server_banner.is_one_of_many": "{domain} 是可用于参与联邦宇宙的众多独立 Mastodon 服务器之一。", + "server_banner.is_one_of_many": "{domain} 是可用于参与联邦宇宙的众多独立 Mastodon 站点之一。", "server_banner.server_stats": "服务器统计数据:", - "sign_in_banner.create_account": "创建账户", + "sign_in_banner.create_account": "创建账号", "sign_in_banner.follow_anyone": "关注联邦宇宙中的任何人,并按时间顺序查看所有内容。没有算法、广告或诱导链接。", "sign_in_banner.mastodon_is": "Mastodon 是了解最新动态的最佳途径。", "sign_in_banner.sign_in": "登录", "sign_in_banner.sso_redirect": "登录或注册", "status.admin_account": "打开 @{name} 的管理界面", "status.admin_domain": "打开 {domain} 的管理界面", - "status.admin_status": "打开此帖的管理界面", + "status.admin_status": "在管理界面查看此嘟文", "status.block": "屏蔽 @{name}", "status.bookmark": "添加到书签", - "status.cancel_reblog_private": "取消转贴", - "status.cannot_reblog": "这条嘟文不允许被转嘟", - "status.continued_thread": "继续线程", + "status.cancel_reblog_private": "取消转嘟", + "status.cannot_reblog": "不能转嘟这条嘟文", + "status.continued_thread": "上接嘟文串", "status.copy": "复制嘟文链接", "status.delete": "删除", - "status.detailed_status": "详细的对话视图", + "status.detailed_status": "对话详情", "status.direct": "私下提及 @{name}", "status.direct_indicator": "私下提及", "status.edit": "编辑", - "status.edited": "最近编辑于 {date}", - "status.edited_x_times": "共编辑 {count, plural, one {{count} 次} other {{count} 次}}", + "status.edited": "最后编辑于 {date}", + "status.edited_x_times": "共编辑 {count, plural, other {{count} 次}}", "status.embed": "获取嵌入代码", "status.favourite": "喜欢", "status.favourites": "{count, plural, other {次喜欢}}", @@ -798,48 +801,48 @@ "status.load_more": "加载更多", "status.media.open": "点击打开", "status.media.show": "点击查看", - "status.media_hidden": "已隐藏的媒体内容", + "status.media_hidden": "媒体已隐藏", "status.mention": "提及 @{name}", "status.more": "更多", "status.mute": "隐藏 @{name}", - "status.mute_conversation": "禁用此对话的消息提醒", + "status.mute_conversation": "关闭此对话的通知", "status.open": "展开嘟文", "status.pin": "在个人资料页面置顶", "status.pinned": "置顶嘟文", "status.read_more": "查看更多", "status.reblog": "转嘟", - "status.reblog_private": "转嘟(可见者不变)", + "status.reblog_private": "以相同可见性转嘟", "status.reblogged_by": "{name} 转嘟了", "status.reblogs": "{count, plural, other {次转嘟}}", "status.reblogs.empty": "没有人转嘟过此条嘟文。如果有人转嘟了,就会显示在这里。", "status.redraft": "删除并重新编辑", "status.remove_bookmark": "移除书签", - "status.replied_in_thread": "已在线程中回复", - "status.replied_to": "回复给 {name}", + "status.replied_in_thread": "回复嘟文串", + "status.replied_to": "回复 {name}", "status.reply": "回复", - "status.replyAll": "回复所有人", + "status.replyAll": "回复此嘟文串", "status.report": "举报 @{name}", "status.sensitive_warning": "敏感内容", "status.share": "分享", - "status.show_less_all": "隐藏全部内容", - "status.show_more_all": "显示全部内容", + "status.show_less_all": "全部折叠", + "status.show_more_all": "全部展开", "status.show_original": "显示原文", - "status.title.with_attachments": "{user} 上传了 {attachmentCount, plural, one {一个附件} other {{attachmentCount} 个附件}}", + "status.title.with_attachments": "{user} 上传了 {attachmentCount, plural, other {{attachmentCount} 个附件}}", "status.translate": "翻译", "status.translated_from_with": "由 {provider} 翻译自 {lang}", "status.uncached_media_warning": "预览不可用", "status.unmute_conversation": "恢复此对话的通知提醒", "status.unpin": "在个人资料页面取消置顶", - "subscribed_languages.lead": "更改此选择后,仅选定语言的嘟文会出现在您的主页和列表时间轴上。选择「无」将接收所有语言的嘟文。", + "subscribed_languages.lead": "更改此选择后,只有选定语言的嘟文才会出现在你的主页和列表时间线上。选择「无」将显示所有语言的嘟文。", "subscribed_languages.save": "保存更改", "subscribed_languages.target": "更改 {target} 的订阅语言", "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.days": "剩余 {number, plural, other {# 天}}", + "time_remaining.hours": "剩余 {number, plural, other {# 小时}}", + "time_remaining.minutes": "剩余 {number, plural, other {# 分钟}}", "time_remaining.moments": "即将结束", - "time_remaining.seconds": "剩余 {number, plural, one {# 秒} other {# 秒}}", + "time_remaining.seconds": "剩余 {number, plural, other {# 秒}}", "trends.counter_by_accounts": "过去 {days, plural, other {{days} 天}}有{count, plural, other { {counter} 人}}讨论", "trends.trending_now": "当前热门", "ui.beforeunload": "如果你现在离开 Mastodon,你的草稿内容将会丢失。", @@ -859,12 +862,12 @@ "upload_form.drag_and_drop.on_drag_start": "已选中媒体附件 {item}。", "upload_form.edit": "编辑", "upload_form.thumbnail": "更改缩略图", - "upload_form.video_description": "为听障人士和视障人士添加文字描述", - "upload_modal.analyzing_picture": "分析图片…", + "upload_form.video_description": "为听障人士与视障人士添加文字描述", + "upload_modal.analyzing_picture": "正在分析图片…", "upload_modal.apply": "应用", "upload_modal.applying": "正在应用…", - "upload_modal.choose_image": "选择图像", - "upload_modal.description_placeholder": "快狐跨懒狗", + "upload_modal.choose_image": "选择图片", + "upload_modal.description_placeholder": "在这里写下你的描述", "upload_modal.detect_text": "从图片中检测文本", "upload_modal.edit_media": "编辑媒体", "upload_modal.hint": "在预览图上点击或拖动圆圈,以选择缩略图的焦点。", @@ -872,7 +875,7 @@ "upload_modal.preview_label": "预览 ({ratio})", "upload_progress.label": "上传中…", "upload_progress.processing": "正在处理…", - "username.taken": "此用户名已被使用。请尝试其他", + "username.taken": "此用户名已被占用。请换用其它用户名", "video.close": "关闭视频", "video.download": "下载文件", "video.exit_fullscreen": "退出全屏", @@ -882,5 +885,5 @@ "video.mute": "静音", "video.pause": "暂停", "video.play": "播放", - "video.unmute": "解除禁音" + "video.unmute": "取消静音" } diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index a081e55897..eb75c76d39 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -11,6 +11,7 @@ "about.not_available": "本伺服器尚未提供這資訊。", "about.powered_by": "由 {mastodon} 提供之去中心化社交媒體", "about.rules": "伺服器規則", + "account.account_note_header": "個人筆記", "account.add_or_remove_from_list": "從列表中新增或移除", "account.badges.bot": "機械人", "account.badges.group": "群組", @@ -33,6 +34,7 @@ "account.follow_back": "追蹤對方", "account.followers": "追蹤者", "account.followers.empty": "尚未有人追蹤這位使用者。", + "account.followers_counter": "{count, plural, other {{counter} 個追蹤者}}", "account.following": "正在追蹤", "account.follows.empty": "這位使用者尚未追蹤任何人。", "account.go_to_profile": "前往個人檔案", @@ -81,6 +83,7 @@ "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生意外錯誤。", "alert.unexpected.title": "失敗!", + "alt_text_badge.title": "替代文字", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未處理)", "audio.hide": "隱藏音訊", @@ -169,6 +172,7 @@ "confirmations.delete.title": "刪除帖文?", "confirmations.delete_list.confirm": "刪除", "confirmations.delete_list.message": "你確定要永久刪除這列表嗎?", + "confirmations.delete_list.title": "刪除列表?", "confirmations.discard_edit_media.confirm": "捨棄", "confirmations.discard_edit_media.message": "您在媒體描述或預覽有尚未儲存的變更。確定要捨棄它們嗎?", "confirmations.edit.confirm": "編輯", @@ -183,6 +187,9 @@ "confirmations.reply.message": "現在回覆將蓋掉您目前正在撰寫的訊息。是否仍要回覆?", "confirmations.unfollow.confirm": "取消追蹤", "confirmations.unfollow.message": "真的不要繼續追蹤 {name} 了嗎?", + "confirmations.unfollow.title": "取消追蹤使用者?", + "content_warning.hide": "隱藏嘟文", + "content_warning.show": "仍要顯示", "conversation.delete": "刪除對話", "conversation.mark_as_read": "標為已讀", "conversation.open": "檢視對話", @@ -344,6 +351,7 @@ "home.pending_critical_update.link": "查看更新", "home.pending_critical_update.title": "有重要的安全更新!", "home.show_announcements": "顯示公告", + "ignore_notifications_modal.ignore": "忽略推播通知", "interaction_modal.description.favourite": "有了 Mastodon 的帳號,你便可以把這篇帖文加入最愛,讓作者知道你欣賞他的作品,並可以稍後再閱讀。", "interaction_modal.description.follow": "在 Mastodon 上有個帳號的話,您可以追蹤 {name} 以於首頁時間軸接收他們的帖文。", "interaction_modal.description.reblog": "在 Mastodon 上有個帳號的話,您可以向自己的追縱者們轉發此帖文。", @@ -418,6 +426,7 @@ "lists.subheading": "列表", "load_pending": "{count, plural, other {# 個新項目}}", "loading_indicator.label": "載入中…", + "media_gallery.hide": "隱藏", "moved_to_account_banner.text": "您的帳號 {disabledAccount} 目前已停用,因為您已搬家至 {movedToAccount}。", "mute_modal.hide_from_notifications": "隱藏通知", "mute_modal.hide_options": "隱藏選項", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 2047a69f44..f77437cf18 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -1,7 +1,7 @@ { "about.blocks": "被限制的伺服器", "about.contact": "聯絡我們:", - "about.disclaimer": "Mastodon 是一個自由的開源軟體,是 Mastodon gGmbH 的註冊商標。", + "about.disclaimer": "Mastodon 是一個自由的開源軟體,是 Mastodon gGmbH 之註冊商標。", "about.domain_blocks.no_reason_available": "無法存取的原因", "about.domain_blocks.preamble": "Mastodon 基本上允許您瀏覽聯邦宇宙中任何伺服器的內容並與使用者互動。以下是在本伺服器上設定的例外。", "about.domain_blocks.silenced.explanation": "一般來說您不會看到來自這個伺服器的個人檔案和內容,除非您明確搜尋或主動跟隨對方。", @@ -53,7 +53,7 @@ "account.mute_short": "靜音", "account.muted": "已靜音", "account.mutual": "互相跟隨", - "account.no_bio": "無個人檔案描述", + "account.no_bio": "無個人檔案描述。", "account.open_original_page": "檢視原始頁面", "account.posts": "嘟文", "account.posts_with_replies": "嘟文與回覆", @@ -197,6 +197,7 @@ "confirmations.unfollow.title": "是否取消跟隨該使用者?", "content_warning.hide": "隱藏嘟文", "content_warning.show": "仍要顯示", + "content_warning.show_more": "顯示更多", "conversation.delete": "刪除對話", "conversation.mark_as_read": "標記為已讀", "conversation.open": "檢視對話", @@ -305,7 +306,7 @@ "filter_modal.select_filter.subtitle": "使用既有的類別或是新增", "filter_modal.select_filter.title": "過濾此嘟文", "filter_modal.title.status": "過濾一則嘟文", - "filter_warning.matches_filter": "匹配過濾器「{title}」", + "filter_warning.matches_filter": "符合過濾器「{title}」", "filtered_notifications_banner.pending_requests": "來自您可能認識的 {count, plural, =0 {0 人} other {# 人}}", "filtered_notifications_banner.title": "已過濾之推播通知", "firehose.all": "全部", @@ -391,14 +392,14 @@ "interaction_modal.on_another_server": "於不同伺服器", "interaction_modal.on_this_server": "於此伺服器", "interaction_modal.sign_in": "您未登入於此伺服器。您的帳號是於何方託管呢?", - "interaction_modal.sign_in_hint": "提示:這是您所註冊之網站。若您無法回想起,請檢查您電子信箱收件夾內之歡迎信。您也能輸入完整帳號名稱!(如:@Mastodon@mastodon.social)", + "interaction_modal.sign_in_hint": "提示:這是您所註冊之網站。若您無法回想起,請檢查您電子郵件收件夾內之歡迎信。您也能輸入完整帳號名稱!(如:@Mastodon@mastodon.social)", "interaction_modal.title.favourite": "將 {name} 之嘟文加入最愛", "interaction_modal.title.follow": "跟隨 {name}", "interaction_modal.title.reblog": "轉嘟 {name} 的嘟文", "interaction_modal.title.reply": "回覆 {name} 的嘟文", - "intervals.full.days": "{number, plural, one {# 天} other {# 天}}", - "intervals.full.hours": "{number, plural, one {# 小時} other {# 小時}}", - "intervals.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}", + "intervals.full.days": "{number, plural, other {# 天}}", + "intervals.full.hours": "{number, plural, other {# 小時}}", + "intervals.full.minutes": "{number, plural, other {# 分鐘}}", "keyboard_shortcuts.back": "上一頁", "keyboard_shortcuts.blocked": "開啟「封鎖使用者」列表", "keyboard_shortcuts.boost": "轉嘟", @@ -457,7 +458,7 @@ "lists.replies_policy.title": "顯示回覆:", "lists.search": "搜尋您跟隨之使用者", "lists.subheading": "您的列表", - "load_pending": "{count, plural, one {# 個新項目} other {# 個新項目}}", + "load_pending": "{count, plural, other {# 個新項目}}", "loading_indicator.label": "正在載入...", "media_gallery.hide": "隱藏", "moved_to_account_banner.text": "您的帳號 {disabledAccount} 目前已停用,因為您已搬家至 {movedToAccount}。", @@ -499,8 +500,8 @@ "navigation_bar.security": "安全性", "not_signed_in_indicator.not_signed_in": "您需要登入才能存取此資源。", "notification.admin.report": "{name} 已檢舉 {target}", - "notification.admin.report_account": "{name} 已檢舉來自 {target} 關於 {category} 之 {count, plural, other {# 則嘟文}} ", - "notification.admin.report_account_other": "{name} 已檢舉來自 {target} 之 {count, plural, other {# 則嘟文}} ", + "notification.admin.report_account": "{name} 已檢舉來自 {target} 關於 {category} 之 {count, plural, other {# 則嘟文}}", + "notification.admin.report_account_other": "{name} 已檢舉來自 {target} 之 {count, plural, other {# 則嘟文}}", "notification.admin.report_statuses": "{name} 已檢舉 {target} 關於 {category}", "notification.admin.report_statuses_other": "{name} 已檢舉 {target}", "notification.admin.sign_up": "{name} 已經註冊", @@ -508,7 +509,7 @@ "notification.favourite": "{name} 已將您的嘟文加入最愛", "notification.favourite.name_and_others_with_link": "{name} 與{count, plural, other {其他 # 個人}}已將您的嘟文加入最愛", "notification.follow": "{name} 已跟隨您", - "notification.follow.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已跟隨您", + "notification.follow.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已跟隨您", "notification.follow_request": "{name} 要求跟隨您", "notification.follow_request.name_and_others": "{name} 與{count, plural, other {其他 # 個人}}已請求跟隨您", "notification.label.mention": "提及", @@ -516,6 +517,7 @@ "notification.label.private_reply": "私訊回嘟", "notification.label.reply": "回嘟", "notification.mention": "提及", + "notification.mentioned_you": "{name} 已提及您", "notification.moderation-warning.learn_more": "了解更多", "notification.moderation_warning": "您已收到管理員警告", "notification.moderation_warning.action_delete_statuses": "某些您的嘟文已被刪除。", @@ -566,6 +568,7 @@ "notifications.column_settings.filter_bar.category": "快速過濾器", "notifications.column_settings.follow": "新的跟隨者:", "notifications.column_settings.follow_request": "新的跟隨請求:", + "notifications.column_settings.group": "群組", "notifications.column_settings.mention": "提及:", "notifications.column_settings.poll": "投票結果:", "notifications.column_settings.push": "推播通知", @@ -653,11 +656,11 @@ "poll.closed": "已關閉", "poll.refresh": "重新整理", "poll.reveal": "檢視結果", - "poll.total_people": "{count, plural, one {# 個投票} other {# 個投票}}", - "poll.total_votes": "{count, plural, one {# 個投票} other {# 個投票}}", + "poll.total_people": "{count, plural, other {# 個人}}", + "poll.total_votes": "{count, plural, other {# 張票}}", "poll.vote": "投票", "poll.voted": "您已對此問題投票", - "poll.votes": "{votes, plural, one {# 張票} other {# 張票}}", + "poll.votes": "{votes, plural, other {# 張票}}", "poll_button.add_poll": "新增投票", "poll_button.remove_poll": "移除投票", "privacy.change": "調整嘟文隱私狀態", @@ -675,13 +678,13 @@ "recommended": "推薦設定", "refresh": "重新整理", "regeneration_indicator.label": "載入中…", - "regeneration_indicator.sublabel": "您的首頁時間軸正在準備中!", + "regeneration_indicator.sublabel": "正在準備您的首頁時間軸!", "relative_time.days": "{number} 天", "relative_time.full.days": "{number, plural, other {# 天}}前", - "relative_time.full.hours": "{number, plural, one {# 小時} other {# 小時}}前", + "relative_time.full.hours": "{number, plural, other {# 小時}}前", "relative_time.full.just_now": "剛剛", - "relative_time.full.minutes": "{number, plural, one {# 分鐘} other {# 分鐘}}前", - "relative_time.full.seconds": "{number, plural, one {# 秒} other {# 秒}}前", + "relative_time.full.minutes": "{number, plural, other {# 分鐘}}前", + "relative_time.full.seconds": "{number, plural, other {# 秒}}前", "relative_time.hours": "{number} 小時前", "relative_time.just_now": "剛剛", "relative_time.minutes": "{number} 分鐘前", @@ -791,7 +794,7 @@ "status.edited_x_times": "已編輯 {count, plural, one {{count} 次} other {{count} 次}}", "status.embed": "取得嵌入程式碼", "status.favourite": "最愛", - "status.favourites": "{count, plural, other {# 則最愛}}", + "status.favourites": "{count, plural, other {則最愛}}", "status.filter": "過濾此嘟文", "status.history.created": "{name} 於 {date} 建立", "status.history.edited": "{name} 於 {date} 修改", @@ -810,10 +813,10 @@ "status.reblog": "轉嘟", "status.reblog_private": "依照原嘟可見性轉嘟", "status.reblogged_by": "{name} 已轉嘟", - "status.reblogs": "{count, plural, other {# 則轉嘟}}", + "status.reblogs": "{count, plural, other {則轉嘟}}", "status.reblogs.empty": "還沒有人轉嘟過這則嘟文。當有人轉嘟時,它將於此顯示。", "status.redraft": "刪除並重新編輯", - "status.remove_bookmark": "移除書籤", + "status.remove_bookmark": "自書籤中移除", "status.replied_in_thread": "於討論串中回覆", "status.replied_to": "回覆 {name}", "status.reply": "回覆", @@ -835,11 +838,11 @@ "subscribed_languages.target": "變更 {target} 的訂閱語言", "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.days": "剩餘 {number, plural, other {# 天}}", + "time_remaining.hours": "剩餘{number, plural, other {# 小時}}", + "time_remaining.minutes": "剩餘{number, plural, other {# 分鐘}}", "time_remaining.moments": "剩餘時間", - "time_remaining.seconds": "剩餘 {number, plural, one {# 秒} other {# 秒}}", + "time_remaining.seconds": "剩餘{number, plural, other {# 秒}}", "trends.counter_by_accounts": "{count, plural, one {{counter} 人} other {{counter} 人}}於過去 {days, plural, one {日} other {{days} 日}} 之間", "trends.trending_now": "現正熱門趨勢", "ui.beforeunload": "如果離開 Mastodon,您的草稿將會不見。", @@ -850,17 +853,17 @@ "upload_button.label": "上傳圖片、影片、或者音訊檔案", "upload_error.limit": "已達到檔案上傳限制。", "upload_error.poll": "不允許於投票時上傳檔案。", - "upload_form.audio_description": "為聽障人士增加文字說明", - "upload_form.description": "為視障人士增加文字說明", + "upload_form.audio_description": "為聽覺障礙人士增加文字說明", + "upload_form.description": "為視覺障礙人士增加文字說明", "upload_form.drag_and_drop.instructions": "請按空白鍵或 Enter 鍵取多媒體附加檔案。使用方向鍵移動多媒體附加檔案。按下空白鍵或 Enter 鍵於新位置放置多媒體附加檔案,或按下 ESC 鍵取消。", "upload_form.drag_and_drop.on_drag_cancel": "移動已取消。多媒體附加檔案 {item} 已被放置。", "upload_form.drag_and_drop.on_drag_end": "多媒體附加檔案 {item} 已被放置。", "upload_form.drag_and_drop.on_drag_over": "多媒體附加檔案 {item} 已被移動。", "upload_form.drag_and_drop.on_drag_start": "多媒體附加檔案 {item} 已被選取。", "upload_form.edit": "編輯", - "upload_form.thumbnail": "更改預覽圖", + "upload_form.thumbnail": "變更預覽圖", "upload_form.video_description": "為聽障或視障人士增加文字說明", - "upload_modal.analyzing_picture": "正在分析圖片…", + "upload_modal.analyzing_picture": "正在分析圖片...", "upload_modal.apply": "套用", "upload_modal.applying": "正在套用...", "upload_modal.choose_image": "選擇圖片", @@ -868,7 +871,7 @@ "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": "處理中...", diff --git a/app/javascript/mastodon/models/account.ts b/app/javascript/mastodon/models/account.ts index 6681b9df12..926df71801 100644 --- a/app/javascript/mastodon/models/account.ts +++ b/app/javascript/mastodon/models/account.ts @@ -129,6 +129,9 @@ export const accountDefaultValues: AccountShape = { hide_collections: false, other_settings: AccountOtherSettingsFactory(), subscribable: true, + // This comes from `ApiMutedAccountJSON`, but we should eventually + // store that in a different object. + mute_expires_at: null, }; const AccountFactory = ImmutableRecord(accountDefaultValues); @@ -181,5 +184,10 @@ export function createAccountFromServerJSON(serverJSON: ApiAccountJSON) { ), note_emojified: emojify(accountJSON.note, emojiMap), note_plain: unescapeHTML(accountJSON.note), + url: + accountJSON.url.startsWith('http://') || + accountJSON.url.startsWith('https://') + ? accountJSON.url + : accountJSON.uri, }); } diff --git a/app/javascript/mastodon/models/notification_group.ts b/app/javascript/mastodon/models/notification_group.ts index 28fa8f513d..62f4b83b79 100644 --- a/app/javascript/mastodon/models/notification_group.ts +++ b/app/javascript/mastodon/models/notification_group.ts @@ -18,6 +18,7 @@ export const NOTIFICATIONS_GROUP_MAX_AVATARS = 8; interface BaseNotificationGroup extends Omit { sampleAccountIds: string[]; + partial: boolean; } interface BaseNotificationWithStatus @@ -173,6 +174,7 @@ export function createNotificationGroupFromJSON( return { statusId: statusId ?? undefined, sampleAccountIds, + partial: false, ...groupWithoutStatus, }; } @@ -196,6 +198,7 @@ export function createNotificationGroupFromJSON( statusId: statusId ?? undefined, sampleAccountIds, emojiReactionGroups: groups, + partial: false, ...groupWithoutStatus, }; } @@ -204,12 +207,14 @@ export function createNotificationGroupFromJSON( return { report: createReportFromJSON(report), sampleAccountIds, + partial: false, ...groupWithoutTargetAccount, }; } case 'severed_relationships': return { ...group, + partial: false, event: createAccountRelationshipSeveranceEventFromJSON(group.event), sampleAccountIds, }; @@ -218,13 +223,16 @@ export function createNotificationGroupFromJSON( const { moderation_warning, ...groupWithoutModerationWarning } = group; return { ...groupWithoutModerationWarning, + partial: false, moderationWarning: createAccountWarningFromJSON(moderation_warning), sampleAccountIds, }; } + default: return { sampleAccountIds, + partial: false, ...group, }; } @@ -232,17 +240,17 @@ export function createNotificationGroupFromJSON( export function createNotificationGroupFromNotificationJSON( notification: ApiNotificationJSON, -) { +): NotificationGroup { const group = { sampleAccountIds: [notification.account.id], group_key: notification.group_key, notifications_count: 1, - type: notification.type, most_recent_notification_id: notification.id, page_min_id: notification.id, page_max_id: notification.id, latest_page_notification_at: notification.created_at, - } as NotificationGroup; + partial: true, + }; switch (notification.type) { case 'favourite': @@ -252,16 +260,22 @@ export function createNotificationGroupFromNotificationJSON( case 'status_reference': case 'poll': case 'update': - return { ...group, statusId: notification.status?.id }; + return { + ...group, + type: notification.type, + statusId: notification.status?.id, + }; case 'list_status': return { ...group, + type: notification.type, statusId: notification.status?.id, list: notification.list, }; case 'emoji_reaction': return { ...group, + type: notification.type, statusId: notification.status?.id, emojiReactionGroups: createEmojiReactionGroupsFromJSON( notification.emoji_reaction, @@ -269,10 +283,15 @@ export function createNotificationGroupFromNotificationJSON( ), }; case 'admin.report': - return { ...group, report: createReportFromJSON(notification.report) }; + return { + ...group, + type: notification.type, + report: createReportFromJSON(notification.report), + }; case 'severed_relationships': return { ...group, + type: notification.type, event: createAccountRelationshipSeveranceEventFromJSON( notification.event, ), @@ -280,11 +299,15 @@ export function createNotificationGroupFromNotificationJSON( case 'moderation_warning': return { ...group, + type: notification.type, moderationWarning: createAccountWarningFromJSON( notification.moderation_warning, ), }; default: - return group; + return { + ...group, + type: notification.type, + }; } } diff --git a/app/javascript/mastodon/reducers/accounts.ts b/app/javascript/mastodon/reducers/accounts.ts index 5a9cc7220c..2001353b2e 100644 --- a/app/javascript/mastodon/reducers/accounts.ts +++ b/app/javascript/mastodon/reducers/accounts.ts @@ -57,7 +57,10 @@ export const accountsReducer: Reducer = ( return state.setIn([action.payload.id, 'hidden'], false); else if (importAccounts.match(action)) return normalizeAccounts(state, action.payload.accounts); - else if (followAccountSuccess.match(action)) { + else if ( + followAccountSuccess.match(action) && + !action.payload.alreadyFollowing + ) { return state .update(action.payload.relationship.id, (account) => account?.update('followers_count', (n) => n + 1), diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index 3f45552492..a5585ebad7 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -354,12 +354,26 @@ const expiresInFromExpiresAt = expires_at => { const mergeLocalHashtagResults = (suggestions, prefix, tagHistory) => { prefix = prefix.toLowerCase(); + if (suggestions.length < 4) { const localTags = tagHistory.filter(tag => tag.toLowerCase().startsWith(prefix) && !suggestions.some(suggestion => suggestion.type === 'hashtag' && suggestion.name.toLowerCase() === tag.toLowerCase())); - return suggestions.concat(localTags.slice(0, 4 - suggestions.length).toJS().map(tag => ({ type: 'hashtag', name: tag }))); - } else { - return suggestions; + suggestions = suggestions.concat(localTags.slice(0, 4 - suggestions.length).toJS().map(tag => ({ type: 'hashtag', name: tag }))); } + + // Prefer capitalization from personal history, unless personal history is all lower-case + const fixSuggestionCapitalization = (suggestion) => { + if (suggestion.type !== 'hashtag') + return suggestion; + + const tagFromHistory = tagHistory.find((tag) => tag.localeCompare(suggestion.name, undefined, { sensitivity: 'accent' }) === 0); + + if (!tagFromHistory || tagFromHistory.toLowerCase() === tagFromHistory) + return suggestion; + + return { ...suggestion, name: tagFromHistory }; + }; + + return suggestions.map(fixSuggestionCapitalization); }; const normalizeSuggestions = (state, { accounts, emojis, tags, token }) => { @@ -520,7 +534,7 @@ export default function compose(state = initialState, action) { .set('isUploadingThumbnail', false) .update('media_attachments', list => list.map(item => { if (item.get('id') === action.media.id) { - return fromJS(action.media); + return fromJS(action.media).set('unattached', item.get('unattached')); } return item; diff --git a/app/javascript/mastodon/reducers/notification_groups.ts b/app/javascript/mastodon/reducers/notification_groups.ts index 728019b6ad..272d033154 100644 --- a/app/javascript/mastodon/reducers/notification_groups.ts +++ b/app/javascript/mastodon/reducers/notification_groups.ts @@ -29,6 +29,7 @@ import { import type { ApiNotificationJSON, ApiNotificationGroupJSON, + NotificationType, } from 'mastodon/api_types/notifications'; import { compareId } from 'mastodon/compare_id'; import { usePendingItems } from 'mastodon/initial_state'; @@ -204,7 +205,15 @@ function mergeGapsAround( function processNewNotification( groups: NotificationGroupsState['groups'], notification: ApiNotificationJSON, + groupedTypes: NotificationType[], ) { + if (!groupedTypes.includes(notification.type)) { + notification = { + ...notification, + group_key: `ungrouped-${notification.id}`, + }; + } + const existingGroupIndex = groups.findIndex( (group) => group.type !== 'gap' && group.group_key === notification.group_key, @@ -277,7 +286,7 @@ function processNewNotification( groups.unshift(existingGroup); } } else { - // Create a new group + // We have not found an existing group, create a new one groups.unshift(createNotificationGroupFromNotificationJSON(notification)); } } @@ -503,11 +512,13 @@ export const notificationGroupsReducer = createReducer( trimNotifications(state); }) .addCase(processNewNotificationForGroups.fulfilled, (state, action) => { - const notification = action.payload; - if (notification) { + if (action.payload) { + const { notification, groupedTypes } = action.payload; + processNewNotification( usePendingItems ? state.pendingGroups : state.groups, notification, + groupedTypes, ); updateLastReadId(state); trimNotifications(state); @@ -558,10 +569,13 @@ export const notificationGroupsReducer = createReducer( if (existingGroupIndex > -1) { const existingGroup = state.groups[existingGroupIndex]; if (existingGroup && existingGroup.type !== 'gap') { - group.notifications_count += existingGroup.notifications_count; - group.sampleAccountIds = group.sampleAccountIds - .concat(existingGroup.sampleAccountIds) - .slice(0, NOTIFICATIONS_GROUP_MAX_AVATARS); + if (group.partial) { + group.notifications_count += + existingGroup.notifications_count; + group.sampleAccountIds = group.sampleAccountIds + .concat(existingGroup.sampleAccountIds) + .slice(0, NOTIFICATIONS_GROUP_MAX_AVATARS); + } state.groups.splice(existingGroupIndex, 1); } } @@ -586,7 +600,10 @@ export const notificationGroupsReducer = createReducer( compareId(state.lastReadId, mostRecentGroup.page_max_id) < 0 ) state.lastReadId = mostRecentGroup.page_max_id; - commitLastReadId(state); + + // We don't call `commitLastReadId`, because that is conditional + // and we want to unconditionally update the state instead. + state.readMarkerId = state.lastReadId; }) .addCase(fetchMarkers.fulfilled, (state, action) => { if ( diff --git a/app/javascript/mastodon/reducers/settings.js b/app/javascript/mastodon/reducers/settings.js index 71bb254607..891d6ac994 100644 --- a/app/javascript/mastodon/reducers/settings.js +++ b/app/javascript/mastodon/reducers/settings.js @@ -91,6 +91,10 @@ const initialState = ImmutableMap({ 'admin.sign_up': true, 'admin.report': true, }), + + group: ImmutableMap({ + follow: true + }), }), firehose: ImmutableMap({ diff --git a/app/javascript/mastodon/selectors/filters.ts b/app/javascript/mastodon/selectors/filters.ts new file mode 100644 index 0000000000..f84d01216a --- /dev/null +++ b/app/javascript/mastodon/selectors/filters.ts @@ -0,0 +1,50 @@ +import { createSelector } from '@reduxjs/toolkit'; + +import type { RootState } from 'mastodon/store'; +import { toServerSideType } from 'mastodon/utils/filters'; + +// TODO: move to `app/javascript/mastodon/models` and use more globally +type Filter = Immutable.Map; + +// TODO: move to `app/javascript/mastodon/models` and use more globally +type FilterResult = Immutable.Map; + +export const getFilters = createSelector( + [ + (state: RootState) => state.filters as Immutable.Map, + (_, { contextType }: { contextType: string }) => contextType, + ], + (filters, contextType) => { + if (!contextType) { + return null; + } + + const now = new Date(); + const serverSideType = toServerSideType(contextType); + + return filters.filter((filter) => { + const context = filter.get('context') as Immutable.List; + const expiration = filter.get('expires_at') as Date | null; + return ( + context.includes(serverSideType) && + (expiration === null || expiration > now) + ); + }); + }, +); + +export const getStatusHidden = ( + state: RootState, + { id, contextType }: { id: string; contextType: string }, +) => { + const filters = getFilters(state, { contextType }); + if (filters === null) return false; + + const filtered = state.statuses.getIn([id, 'filtered']) as + | Immutable.List + | undefined; + return filtered?.some( + (result) => + filters.getIn([result.get('filter'), 'filter_action']) === 'hide', + ); +}; diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 45ecb98241..92a7021e52 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -1,23 +1,12 @@ import { createSelector } from '@reduxjs/toolkit'; import { List as ImmutableList, Map as ImmutableMap } from 'immutable'; -import { toServerSideType } from 'mastodon/utils/filters'; - import { me, isHideItem } from '../initial_state'; +import { getFilters } from './filters'; + export { makeGetAccount } from "./accounts"; -const getFilters = createSelector([state => state.get('filters'), (_, { contextType }) => contextType], (filters, contextType) => { - if (!contextType) { - return null; - } - - const now = new Date(); - const serverSideType = toServerSideType(contextType); - - return filters.filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || filter.get('expires_at') > now)); -}); - export const makeGetStatus = () => { return createSelector( [ @@ -28,9 +17,10 @@ export const makeGetStatus = () => { (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, + (_, { contextType }) => ['detailed', 'bookmarks', 'favourites'].includes(contextType), ], - (statusBase, statusReblog, statusQuote, statusReblogQuote, accountBase, accountReblog, filters) => { + (statusBase, statusReblog, statusQuote, statusReblogQuote, accountBase, accountReblog, filters, warnInsteadOfHide) => { if (!statusBase || statusBase.get('isLoading')) { return null; } @@ -58,7 +48,7 @@ export const makeGetStatus = () => { } } - if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action_ex']) === 'hide')) { + if (!warnInsteadOfHide && filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action_ex']) === 'hide')) { return null; } filterResults = filterResults.filter(result => filters.has(result.get('filter'))); diff --git a/app/javascript/mastodon/selectors/settings.ts b/app/javascript/mastodon/selectors/settings.ts index e722ad0911..ca34374167 100644 --- a/app/javascript/mastodon/selectors/settings.ts +++ b/app/javascript/mastodon/selectors/settings.ts @@ -52,4 +52,7 @@ export const selectSettingsNotificationsMinimizeFilteredBanner = ( ) => state.settings.getIn(['notifications', 'minimizeFilteredBanner']) as boolean; +export const selectSettingsNotificationsGroupFollows = (state: RootState) => + state.settings.getIn(['notifications', 'group', 'follow']) as boolean; + /* eslint-enable @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */ diff --git a/app/javascript/mastodon/service_worker/web_push_locales.js b/app/javascript/mastodon/service_worker/web_push_locales.js index 89ae20007b..3e39c9a4ed 100644 --- a/app/javascript/mastodon/service_worker/web_push_locales.js +++ b/app/javascript/mastodon/service_worker/web_push_locales.js @@ -6,6 +6,12 @@ const fs = require('fs'); const path = require('path'); +const { defineMessages } = require('react-intl'); + +const messages = defineMessages({ + mentioned_you: { id: 'notification.mentioned_you', defaultMessage: '{name} mentioned you' }, +}); + const filtered = {}; const filenames = fs.readdirSync(path.resolve(__dirname, '../locales')); @@ -20,7 +26,7 @@ filenames.forEach(filename => { 'notification.favourite': full['notification.favourite'] || '', 'notification.follow': full['notification.follow'] || '', 'notification.follow_request': full['notification.follow_request'] || '', - 'notification.mention': full['notification.mention'] || '', + 'notification.mention': full[messages.mentioned_you.id] || '', 'notification.reblog': full['notification.reblog'] || '', 'notification.poll': full['notification.poll'] || '', 'notification.status': full['notification.status'] || '', diff --git a/app/javascript/mastodon/utils/filters.ts b/app/javascript/mastodon/utils/filters.ts index 5d334fe509..479e1f44ab 100644 --- a/app/javascript/mastodon/utils/filters.ts +++ b/app/javascript/mastodon/utils/filters.ts @@ -7,6 +7,11 @@ export const toServerSideType = (columnType: string) => { case 'account': case 'explore': return columnType; + case 'detailed': + return 'thread'; + case 'bookmarks': + case 'favourites': + return 'home'; default: if (columnType.includes('list:') || columnType.includes('antenna:')) { return 'home'; diff --git a/app/javascript/material-icons/400-24px/breaking_news-fill.svg b/app/javascript/material-icons/400-24px/breaking_news-fill.svg new file mode 100644 index 0000000000..633ca48d57 --- /dev/null +++ b/app/javascript/material-icons/400-24px/breaking_news-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/breaking_news.svg b/app/javascript/material-icons/400-24px/breaking_news.svg index d7dd0c12f4..c043f11a8b 100644 --- a/app/javascript/material-icons/400-24px/breaking_news.svg +++ b/app/javascript/material-icons/400-24px/breaking_news.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/captive_portal-fill.svg b/app/javascript/material-icons/400-24px/captive_portal-fill.svg new file mode 100644 index 0000000000..5c0b26fb64 --- /dev/null +++ b/app/javascript/material-icons/400-24px/captive_portal-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/captive_portal.svg b/app/javascript/material-icons/400-24px/captive_portal.svg index 1f0f09c773..5c0b26fb64 100644 --- a/app/javascript/material-icons/400-24px/captive_portal.svg +++ b/app/javascript/material-icons/400-24px/captive_portal.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/chat_bubble-fill.svg b/app/javascript/material-icons/400-24px/chat_bubble-fill.svg new file mode 100644 index 0000000000..b47338a6c9 --- /dev/null +++ b/app/javascript/material-icons/400-24px/chat_bubble-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/chat_bubble.svg b/app/javascript/material-icons/400-24px/chat_bubble.svg index 7d210b4608..05d976d242 100644 --- a/app/javascript/material-icons/400-24px/chat_bubble.svg +++ b/app/javascript/material-icons/400-24px/chat_bubble.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud.svg b/app/javascript/material-icons/400-24px/cloud.svg index d6926fb717..1daef53baa 100644 --- a/app/javascript/material-icons/400-24px/cloud.svg +++ b/app/javascript/material-icons/400-24px/cloud.svg @@ -1 +1 @@ - + diff --git a/app/javascript/material-icons/400-24px/cloud_download-fill.svg b/app/javascript/material-icons/400-24px/cloud_download-fill.svg new file mode 100644 index 0000000000..c55d49f7e5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/cloud_download-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_download.svg b/app/javascript/material-icons/400-24px/cloud_download.svg index 2fc3717ff9..8e9314800c 100644 --- a/app/javascript/material-icons/400-24px/cloud_download.svg +++ b/app/javascript/material-icons/400-24px/cloud_download.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_sync-fill.svg b/app/javascript/material-icons/400-24px/cloud_sync-fill.svg new file mode 100644 index 0000000000..0c648e19e4 --- /dev/null +++ b/app/javascript/material-icons/400-24px/cloud_sync-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_sync.svg b/app/javascript/material-icons/400-24px/cloud_sync.svg index dbf6adc000..461796e323 100644 --- a/app/javascript/material-icons/400-24px/cloud_sync.svg +++ b/app/javascript/material-icons/400-24px/cloud_sync.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_upload-fill.svg b/app/javascript/material-icons/400-24px/cloud_upload-fill.svg new file mode 100644 index 0000000000..66a7bb22d3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/cloud_upload-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/cloud_upload.svg b/app/javascript/material-icons/400-24px/cloud_upload.svg index 5e1a4b9aef..94968cb947 100644 --- a/app/javascript/material-icons/400-24px/cloud_upload.svg +++ b/app/javascript/material-icons/400-24px/cloud_upload.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/code-fill.svg b/app/javascript/material-icons/400-24px/code-fill.svg new file mode 100644 index 0000000000..8ef5c55cd4 --- /dev/null +++ b/app/javascript/material-icons/400-24px/code-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/code.svg b/app/javascript/material-icons/400-24px/code.svg index 5bdc338f7f..8ef5c55cd4 100644 --- a/app/javascript/material-icons/400-24px/code.svg +++ b/app/javascript/material-icons/400-24px/code.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/computer-fill.svg b/app/javascript/material-icons/400-24px/computer-fill.svg new file mode 100644 index 0000000000..91295d6846 --- /dev/null +++ b/app/javascript/material-icons/400-24px/computer-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/computer.svg b/app/javascript/material-icons/400-24px/computer.svg index 8c5bd9110e..b8af5d4644 100644 --- a/app/javascript/material-icons/400-24px/computer.svg +++ b/app/javascript/material-icons/400-24px/computer.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/contact_mail-fill.svg b/app/javascript/material-icons/400-24px/contact_mail-fill.svg new file mode 100644 index 0000000000..c42c799955 --- /dev/null +++ b/app/javascript/material-icons/400-24px/contact_mail-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/contact_mail.svg b/app/javascript/material-icons/400-24px/contact_mail.svg index 1ae26cc4d1..4547c48ec5 100644 --- a/app/javascript/material-icons/400-24px/contact_mail.svg +++ b/app/javascript/material-icons/400-24px/contact_mail.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/database-fill.svg b/app/javascript/material-icons/400-24px/database-fill.svg new file mode 100644 index 0000000000..3520f69614 --- /dev/null +++ b/app/javascript/material-icons/400-24px/database-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/database.svg b/app/javascript/material-icons/400-24px/database.svg index 54ca2f4e56..a3bc2bfbc2 100644 --- a/app/javascript/material-icons/400-24px/database.svg +++ b/app/javascript/material-icons/400-24px/database.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/diamond-fill.svg b/app/javascript/material-icons/400-24px/diamond-fill.svg new file mode 100644 index 0000000000..474968ad6f --- /dev/null +++ b/app/javascript/material-icons/400-24px/diamond-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/diamond.svg b/app/javascript/material-icons/400-24px/diamond.svg index 26f4814b44..b604492fa8 100644 --- a/app/javascript/material-icons/400-24px/diamond.svg +++ b/app/javascript/material-icons/400-24px/diamond.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/filter_alt-fill.svg b/app/javascript/material-icons/400-24px/filter_alt-fill.svg new file mode 100644 index 0000000000..ec1d90bba6 --- /dev/null +++ b/app/javascript/material-icons/400-24px/filter_alt-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/filter_alt.svg b/app/javascript/material-icons/400-24px/filter_alt.svg index 0294cf1da5..e4af9efd5d 100644 --- a/app/javascript/material-icons/400-24px/filter_alt.svg +++ b/app/javascript/material-icons/400-24px/filter_alt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/groups-fill.svg b/app/javascript/material-icons/400-24px/groups-fill.svg new file mode 100644 index 0000000000..754eb0946c --- /dev/null +++ b/app/javascript/material-icons/400-24px/groups-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/groups.svg b/app/javascript/material-icons/400-24px/groups.svg index 0e795eb301..998ff03729 100644 --- a/app/javascript/material-icons/400-24px/groups.svg +++ b/app/javascript/material-icons/400-24px/groups.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/hide_source-fill.svg b/app/javascript/material-icons/400-24px/hide_source-fill.svg new file mode 100644 index 0000000000..959631bc1a --- /dev/null +++ b/app/javascript/material-icons/400-24px/hide_source-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/hide_source.svg b/app/javascript/material-icons/400-24px/hide_source.svg index d103ed770a..09633cef8c 100644 --- a/app/javascript/material-icons/400-24px/hide_source.svg +++ b/app/javascript/material-icons/400-24px/hide_source.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/inbox-fill.svg b/app/javascript/material-icons/400-24px/inbox-fill.svg new file mode 100644 index 0000000000..15ae2d8f3c --- /dev/null +++ b/app/javascript/material-icons/400-24px/inbox-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/inbox.svg b/app/javascript/material-icons/400-24px/inbox.svg index 427817958c..32c727e810 100644 --- a/app/javascript/material-icons/400-24px/inbox.svg +++ b/app/javascript/material-icons/400-24px/inbox.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/list-fill.svg b/app/javascript/material-icons/400-24px/list-fill.svg new file mode 100644 index 0000000000..c9cbe35eb5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/list-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/list.svg b/app/javascript/material-icons/400-24px/list.svg index 457a820ab1..c9cbe35eb5 100644 --- a/app/javascript/material-icons/400-24px/list.svg +++ b/app/javascript/material-icons/400-24px/list.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mail-fill.svg b/app/javascript/material-icons/400-24px/mail-fill.svg new file mode 100644 index 0000000000..5e7e4a2fb2 --- /dev/null +++ b/app/javascript/material-icons/400-24px/mail-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mail.svg b/app/javascript/material-icons/400-24px/mail.svg index a92ea7b198..15e1d12d4e 100644 --- a/app/javascript/material-icons/400-24px/mail.svg +++ b/app/javascript/material-icons/400-24px/mail.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mood.svg b/app/javascript/material-icons/400-24px/mood.svg index 9ea109ea9d..33a7d74db9 100644 --- a/app/javascript/material-icons/400-24px/mood.svg +++ b/app/javascript/material-icons/400-24px/mood.svg @@ -1 +1 @@ - + diff --git a/app/javascript/material-icons/400-24px/report-fill.svg b/app/javascript/material-icons/400-24px/report-fill.svg new file mode 100644 index 0000000000..50c638869d --- /dev/null +++ b/app/javascript/material-icons/400-24px/report-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/report.svg b/app/javascript/material-icons/400-24px/report.svg index f281f0e1fa..b08b5a1c98 100644 --- a/app/javascript/material-icons/400-24px/report.svg +++ b/app/javascript/material-icons/400-24px/report.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/safety_check-fill.svg b/app/javascript/material-icons/400-24px/safety_check-fill.svg new file mode 100644 index 0000000000..b38091a8ec --- /dev/null +++ b/app/javascript/material-icons/400-24px/safety_check-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/safety_check.svg b/app/javascript/material-icons/400-24px/safety_check.svg index f4eab46fb7..87bdba21fe 100644 --- a/app/javascript/material-icons/400-24px/safety_check.svg +++ b/app/javascript/material-icons/400-24px/safety_check.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/speed-fill.svg b/app/javascript/material-icons/400-24px/speed-fill.svg new file mode 100644 index 0000000000..dca22ac521 --- /dev/null +++ b/app/javascript/material-icons/400-24px/speed-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/speed.svg b/app/javascript/material-icons/400-24px/speed.svg index ceb855c684..0837877f42 100644 --- a/app/javascript/material-icons/400-24px/speed.svg +++ b/app/javascript/material-icons/400-24px/speed.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/trending_up-fill.svg b/app/javascript/material-icons/400-24px/trending_up-fill.svg new file mode 100644 index 0000000000..cd0e368964 --- /dev/null +++ b/app/javascript/material-icons/400-24px/trending_up-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/trending_up.svg b/app/javascript/material-icons/400-24px/trending_up.svg index 06f9ba2063..cd0e368964 100644 --- a/app/javascript/material-icons/400-24px/trending_up.svg +++ b/app/javascript/material-icons/400-24px/trending_up.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index f257286f53..5c108a2e6c 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -226,6 +226,10 @@ $content-width: 840px; gap: 5px; white-space: nowrap; + @media screen and (max-width: $mobile-breakpoint) { + flex: 1 0 50%; + } + &:hover, &:focus, &:active { @@ -1025,6 +1029,12 @@ a.name-tag, color: var(--user-role-accent); } +.applications-list { + .icon { + vertical-align: middle; + } +} + .announcements-list, .filters-list { border: 1px solid var(--background-border-color); @@ -1054,6 +1064,10 @@ a.name-tag, } } + .icon { + vertical-align: middle; + } + a.announcements-list__item__title { &:hover, &:focus, diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 0298402ad8..fc71ccb58a 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2147,7 +2147,6 @@ body > [data-popper-placement] { display: block; position: relative; border-radius: var(--avatar-border-radius); - background-color: var(--surface-background-color); img { width: 100%; @@ -2157,7 +2156,11 @@ body > [data-popper-placement] { display: inline-block; // to not show broken images } - &-inline { + &--loading { + background-color: var(--surface-background-color); + } + + &--inline { display: inline-block; vertical-align: middle; margin-inline-end: 5px; @@ -2836,6 +2839,7 @@ a.account__display-name { flex: 0 1 auto; display: flex; flex-direction: column; + contain: inline-size layout paint style; @media screen and (min-width: $no-gap-breakpoint) { max-width: 600px; @@ -2950,7 +2954,7 @@ $ui-header-logo-wordmark-width: 99px; } .column { - width: 400px; + width: clamp(380px, calc((100% - 350px) / 4), 400px); position: relative; box-sizing: border-box; display: flex; @@ -3705,6 +3709,7 @@ $ui-header-logo-wordmark-width: 99px; overflow-y: auto; width: 100%; height: 100%; + z-index: 0; } .drawer__inner__mastodon { @@ -4172,6 +4177,7 @@ button.icon-button.active i.fa-retweet { overflow: hidden; border: 1px solid var(--background-border-color); border-radius: 8px; + contain: inline-size layout paint style; &.bottomless { border-radius: 8px 8px 0 0; @@ -6087,6 +6093,7 @@ a.status-card { pointer-events: auto; user-select: text; display: flex; + max-width: 100vw; @media screen and (width <= $mobile-breakpoint) { margin-top: auto; @@ -7433,6 +7440,8 @@ a.status-card { } &--layout-3 { + min-height: calc(64px * 2 + 8px); + & > .media-gallery__item:nth-child(1) { border-end-end-radius: 0; border-start-end-radius: 0; @@ -7452,6 +7461,8 @@ a.status-card { } &--layout-4 { + min-height: calc(64px * 2 + 8px); + & > .media-gallery__item:nth-child(1) { border-end-end-radius: 0; border-start-end-radius: 0; @@ -8288,79 +8299,23 @@ noscript { background: rgba($base-overlay-background, 0.5); } +.list-adder, .list-editor { - background: $ui-base-color; + backdrop-filter: var(--background-filter); + background: var(--modal-background-color); + border: 1px solid var(--modal-border-color); flex-direction: column; border-radius: 8px; - box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); width: 380px; overflow: hidden; @media screen and (width <= 420px) { width: 90%; } - - h4 { - padding: 15px 0; - background: lighten($ui-base-color, 13%); - font-weight: 500; - font-size: 16px; - text-align: center; - border-radius: 8px 8px 0 0; - } - - .drawer__pager { - height: 50vh; - border-radius: 4px; - } - - .drawer__inner { - border-radius: 0 0 8px 8px; - - &.backdrop { - width: calc(100% - 60px); - box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); - border-radius: 0 0 0 8px; - } - } - - &__accounts { - overflow-y: auto; - } - - .account__display-name { - &:hover strong { - text-decoration: none; - } - } - - .account__avatar { - cursor: default; - } - - .search { - margin-bottom: 0; - } } .list-adder { - background: $ui-base-color; - flex-direction: column; - border-radius: 8px; - box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); - width: 380px; - overflow: hidden; - - @media screen and (width <= 420px) { - width: 90%; - } - - &__account { - background: lighten($ui-base-color, 13%); - } - &__lists { - background: lighten($ui-base-color, 13%); height: 50vh; border-radius: 0 0 8px 8px; overflow-y: auto; @@ -8381,6 +8336,52 @@ noscript { text-decoration: none; font-size: 16px; padding: 10px; + display: flex; + align-items: center; + gap: 4px; + } +} + +.list-editor { + h4 { + padding: 15px 0; + background: lighten($ui-base-color, 13%); + font-weight: 500; + font-size: 16px; + text-align: center; + border-radius: 8px 8px 0 0; + } + + .drawer__pager { + height: 50vh; + border: 0; + } + + .drawer__inner { + &.backdrop { + width: calc(100% - 60px); + box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4); + border-radius: 0 0 0 8px; + } + } + + &__accounts { + background: unset; + overflow-y: auto; + } + + .account__display-name { + &:hover strong { + text-decoration: none; + } + } + + .account__avatar { + cursor: default; + } + + .search { + margin-bottom: 0; } } @@ -8401,6 +8402,7 @@ noscript { .antenna-setting { margin: 8px 16px 32px; + overflow: auto; h2 { font-size: 20px; @@ -11060,6 +11062,7 @@ noscript { gap: 8px; .logo { + width: 16px; height: 16px; color: $darker-text-color; } @@ -11261,21 +11264,17 @@ noscript { color: $darker-text-color; -webkit-line-clamp: 4; -webkit-box-orient: vertical; - max-height: 4 * 22px; + max-height: none; overflow: hidden; - p { - display: none; - - &:first-child { - display: initial; - } - } - p, a { color: inherit; } + + p { + margin-bottom: 8px; + } } .reply-indicator__attachments { @@ -11570,19 +11569,21 @@ noscript { } .content-warning { + display: block; box-sizing: border-box; background: rgba($ui-highlight-color, 0.05); color: $secondary-text-color; - border-top: 1px solid; - border-bottom: 1px solid; - border-color: rgba($ui-highlight-color, 0.15); + border: 1px solid rgba($ui-highlight-color, 0.15); + border-radius: 8px; padding: 8px (5px + 8px); position: relative; font-size: 15px; line-height: 22px; + cursor: pointer; p { margin-bottom: 8px; + font-weight: 500; } .link-button { @@ -11591,32 +11592,17 @@ noscript { font-weight: 500; } - &::before, - &::after { - content: ''; - display: block; - position: absolute; - height: 100%; - background: url('../images/warning-stripes.svg') repeat-y; - width: 5px; - top: 0; - } + &--filter { + color: $darker-text-color; - &::before { - border-start-start-radius: 4px; - border-end-start-radius: 4px; - inset-inline-start: 0; - } + p { + font-weight: normal; + } - &::after { - border-start-end-radius: 4px; - border-end-end-radius: 4px; - inset-inline-end: 0; - } - - &--filter::before, - &--filter::after { - background-image: url('../images/filter-stripes.svg'); + .filter-name { + font-weight: 500; + color: $secondary-text-color; + } } &--compacted-status::before { diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 3a2c98a62d..b58e015872 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -23,6 +23,8 @@ code { position: relative; overflow: hidden; height: 160px; + max-width: 566px; + margin-inline: auto; &::after { content: ''; @@ -678,6 +680,10 @@ code { } } } + + .status-card { + contain: unset; + } } .block-icon { diff --git a/app/javascript/styles/mastodon/rtl.scss b/app/javascript/styles/mastodon/rtl.scss index e4e299ff82..0a05ce7c62 100644 --- a/app/javascript/styles/mastodon/rtl.scss +++ b/app/javascript/styles/mastodon/rtl.scss @@ -35,6 +35,10 @@ body.rtl { direction: rtl; } + .column-back-button__icon { + transform: scale(-1, 1); + } + .simple_form select { background: $ui-base-color url("data:image/svg+xml;utf8,") diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index f08b1eb250..cab96e1ac3 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -137,6 +137,7 @@ a.table-action-link { padding: 0 10px; color: $darker-text-color; font-weight: 500; + white-space: nowrap; &:hover { color: $highlight-text-color; diff --git a/app/javascript/styles/mastodon/widgets.scss b/app/javascript/styles/mastodon/widgets.scss index d810ee4bfc..f467069052 100644 --- a/app/javascript/styles/mastodon/widgets.scss +++ b/app/javascript/styles/mastodon/widgets.scss @@ -84,6 +84,7 @@ width: 100%; .account { + max-width: calc(56px + 30ch); padding: 0; border: 0; } diff --git a/app/lib/account_reach_finder.rb b/app/lib/account_reach_finder.rb index 481e254396..4bf5c229a5 100644 --- a/app/lib/account_reach_finder.rb +++ b/app/lib/account_reach_finder.rb @@ -1,12 +1,16 @@ # frozen_string_literal: true class AccountReachFinder + RECENT_LIMIT = 2_000 + STATUS_LIMIT = 200 + STATUS_SINCE = 2.days + def initialize(account) @account = account end def inboxes - (followers_inboxes + reporters_inboxes + recently_mentioned_inboxes + relay_inboxes).uniq + (followers_inboxes + reporters_inboxes + recently_mentioned_inboxes + recently_followed_inboxes + recently_requested_inboxes + relay_inboxes).uniq end private @@ -20,13 +24,46 @@ class AccountReachFinder end def recently_mentioned_inboxes - cutoff_id = Mastodon::Snowflake.id_at(2.days.ago, with_random: false) - recent_statuses = @account.statuses.recent.where(id: cutoff_id...).limit(200) + Account + .joins(:mentions) + .where(mentions: { status: recent_statuses }) + .inboxes + .take(RECENT_LIMIT) + end - Account.joins(:mentions).where(mentions: { status: recent_statuses }).inboxes.take(2000) + def recently_followed_inboxes + @account + .following + .where(follows: { created_at: recent_date_cutoff... }) + .inboxes + .take(RECENT_LIMIT) + end + + def recently_requested_inboxes + Account + .where(id: @account.follow_requests.where({ created_at: recent_date_cutoff... }).select(:target_account_id)) + .inboxes + .take(RECENT_LIMIT) end def relay_inboxes Relay.enabled.pluck(:inbox_url) end + + def oldest_status_id + Mastodon::Snowflake + .id_at(recent_date_cutoff, with_random: false) + end + + def recent_date_cutoff + @account.suspended? && @account.suspension_origin_local? ? @account.suspended_at - STATUS_SINCE : STATUS_SINCE.ago + end + + def recent_statuses + @account + .statuses + .recent + .where(id: oldest_status_id...) + .limit(STATUS_LIMIT) + end end diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb index 1de75e6fc7..56176383e1 100644 --- a/app/lib/activitypub/activity/create.rb +++ b/app/lib/activitypub/activity/create.rb @@ -48,6 +48,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity def process_status @tags = [] @mentions = [] + @unresolved_mentions = [] @silenced_account_ids = [] @params = {} @raw_mention_uris = [] @@ -63,9 +64,11 @@ class ActivityPub::Activity::Create < ActivityPub::Activity ApplicationRecord.transaction do @status = Status.create!(@params) attach_tags(@status) + attach_mentions(@status) end resolve_thread(@status) + resolve_unresolved_mentions(@status) fetch_replies(@status) process_conversation! if @status.limited_visibility? process_references! @@ -225,6 +228,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity # not a big deal Trends.tags.register(status) + # Update featured tags + return if @tags.empty? || !status.distributable? + + @account.featured_tags.where(tag_id: @tags.pluck(:id)).find_each do |featured_tag| + featured_tag.increment(status.created_at) + end + end + + def attach_mentions(status) @mentions.each do |mention| mention.status = status mention.save @@ -266,6 +278,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity return if account.nil? @mentions << Mention.new(account: account, silent: false) + rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + @unresolved_mentions << tag['href'] end def process_emoji(tag) @@ -396,6 +410,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity ThreadResolveWorker.perform_async(status.id, in_reply_to_uri, { 'request_id' => @options[:request_id] }) end + def resolve_unresolved_mentions(status) + @unresolved_mentions.uniq.each do |uri| + MentionResolveWorker.perform_in(rand(30...600).seconds, status.id, uri, { 'request_id' => @options[:request_id] }) + end + end + def fetch_replies(status) collection = @object['replies'] return if collection.blank? diff --git a/app/lib/activitypub/activity/follow.rb b/app/lib/activitypub/activity/follow.rb index 75c88d964e..256d72acb9 100644 --- a/app/lib/activitypub/activity/follow.rb +++ b/app/lib/activitypub/activity/follow.rb @@ -60,19 +60,13 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity already_accepted = friend.accepted? friend.update!(passive_state: :pending, active_state: :idle, passive_follow_activity_id: @json['id']) else - @friend = FriendDomain.new(domain: @account.domain, passive_state: :pending, passive_follow_activity_id: @json['id']) - @friend.inbox_url = @json['inboxUrl'].presence || @friend.default_inbox_url - @friend.save! + @friend = FriendDomain.create!(domain: @account.domain, passive_state: :pending, passive_follow_activity_id: @json['id'], inbox_url: @account.preferred_inbox_url) end - if already_accepted || Setting.unlocked_friend - friend.accept! + friend.accept! if already_accepted || Setting.unlocked_friend - # Notify for admin even if unlocked - notify_staff_about_pending_friend_server! unless already_accepted - else - notify_staff_about_pending_friend_server! - end + # Notify for admin + notify_staff_about_pending_friend_server! unless already_accepted end def friend diff --git a/app/lib/activitypub/parser/media_attachment_parser.rb b/app/lib/activitypub/parser/media_attachment_parser.rb index 56b8b23f84..bcbf92214f 100644 --- a/app/lib/activitypub/parser/media_attachment_parser.rb +++ b/app/lib/activitypub/parser/media_attachment_parser.rb @@ -15,13 +15,15 @@ class ActivityPub::Parser::MediaAttachmentParser end def remote_url - Addressable::URI.parse(@json['url'])&.normalize&.to_s + url = Addressable::URI.parse(@json['url'])&.normalize&.to_s + url unless unsupported_uri_scheme?(url) rescue Addressable::URI::InvalidURIError nil end def thumbnail_remote_url - Addressable::URI.parse(@json['icon'].is_a?(Hash) ? @json['icon']['url'] : @json['icon'])&.normalize&.to_s + url = Addressable::URI.parse(@json['icon'].is_a?(Hash) ? @json['icon']['url'] : @json['icon'])&.normalize&.to_s + url unless unsupported_uri_scheme?(url) rescue Addressable::URI::InvalidURIError nil end diff --git a/app/lib/activitypub/parser/status_parser.rb b/app/lib/activitypub/parser/status_parser.rb index 5867f07d86..0206b1756f 100644 --- a/app/lib/activitypub/parser/status_parser.rb +++ b/app/lib/activitypub/parser/status_parser.rb @@ -30,7 +30,10 @@ class ActivityPub::Parser::StatusParser end def url - url_to_href(@object['url'], 'text/html') if @object['url'].present? + return if @object['url'].blank? + + url = url_to_href(@object['url'], 'text/html') + url unless unsupported_uri_scheme?(url) end def text diff --git a/app/lib/activitypub/tag_manager.rb b/app/lib/activitypub/tag_manager.rb index d773e7e11a..8e23382c6a 100644 --- a/app/lib/activitypub/tag_manager.rb +++ b/app/lib/activitypub/tag_manager.rb @@ -4,6 +4,7 @@ require 'singleton' class ActivityPub::TagManager include Singleton + include JsonLdHelper include RoutingHelper CONTEXT = 'https://www.w3.org/ns/activitystreams' @@ -17,7 +18,7 @@ class ActivityPub::TagManager end def url_for(target) - return target.url if target.respond_to?(:local?) && !target.local? + return unsupported_uri_scheme?(target.url) ? nil : target.url if target.respond_to?(:local?) && !target.local? return unless target.respond_to?(:object_type) diff --git a/app/lib/attachment_batch.rb b/app/lib/attachment_batch.rb index 32ccb0b13c..374abfac49 100644 --- a/app/lib/attachment_batch.rb +++ b/app/lib/attachment_batch.rb @@ -77,10 +77,22 @@ class AttachmentBatch when :fog logger.debug { "Deleting #{attachment.path(style)}" } + retries = 0 begin attachment.send(:directory).files.new(key: attachment.path(style)).destroy - rescue Fog::Storage::OpenStack::NotFound - # Ignore failure to delete a file that has already been deleted + rescue Fog::OpenStack::Storage::NotFound + logger.debug "Will ignore because file is not found #{attachment.path(style)}" + rescue => e + retries += 1 + + if retries < MAX_RETRY + logger.debug "Retry #{retries}/#{MAX_RETRY} after #{e.message}" + sleep 2**retries + retry + else + logger.error "Batch deletion from fog failed after #{e.message}" + raise e + end end when :azure logger.debug { "Deleting #{attachment.path(style)}" } diff --git a/app/lib/content_security_policy.rb b/app/lib/content_security_policy.rb index 0b60b0d98c..c764d1856d 100644 --- a/app/lib/content_security_policy.rb +++ b/app/lib/content_security_policy.rb @@ -36,7 +36,7 @@ class ContentSecurityPolicy end def cdn_host_value - s3_alias_host || s3_cloudfront_host || azure_alias_host || s3_hostname_host + s3_alias_host || s3_cloudfront_host || azure_alias_host || s3_hostname_host || swift_object_url end def paperclip_root_url @@ -72,6 +72,14 @@ class ContentSecurityPolicy host_to_url ENV.fetch('S3_HOSTNAME', nil) end + def swift_object_url + url = ENV.fetch('SWIFT_OBJECT_URL', nil) + return if url.blank? || !url.start_with?('https://') + + url += '/' unless url.end_with?('/') + url + end + def uri_from_configuration_and_string(host_string) Addressable::URI.parse("#{host_protocol}://#{host_string}").tap do |uri| uri.path += '/' unless uri.path.blank? || uri.path.end_with?('/') diff --git a/app/lib/delivery_failure_tracker.rb b/app/lib/delivery_failure_tracker.rb index e17b45d667..96292923f4 100644 --- a/app/lib/delivery_failure_tracker.rb +++ b/app/lib/delivery_failure_tracker.rb @@ -46,6 +46,8 @@ class DeliveryFailureTracker urls.reject do |url| host = Addressable::URI.parse(url).normalized_host unavailable_domains_map[host] + rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError + true end end diff --git a/app/lib/emoji_formatter.rb b/app/lib/emoji_formatter.rb index c0302767ef..1574d4588d 100644 --- a/app/lib/emoji_formatter.rb +++ b/app/lib/emoji_formatter.rb @@ -24,7 +24,15 @@ class EmojiFormatter def to_s return html if custom_emojis.empty? || html.blank? - tree = Nokogiri::HTML5.fragment(html) + begin + tree = Nokogiri::HTML5.fragment(html) + rescue ArgumentError + # This can happen if one of the Nokogumbo limits is encountered + # Unfortunately, it does not use a more precise error class + # nor allows more graceful handling + return '' + end + tree.xpath('./text()|.//text()[not(ancestor[@class="invisible"])]').to_a.each do |node| i = -1 inside_shortname = false diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 4ad166fcd3..1a558cacbe 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -32,24 +32,31 @@ class FeedManager "feed:#{type}:#{id}:#{subtype}" end + # The filter result of the status to a particular feed + # @param [Symbol] timeline_type + # @param [Status] status + # @param [Account|List] receiver + # @return [void|Symbol] nil, :filter, or :skip_home + def filter(timeline_type, status, receiver, stl_home: false) + case timeline_type + when :home + filter_from_home(status, receiver.id, build_crutches(receiver.id, [status]), :home) + when :list + (filter_from_list?(status, receiver) ? :filter : nil) || filter_from_home(status, receiver.account_id, build_crutches(receiver.account_id, [status], list: receiver), :list, stl_home: stl_home) + when :mentions + filter_from_mentions?(status, receiver.id) ? :filter : nil + when :tags + filter_from_tags?(status, receiver.id, build_crutches(receiver.id, [status])) ? :filter : nil + end + end + # Check if the status should not be added to a feed # @param [Symbol] timeline_type # @param [Status] status # @param [Account|List] receiver # @return [Boolean] def filter?(timeline_type, status, receiver, stl_home: false) - case timeline_type - when :home - filter_from_home?(status, receiver.id, build_crutches(receiver.id, [status]), :home) - when :list - filter_from_list?(status, receiver) || filter_from_home?(status, receiver.account_id, build_crutches(receiver.account_id, [status]), :list, stl_home: stl_home) - when :mentions - filter_from_mentions?(status, receiver.id) - when :tags - filter_from_tags?(status, receiver.id, build_crutches(receiver.id, [status])) - else - false - end + !!filter(timeline_type, status, receiver, stl_home: stl_home) end # Add a status to a home feed and send a streaming API update @@ -58,6 +65,7 @@ class FeedManager # @param [Boolean] update # @return [Boolean] def push_to_home(account, status, update: false) + return false unless account.user&.signed_in_recently? return false unless add_to_feed(:home, account.id, status, aggregate_reblogs: account.user&.aggregates_reblogs?, update: update) trim(:home, account.id) @@ -84,6 +92,8 @@ class FeedManager # @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?, update: update) + return false unless list.account.user&.signed_in_recently? + return false unless add_to_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) 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}") @@ -122,9 +132,11 @@ class FeedManager # @param [Account] into_account # @return [void] def merge_into_home(from_account, into_account) + return unless into_account.user&.signed_in_recently? + timeline_key = key(:home, into_account.id) aggregate = into_account.user&.aggregates_reblogs? - query = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) + query = from_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(FeedManager::MAX_ITEMS / 4) if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i @@ -135,7 +147,7 @@ class FeedManager crutches = build_crutches(into_account.id, statuses) statuses.each do |status| - next if filter_from_home?(status, into_account.id, crutches) + next if filter_from_home(status, into_account.id, crutches) add_to_feed(:home, into_account.id, status, aggregate_reblogs: aggregate) end @@ -148,9 +160,11 @@ class FeedManager # @param [List] list # @return [void] def merge_into_list(from_account, list) + return unless list.account.user&.signed_in_recently? + timeline_key = key(:list, list.id) aggregate = list.account.user&.aggregates_reblogs? - query = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4) + query = from_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(FeedManager::MAX_ITEMS / 4) if redis.zcard(timeline_key) >= FeedManager::MAX_ITEMS / 4 oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i @@ -158,10 +172,10 @@ class FeedManager end statuses = query.to_a - crutches = build_crutches(list.account_id, statuses) + crutches = build_crutches(list.account_id, statuses, list: list) statuses.each do |status| - next if filter_from_home?(status, list.account_id, crutches) || filter_from_list?(status, list) + next if filter_from_home(status, list.account_id, crutches, :list) add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate) end @@ -177,7 +191,7 @@ class FeedManager timeline_key = key(:home, into_account.id) timeline_status_ids = redis.zrange(timeline_key, 0, -1) - from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status| + from_account.statuses.select(:id, :reblog_of_id).where(id: timeline_status_ids).reorder(nil).find_each do |status| remove_from_feed(:home, into_account.id, status, aggregate_reblogs: into_account.user&.aggregates_reblogs?) end end @@ -190,7 +204,7 @@ class FeedManager timeline_key = key(:list, list.id) timeline_status_ids = redis.zrange(timeline_key, 0, -1) - from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status| + from_account.statuses.select(:id, :reblog_of_id).where(id: timeline_status_ids).reorder(nil).find_each do |status| remove_from_feed(:list, list.id, status, aggregate_reblogs: list.account.user&.aggregates_reblogs?) end end @@ -211,7 +225,7 @@ class FeedManager .where.not(account: into_account.following) .tagged_with_none(TagFollow.where(account: into_account).pluck(:tag_id)) - scope.select('id, reblog_of_id').reorder(nil).find_each do |status| + scope.select(:id, :reblog_of_id).reorder(nil).find_each do |status| remove_from_feed(:home, into_account.id, status, aggregate_reblogs: into_account.user&.aggregates_reblogs?) end end @@ -295,27 +309,36 @@ class FeedManager limit = FeedManager::MAX_ITEMS / 2 aggregate = account.user&.aggregates_reblogs? timeline_key = key(:home, account.id) + over_limit = false account.statuses.limit(limit).each do |status| add_to_feed(:home, account.id, status, aggregate_reblogs: aggregate) end account.following.includes(:account_stat).reorder(nil).find_each do |target_account| - if redis.zcard(timeline_key) >= limit + query = target_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(limit) + + over_limit ||= redis.zcard(timeline_key) >= limit + if over_limit oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i - last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at) + last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at, with_random: false) # If the feed is full and this account has not posted more recently # than the last item on the feed, then we can skip the whole account # because none of its statuses would stay on the feed anyway next if last_status_score < oldest_home_score + + # No need to get older statuses + query = query.where(id: oldest_home_score...) end - statuses = target_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, :account, reblog: :account).limit(limit) + statuses = query.to_a + next if statuses.empty? + crutches = build_crutches(account.id, statuses) statuses.each do |status| - next if filter_from_home?(status, account.id, crutches) + next if filter_from_home(status, account.id, crutches) add_to_feed(:home, account.id, status, aggregate_reblogs: aggregate) end @@ -324,6 +347,47 @@ class FeedManager end end + # Populate list feed of account from scratch + # @param [List] list + # @return [void] + def populate_list(list) + limit = FeedManager::MAX_ITEMS / 2 + aggregate = list.account.user&.aggregates_reblogs? + timeline_key = key(:list, list.id) + over_limit = false + + list.active_accounts.includes(:account_stat).reorder(nil).find_each do |target_account| + query = target_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(limit) + + over_limit ||= redis.zcard(timeline_key) >= limit + if over_limit + oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i + last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at, with_random: false) + + # If the feed is full and this account has not posted more recently + # than the last item on the feed, then we can skip the whole account + # because none of its statuses would stay on the feed anyway + next if last_status_score < oldest_home_score + + # No need to get older statuses + query = query.where(id: oldest_home_score...) + end + + statuses = query.to_a + next if statuses.empty? + + crutches = build_crutches(list.account_id, statuses, list: list) + + statuses.each do |status| + next if filter_from_home(status, list.account_id, crutches, :list) + + add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate) + end + + trim(:list, list.id) + end + end + # Completely clear multiple feeds at once # @param [Symbol] type # @param [Array] ids @@ -408,12 +472,12 @@ class FeedManager # @param [Status] status # @param [Integer] receiver_id # @param [Hash] crutches - # @return [Boolean] - def filter_from_home?(status, receiver_id, crutches, timeline_type = :home, stl_home: false) # rubocop:disable Metrics/PerceivedComplexity, Metrics/AbcSize - return false if receiver_id == status.account_id - return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?) && !(timeline_type == :home && status.limited_visibility?) - return true if (timeline_type != :list || stl_home) && (crutches[:exclusive_list_users][status.account_id].present? || crutches[:exclusive_antenna_users][status.account_id].present?) - return true if crutches[:languages][status.account_id].present? && status.language.present? && !crutches[:languages][status.account_id].include?(status.language) + # @return [void|Symbol] nil, :skip_home, or :filter + def filter_from_home(status, receiver_id, crutches, timeline_type = :home, stl_home: false) # rubocop:disable Metrics/PerceivedComplexity, Metrics/AbcSize + return if receiver_id == status.account_id + return :filter if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?) && !(timeline_type == :home && status.limited_visibility?) + return :skip_home if (timeline_type != :list || stl_home) && (crutches[:exclusive_list_users][status.account_id].present? || crutches[:exclusive_antenna_users][status.account_id].present?) + return :filter if crutches[:languages][status.account_id].present? && status.language.present? && !crutches[:languages][status.account_id].include?(status.language) check_for_blocks = crutches[:active_mentions][status.id] || [] check_for_blocks.push(status.account_id) @@ -423,25 +487,23 @@ class FeedManager check_for_blocks.concat(crutches[:active_mentions][status.reblog_of_id] || []) end - return true if check_for_blocks.any? { |target_account_id| crutches[:blocking][target_account_id] || crutches[:muting][target_account_id] } - return true if crutches[:blocked_by][status.account_id] + return :filter if check_for_blocks.any? { |target_account_id| crutches[:blocking][target_account_id] || crutches[:muting][target_account_id] } + return :filter if crutches[:blocked_by][status.account_id] - if status.reply? && (!status.in_reply_to_account_id.nil? || (status.thread.present? && status.limited_visibility?)) # Filter out if it's a reply + if status.reply? && (!status.in_reply_to_account_id.nil? || (status.thread.present? && status.limited_visibility?)) # Filter out if it's a reply account_id = status.in_reply_to_account_id || status.thread.account_id - should_filter = !crutches[:following][account_id] # and I'm not following the person it's a reply to - should_filter &&= receiver_id != account_id # and it's not a reply to me - should_filter &&= status.account_id != account_id # and it's not a self-reply - - return !!should_filter + should_filter = !crutches[:following][account_id] # and I'm not following the person it's a reply to + should_filter &&= receiver_id != account_id # and it's not a reply to me + should_filter &&= status.account_id != account_id # and it's not a self-reply elsif status.reblog? # Filter out a reblog should_filter = crutches[:hiding_reblogs][status.account_id] # if the reblogger's reblogs are suppressed should_filter ||= crutches[:blocked_by][status.reblog.account_id] # or if the author of the reblogged status is blocking me should_filter ||= crutches[:domain_blocking][status.reblog.account.domain] # or the author's domain is blocked - - return !!should_filter + else + should_filter = false end - false + should_filter ? :filter : nil end # Check if status should not be added to the mentions feed @@ -588,8 +650,9 @@ class FeedManager # are going to be checked by the filtering methods # @param [Integer] receiver_id # @param [Array] statuses + # @param [List] list # @return [Hash] - def build_crutches(receiver_id, statuses) # rubocop:disable Metrics/AbcSize + def build_crutches(receiver_id, statuses, list: nil) crutches = {} crutches[:active_mentions] = crutches_active_mentions(statuses) @@ -606,25 +669,43 @@ class FeedManager arr end - lists = List.where(account_id: receiver_id, exclusive: true) - antennas = Antenna.where(list: lists, insert_feeds: true) - - replied_accounts = statuses.filter_map(&:in_reply_to_account_id) - replied_accounts += statuses.filter { |status| status.limited_visibility? && status.thread.present? }.map { |status| status.thread.account_id } - - crutches[:following] = Follow.where(account_id: receiver_id, target_account_id: replied_accounts).pluck(:target_account_id).index_with(true) + crutches[:following] = crutches_following(receiver_id, statuses, list) crutches[:languages] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:account_id)).pluck(:target_account_id, :languages).to_h crutches[:hiding_reblogs] = Follow.where(account_id: receiver_id, target_account_id: statuses.filter_map { |s| s.account_id if s.reblog? }, show_reblogs: false).pluck(:target_account_id).index_with(true) crutches[:blocking] = Block.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true) crutches[:muting] = Mute.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true) crutches[:domain_blocking] = AccountDomainBlock.where(account_id: receiver_id, domain: statuses.flat_map { |s| [s.account.domain, s.reblog&.account&.domain] }.compact).pluck(:domain).index_with(true) crutches[:blocked_by] = Block.where(target_account_id: receiver_id, account_id: statuses.map { |s| [s.account_id, s.reblog&.account_id] }.flatten.compact).pluck(:account_id).index_with(true) - crutches[:exclusive_list_users] = ListAccount.where(list: lists, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true) - crutches[:exclusive_antenna_users] = AntennaAccount.where(antenna: antennas, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true) + crutches[:exclusive_list_users] = crutches_exclusive_list_users(receiver_id, statuses) if list.blank? + crutches[:exclusive_antenna_users] = crutches_exclusive_antenna_users(receiver_id, statuses) crutches end + def crutches_exclusive_list_users(recipient_id, statuses) + lists = List.where(account_id: recipient_id, exclusive: true) + ListAccount.where(list: lists, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true) + end + + def crutches_exclusive_antenna_users(recipient_id, statuses) + lists = List.where(account_id: recipient_id, exclusive: true) + antennas = Antenna.where(list: lists, insert_feeds: true) + AntennaAccount.where(antenna: antennas, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true) + end + + def crutches_following(recipient_id, statuses, list) + if list.blank? || list.show_followed? + replied_accounts = statuses.filter_map(&:in_reply_to_account_id) + replied_accounts += statuses.filter { |status| status.limited_visibility? && status.thread.present? }.map { |status| status.thread.account_id } + + Follow.where(account_id: recipient_id, target_account_id: replied_accounts).pluck(:target_account_id).index_with(true) + elsif list.show_list? + ListAccount.where(list_id: list.id, account_id: statuses.filter_map(&:in_reply_to_account_id)).pluck(:account_id).index_with(true) + else + {} + end + end + def crutches_active_mentions(statuses) Mention .active diff --git a/app/lib/http_signature_draft.rb b/app/lib/http_signature_draft.rb new file mode 100644 index 0000000000..cb794b223a --- /dev/null +++ b/app/lib/http_signature_draft.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +# This implements an older draft of HTTP Signatures: +# https://datatracker.ietf.org/doc/html/draft-cavage-http-signatures + +class HttpSignatureDraft + REQUEST_TARGET = '(request-target)' + + def initialize(keypair, key_id) + @keypair = keypair + @key_id = key_id + end + + def request_target(verb, url) + if url.query.nil? + "#{verb} #{url.path}" + else + "#{verb} #{url.path}?#{url.query}" + end + end + + def sign(signed_headers, verb, url) + signed_headers = signed_headers.merge(REQUEST_TARGET => request_target(verb, url)) + signed_string = signed_headers.map { |key, value| "#{key.downcase}: #{value}" }.join("\n") + algorithm = 'rsa-sha256' + signature = Base64.strict_encode64(@keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string)) + + "keyId=\"#{@key_id}\",algorithm=\"#{algorithm}\",headers=\"#{signed_headers.keys.join(' ').downcase}\",signature=\"#{signature}\"" + end +end diff --git a/app/lib/plain_text_formatter.rb b/app/lib/plain_text_formatter.rb index f960ba7acc..e8ff79806f 100644 --- a/app/lib/plain_text_formatter.rb +++ b/app/lib/plain_text_formatter.rb @@ -16,7 +16,15 @@ class PlainTextFormatter if local? text else - node = Nokogiri::HTML5.fragment(insert_newlines) + begin + node = Nokogiri::HTML5.fragment(insert_newlines) + rescue ArgumentError + # This can happen if one of the Nokogumbo limits is encountered + # Unfortunately, it does not use a more precise error class + # nor allows more graceful handling + return '' + end + # Elements that are entirely removed with our Sanitize config node.xpath('.//iframe|.//math|.//noembed|.//noframes|.//noscript|.//plaintext|.//script|.//style|.//svg|.//xmp').remove node.text.chomp diff --git a/app/lib/request.rb b/app/lib/request.rb index d7da9fe63c..10a3680484 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -61,8 +61,6 @@ class PerOperationWithDeadline < HTTP::Timeout::PerOperation end class Request - REQUEST_TARGET = '(request-target)' - # We enforce a 5s timeout on DNS resolving, 5s timeout on socket opening # and 5s timeout on the TLS handshake, meaning the worst case should take # about 15s in total @@ -77,12 +75,21 @@ class Request @url = Addressable::URI.parse(url).normalize @http_client = options.delete(:http_client) @allow_local = options.delete(:allow_local) - @full_path = !options.delete(:omit_query_string) - @options = options.merge(socket_class: use_proxy? || @allow_local ? ProxySocket : Socket) - @options = @options.merge(timeout_class: PerOperationWithDeadline, timeout_options: TIMEOUT) + @options = { + follow: { + max_hops: 3, + on_redirect: ->(response, request) { re_sign_on_redirect(response, request) }, + }, + }.merge(options).merge( + socket_class: use_proxy? || @allow_local ? ProxySocket : Socket, + timeout_class: PerOperationWithDeadline, + timeout_options: TIMEOUT + ) @options = @options.merge(proxy_url) if use_proxy? @headers = {} + @signing = nil + raise Mastodon::HostValidationError, 'Instance does not support hidden service connections' if block_hidden_service? set_common_headers! @@ -92,8 +99,9 @@ class Request def on_behalf_of(actor, sign_with: nil) raise ArgumentError, 'actor must not be nil' if actor.nil? - @actor = actor - @keypair = sign_with.present? ? OpenSSL::PKey::RSA.new(sign_with) : @actor.keypair + key_id = ActivityPub::TagManager.instance.key_uri_for(actor) + keypair = sign_with.present? ? OpenSSL::PKey::RSA.new(sign_with) : actor.keypair + @signing = HttpSignatureDraft.new(keypair, key_id) self end @@ -125,7 +133,7 @@ class Request end def headers - (@actor ? @headers.merge('Signature' => signature) : @headers).without(REQUEST_TARGET) + (@signing ? @headers.merge('Signature' => signature) : @headers) end class << self @@ -140,14 +148,13 @@ class Request end def http_client - HTTP.use(:auto_inflate).follow(max_hops: 3) + HTTP.use(:auto_inflate) end end private def set_common_headers! - @headers[REQUEST_TARGET] = request_target @headers['User-Agent'] = Mastodon::Version.user_agent @headers['Host'] = @url.host @headers['Date'] = Time.now.utc.httpdate @@ -158,31 +165,28 @@ class Request @headers['Digest'] = "SHA-256=#{Digest::SHA256.base64digest(@options[:body])}" end - def request_target - if @url.query.nil? || !@full_path - "#{@verb} #{@url.path}" - else - "#{@verb} #{@url.path}?#{@url.query}" - end - end - def signature - algorithm = 'rsa-sha256' - signature = Base64.strict_encode64(@keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string)) - - "keyId=\"#{key_id}\",algorithm=\"#{algorithm}\",headers=\"#{signed_headers.keys.join(' ').downcase}\",signature=\"#{signature}\"" + @signing.sign(@headers.without('User-Agent', 'Accept-Encoding'), @verb, @url) end - def signed_string - signed_headers.map { |key, value| "#{key.downcase}: #{value}" }.join("\n") - end + def re_sign_on_redirect(_response, request) + # Delete existing signature if there is one, since it will be invalid + request.headers.delete('Signature') - def signed_headers - @headers.without('User-Agent', 'Accept-Encoding') - end + return unless @signing.present? && @verb == :get - def key_id - ActivityPub::TagManager.instance.key_uri_for(@actor) + signed_headers = request.headers.to_h.slice(*@headers.keys) + unless @headers.keys.all? { |key| signed_headers.key?(key) } + # We have lost some headers in the process, so don't sign the new + # request, in order to avoid issuing a valid signature with fewer + # conditions than expected. + + Rails.logger.warn { "Some headers (#{@headers.keys - signed_headers.keys}) have been lost on redirect from {@uri} to #{request.uri}, this should not happen. Skipping signatures" } + return + end + + signature_value = @signing.sign(signed_headers.without('User-Agent', 'Accept-Encoding'), @verb, Addressable::URI.parse(request.uri)) + request.headers['Signature'] = signature_value end def http_client diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb index e6e4033c24..39a702e913 100644 --- a/app/lib/search_query_transformer.rb +++ b/app/lib/search_query_transformer.rb @@ -282,6 +282,8 @@ class SearchQueryTransformer < Parslet::Transform end class PrefixClause + EPOCH_RE = /\A\d+\z/ + attr_reader :operator, :prefix, :term def initialize(prefix, operator, term, options = {}) # rubocop:disable Metrics/CyclomaticComplexity @@ -311,15 +313,15 @@ class SearchQueryTransformer < Parslet::Transform when 'before' @filter = :created_at @type = :range - @term = { lt: TermValidator.validate_date!(term), time_zone: @options[:current_account]&.user_time_zone.presence || 'UTC' } + @term = { lt: date_from_term(term), time_zone: @options[:current_account]&.user_time_zone.presence || 'UTC' } when 'after' @filter = :created_at @type = :range - @term = { gt: TermValidator.validate_date!(term), time_zone: @options[:current_account]&.user_time_zone.presence || 'UTC' } + @term = { gt: date_from_term(term), time_zone: @options[:current_account]&.user_time_zone.presence || 'UTC' } when 'during' @filter = :created_at @type = :range - @term = { gte: TermValidator.validate_date!(term), lte: TermValidator.validate_date!(term), time_zone: @options[:current_account]&.user_time_zone.presence || 'UTC' } + @term = { gte: date_from_term(term), lte: date_from_term(term), time_zone: @options[:current_account]&.user_time_zone.presence || 'UTC' } when 'in' @operator = :flag @term = term @@ -409,16 +411,10 @@ class SearchQueryTransformer < Parslet::Transform term end - end - class TermValidator - STRICT_DATE_REGEX = /\A\d{4}-\d{2}-\d{2}\z/ # yyyy-MM-dd - EPOCH_MILLIS_REGEX = /\A\d{1,19}\z/ - - def self.validate_date!(value) - return value if value.match?(STRICT_DATE_REGEX) || value.match?(EPOCH_MILLIS_REGEX) - - raise Mastodon::FilterValidationError, "Invalid date #{value}" + def date_from_term(term) + DateTime.iso8601(term) unless term.match?(EPOCH_RE) # This will raise Date::Error if the date is invalid + term end end diff --git a/app/lib/vacuum/imports_vacuum.rb b/app/lib/vacuum/imports_vacuum.rb index 700bd81847..b67865194f 100644 --- a/app/lib/vacuum/imports_vacuum.rb +++ b/app/lib/vacuum/imports_vacuum.rb @@ -9,10 +9,10 @@ class Vacuum::ImportsVacuum private def clean_unconfirmed_imports! - BulkImport.state_unconfirmed.where(created_at: ..10.minutes.ago).reorder(nil).in_batches.delete_all + BulkImport.state_unconfirmed.where(created_at: ..10.minutes.ago).in_batches.delete_all end def clean_old_imports! - BulkImport.where(created_at: ..1.week.ago).reorder(nil).in_batches.delete_all + BulkImport.where(created_at: ..1.week.ago).in_batches.delete_all end end diff --git a/app/lib/web_push_request.rb b/app/lib/web_push_request.rb new file mode 100644 index 0000000000..a43e22480e --- /dev/null +++ b/app/lib/web_push_request.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +class WebPushRequest + SIGNATURE_ALGORITHM = 'p256ecdsa' + AUTH_HEADER = 'WebPush' + PAYLOAD_EXPIRATION = 24.hours + JWT_ALGORITHM = 'ES256' + JWT_TYPE = 'JWT' + + attr_reader :web_push_subscription + + delegate( + :endpoint, + :key_auth, + :key_p256dh, + to: :web_push_subscription + ) + + def initialize(web_push_subscription) + @web_push_subscription = web_push_subscription + end + + def audience + @audience ||= Addressable::URI.parse(endpoint).normalized_site + end + + def authorization_header + [AUTH_HEADER, encoded_json_web_token].join(' ') + end + + def crypto_key_header + [SIGNATURE_ALGORITHM, vapid_key.public_key_for_push_header].join('=') + end + + def encrypt(payload) + Webpush::Encryption.encrypt(payload, key_p256dh, key_auth) + end + + private + + def encoded_json_web_token + JWT.encode( + web_token_payload, + vapid_key.curve, + JWT_ALGORITHM, + typ: JWT_TYPE + ) + end + + def web_token_payload + { + aud: audience, + exp: PAYLOAD_EXPIRATION.from_now.to_i, + sub: payload_subject, + } + end + + def payload_subject + [:mailto, contact_email].join(':') + end + + def vapid_key + @vapid_key ||= Webpush::VapidKey.from_keys( + Rails.configuration.x.vapid_public_key, + Rails.configuration.x.vapid_private_key + ) + end + + def contact_email + @contact_email ||= ::Setting.site_contact_email + end +end diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 4c374f5d57..a20992dcb5 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -86,7 +86,7 @@ class NotificationMailer < ApplicationMailer end def thread_by_conversation! - return if @status.conversation.nil? + return if @status&.conversation.nil? conversation_message_id = "" diff --git a/app/models/account.rb b/app/models/account.rb index bc1d311852..3dd5642100 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -95,6 +95,7 @@ class Account < ApplicationRecord include Account::StatusesSearch include Account::OtherSettings include Account::MasterSettings + include Account::Suspensions include Account::AttributionDomains include DomainMaterializable include DomainNormalizable @@ -134,10 +135,8 @@ class Account < ApplicationRecord scope :local, -> { where(domain: nil) } scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } scope :silenced, -> { where.not(silenced_at: nil) } - scope :suspended, -> { where.not(suspended_at: nil) } scope :remote_pending, -> { where(remote_pending: true).where.not(suspended_at: nil) } scope :sensitized, -> { where.not(sensitized_at: nil) } - scope :without_suspended, -> { where(suspended_at: nil) } scope :without_silenced, -> { where(silenced_at: nil) } scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) } scope :recent, -> { reorder(id: :desc) } @@ -158,7 +157,7 @@ class Account < ApplicationRecord scope :not_excluded_by_account, ->(account) { where.not(id: account.excluded_from_timeline_account_ids) } scope :not_domain_blocked_by_account, ->(account) { where(arel_table[:domain].eq(nil).or(arel_table[:domain].not_in(account.excluded_from_timeline_domains))) } scope :dormant, -> { joins(:account_stat).merge(AccountStat.without_recent_activity) } - scope :with_username, ->(value) { where arel_table[:username].lower.eq(value.to_s.downcase) } + scope :with_username, ->(value) { value.is_a?(Array) ? where(arel_table[:username].lower.in(value.map { |x| x.to_s.downcase })) : where(arel_table[:username].lower.eq(value.to_s.downcase)) } scope :with_domain, ->(value) { where arel_table[:domain].lower.eq(value&.to_s&.downcase) } scope :without_memorial, -> { where(memorial: false) } scope :duplicate_uris, -> { select(:uri, Arel.star.count).group(:uri).having(Arel.star.count.gt(1)) } @@ -283,41 +282,6 @@ class Account < ApplicationRecord update!(silenced_at: nil) end - def suspended? - suspended_at.present? && !instance_actor? - end - - def suspended_locally? - suspended? && suspension_origin_local? - end - - def suspended_permanently? - suspended? && deletion_request.nil? - end - - def suspended_temporarily? - suspended? && deletion_request.present? - end - - alias unavailable? suspended? - alias permanently_unavailable? suspended_permanently? - - def suspend!(date: Time.now.utc, origin: :local, block_email: true) - transaction do - create_deletion_request! - update!(suspended_at: date, suspension_origin: origin) - create_canonical_email_block! if block_email - end - end - - def unsuspend! - transaction do - deletion_request&.destroy! - update!(suspended_at: nil, suspension_origin: nil) - destroy_canonical_email_block! - end - end - def approve_remote! return unless remote_pending diff --git a/app/models/account/field.rb b/app/models/account/field.rb index bcd89015de..4b3ccea9c4 100644 --- a/app/models/account/field.rb +++ b/app/models/account/field.rb @@ -73,7 +73,14 @@ class Account::Field < ActiveModelSerializers::Model end def extract_url_from_html - doc = Nokogiri::HTML5.fragment(value) + begin + doc = Nokogiri::HTML5.fragment(value) + rescue ArgumentError + # This can happen if one of the Nokogumbo limits is encountered + # Unfortunately, it does not use a more precise error class + # nor allows more graceful handling + return + end return if doc.nil? return if doc.children.size != 1 diff --git a/app/models/account_filter.rb b/app/models/account_filter.rb index 5edaa2e5b8..763ed3e46f 100644 --- a/app/models/account_filter.rb +++ b/app/models/account_filter.rb @@ -21,7 +21,7 @@ class AccountFilter end def results - scope = Account.includes(:account_stat, user: [:ips, :invite_request]).without_instance_actor.reorder(nil) + scope = Account.includes(:account_stat, user: [:ips, :invite_request]).without_instance_actor relevant_params.each do |key, value| next if key.to_s == 'page' diff --git a/app/models/admin/ng_rule.rb b/app/models/admin/ng_rule.rb index 54ca39b4c9..3f25d8896e 100644 --- a/app/models/admin/ng_rule.rb +++ b/app/models/admin/ng_rule.rb @@ -62,9 +62,11 @@ class Admin::NgRule return false if @ng_rule.reaction_allow_follower && (recipient.id == @account.id || (!recipient.local? && !@account.local?) || recipient.following?(@account)) if @options[:reaction_type] == 'emoji_reaction' - enum_match?(:reaction_type, @options[:reaction_type], @ng_rule.reaction_type) && - text_match?(:emoji_reaction_name, @options[:emoji_reaction_name], @ng_rule.emoji_reaction_name) && - text_match?(:emoji_reaction_origin_domain, @options[:emoji_reaction_origin_domain], @ng_rule.emoji_reaction_origin_domain) + result = enum_match?(:reaction_type, @options[:reaction_type], @ng_rule.reaction_type) && + text_match?(:emoji_reaction_name, @options[:emoji_reaction_name], @ng_rule.emoji_reaction_name) + + emoji_reaction_origin_domain = @options[:emoji_reaction_origin_domain] || Rails.configuration.x.local_domain + result && text_match?(:emoji_reaction_origin_domain, emoji_reaction_origin_domain, @ng_rule.emoji_reaction_origin_domain) else enum_match?(:reaction_type, @options[:reaction_type], @ng_rule.reaction_type) end diff --git a/app/models/admin/tag_filter.rb b/app/models/admin/tag_filter.rb index 6149c52175..5e75757b23 100644 --- a/app/models/admin/tag_filter.rb +++ b/app/models/admin/tag_filter.rb @@ -14,7 +14,7 @@ class Admin::TagFilter end def results - scope = Tag.reorder(nil) + scope = Tag.all params.each do |key, value| next if key == :page diff --git a/app/models/concerns/account/associations.rb b/app/models/concerns/account/associations.rb index 3040da01de..ec8766f709 100644 --- a/app/models/concerns/account/associations.rb +++ b/app/models/concerns/account/associations.rb @@ -19,6 +19,7 @@ module Account::Associations has_many :conversations, class_name: 'AccountConversation', dependent: :destroy, inverse_of: :account has_many :scheduled_statuses, inverse_of: :account, dependent: :destroy has_many :scheduled_expiration_statuses, inverse_of: :account, dependent: :destroy + has_many :ng_rule_histories, inverse_of: :account, dependent: :destroy # Notifications has_many :notifications, inverse_of: :account, dependent: :destroy diff --git a/app/models/concerns/account/avatar.rb b/app/models/concerns/account/avatar.rb index 39f599db18..5ca8fa862f 100644 --- a/app/models/concerns/account/avatar.rb +++ b/app/models/concerns/account/avatar.rb @@ -6,10 +6,13 @@ module Account::Avatar IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze LIMIT = 2.megabytes + AVATAR_DIMENSIONS = [400, 400].freeze + AVATAR_GEOMETRY = [AVATAR_DIMENSIONS.first, AVATAR_DIMENSIONS.last].join('x') + class_methods do def avatar_styles(file) - styles = { original: { geometry: '400x400#', file_geometry_parser: FastGeometryParser } } - styles[:static] = { geometry: '400x400#', format: 'png', convert_options: '-coalesce', file_geometry_parser: FastGeometryParser } if file.content_type == 'image/gif' + styles = { original: { geometry: "#{AVATAR_GEOMETRY}#", file_geometry_parser: FastGeometryParser } } + styles[:static] = { geometry: "#{AVATAR_GEOMETRY}#", format: 'png', convert_options: '-coalesce', file_geometry_parser: FastGeometryParser } if file.content_type == 'image/gif' styles end diff --git a/app/models/concerns/account/header.rb b/app/models/concerns/account/header.rb index 44ae774e94..2a47097fcf 100644 --- a/app/models/concerns/account/header.rb +++ b/app/models/concerns/account/header.rb @@ -5,7 +5,10 @@ module Account::Header IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].freeze LIMIT = 2.megabytes - MAX_PIXELS = 750_000 # 1500x500px + + HEADER_DIMENSIONS = [1500, 500].freeze + HEADER_GEOMETRY = [HEADER_DIMENSIONS.first, HEADER_DIMENSIONS.last].join('x') + MAX_PIXELS = HEADER_DIMENSIONS.first * HEADER_DIMENSIONS.last class_methods do def header_styles(file) diff --git a/app/models/concerns/account/interactions.rb b/app/models/concerns/account/interactions.rb index 979b2278dc..65224145c3 100644 --- a/app/models/concerns/account/interactions.rb +++ b/app/models/concerns/account/interactions.rb @@ -88,6 +88,9 @@ module Account::Interactions has_many :remote_severed_relationships, foreign_key: 'remote_account_id', inverse_of: :remote_account end + # Hashtag follows + has_many :tag_follows, inverse_of: :account, dependent: :destroy + # Account notes has_many :account_notes, dependent: :destroy diff --git a/app/models/concerns/account/merging.rb b/app/models/concerns/account/merging.rb index bd8b162238..181061c37e 100644 --- a/app/models/concerns/account/merging.rb +++ b/app/models/concerns/account/merging.rb @@ -16,7 +16,7 @@ module Account::Merging Follow, FollowRequest, Block, Mute, AccountModerationNote, AccountPin, AccountStat, ListAccount, PollVote, Mention, AccountDeletionRequest, AccountNote, FollowRecommendationSuppression, - Appeal + Appeal, TagFollow ] owned_classes.each do |klass| diff --git a/app/models/concerns/account/suspensions.rb b/app/models/concerns/account/suspensions.rb new file mode 100644 index 0000000000..c981fb5a29 --- /dev/null +++ b/app/models/concerns/account/suspensions.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module Account::Suspensions + extend ActiveSupport::Concern + + included do + scope :suspended, -> { where.not(suspended_at: nil) } + scope :without_suspended, -> { where(suspended_at: nil) } + end + + def suspended? + suspended_at.present? && !instance_actor? + end + alias unavailable? suspended? + + def suspended_locally? + suspended? && suspension_origin_local? + end + + def suspended_permanently? + suspended? && deletion_request.nil? + end + alias permanently_unavailable? suspended_permanently? + + def suspended_temporarily? + suspended? && deletion_request.present? + end + + def suspend!(date: Time.now.utc, origin: :local, block_email: true) + transaction do + create_deletion_request! + update!(suspended_at: date, suspension_origin: origin) + create_canonical_email_block! if block_email + end + end + + def unsuspend! + transaction do + deletion_request&.destroy! + update!(suspended_at: nil, suspension_origin: nil) + destroy_canonical_email_block! + end + end +end diff --git a/app/models/featured_tag.rb b/app/models/featured_tag.rb index a4e7b7cf6f..dfc700649c 100644 --- a/app/models/featured_tag.rb +++ b/app/models/featured_tag.rb @@ -44,8 +44,16 @@ class FeaturedTag < ApplicationRecord update(statuses_count: statuses_count + 1, last_status_at: timestamp) end - def decrement(deleted_status_id) - update(statuses_count: [0, statuses_count - 1].max, last_status_at: visible_tagged_account_statuses.where.not(id: deleted_status_id).pick(:created_at)) + def decrement(deleted_status) + if statuses_count <= 1 + update(statuses_count: 0, last_status_at: nil) + elsif last_status_at.present? && last_status_at > deleted_status.created_at + update(statuses_count: statuses_count - 1) + else + # Fetching the latest status creation time can be expensive, so only perform it + # if we know we are deleting the latest status using this tag + update(statuses_count: statuses_count - 1, last_status_at: visible_tagged_account_statuses.where(id: ...deleted_status.id).pick(:created_at)) + end end private diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb index 7ac9e6dfb9..0435437a81 100644 --- a/app/models/follow_recommendation.rb +++ b/app/models/follow_recommendation.rb @@ -18,5 +18,6 @@ class FollowRecommendation < ApplicationRecord belongs_to :account_summary, foreign_key: :account_id, inverse_of: false belongs_to :account - scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) } + scope :unsupressed, -> { where.not(FollowRecommendationSuppression.where(FollowRecommendationSuppression.arel_table[:account_id].eq(arel_table[:account_id])).select(1).arel.exists) } + scope :localized, ->(locale) { unsupressed.joins(:account_summary).merge(AccountSummary.localized(locale)) } end diff --git a/app/models/follow_recommendation_filter.rb b/app/models/follow_recommendation_filter.rb index 62a02eba5a..f3b0fd319b 100644 --- a/app/models/follow_recommendation_filter.rb +++ b/app/models/follow_recommendation_filter.rb @@ -11,7 +11,7 @@ class FollowRecommendationFilter attr_reader :params, :language def initialize(params) - @language = params.delete('language') || I18n.locale + @language = usable_language(params.delete('language') || I18n.locale) @params = params end @@ -22,4 +22,15 @@ class FollowRecommendationFilter Account.includes(:account_stat).joins(:follow_recommendation).merge(FollowRecommendation.localized(@language).order(rank: :desc)) end end + + private + + def usable_language(locale) + return locale if Trends.available_locales.include?(locale) + + locale = locale.to_s.split(/[_-]/).first + return locale if Trends.available_locales.include?(locale) + + nil + end end diff --git a/app/models/friend_domain.rb b/app/models/friend_domain.rb index 88ebd9338b..2ca501e21d 100644 --- a/app/models/friend_domain.rb +++ b/app/models/friend_domain.rb @@ -116,6 +116,7 @@ class FriendDomain < ApplicationRecord object: ActivityPub::TagManager::COLLECTIONS[:public], # Cannot use inbox_url method because this model also has inbox_url column + # This is deprecated property. Newer version's kmyblue will ignore it. inboxUrl: "https://#{Rails.configuration.x.web_domain}/inbox", } end diff --git a/app/models/instance_info.rb b/app/models/instance_info.rb index 99878b0aec..7b42c2df7e 100644 --- a/app/models/instance_info.rb +++ b/app/models/instance_info.rb @@ -23,12 +23,16 @@ class InstanceInfo < ApplicationRecord cherrypick fedibird firefish + hollo iceshrimp + Iceshrimp.NET meisskey misskey + mitra pleroma sharkey tanukey + yojo-art ).freeze QUOTE_AVAILABLE_SOFTWARES = EMOJI_REACTION_AVAILABLE_SOFTWARES + %w(bridgy-fed).freeze diff --git a/app/models/link_feed.rb b/app/models/link_feed.rb index 32efb331b6..29ea430cc0 100644 --- a/app/models/link_feed.rb +++ b/app/models/link_feed.rb @@ -19,6 +19,8 @@ class LinkFeed < PublicFeed scope.merge!(discoverable) scope.merge!(attached_to_preview_card) + scope.merge!(account_filters_scope) if account? + scope.merge!(language_scope) if account&.chosen_languages.present? scope.to_a_paginated_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id) end diff --git a/app/models/list.rb b/app/models/list.rb index 82b8b1e100..b87e37452e 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -28,6 +28,7 @@ class List < ApplicationRecord has_many :antennas, inverse_of: :list, dependent: :destroy has_many :list_statuses, inverse_of: :list, dependent: :destroy has_many :statuses, through: :list_statuses + has_many :active_accounts, -> { merge(ListAccount.active) }, through: :list_accounts, source: :account validates :title, presence: true @@ -38,7 +39,7 @@ class List < ApplicationRecord private def validate_account_lists_limit - errors.add(:base, I18n.t('lists.errors.limit')) if account.lists.count >= PER_ACCOUNT_LIMIT + errors.add(:base, I18n.t('lists.errors.limit')) if account.owned_lists.count >= PER_ACCOUNT_LIMIT end def clean_feed_manager diff --git a/app/models/list_account.rb b/app/models/list_account.rb index 2ff8605717..0169319761 100644 --- a/app/models/list_account.rb +++ b/app/models/list_account.rb @@ -20,6 +20,8 @@ class ListAccount < ApplicationRecord validates :account_id, uniqueness: { scope: :list_id } validate :validate_relationship + scope :active, -> { where.not(follow_id: nil) } + before_validation :set_follow, unless: :list_owner_account_is_account? private diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 49ff740884..3eaa978c27 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -425,8 +425,10 @@ class MediaAttachment < ApplicationRecord @paths_to_cache_bust = MediaAttachment.attachment_definitions.keys.flat_map do |attachment_name| attachment = public_send(attachment_name) + next if attachment.blank? + styles = DEFAULT_STYLES | attachment.styles.keys - styles.map { |style| attachment.path(style) } + styles.map { |style| attachment.url(style) } end.compact rescue => e # We really don't want any error here preventing media deletion diff --git a/app/models/notification.rb b/app/models/notification.rb index fe331a1164..cdce34c77b 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -129,6 +129,7 @@ class Notification < ApplicationRecord validates :type, inclusion: { in: TYPES } scope :without_suspended, -> { joins(:from_account).merge(Account.without_suspended) } + scope :by_group_key, ->(group_key) { group_key&.start_with?('ungrouped-') ? where(id: group_key.delete_prefix('ungrouped-')) : where(group_key: group_key) } def type @type ||= (super || LEGACY_TYPE_CLASS_MAP[activity_type]).to_sym diff --git a/app/models/notification_group.rb b/app/models/notification_group.rb index 7ebc87ddbc..74997f66b7 100644 --- a/app/models/notification_group.rb +++ b/app/models/notification_group.rb @@ -88,22 +88,32 @@ class NotificationGroup < ActiveModelSerializers::Model binds = [ account_id, SAMPLE_ACCOUNTS_SIZE, - pagination_range.begin, - pagination_range.end, ActiveRecord::Relation::QueryAttribute.new('group_keys', group_keys, ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Array.new(ActiveModel::Type::String.new)), + pagination_range.begin || 0, ] + binds << pagination_range.end unless pagination_range.end.nil? + + upper_bound_cond = begin + if pagination_range.end.nil? + '' + elsif pagination_range.exclude_end? + 'AND id < $5' + else + 'AND id <= $5' + end + end ActiveRecord::Base.connection.select_all(<<~SQL.squish, 'grouped_notifications', binds).cast_values.to_h { |k, *values| [k, values] } SELECT groups.group_key, - (SELECT id FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key AND id <= $4 ORDER BY id DESC LIMIT 1), - array(SELECT from_account_id FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key AND id <= $4 ORDER BY id DESC LIMIT $2), - (SELECT count(*) FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key AND id <= $4) AS notifications_count, - array(SELECT activity_id FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key AND id <= $4 AND activity_type = 'EmojiReaction'), - (SELECT id FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key AND id >= $3 ORDER BY id ASC LIMIT 1) AS min_id, - (SELECT created_at FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key AND id <= $4 ORDER BY id DESC LIMIT 1) + (SELECT id FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key #{upper_bound_cond} ORDER BY id DESC LIMIT 1), + array(SELECT from_account_id FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key #{upper_bound_cond} ORDER BY id DESC LIMIT $2), + (SELECT count(*) FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key #{upper_bound_cond}) AS notifications_count, + array(SELECT activity_id FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key #{upper_bound_cond} AND activity_type = 'EmojiReaction'), + (SELECT id FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key AND id >= $4 ORDER BY id ASC LIMIT 1) AS min_id, + (SELECT created_at FROM notifications WHERE notifications.account_id = $1 AND notifications.group_key = groups.group_key #{upper_bound_cond} ORDER BY id DESC LIMIT 1) FROM - unnest($5::text[]) AS groups(group_key); + unnest($3::text[]) AS groups(group_key); SQL else binds = [ diff --git a/app/models/notification_policy.rb b/app/models/notification_policy.rb index 3b16f33d88..d22f871a37 100644 --- a/app/models/notification_policy.rb +++ b/app/models/notification_policy.rb @@ -62,6 +62,6 @@ class NotificationPolicy < ApplicationRecord private def pending_notification_requests - @pending_notification_requests ||= notification_requests.limit(MAX_MEANINGFUL_COUNT).pick(Arel.sql('count(*), coalesce(sum(notifications_count), 0)::bigint')) + @pending_notification_requests ||= notification_requests.without_suspended.limit(MAX_MEANINGFUL_COUNT).pick(Arel.sql('count(*), coalesce(sum(notifications_count), 0)::bigint')) end end diff --git a/app/models/notification_request.rb b/app/models/notification_request.rb index f0778b3af3..eb9ff93ab7 100644 --- a/app/models/notification_request.rb +++ b/app/models/notification_request.rb @@ -26,6 +26,8 @@ class NotificationRequest < ApplicationRecord before_save :prepare_notifications_count + scope :without_suspended, -> { joins(:from_account).merge(Account.without_suspended) } + def self.preload_cache_collection(requests) cached_statuses_by_id = yield(requests.filter_map(&:last_status)).index_by(&:id) # Call cache_collection in block diff --git a/app/models/poll.rb b/app/models/poll.rb index cc4184f80a..baa0dbe539 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -37,7 +37,8 @@ class Poll < ApplicationRecord validates :options, presence: true validates :expires_at, presence: true, if: :local? - validates_with PollValidator, on: :create, if: :local? + validates_with PollOptionsValidator, if: :local? + validates_with PollExpirationValidator, if: -> { local? && expires_at_changed? } scope :attached, -> { where.not(status_id: nil) } scope :unattached, -> { where(status_id: nil) } diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index 82b25d4649..bd248a7b7a 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -134,7 +134,7 @@ class PreviewCard < ApplicationRecord end def authors - @authors ||= [PreviewCard::Author.new(self)] + @authors ||= Array(serialized_authors) end class Author < ActiveModelSerializers::Model @@ -169,6 +169,13 @@ class PreviewCard < ApplicationRecord private + def serialized_authors + if author_name? || author_url? || author_account_id? + PreviewCard::Author + .new(self) + end + end + def extract_dimensions file = image.queued_for_write[:original] diff --git a/app/models/remote_follow.rb b/app/models/remote_follow.rb index 10715ac97d..fa0586f57e 100644 --- a/app/models/remote_follow.rb +++ b/app/models/remote_follow.rb @@ -3,7 +3,6 @@ class RemoteFollow include ActiveModel::Validations include RoutingHelper - include WebfingerHelper attr_accessor :acct, :addressable_template @@ -66,7 +65,7 @@ class RemoteFollow end def acct_resource - @acct_resource ||= webfinger!("acct:#{acct}") + @acct_resource ||= Webfinger.new("acct:#{acct}").perform rescue Webfinger::Error, HTTP::ConnectionError nil end diff --git a/app/models/report_filter.rb b/app/models/report_filter.rb index fd0e23cb81..9d2b0fb374 100644 --- a/app/models/report_filter.rb +++ b/app/models/report_filter.rb @@ -18,13 +18,25 @@ class ReportFilter def results scope = Report.unresolved - params.each do |key, value| + relevant_params.each do |key, value| scope = scope.merge scope_for(key, value) end scope end + private + + def relevant_params + params.tap do |args| + args.delete(:target_origin) if origin_is_remote_and_domain_present? + end + end + + def origin_is_remote_and_domain_present? + params[:target_origin] == 'remote' && params[:by_target_domain].present? + end + def scope_for(key, value) case key.to_sym when :by_target_domain diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index d0a77daf0a..8b8e533d30 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -28,6 +28,8 @@ class SessionActivation < ApplicationRecord before_create :assign_access_token + DEFAULT_SCOPES = %w(read write follow).freeze + class << self def active?(id) id && exists?(session_id: id) @@ -64,7 +66,7 @@ class SessionActivation < ApplicationRecord { application_id: Doorkeeper::Application.find_by(superapp: true)&.id, resource_owner_id: user_id, - scopes: 'read write follow', + scopes: DEFAULT_SCOPES.join(' '), expires_in: Doorkeeper.configuration.access_token_expires_in, use_refresh_token: Doorkeeper.configuration.refresh_token_enabled?, } diff --git a/app/models/tag_follow.rb b/app/models/tag_follow.rb index abe36cd171..528616c450 100644 --- a/app/models/tag_follow.rb +++ b/app/models/tag_follow.rb @@ -21,4 +21,6 @@ class TagFollow < ApplicationRecord accepts_nested_attributes_for :tag rate_limit by: :account, family: :follows + + scope :for_local_distribution, -> { joins(account: :user).merge(User.signed_in_recently) } end diff --git a/app/models/trends/statuses.rb b/app/models/trends/statuses.rb index 87261beeb1..67a2d115bc 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.compute_searchability == 'public') && + status.created_at.past? && + (status.searchability.nil? || status.compute_searchability == 'public') && (status.public_visibility? || status.public_unlisted_visibility?) && status.account.discoverable? && !status.account.silenced? && !status.account.sensitized? && status.spoiler_text.blank? && (!status.sensitive? || status.media_attachments.none?) && diff --git a/app/models/user.rb b/app/models/user.rb index ecdb60485a..9e0ca283a2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -74,7 +74,8 @@ class User < ApplicationRecord REACTION_DECK_MAX = 256 devise :two_factor_authenticatable, - otp_secret_encryption_key: Rails.configuration.x.otp_secret + otp_secret_encryption_key: Rails.configuration.x.otp_secret, + otp_secret_length: 32 include LegacyOtpSecret # Must be after the above `devise` line in order to override the legacy method @@ -169,6 +170,10 @@ class User < ApplicationRecord end end + def signed_in_recently? + current_sign_in_at.present? && current_sign_in_at >= ACTIVE_DURATION.ago + end + def confirmed? confirmed_at.present? end diff --git a/app/models/user_role.rb b/app/models/user_role.rb index 16d40d4a79..405050a385 100644 --- a/app/models/user_role.rb +++ b/app/models/user_role.rb @@ -147,6 +147,10 @@ class UserRole < ApplicationRecord other_role.nil? || position > other_role.position end + def bypass_block?(role) + overrides?(role) && highlighted? && can?(*Flags::CATEGORIES[:moderation]) + end + def computed_permissions # If called on the everyone role, no further computation needed return permissions if everyone? diff --git a/app/models/web/push_subscription.rb b/app/models/web/push_subscription.rb index ddfd08146e..9d30881bf3 100644 --- a/app/models/web/push_subscription.rb +++ b/app/models/web/push_subscription.rb @@ -29,26 +29,6 @@ class Web::PushSubscription < ApplicationRecord delegate :locale, to: :associated_user - def encrypt(payload) - Webpush::Encryption.encrypt(payload, key_p256dh, key_auth) - end - - def audience - @audience ||= Addressable::URI.parse(endpoint).normalized_site - end - - def crypto_key_header - p256ecdsa = vapid_key.public_key_for_push_header - - "p256ecdsa=#{p256ecdsa}" - end - - def authorization_header - jwt = JWT.encode({ aud: audience, exp: 24.hours.from_now.to_i, sub: "mailto:#{contact_email}" }, vapid_key.curve, 'ES256', typ: 'JWT') - - "WebPush #{jwt}" - end - def pushable?(notification) policy_allows_notification?(notification) && alert_enabled_for_notification_type?(notification) end @@ -92,14 +72,6 @@ class Web::PushSubscription < ApplicationRecord ) end - def vapid_key - @vapid_key ||= Webpush::VapidKey.from_keys(Rails.configuration.x.vapid_public_key, Rails.configuration.x.vapid_private_key) - end - - def contact_email - @contact_email ||= ::Setting.site_contact_email - end - def alert_enabled_for_notification_type?(notification) truthy?(data&.dig('alerts', notification.type.to_s)) end diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb index 809e3bd303..d778440450 100644 --- a/app/serializers/activitypub/note_serializer.rb +++ b/app/serializers/activitypub/note_serializer.rb @@ -161,16 +161,27 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer object.active_mentions.to_a.sort_by(&:id) + object.tags + object.emojis + virtual_tags_of_quote end + class NoteLink < ActiveModelSerializers::Model + attributes :href + end + + class NoteLinkSerializer < ActivityPub::Serializer + attributes :type, :href + attribute :media_type, key: :mediaType + + def type + 'Link' + end + + def media_type + 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' + end + end + def virtual_tags_of_quote return [] unless object.quote? - [ - { - type: 'Link', - mediaType: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', - href: quote_uri, - }, - ] + [NoteLink.new(href: quote_uri)] end def atom_uri diff --git a/app/serializers/rest/credential_application_serializer.rb b/app/serializers/rest/credential_application_serializer.rb index bfec7d03e8..0532390c9a 100644 --- a/app/serializers/rest/credential_application_serializer.rb +++ b/app/serializers/rest/credential_application_serializer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class REST::CredentialApplicationSerializer < REST::ApplicationSerializer - attributes :client_id, :client_secret + attributes :client_id, :client_secret, :client_secret_expires_at def client_id object.uid @@ -10,4 +10,10 @@ class REST::CredentialApplicationSerializer < REST::ApplicationSerializer def client_secret object.secret end + + # Added for future forwards compatibility when we may decide to expire OAuth + # Applications. Set to zero means that the client_secret never expires. + def client_secret_expires_at + 0 + end end diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb index 81d393ff57..4aee406d4c 100644 --- a/app/serializers/rest/instance_serializer.rb +++ b/app/serializers/rest/instance_serializer.rb @@ -90,10 +90,10 @@ class REST::InstanceSerializer < ActiveModel::Serializer }, polls: { - max_options: PollValidator::MAX_OPTIONS, - max_characters_per_option: PollValidator::MAX_OPTION_CHARS, - min_expiration: PollValidator::MIN_EXPIRATION, - max_expiration: PollValidator::MAX_EXPIRATION, + max_options: PollOptionsValidator::MAX_OPTIONS, + max_characters_per_option: PollOptionsValidator::MAX_OPTION_CHARS, + min_expiration: PollExpirationValidator::MIN_EXPIRATION, + max_expiration: PollExpirationValidator::MAX_EXPIRATION, allow_image: true, }, diff --git a/app/serializers/rest/privacy_policy_serializer.rb b/app/serializers/rest/privacy_policy_serializer.rb index 57a67abf3c..b6cdecefae 100644 --- a/app/serializers/rest/privacy_policy_serializer.rb +++ b/app/serializers/rest/privacy_policy_serializer.rb @@ -8,7 +8,7 @@ class REST::PrivacyPolicySerializer < ActiveModel::Serializer end def content - markdown.render(format(object.text, domain: Rails.configuration.x.local_domain)) + markdown.render(object.text.gsub(/%{domain}/, Rails.configuration.x.local_domain)) end private diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb index 046d9e3548..d8c79d7018 100644 --- a/app/serializers/rest/v1/instance_serializer.rb +++ b/app/serializers/rest/v1/instance_serializer.rb @@ -82,10 +82,10 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer }, polls: { - max_options: PollValidator::MAX_OPTIONS, - max_characters_per_option: PollValidator::MAX_OPTION_CHARS, - min_expiration: PollValidator::MIN_EXPIRATION, - max_expiration: PollValidator::MAX_EXPIRATION, + max_options: PollOptionsValidator::MAX_OPTIONS, + max_characters_per_option: PollOptionsValidator::MAX_OPTION_CHARS, + min_expiration: PollExpirationValidator::MIN_EXPIRATION, + max_expiration: PollExpirationValidator::MAX_EXPIRATION, allow_image: true, }, diff --git a/app/services/activitypub/fetch_remote_actor_service.rb b/app/services/activitypub/fetch_remote_actor_service.rb index 2c372c2ec3..560cf424e1 100644 --- a/app/services/activitypub/fetch_remote_actor_service.rb +++ b/app/services/activitypub/fetch_remote_actor_service.rb @@ -3,7 +3,6 @@ class ActivityPub::FetchRemoteActorService < BaseService include JsonLdHelper include DomainControlHelper - include WebfingerHelper class Error < StandardError; end @@ -45,7 +44,7 @@ class ActivityPub::FetchRemoteActorService < BaseService private def check_webfinger! - webfinger = webfinger!("acct:#{@username}@#{@domain}") + webfinger = Webfinger.new("acct:#{@username}@#{@domain}").perform confirmed_username, confirmed_domain = split_acct(webfinger.subject) if @username.casecmp(confirmed_username).zero? && @domain.casecmp(confirmed_domain).zero? @@ -54,7 +53,7 @@ class ActivityPub::FetchRemoteActorService < BaseService return end - webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") + webfinger = Webfinger.new("acct:#{confirmed_username}@#{confirmed_domain}").perform @username, @domain = split_acct(webfinger.subject) raise Webfinger::RedirectError, "Too many webfinger redirects for URI #{@uri} (stopped at #{@username}@#{@domain})" unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? diff --git a/app/services/activitypub/fetch_replies_service.rb b/app/services/activitypub/fetch_replies_service.rb index 46cab6caf9..0e0ba673be 100644 --- a/app/services/activitypub/fetch_replies_service.rb +++ b/app/services/activitypub/fetch_replies_service.rb @@ -37,20 +37,7 @@ class ActivityPub::FetchRepliesService < BaseService return unless @allow_synchronous_requests return if non_matching_uri_hosts?(@account.uri, collection_or_uri) - # NOTE: For backward compatibility reasons, Mastodon signs outgoing - # queries incorrectly by default. - # - # While this is relevant for all URLs with query strings, this is - # the only code path where this happens in practice. - # - # Therefore, retry with correct signatures if this fails. - begin - fetch_resource_without_id_validation(collection_or_uri, nil, true) - rescue Mastodon::UnexpectedResponseError => e - raise unless e.response && e.response.code == 401 && Addressable::URI.parse(collection_or_uri).query.present? - - fetch_resource_without_id_validation(collection_or_uri, nil, true, request_options: { omit_query_string: false }) - end + fetch_resource_without_id_validation(collection_or_uri, nil, true) end def filtered_replies diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index a7825594bd..c1d54264a6 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -11,6 +11,8 @@ class ActivityPub::ProcessAccountService < BaseService SCAN_SEARCHABILITY_RE = /\[searchability:(public|followers|reactors|private)\]/ SCAN_SEARCHABILITY_FEDIBIRD_RE = /searchable_by_(all_users|followers_only|reacted_users_only|nobody)/ + VALID_URI_SCHEMES = %w(http https).freeze + # Should be called with confirmed valid JSON # and WebFinger-resolved username and domain def call(username, domain, json, options = {}) # rubocop:disable Metrics/PerceivedComplexity @@ -113,16 +115,28 @@ class ActivityPub::ProcessAccountService < BaseService end def set_immediate_protocol_attributes! - @account.inbox_url = @json['inbox'] || '' - @account.outbox_url = @json['outbox'] || '' - @account.shared_inbox_url = (@json['endpoints'].is_a?(Hash) ? @json['endpoints']['sharedInbox'] : @json['sharedInbox']) || '' - @account.followers_url = @json['followers'] || '' + @account.inbox_url = valid_collection_uri(@json['inbox']) + @account.outbox_url = valid_collection_uri(@json['outbox']) + @account.shared_inbox_url = valid_collection_uri(@json['endpoints'].is_a?(Hash) ? @json['endpoints']['sharedInbox'] : @json['sharedInbox']) + @account.followers_url = valid_collection_uri(@json['followers']) @account.url = url || @uri @account.uri = @uri @account.actor_type = actor_type @account.created_at = @json['published'] if @json['published'].present? end + def valid_collection_uri(uri) + uri = uri.first if uri.is_a?(Array) + uri = uri['id'] if uri.is_a?(Hash) + return '' unless uri.is_a?(String) + + parsed_uri = Addressable::URI.parse(uri) + + VALID_URI_SCHEMES.include?(parsed_uri.scheme) && parsed_uri.host.present? ? parsed_uri : '' + rescue Addressable::URI::InvalidURIError + '' + end + def set_immediate_attributes! @account.featured_collection_url = @json['featured'] || '' @account.display_name = @json['name'] || '' @@ -398,10 +412,11 @@ class ActivityPub::ProcessAccountService < BaseService end def collection_info(type) - return [nil, nil] if @json[type].blank? + collection_uri = valid_collection_uri(@json[type]) + return [nil, nil] if collection_uri.blank? return @collections[type] if @collections.key?(type) - collection = fetch_resource_without_id_validation(@json[type]) + collection = fetch_resource_without_id_validation(collection_uri) total_items = collection.is_a?(Hash) && collection['totalItems'].present? && collection['totalItems'].is_a?(Numeric) ? collection['totalItems'] : nil has_first_page = collection.is_a?(Hash) && collection['first'].present? diff --git a/app/services/activitypub/process_collection_service.rb b/app/services/activitypub/process_collection_service.rb index 202a3640ef..e14e840b20 100644 --- a/app/services/activitypub/process_collection_service.rb +++ b/app/services/activitypub/process_collection_service.rb @@ -2,6 +2,7 @@ class ActivityPub::ProcessCollectionService < BaseService include JsonLdHelper + include DomainControlHelper def call(body, actor, **options) @account = actor @@ -29,6 +30,10 @@ class ActivityPub::ProcessCollectionService < BaseService @json.delete('signature') unless safe_for_forwarding?(original_json, @json) end + # any namespaces for general-original activity type + @json['type'] = 'EmojiReact' if original_json['type'] == 'EmojiReact' + @json['type'] = 'EmojiReaction' if original_json['type'] == 'EmojiReaction' + case @json['type'] when 'Collection', 'CollectionPage' process_items @json['items'] @@ -73,6 +78,9 @@ class ActivityPub::ProcessCollectionService < BaseService end def verify_account! + return unless @json['signature'].is_a?(Hash) + return if domain_not_allowed?(@json['signature']['creator']) + @options[:relayed_through_actor] = @account @account = ActivityPub::LinkedDataSignature.new(@json).verify_actor! @account = nil unless @account.is_a?(Account) diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb index a58a35b061..df0d77d0ed 100644 --- a/app/services/activitypub/process_status_update_service.rb +++ b/app/services/activitypub/process_status_update_service.rb @@ -253,37 +253,58 @@ class ActivityPub::ProcessStatusUpdateService < BaseService end def update_tags! - @status.tags = Tag.find_or_create_by_names(@raw_tags) + previous_tags = @status.tags.to_a + current_tags = @status.tags = Tag.find_or_create_by_names(@raw_tags) + + return unless @status.distributable? + + added_tags = current_tags - previous_tags + + unless added_tags.empty? + @account.featured_tags.where(tag_id: added_tags.pluck(:id)).find_each do |featured_tag| + featured_tag.increment(@status.created_at) + end + end + + removed_tags = previous_tags - current_tags + + unless removed_tags.empty? + @account.featured_tags.where(tag_id: removed_tags.pluck(:id)).find_each do |featured_tag| + featured_tag.decrement(@status) + end + end end def update_mentions! - previous_mentions = @status.active_mentions.includes(:account).to_a - current_mentions = [] + unresolved_mentions = [] - @raw_mentions.each do |href| + currently_mentioned_account_ids = @raw_mentions.filter_map do |href| next if href.blank? account = ActivityPub::TagManager.instance.uri_to_resource(href, Account) account ||= ActivityPub::FetchRemoteAccountService.new.call(href, request_id: @request_id) - next if account.nil? - - mention = previous_mentions.find { |x| x.account_id == account.id } - mention ||= account.mentions.new(status: @status) - - current_mentions << mention + account&.id + rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError + # Since previous mentions are about already-known accounts, + # they don't try to resolve again and won't fall into this case. + # In other words, this failure case is only for new mentions and won't + # affect `removed_mentions` so they can safely be retried asynchronously + unresolved_mentions << href + nil end - current_mentions.each do |mention| - mention.save if mention.new_record? - end + @status.mentions.upsert_all(currently_mentioned_account_ids.uniq.map { |id| { account_id: id, silent: false } }, unique_by: %w(status_id account_id)) # If previous mentions are no longer contained in the text, convert them # to silent mentions, since withdrawing access from someone who already # received a notification might be more confusing - removed_mentions = previous_mentions - current_mentions + @status.mentions.where.not(account_id: currently_mentioned_account_ids).update_all(silent: true) - Mention.where(id: removed_mentions.map(&:id)).update_all(silent: true) unless removed_mentions.empty? + # Queue unresolved mentions for later + unresolved_mentions.uniq.each do |uri| + MentionResolveWorker.perform_in(rand(30...600).seconds, @status.id, uri, { 'request_id' => @request_id }) + end end def update_emojis! diff --git a/app/services/activitypub/synchronize_followers_service.rb b/app/services/activitypub/synchronize_followers_service.rb index f51d671a00..82d84a2f21 100644 --- a/app/services/activitypub/synchronize_followers_service.rb +++ b/app/services/activitypub/synchronize_followers_service.rb @@ -4,32 +4,46 @@ class ActivityPub::SynchronizeFollowersService < BaseService include JsonLdHelper include Payloadable + MAX_COLLECTION_PAGES = 10 + def call(account, partial_collection_url) @account = account + @expected_followers_ids = [] - items = collection_items(partial_collection_url) - return if items.nil? - - # There could be unresolved accounts (hence the call to .compact) but this - # should never happen in practice, since in almost all cases we keep an - # Account record, and should we not do that, we should have sent a Delete. - # In any case there is not much we can do if that occurs. - @expected_followers = items.filter_map { |uri| ActivityPub::TagManager.instance.uri_to_resource(uri, Account) } + return unless process_collection!(partial_collection_url) remove_unexpected_local_followers! - handle_unexpected_outgoing_follows! end private + def process_page!(items) + page_expected_followers = extract_local_followers(items) + @expected_followers_ids.concat(page_expected_followers.pluck(:id)) + + handle_unexpected_outgoing_follows!(page_expected_followers) + end + + def extract_local_followers(items) + # There could be unresolved accounts (hence the call to .filter_map) but this + # should never happen in practice, since in almost all cases we keep an + # Account record, and should we not do that, we should have sent a Delete. + # In any case there is not much we can do if that occurs. + + # TODO: this will need changes when switching to numeric IDs + + usernames = items.filter_map { |uri| ActivityPub::TagManager.instance.uri_to_local_id(uri, :username)&.downcase } + Account.local.with_username(usernames) + end + def remove_unexpected_local_followers! - @account.followers.local.where.not(id: @expected_followers.map(&:id)).reorder(nil).find_each do |unexpected_follower| + @account.followers.local.where.not(id: @expected_followers_ids).reorder(nil).find_each do |unexpected_follower| UnfollowService.new.call(unexpected_follower, @account) end end - def handle_unexpected_outgoing_follows! - @expected_followers.each do |expected_follower| + def handle_unexpected_outgoing_follows!(expected_followers) + expected_followers.each do |expected_follower| next if expected_follower.following?(@account) if expected_follower.requested?(@account) @@ -50,18 +64,33 @@ class ActivityPub::SynchronizeFollowersService < BaseService Oj.dump(serialize_payload(follow, ActivityPub::UndoFollowSerializer)) end - def collection_items(collection_or_uri) - collection = fetch_collection(collection_or_uri) - return unless collection.is_a?(Hash) + # Only returns true if the whole collection has been processed + def process_collection!(collection_uri, max_pages: MAX_COLLECTION_PAGES) + collection = fetch_collection(collection_uri) + return false unless collection.is_a?(Hash) collection = fetch_collection(collection['first']) if collection['first'].present? - return unless collection.is_a?(Hash) + while collection.is_a?(Hash) + process_page!(as_array(collection_page_items(collection))) + + max_pages -= 1 + + return true if collection['next'].blank? # We reached the end of the collection + return false if max_pages <= 0 # We reached our pages limit + + collection = fetch_collection(collection['next']) + end + + false + end + + def collection_page_items(collection) case collection['type'] when 'Collection', 'CollectionPage' - as_array(collection['items']) + collection['items'] when 'OrderedCollection', 'OrderedCollectionPage' - as_array(collection['orderedItems']) + collection['orderedItems'] end end diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb index 0c90eeb82d..b8921a6fec 100644 --- a/app/services/delete_account_service.rb +++ b/app/services/delete_account_service.rb @@ -64,6 +64,7 @@ class DeleteAccountService < BaseService scheduled_statuses scheduled_expiration_statuses status_pins + tag_follows ) ASSOCIATIONS_ON_DESTROY = %w( @@ -170,6 +171,7 @@ class DeleteAccountService < BaseService purge_feeds! purge_other_associations! + remove_ng_rule_history_relations! unless keep_account_record? @account.destroy unless keep_account_record? end @@ -273,6 +275,10 @@ class DeleteAccountService < BaseService @account.save! end + def remove_ng_rule_history_relations! + @account.ng_rule_histories.update_all(account_id: nil) + end + def fulfill_deletion_request! @account.deletion_request&.destroy end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 9b47674a24..f61fb60174 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -131,7 +131,7 @@ class FanOutOnWriteService < BaseService end def deliver_to_hashtag_followers! - TagFollow.where(tag_id: @status.tags.map(&:id)).select(:id, :account_id).reorder(nil).find_in_batches do |follows| + TagFollow.for_local_distribution.where(tag_id: @status.tags.map(&:id)).select(:id, :account_id).reorder(nil).find_in_batches do |follows| FeedInsertWorker.push_bulk(follows) do |follow| [@status.id, follow.account_id, 'tags', { 'update' => update? }] end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 23b42e19dc..473205ec57 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -35,6 +35,7 @@ class NotifyService < BaseService @sender = notification.from_account @notification = notification @policy = NotificationPolicy.find_or_initialize_by(account: @recipient) + @from_staff = @sender.local? && @sender.user.present? && @sender.user_role&.bypass_block?(@recipient.user_role) end private @@ -64,6 +65,14 @@ class NotifyService < BaseService @sender.silenced? && not_following? end + def message? + @notification.type == :mention + end + + def from_staff? + @from_staff + end + def private_mention_not_in_response? @notification.type == :mention && @notification.target_status.direct_visibility? && !response_to_recipient? end @@ -130,14 +139,6 @@ class NotifyService < BaseService FeedManager.instance.filter?(:mentions, @notification.target_status, @recipient) end - def message? - @notification.type == :mention - end - - def from_staff? - @sender.local? && @sender.user.present? && @sender.user_role&.overrides?(@recipient.user_role) && @sender.user_role&.highlighted? && @sender.user_role&.can?(*UserRole::Flags::CATEGORIES[:moderation]) - end - def from_self? @recipient.id == @sender.id end @@ -175,6 +176,7 @@ class NotifyService < BaseService def filter? return false unless filterable_type? return false if override_for_sender? + return false if message? && from_staff? filtered_by_limited_accounts_policy? || filtered_by_not_following_policy? || diff --git a/app/services/precompute_feed_service.rb b/app/services/precompute_feed_service.rb index f813f06b20..86aad50983 100644 --- a/app/services/precompute_feed_service.rb +++ b/app/services/precompute_feed_service.rb @@ -5,6 +5,10 @@ class PrecomputeFeedService < BaseService def call(account) FeedManager.instance.populate_home(account) + + account.owned_lists.each do |list| + FeedManager.instance.populate_list(list) + end ensure redis.del("account:#{account.id}:regeneration") end diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index 17c347b088..0baea0185c 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -33,7 +33,7 @@ class ProcessHashtagsService < BaseService unless removed_tags.empty? @account.featured_tags.where(tag_id: removed_tags.map(&:id)).find_each do |featured_tag| - featured_tag.decrement(@status.id) + featured_tag.decrement(@status) end end end diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index ebd5d260f0..2332d1d8a2 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -15,7 +15,7 @@ class ProcessMentionsService < BaseService return unless @status.local? - @previous_mentions = @status.active_mentions.includes(:account).to_a + @previous_mentions = @status.mentions.includes(:account).to_a @current_mentions = [] Status.transaction do @@ -63,6 +63,8 @@ class ProcessMentionsService < BaseService mention ||= @current_mentions.find { |x| x.account_id == mentioned_account.id } mention ||= @status.mentions.new(account: mentioned_account) + mention.silent = false + @current_mentions << mention "@#{mentioned_account.acct}" @@ -87,7 +89,7 @@ class ProcessMentionsService < BaseService end @current_mentions.each do |mention| - mention.save if mention.new_record? && @save_records + mention.save if (mention.new_record? || mention.silent_changed?) && @save_records end # If previous mentions are no longer contained in the text, convert them @@ -95,7 +97,7 @@ class ProcessMentionsService < BaseService # received a notification might be more confusing removed_mentions = @previous_mentions - @current_mentions - Mention.where(id: removed_mentions.map(&:id)).update_all(silent: true) unless removed_mentions.empty? + Mention.where(id: removed_mentions.map(&:id), silent: false).update_all(silent: true) unless removed_mentions.empty? end def mention_undeliverable?(mentioned_account) diff --git a/app/services/purge_domain_service.rb b/app/services/purge_domain_service.rb index ca0f0d441f..feab8aa1dd 100644 --- a/app/services/purge_domain_service.rb +++ b/app/services/purge_domain_service.rb @@ -16,12 +16,12 @@ class PurgeDomainService < BaseService end def purge_accounts! - Account.remote.where(domain: @domain).reorder(nil).find_each do |account| + Account.remote.where(domain: @domain).find_each do |account| DeleteAccountService.new.call(account, reserve_username: false, skip_side_effects: true) end end def purge_emojis! - CustomEmoji.remote.where(domain: @domain).reorder(nil).find_each(&:destroy) + CustomEmoji.remote.where(domain: @domain).find_each(&:destroy) end end diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index d5ef41b19d..eb07152ff8 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -146,7 +146,7 @@ class RemoveStatusService < BaseService def remove_from_hashtags @account.featured_tags.where(tag_id: @status.tags.map(&:id)).find_each do |featured_tag| - featured_tag.decrement(@status.id) + featured_tag.decrement(@status) end return unless %i(public public_unlisted login).include?(@visibility) || (@status.unlisted_visibility? && %i(public public_unlisted).include?(@searchability)) diff --git a/app/services/resolve_account_service.rb b/app/services/resolve_account_service.rb index 8a5863baba..cd96b55c74 100644 --- a/app/services/resolve_account_service.rb +++ b/app/services/resolve_account_service.rb @@ -2,7 +2,6 @@ class ResolveAccountService < BaseService include DomainControlHelper - include WebfingerHelper include Redisable include Lockable @@ -81,7 +80,7 @@ class ResolveAccountService < BaseService end def process_webfinger!(uri) - @webfinger = webfinger!("acct:#{uri}") + @webfinger = Webfinger.new("acct:#{uri}").perform confirmed_username, confirmed_domain = split_acct(@webfinger.subject) if confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? @@ -91,7 +90,7 @@ class ResolveAccountService < BaseService end # Account doesn't match, so it may have been redirected - @webfinger = webfinger!("acct:#{confirmed_username}@#{confirmed_domain}") + @webfinger = Webfinger.new("acct:#{confirmed_username}@#{confirmed_domain}").perform @username, @domain = split_acct(@webfinger.subject) raise Webfinger::RedirectError, "Too many webfinger redirects for URI #{uri} (stopped at #{@username}@#{@domain})" unless confirmed_username.casecmp(@username).zero? && confirmed_domain.casecmp(@domain).zero? diff --git a/app/services/suspend_account_service.rb b/app/services/suspend_account_service.rb index 8d5446f1a8..561ac665cb 100644 --- a/app/services/suspend_account_service.rb +++ b/app/services/suspend_account_service.rb @@ -95,7 +95,7 @@ class SuspendAccountService < BaseService end end - CacheBusterWorker.perform_async(attachment.path(style)) if Rails.configuration.x.cache_buster_enabled + CacheBusterWorker.perform_async(attachment.url(style)) if Rails.configuration.x.cache_buster_enabled end end end diff --git a/app/services/translate_status_service.rb b/app/services/translate_status_service.rb index 94fe116095..792b12c746 100644 --- a/app/services/translate_status_service.rb +++ b/app/services/translate_status_service.rb @@ -9,6 +9,8 @@ class TranslateStatusService < BaseService def call(status, target_language) @status = status @source_texts = source_texts + + target_language = target_language.split(/[_-]/).first unless target_languages.include?(target_language) @target_language = target_language raise Mastodon::NotPermittedError unless permitted? @@ -32,11 +34,15 @@ class TranslateStatusService < BaseService def permitted? return false unless (@status.distributable? || @status.account.translatable_private?) && TranslationService.configured? - languages[@status.language]&.include?(@target_language) + target_languages.include?(@target_language) end def languages - Rails.cache.fetch('translation_service/languages', expires_in: 7.days, race_condition_ttl: 1.hour) { TranslationService.configured.languages } + Rails.cache.fetch('translation_service/languages', expires_in: 7.days, race_condition_ttl: 1.hour) { translation_backend.languages } + end + + def target_languages + languages[@status.language] || [] end def content_hash diff --git a/app/services/unsuspend_account_service.rb b/app/services/unsuspend_account_service.rb index 652dd6a845..7d3bb806a6 100644 --- a/app/services/unsuspend_account_service.rb +++ b/app/services/unsuspend_account_service.rb @@ -91,7 +91,7 @@ class UnsuspendAccountService < BaseService end end - CacheBusterWorker.perform_async(attachment.path(style)) if Rails.configuration.x.cache_buster_enabled + CacheBusterWorker.perform_async(attachment.url(style)) if Rails.configuration.x.cache_buster_enabled end end end diff --git a/app/validators/poll_expiration_validator.rb b/app/validators/poll_expiration_validator.rb new file mode 100644 index 0000000000..ea8b08e186 --- /dev/null +++ b/app/validators/poll_expiration_validator.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class PollExpirationValidator < ActiveModel::Validator + MAX_EXPIRATION = 1.month.freeze + MIN_EXPIRATION = 5.minutes.freeze + + def validate(poll) + current_time = Time.now.utc + + poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_long')) if poll.expires_at.nil? || poll.expires_at - current_time > MAX_EXPIRATION + poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_short')) if poll.expires_at.present? && (poll.expires_at - current_time).ceil < MIN_EXPIRATION + end +end diff --git a/app/validators/poll_validator.rb b/app/validators/poll_options_validator.rb similarity index 57% rename from app/validators/poll_validator.rb rename to app/validators/poll_options_validator.rb index bd913188f3..7ce16fe409 100644 --- a/app/validators/poll_validator.rb +++ b/app/validators/poll_options_validator.rb @@ -1,19 +1,13 @@ # frozen_string_literal: true -class PollValidator < ActiveModel::Validator +class PollOptionsValidator < ActiveModel::Validator MAX_OPTIONS = 8 MAX_OPTION_CHARS = 50 - MAX_EXPIRATION = 1.month.freeze - MIN_EXPIRATION = 5.minutes.freeze def validate(poll) - current_time = Time.now.utc - poll.errors.add(:options, I18n.t('polls.errors.too_few_options')) unless poll.options.size > 1 poll.errors.add(:options, I18n.t('polls.errors.too_many_options', max: MAX_OPTIONS)) if poll.options.size > MAX_OPTIONS poll.errors.add(:options, I18n.t('polls.errors.over_character_limit', max: MAX_OPTION_CHARS)) if poll.options.any? { |option| option.mb_chars.grapheme_length > MAX_OPTION_CHARS } poll.errors.add(:options, I18n.t('polls.errors.duplicate_options')) unless poll.options.uniq.size == poll.options.size - poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_long')) if poll.expires_at.nil? || poll.expires_at - current_time > MAX_EXPIRATION - poll.errors.add(:expires_at, I18n.t('polls.errors.duration_too_short')) if poll.expires_at.present? && (poll.expires_at - current_time).ceil < MIN_EXPIRATION end end diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml index 05d8989add..e8f7b43eaa 100644 --- a/app/views/about/show.html.haml +++ b/app/views/about/show.html.haml @@ -1,5 +1,4 @@ -- content_for :page_title do - = t('about.title') +- content_for :page_title, t('about.title') - content_for :header_tags do = render partial: 'shared/og' diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml index 6c76748585..9fe42a38e0 100644 --- a/app/views/accounts/show.html.haml +++ b/app/views/accounts/show.html.haml @@ -1,5 +1,4 @@ -- content_for :page_title do - #{display_name(@account)} (#{acct(@account)}) +- content_for :page_title, "#{display_name(@account)} (#{acct(@account)})" - content_for :header_tags do - if @account.noindex? diff --git a/app/views/admin/action_logs/index.html.haml b/app/views/admin/action_logs/index.html.haml index c02c8f0ad4..a5d4188294 100644 --- a/app/views/admin/action_logs/index.html.haml +++ b/app/views/admin/action_logs/index.html.haml @@ -16,7 +16,7 @@ %strong= t('admin.action_logs.filter_by_action') .input.select.optional = form.select :action_type, - options_for_select(Admin::ActionLogFilter::ACTION_TYPE_MAP.keys.map { |key| [I18n.t("admin.action_logs.action_types.#{key}"), key] }, params[:action_type]), + options_for_select(sorted_action_log_types, params[:action_type]), prompt: I18n.t('admin.accounts.moderation.all') - if @action_logs.empty? diff --git a/app/views/admin/announcements/index.html.haml b/app/views/admin/announcements/index.html.haml index 72227b0457..6a76c18776 100644 --- a/app/views/admin/announcements/index.html.haml +++ b/app/views/admin/announcements/index.html.haml @@ -9,7 +9,7 @@ %strong= t('admin.relays.status') %ul %li= filter_link_to t('generic.all'), published: nil, unpublished: nil - %li= filter_link_to safe_join([t('admin.announcements.live'), "(#{number_with_delimiter(Announcement.published.count)})"], ' '), published: '1', unpublished: nil + %li= filter_link_to safe_join([t('admin.announcements.live'), "(#{number_with_delimiter(@published_announcements_count.value)})"], ' '), published: '1', unpublished: nil - if @announcements.empty? .muted-hint.center-text diff --git a/app/views/admin/dashboard/index.html.haml b/app/views/admin/dashboard/index.html.haml index 27d8f4790b..2b4d02fa67 100644 --- a/app/views/admin/dashboard/index.html.haml +++ b/app/views/admin/dashboard/index.html.haml @@ -2,9 +2,7 @@ = t('admin.dashboard.title') - content_for :heading_actions do - = l(@time_period.first) - = ' - ' - = l(@time_period.last) + = date_range(@time_period) - unless @system_checks.empty? .flash-message-stack diff --git a/app/views/admin/disputes/appeals/index.html.haml b/app/views/admin/disputes/appeals/index.html.haml index 7f04dd40fb..e09e275e5d 100644 --- a/app/views/admin/disputes/appeals/index.html.haml +++ b/app/views/admin/disputes/appeals/index.html.haml @@ -5,7 +5,7 @@ .filter-subset %strong= t('admin.tags.review') %ul - %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{Appeal.pending.count})"], ' '), status: 'pending' + %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{@pending_appeals_count.value})"], ' '), status: 'pending' %li= filter_link_to t('admin.trends.approved'), status: 'approved' %li= filter_link_to t('admin.trends.rejected'), status: 'rejected' diff --git a/app/views/admin/email_domain_blocks/new.html.haml b/app/views/admin/email_domain_blocks/new.html.haml index dd4b83ee3f..2dfdca9376 100644 --- a/app/views/admin/email_domain_blocks/new.html.haml +++ b/app/views/admin/email_domain_blocks/new.html.haml @@ -16,7 +16,7 @@ label: I18n.t('admin.email_domain_blocks.allow_registrations_with_approval'), wrapper: :with_label - - if defined?(@resolved_records) + - if defined?(@resolved_records) && @resolved_records.any? %p.hint= t('admin.email_domain_blocks.resolved_dns_records_hint_html') .batch-table diff --git a/app/views/admin/instances/_dashboard.html.haml b/app/views/admin/instances/_dashboard.html.haml new file mode 100644 index 0000000000..ef8500103b --- /dev/null +++ b/app/views/admin/instances/_dashboard.html.haml @@ -0,0 +1,66 @@ +-# locals: (instance_domain:, period_end_at:, period_start_at:) +%p + = material_symbol 'info' + = t('admin.instances.totals_time_period_hint_html') + +.dashboard + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + href: admin_accounts_path(origin: 'remote', by_domain: instance_domain), + label: t('admin.instances.dashboard.instance_accounts_measure'), + measure: 'instance_accounts', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_statuses_measure'), + measure: 'instance_statuses', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_media_attachments_measure'), + measure: 'instance_media_attachments', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_follows_measure'), + measure: 'instance_follows', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_followers_measure'), + measure: 'instance_followers', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :counter, + end_at: period_end_at, + href: admin_reports_path(by_target_domain: instance_domain), + label: t('admin.instances.dashboard.instance_reports_measure'), + measure: 'instance_reports', + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :dimension, + dimension: 'instance_accounts', + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_accounts_dimension'), + limit: 8, + params: { domain: instance_domain }, + start_at: period_start_at + .dashboard__item + = react_admin_component :dimension, + dimension: 'instance_languages', + end_at: period_end_at, + label: t('admin.instances.dashboard.instance_languages_dimension'), + limit: 8, + params: { domain: instance_domain }, + start_at: period_start_at diff --git a/app/views/admin/instances/show.html.haml b/app/views/admin/instances/show.html.haml index 606d00e27c..f5f339e664 100644 --- a/app/views/admin/instances/show.html.haml +++ b/app/views/admin/instances/show.html.haml @@ -7,77 +7,10 @@ - if current_user.can?(:view_dashboard) - content_for :heading_actions do - = l(@time_period.first) - = ' - ' - = l(@time_period.last) + = date_range(@time_period) - if @instance.persisted? - %p - = material_symbol 'info' - = t('admin.instances.totals_time_period_hint_html') - - .dashboard - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - href: admin_accounts_path(origin: 'remote', by_domain: @instance.domain), - label: t('admin.instances.dashboard.instance_accounts_measure'), - measure: 'instance_accounts', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_statuses_measure'), - measure: 'instance_statuses', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_media_attachments_measure'), - measure: 'instance_media_attachments', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_follows_measure'), - measure: 'instance_follows', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_followers_measure'), - measure: 'instance_followers', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :counter, - end_at: @time_period.last, - href: admin_reports_path(by_target_domain: @instance.domain), - label: t('admin.instances.dashboard.instance_reports_measure'), - measure: 'instance_reports', - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :dimension, - dimension: 'instance_accounts', - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_accounts_dimension'), - limit: 8, - params: { domain: @instance.domain }, - start_at: @time_period.first - .dashboard__item - = react_admin_component :dimension, - dimension: 'instance_languages', - end_at: @time_period.last, - label: t('admin.instances.dashboard.instance_languages_dimension'), - limit: 8, - params: { domain: @instance.domain }, - start_at: @time_period.first - + = render 'dashboard', instance_domain: @instance.domain, period_end_at: @time_period.last, period_start_at: @time_period.first - else %p = t('admin.instances.unknown_instance') diff --git a/app/views/admin/invites/_invite.html.haml b/app/views/admin/invites/_invite.html.haml index 8bd5f10fee..e3e5d32542 100644 --- a/app/views/admin/invites/_invite.html.haml +++ b/app/views/admin/invites/_invite.html.haml @@ -1,8 +1,8 @@ -%tr +%tr{ id: dom_id(invite) } %td .input-copy .input-copy__wrapper - %input{ type: :text, maxlength: '999', spellcheck: 'false', readonly: 'true', value: public_invite_url(invite_code: invite.code) } + = copyable_input value: public_invite_url(invite_code: invite.code) %button{ type: :button }= t('generic.copy') %td diff --git a/app/views/admin/tags/show.html.haml b/app/views/admin/tags/show.html.haml index 93387843b2..462ca312a0 100644 --- a/app/views/admin/tags/show.html.haml +++ b/app/views/admin/tags/show.html.haml @@ -4,9 +4,7 @@ - content_for :heading_actions do - if current_user.can?(:view_dashboard) .time-period - = l(@time_period.first) - = ' - ' - = l(@time_period.last) + = date_range(@time_period) = link_to t('admin.tags.open'), tag_url(@tag), class: 'button', target: '_blank', rel: 'noopener noreferrer' diff --git a/app/views/admin/trends/links/preview_card_providers/index.html.haml b/app/views/admin/trends/links/preview_card_providers/index.html.haml index 93daf25f31..0770ac4b81 100644 --- a/app/views/admin/trends/links/preview_card_providers/index.html.haml +++ b/app/views/admin/trends/links/preview_card_providers/index.html.haml @@ -12,7 +12,7 @@ %li= filter_link_to t('generic.all'), status: nil %li= filter_link_to t('admin.trends.approved'), status: 'approved' %li= filter_link_to t('admin.trends.rejected'), status: 'rejected' - %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{PreviewCardProvider.unreviewed.count})"], ' '), status: 'pending_review' + %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{@pending_preview_card_providers_count.value})"], ' '), status: 'pending_review' .back-link = link_to admin_trends_links_path do = material_symbol 'chevron_left' diff --git a/app/views/admin/trends/tags/index.html.haml b/app/views/admin/trends/tags/index.html.haml index 480877456f..21f6c2947a 100644 --- a/app/views/admin/trends/tags/index.html.haml +++ b/app/views/admin/trends/tags/index.html.haml @@ -12,7 +12,7 @@ %li= filter_link_to t('generic.all'), status: nil %li= filter_link_to t('admin.trends.approved'), status: 'approved' %li= filter_link_to t('admin.trends.rejected'), status: 'rejected' - %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{Tag.pending_review.count})"], ' '), status: 'pending_review' + %li= filter_link_to safe_join([t('admin.accounts.moderation.pending'), "(#{@pending_tags_count.value})"], ' '), status: 'pending_review' = form_with model: @form, url: batch_admin_trends_tags_path do |f| = hidden_field_tag :page, params[:page] || 1 diff --git a/app/views/application/mailer/_hashtag.html.haml b/app/views/application/mailer/_hashtag.html.haml index b740ba31b9..0fe7117bc4 100644 --- a/app/views/application/mailer/_hashtag.html.haml +++ b/app/views/application/mailer/_hashtag.html.haml @@ -17,5 +17,4 @@ %span.email-mini-hashtag-img-span = image_tag full_asset_url(account.avatar.url), alt: '', width: 16, height: 16 %td - - people = hashtag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts - %p= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(people), count: people) + %p= recent_tag_usage(hashtag) diff --git a/app/views/invites/_invite.html.haml b/app/views/invites/_invite.html.haml index 892fdc5a0e..7c94062de4 100644 --- a/app/views/invites/_invite.html.haml +++ b/app/views/invites/_invite.html.haml @@ -2,7 +2,7 @@ %td .input-copy .input-copy__wrapper - %input{ type: :text, maxlength: '999', spellcheck: 'false', readonly: 'true', value: public_invite_url(invite_code: invite.code) } + = copyable_input value: public_invite_url(invite_code: invite.code) %button{ type: :button }= t('generic.copy') - if invite.valid_for_use? diff --git a/app/views/oauth/authorizations/show.html.haml b/app/views/oauth/authorizations/show.html.haml index a5122a87fc..bdff336368 100644 --- a/app/views/oauth/authorizations/show.html.haml +++ b/app/views/oauth/authorizations/show.html.haml @@ -3,5 +3,5 @@ %p= t('doorkeeper.authorizations.show.title') .input-copy .input-copy__wrapper - %input.oauth-code{ type: 'text', spellcheck: 'false', readonly: true, value: params[:code] } + = copyable_input value: params[:code], class: 'oauth-code' %button{ type: :button }= t('generic.copy') diff --git a/app/views/privacy/show.html.haml b/app/views/privacy/show.html.haml index 95e506641b..9eb4f7a570 100644 --- a/app/views/privacy/show.html.haml +++ b/app/views/privacy/show.html.haml @@ -1,5 +1,4 @@ -- content_for :page_title do - = t('privacy_policy.title') +- content_for :page_title, t('privacy_policy.title') - content_for :header_tags do = render partial: 'shared/og' diff --git a/app/views/settings/applications/_form.html.haml b/app/views/settings/applications/_form.html.haml index 66ea8bc12b..85fdefa0fc 100644 --- a/app/views/settings/applications/_form.html.haml +++ b/app/views/settings/applications/_form.html.haml @@ -18,7 +18,7 @@ .field-group .input.with_block_label - %label= t('activerecord.attributes.doorkeeper/application.scopes') + = form.label t('activerecord.attributes.doorkeeper/application.scopes'), required: true %span.hint= t('simple_form.hints.defaults.scopes') - Doorkeeper.configuration.scopes.group_by { |s| s.split(':').first }.each_value do |value| @@ -29,7 +29,7 @@ hint: false, include_blank: false, item_wrapper_tag: 'li', - label_method: ->(scope) { safe_join([content_tag(:samp, scope, class: class_for_scope(scope)), content_tag(:span, t("doorkeeper.scopes.#{scope}"), class: 'hint')]) }, + label_method: ->(scope) { label_for_scope(scope) }, label: false, required: false, selected: form.object.scopes.all, diff --git a/app/views/settings/applications/index.html.haml b/app/views/settings/applications/index.html.haml index 80eaed5c39..e3011947a6 100644 --- a/app/views/settings/applications/index.html.haml +++ b/app/views/settings/applications/index.html.haml @@ -18,7 +18,9 @@ - @applications.each do |application| %tr %td= link_to application.name, settings_application_path(application) - %th= application.scopes + %th + - application.scopes.to_s.split.each do |scope| + = tag.samp(scope, class: 'information-badge', title: t("doorkeeper.scopes.#{scope}")) %td = table_link_to 'close', t('doorkeeper.applications.index.delete'), settings_application_path(application), method: :delete, data: { confirm: t('doorkeeper.applications.confirmations.destroy') } diff --git a/app/views/settings/applications/show.html.haml b/app/views/settings/applications/show.html.haml index 19630cf49b..bfde27daa9 100644 --- a/app/views/settings/applications/show.html.haml +++ b/app/views/settings/applications/show.html.haml @@ -15,15 +15,16 @@ %td %code= @application.secret %tr - %th{ rowspan: 2 }= t('applications.your_token') + %th= t('applications.your_token') %td %code= current_user.token_for_app(@application).token %tr + %th %td= table_link_to 'refresh', t('applications.regenerate_token'), regenerate_settings_application_path(@application), method: :post %hr/ -= simple_form_for @application, url: settings_application_path(@application), method: :put do |form| += simple_form_for @application, url: settings_application_path(@application) do |form| = render form .actions diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml index 320bb0c7ce..273c5a4ba6 100644 --- a/app/views/settings/exports/show.html.haml +++ b/app/views/settings/exports/show.html.haml @@ -61,7 +61,8 @@ %tbody - @backups.each do |backup| %tr - %td= l backup.created_at + %td + %time.formatted{ datetime: backup.created_at.iso8601, title: l(backup.created_at) }= l backup.created_at - if backup.processed? %td= number_to_human_size backup.dump_file_size %td= table_link_to 'download', t('exports.archive_takeout.download'), download_backup_url(backup) diff --git a/app/views/settings/imports/index.html.haml b/app/views/settings/imports/index.html.haml index 634631b5aa..55421991e1 100644 --- a/app/views/settings/imports/index.html.haml +++ b/app/views/settings/imports/index.html.haml @@ -55,7 +55,10 @@ = t("imports.states.#{import.state}") %td #{import.imported_items} / #{import.total_items} - %td= l(import.created_at) + %td + %time.formatted{ datetime: import.created_at.iso8601, title: l(import.created_at) } + = l(import.created_at) + %td - num_failed = import.processed_items - import.imported_items - if num_failed.positive? diff --git a/app/views/settings/preferences/appearance/show.html.haml b/app/views/settings/preferences/appearance/show.html.haml index 759fe3de81..131d3bdb12 100644 --- a/app/views/settings/preferences/appearance/show.html.haml +++ b/app/views/settings/preferences/appearance/show.html.haml @@ -4,7 +4,7 @@ - content_for :heading_actions do = button_tag t('generic.save_changes'), class: 'button', form: 'edit_user' -= simple_form_for current_user, url: settings_preferences_appearance_path, html: { method: :put, id: 'edit_user' } do |f| += simple_form_for current_user, url: settings_preferences_appearance_path, html: { id: :edit_user } do |f| .fields-row .fields-group.fields-row__column.fields-row__column-6 = f.input :locale, diff --git a/app/views/settings/preferences/notifications/show.html.haml b/app/views/settings/preferences/notifications/show.html.haml index 26111374f9..d0adfd366c 100644 --- a/app/views/settings/preferences/notifications/show.html.haml +++ b/app/views/settings/preferences/notifications/show.html.haml @@ -4,7 +4,7 @@ - content_for :heading_actions do = button_tag t('generic.save_changes'), class: 'button', form: 'edit_notification' -= simple_form_for current_user, url: settings_preferences_notifications_path, html: { method: :put, id: 'edit_notification' } do |f| += simple_form_for current_user, url: settings_preferences_notifications_path, html: { id: :edit_notification } do |f| = render 'shared/error_messages', object: current_user %h4= t 'notifications.email_events' diff --git a/app/views/settings/preferences/other/show.html.haml b/app/views/settings/preferences/other/show.html.haml index e6a6db766f..1b03497c27 100644 --- a/app/views/settings/preferences/other/show.html.haml +++ b/app/views/settings/preferences/other/show.html.haml @@ -4,7 +4,7 @@ - content_for :heading_actions do = button_tag t('generic.save_changes'), class: 'button', form: 'edit_preferences' -= simple_form_for current_user, url: settings_preferences_other_path, html: { method: :put, id: 'edit_preferences' } do |f| += simple_form_for current_user, url: settings_preferences_other_path, html: { id: :edit_preferences } do |f| = render 'shared/error_messages', object: current_user = f.simple_fields_for :settings, current_user.settings do |ff| diff --git a/app/views/settings/privacy/show.html.haml b/app/views/settings/privacy/show.html.haml index eb02ee2f5c..c862d2601e 100644 --- a/app/views/settings/privacy/show.html.haml +++ b/app/views/settings/privacy/show.html.haml @@ -5,7 +5,7 @@ %h2= t('settings.profile') = render partial: 'settings/shared/profile_navigation' -= simple_form_for @account, url: settings_privacy_path, html: { method: :put } do |f| += simple_form_for @account, url: settings_privacy_path do |f| = render 'shared/error_messages', object: @account %p.lead= t('privacy.hint_html') diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index 27af468336..b7c816d5b0 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -5,7 +5,7 @@ %h2= t('settings.profile') = render partial: 'settings/shared/profile_navigation' -= simple_form_for @account, url: settings_profile_path, html: { method: :put, id: 'edit_profile' } do |f| += simple_form_for @account, url: settings_profile_path, html: { id: :edit_profile } do |f| = render 'shared/error_messages', object: @account %p.lead= t('edit_profile.hint_html') @@ -41,7 +41,7 @@ .fields-row__column.fields-row__column-6 .fields-group = f.input :avatar, - hint: t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(Account::Avatar::LIMIT)), + hint: t('simple_form.hints.defaults.avatar', dimensions: Account::Avatar::AVATAR_GEOMETRY, size: number_to_human_size(Account::Avatar::LIMIT)), input_html: { accept: Account::Avatar::IMAGE_MIME_TYPES.join(',') }, wrapper: :with_block_label @@ -57,7 +57,7 @@ .fields-row__column.fields-row__column-6 .fields-group = f.input :header, - hint: t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(Account::Header::LIMIT)), + hint: t('simple_form.hints.defaults.header', dimensions: Account::Header::HEADER_GEOMETRY, size: number_to_human_size(Account::Header::LIMIT)), input_html: { accept: Account::Header::IMAGE_MIME_TYPES.join(',') }, wrapper: :with_block_label diff --git a/app/views/settings/shared/_profile_navigation.html.haml b/app/views/settings/shared/_profile_navigation.html.haml index e64e7f8598..45a31f896c 100644 --- a/app/views/settings/shared/_profile_navigation.html.haml +++ b/app/views/settings/shared/_profile_navigation.html.haml @@ -1,8 +1,8 @@ .content__heading__tabs = render_navigation renderer: :links do |primary| :ruby - primary.item :profile, safe_join([material_symbol('person'), t('settings.edit_profile')]), settings_profile_path - primary.item :privacy, safe_join([material_symbol('lock'), t('privacy.title')]), settings_privacy_path + primary.item :edit_profile, safe_join([material_symbol('person'), t('settings.edit_profile')]), settings_profile_path + primary.item :privacy_reach, safe_join([material_symbol('lock'), t('privacy.title')]), settings_privacy_path primary.item :privacy_extra, safe_join([material_symbol('lock'), t('privacy_extra.title')]), settings_privacy_extra_path primary.item :verification, safe_join([material_symbol('check'), t('verification.verification')]), settings_verification_path primary.item :featured_tags, safe_join([material_symbol('tag'), t('settings.featured_tags')]), settings_featured_tags_path diff --git a/app/views/settings/two_factor_authentication/confirmations/new.html.haml b/app/views/settings/two_factor_authentication/confirmations/new.html.haml index 0b8278a104..a35479b84e 100644 --- a/app/views/settings/two_factor_authentication/confirmations/new.html.haml +++ b/app/views/settings/two_factor_authentication/confirmations/new.html.haml @@ -5,7 +5,7 @@ %p.hint= t('otp_authentication.instructions_html') .qr-wrapper - .qr-code!= @qrcode.as_svg(padding: 0, module_size: 4) + .qr-code!= @qrcode.as_svg(padding: 0, module_size: 4, use_path: true) .qr-alternative %p.hint= t('otp_authentication.manual_instructions') diff --git a/app/views/settings/verifications/show.html.haml b/app/views/settings/verifications/show.html.haml index 5318b0767d..a93ffcebed 100644 --- a/app/views/settings/verifications/show.html.haml +++ b/app/views/settings/verifications/show.html.haml @@ -16,7 +16,7 @@ .input-copy.lead .input-copy__wrapper - %input{ type: :text, maxlength: '999', spellcheck: 'false', readonly: 'true', value: link_to('Mastodon', ActivityPub::TagManager.instance.url_for(@account), rel: 'me').to_str } + = copyable_input value: link_to('Mastodon', ActivityPub::TagManager.instance.url_for(@account), rel: :me) %button{ type: :button }= t('generic.copy') %p.lead= t('verification.extra_instructions_html') @@ -31,32 +31,41 @@ = material_symbol 'check', class: 'verified-badge__mark' %span= field.value -= simple_form_for @account, url: settings_verification_path, html: { method: :put, class: 'form-section' } do |f| += simple_form_for @account, url: settings_verification_path, html: { class: 'form-section' } do |f| = render 'shared/error_messages', object: @account %h3= t('author_attribution.title') %p.lead= t('author_attribution.hint_html') - .fields-row - .fields-row__column.fields-row__column-6 - .fields-group - = f.input :attribution_domains_as_text, as: :text, wrapper: :with_block_label, input_html: { placeholder: "example1.com\nexample2.com\nexample3.com", rows: 4 } - .fields-row__column.fields-row__column-6 - .fields-group.fade-out-top - %div - .status-card.expanded.bottomless - .status-card__image - = image_tag frontend_asset_url('images/preview.png'), alt: '', class: 'status-card__image-image' - .status-card__content - %span.status-card__host - %span= t('author_attribution.s_blog', name: @account.username) - · - %time.time-ago{ datetime: 1.year.ago.to_date.iso8601 } - %strong.status-card__title= t('author_attribution.example_title') - .more-from-author - = logo_as_symbol(:icon) - = t('author_attribution.more_from_html', name: link_to(root_url, class: 'story__details__shared__author-link') { image_tag(@account.avatar.url, class: 'account__avatar', width: 16, height: 16, alt: '') + content_tag(:bdi, display_name(@account)) }) + .fields-group.fade-out-top + %div + .status-card.expanded.bottomless + .status-card__image + = image_tag frontend_asset_url('images/preview.png'), alt: '', class: 'status-card__image-image' + .status-card__content + %span.status-card__host + %span= t('author_attribution.s_blog', name: display_name(@account)) + · + %time.time-ago{ datetime: 1.year.ago.to_date.iso8601 } + %strong.status-card__title= t('author_attribution.example_title') + .more-from-author + = logo_as_symbol(:icon) + = t('author_attribution.more_from_html', name: link_to(root_url, class: 'story__details__shared__author-link') { image_tag(@account.avatar.url, class: 'account__avatar', width: 16, height: 16, alt: '') + tag.bdi(display_name(@account)) }) + + %h4= t('verification.here_is_how') + + %p.lead= t('author_attribution.instructions') + + .input-copy.lead + .input-copy__wrapper + = copyable_input value: tag.meta(name: 'fediverse:creator', content: "@#{@account.local_username_and_domain}") + %button{ type: :button }= t('generic.copy') + + %p.lead= t('author_attribution.then_instructions') + + .fields-group + = f.input :attribution_domains_as_text, as: :text, wrapper: :with_block_label, input_html: { placeholder: "example1.com\nexample2.com\nexample3.com", rows: 4, autocapitalize: 'none', autocorrect: 'off' } .actions = f.button :button, t('generic.save_changes'), type: :submit diff --git a/app/views/severed_relationships/index.html.haml b/app/views/severed_relationships/index.html.haml index 7c599e9c0e..cc9439b468 100644 --- a/app/views/severed_relationships/index.html.haml +++ b/app/views/severed_relationships/index.html.haml @@ -15,7 +15,9 @@ %tbody - @events.each do |event| %tr - %td= l event.created_at + %td + %time.formatted{ datetime: event.created_at.iso8601, title: l(event.created_at) } + = l(event.created_at) %td= t("severed_relationships.event_type.#{event.type}", target_name: event.target_name) - if event.purged? %td{ rowspan: 2 }= t('severed_relationships.purged') diff --git a/app/views/statuses/show.html.haml b/app/views/statuses/show.html.haml index f9dc1712cf..7751337cb0 100644 --- a/app/views/statuses/show.html.haml +++ b/app/views/statuses/show.html.haml @@ -1,5 +1,4 @@ -- content_for :page_title do - = t('statuses.title', name: display_name(@account), quote: truncate(@status.spoiler_text.presence || @status.text, length: 50, omission: '…', escape: false)) +- content_for :page_title, t('statuses.title', name: display_name(@account), quote: truncate(@status.spoiler_text.presence || @status.text, length: 50, omission: '…', escape: false)) - content_for :header_tags do - if @account.noindex? diff --git a/app/views/user_mailer/welcome.text.erb b/app/views/user_mailer/welcome.text.erb index d9da2997da..144d44b842 100644 --- a/app/views/user_mailer/welcome.text.erb +++ b/app/views/user_mailer/welcome.text.erb @@ -53,7 +53,7 @@ <%= t('user_mailer.welcome.hashtags_subtitle') %> <%- @tags.each do |tag| %> -* #<%= tag.display_name %> · <%= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(tag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts)) %> +* #<%= tag.display_name %> · <%= recent_tag_usage(tag) %> <%= tag_url(tag) %> <%- end %> diff --git a/app/workers/activitypub/delivery_worker.rb b/app/workers/activitypub/delivery_worker.rb index 0c6ca026bb..7a1440ed15 100644 --- a/app/workers/activitypub/delivery_worker.rb +++ b/app/workers/activitypub/delivery_worker.rb @@ -62,7 +62,7 @@ class ActivityPub::DeliveryWorker stoplight_wrapper.run do request_pool.with(@host) do |http_client| build_request(http_client).perform do |response| - raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) + raise Mastodon::UnexpectedResponseError, response unless response_successful?(response) || response_error_unsalvageable?(response) || unsalvageable_authorization_failure?(response) @performed = true end @@ -70,6 +70,10 @@ class ActivityPub::DeliveryWorker end end + def unsalvageable_authorization_failure?(response) + @source_account.permanently_unavailable? && response.code == 401 + end + def stoplight_wrapper Stoplight(@inbox_url) .with_threshold(STOPLIGHT_FAILURE_THRESHOLD) diff --git a/app/workers/activitypub/update_distribution_worker.rb b/app/workers/activitypub/update_distribution_worker.rb index a04ac621f3..9a418f0f3d 100644 --- a/app/workers/activitypub/update_distribution_worker.rb +++ b/app/workers/activitypub/update_distribution_worker.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class ActivityPub::UpdateDistributionWorker < ActivityPub::RawDistributionWorker + DEBOUNCE_DELAY = 5.seconds + sidekiq_options queue: 'push', lock: :until_executed, lock_ttl: 1.day.to_i # Distribute an profile update to servers that might have a copy diff --git a/app/workers/feed_insert_worker.rb b/app/workers/feed_insert_worker.rb index e6daee1617..b28afb99a7 100644 --- a/app/workers/feed_insert_worker.rb +++ b/app/workers/feed_insert_worker.rb @@ -28,7 +28,7 @@ class FeedInsertWorker check_and_insert end - perform_notify_for_list if !feed_filtered? && notify_for_list? + perform_notify_for_list if !feed_filter && notify_for_list? rescue ActiveRecord::RecordNotFound true end @@ -36,27 +36,31 @@ class FeedInsertWorker private def check_and_insert - if feed_filtered? + filter_result = feed_filter + + if filter_result perform_unpush if update? else perform_push - perform_notify if notify? end + + perform_notify if notify?(filter_result) end - def feed_filtered? + def feed_filter case @type when :home, :antenna - FeedManager.instance.filter?(:home, @status, @follower) + FeedManager.instance.filter(:home, @status, @follower) when :tags - FeedManager.instance.filter?(:tags, @status, @follower) + FeedManager.instance.filter(:tags, @status, @follower) when :list - FeedManager.instance.filter?(:list, @status, @list, stl_home: stl_home?) + FeedManager.instance.filter(:list, @status, @list, stl_home: stl_home?) end end - def notify? - return false if @type != :home || @status.reblog? || (@status.reply? && @status.in_reply_to_account_id != @status.account_id) + def notify?(filter_result) + return false if @type != :home || @status.reblog? || (@status.reply? && @status.in_reply_to_account_id != @status.account_id) || + filter_result == :filter Follow.find_by(account: @follower, target_account: @status.account)&.notify? end diff --git a/app/workers/filtered_notification_cleanup_worker.rb b/app/workers/filtered_notification_cleanup_worker.rb index 2b955da3c0..87ff6a9eb5 100644 --- a/app/workers/filtered_notification_cleanup_worker.rb +++ b/app/workers/filtered_notification_cleanup_worker.rb @@ -4,6 +4,6 @@ class FilteredNotificationCleanupWorker include Sidekiq::Worker def perform(account_id, from_account_id) - Notification.where(account_id: account_id, from_account_id: from_account_id, filtered: true).reorder(nil).in_batches(order: :desc).delete_all + Notification.where(account_id: account_id, from_account_id: from_account_id, filtered: true).in_batches(order: :desc).delete_all end end diff --git a/app/workers/mention_resolve_worker.rb b/app/workers/mention_resolve_worker.rb new file mode 100644 index 0000000000..8c5938aeaf --- /dev/null +++ b/app/workers/mention_resolve_worker.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class MentionResolveWorker + include Sidekiq::Worker + include ExponentialBackoff + include JsonLdHelper + + sidekiq_options queue: 'pull', retry: 7 + + def perform(status_id, uri, options = {}) + status = Status.find_by(id: status_id) + return if status.nil? + + account = account_from_uri(uri) + account = ActivityPub::FetchRemoteAccountService.new.call(uri, request_id: options[:request_id]) if account.nil? + + return if account.nil? + + status.mentions.upsert({ account_id: account.id, silent: false }, unique_by: %w(status_id account_id)) + rescue ActiveRecord::RecordNotFound + # Do nothing + rescue Mastodon::UnexpectedResponseError => e + response = e.response + + if response_error_unsalvageable?(response) + # Give up + else + raise e + end + end + + private + + def account_from_uri(uri) + ActivityPub::TagManager.instance.uri_to_resource(uri, Account) + end +end diff --git a/app/workers/scheduler/user_cleanup_scheduler.rb b/app/workers/scheduler/user_cleanup_scheduler.rb index 9f58d9225b..03544e2e98 100644 --- a/app/workers/scheduler/user_cleanup_scheduler.rb +++ b/app/workers/scheduler/user_cleanup_scheduler.rb @@ -16,9 +16,10 @@ class Scheduler::UserCleanupScheduler private def clean_unconfirmed_accounts! - User.unconfirmed.where(confirmation_sent_at: ..UNCONFIRMED_ACCOUNTS_MAX_AGE_DAYS.days.ago).reorder(nil).find_in_batches do |batch| + User.unconfirmed.where(confirmation_sent_at: ..UNCONFIRMED_ACCOUNTS_MAX_AGE_DAYS.days.ago).find_in_batches do |batch| # We have to do it separately because of missing database constraints AccountModerationNote.where(target_account_id: batch.map(&:account_id)).delete_all + WebauthnCredential.where(user_id: batch.map(&:id)).delete_all Account.where(id: batch.map(&:account_id)).delete_all User.where(id: batch.map(&:id)).delete_all end diff --git a/app/workers/web/push_notification_worker.rb b/app/workers/web/push_notification_worker.rb index 7e9691aaba..e771928ef3 100644 --- a/app/workers/web/push_notification_worker.rb +++ b/app/workers/web/push_notification_worker.rb @@ -16,10 +16,10 @@ class Web::PushNotificationWorker # in the meantime, so we have to double-check before proceeding return unless @notification.activity.present? && @subscription.pushable?(@notification) - payload = @subscription.encrypt(push_notification_json) + payload = web_push_request.encrypt(push_notification_json) - request_pool.with(@subscription.audience) do |http_client| - request = Request.new(:post, @subscription.endpoint, body: payload.fetch(:ciphertext), http_client: http_client) + request_pool.with(web_push_request.audience) do |http_client| + request = Request.new(:post, web_push_request.endpoint, body: payload.fetch(:ciphertext), http_client: http_client) request.add_headers( 'Content-Type' => 'application/octet-stream', @@ -27,8 +27,8 @@ class Web::PushNotificationWorker 'Urgency' => URGENCY, 'Content-Encoding' => 'aesgcm', 'Encryption' => "salt=#{Webpush.encode64(payload.fetch(:salt)).delete('=')}", - 'Crypto-Key' => "dh=#{Webpush.encode64(payload.fetch(:server_public_key)).delete('=')};#{@subscription.crypto_key_header}", - 'Authorization' => @subscription.authorization_header + 'Crypto-Key' => "dh=#{Webpush.encode64(payload.fetch(:server_public_key)).delete('=')};#{web_push_request.crypto_key_header}", + 'Authorization' => web_push_request.authorization_header ) request.perform do |response| @@ -50,17 +50,23 @@ class Web::PushNotificationWorker private - def push_notification_json - json = I18n.with_locale(@subscription.locale.presence || I18n.default_locale) do - ActiveModelSerializers::SerializableResource.new( - @notification, - serializer: Web::NotificationSerializer, - scope: @subscription, - scope_name: :current_push_subscription - ).as_json - end + def web_push_request + @web_push_request || WebPushRequest.new(@subscription) + end - Oj.dump(json) + def push_notification_json + I18n.with_locale(@subscription.locale.presence || I18n.default_locale) do + Oj.dump(serialized_notification.as_json) + end + end + + def serialized_notification + ActiveModelSerializers::SerializableResource.new( + @notification, + serializer: Web::NotificationSerializer, + scope: @subscription, + scope_name: :current_push_subscription + ) end def request_pool diff --git a/config/initializers/active_record_encryption.rb b/config/initializers/active_record_encryption.rb index b7a874e404..9ae28e401b 100644 --- a/config/initializers/active_record_encryption.rb +++ b/config/initializers/active_record_encryption.rb @@ -10,7 +10,9 @@ ENV[key] = SecureRandom.hex(64) end - value = ENV.fetch(key) do + value = ENV.fetch(key, '') + + if value.blank? abort <<~MESSAGE Mastodon now requires that these variables are set: @@ -20,6 +22,7 @@ - ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY Run `bin/rails db:encryption:init` to generate new secrets and then assign the environment variables. + Do not change the secrets once they are set, as doing so may cause data loss and other issues that will be difficult or impossible to recover from. MESSAGE end diff --git a/config/initializers/deprecations.rb b/config/initializers/deprecations.rb new file mode 100644 index 0000000000..e0ad54d8c3 --- /dev/null +++ b/config/initializers/deprecations.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +if ENV['REDIS_NAMESPACE'] + es_configured = ENV['ES_ENABLED'] == 'true' || ENV.fetch('ES_HOST', 'localhost') != 'localhost' || ENV.fetch('ES_PORT', '9200') != '9200' || ENV.fetch('ES_PASS', 'password') != 'password' + + warn <<~MESSAGE + WARNING: the REDIS_NAMESPACE environment variable is deprecated and will be removed in Mastodon 4.4.0. + + Please see documentation at https://github.com/mastodon/redis_namespace_migration + MESSAGE + + warn <<~MESSAGE if es_configured && !ENV['ES_PREFIX'] + + In addition, as REDIS_NAMESPACE is being used as a prefix for Elasticsearch, please do not forget to set ES_PREFIX to "#{ENV.fetch('REDIS_NAMESPACE')}". + MESSAGE +end diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb index b4eaab1daa..f558ee5fe0 100644 --- a/config/initializers/rack_attack.rb +++ b/config/initializers/rack_attack.rb @@ -122,7 +122,7 @@ class Rack::Attack end throttle('throttle_email_confirmations/ip', limit: 25, period: 5.minutes) do |req| - req.throttleable_remote_ip if req.post? && (req.path_matches?('/auth/confirmation') || req.path == '/api/v1/emails/confirmations') + req.throttleable_remote_ip if (req.post? && (req.path_matches?('/auth/confirmation') || req.path == '/api/v1/emails/confirmations')) || ((req.put? || req.patch?) && req.path_matches?('/auth/setup')) end throttle('throttle_email_confirmations/email', limit: 5, period: 30.minutes) do |req| @@ -133,6 +133,14 @@ class Rack::Attack end end + throttle('throttle_auth_setup/email', limit: 5, period: 10.minutes) do |req| + req.params.dig('user', 'email').presence if (req.put? || req.patch?) && req.path_matches?('/auth/setup') + end + + throttle('throttle_auth_setup/account', limit: 5, period: 10.minutes) do |req| + req.warden_user_id if (req.put? || req.patch?) && req.path_matches?('/auth/setup') + end + throttle('throttle_login_attempts/ip', limit: 25, period: 5.minutes) do |req| req.throttleable_remote_ip if req.post? && req.path_matches?('/auth/sign_in') end diff --git a/config/locales/activerecord.ar.yml b/config/locales/activerecord.ar.yml index cacbf0714f..7426e21e21 100644 --- a/config/locales/activerecord.ar.yml +++ b/config/locales/activerecord.ar.yml @@ -15,6 +15,9 @@ ar: user/invite_request: text: الغرض errors: + attributes: + domain: + invalid: ليس بإسم نطاق صالح models: account: attributes: diff --git a/config/locales/activerecord.az.yml b/config/locales/activerecord.az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/activerecord.az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml index 6f4fe86e3f..fa551e0f6e 100644 --- a/config/locales/activerecord.cs.yml +++ b/config/locales/activerecord.cs.yml @@ -15,6 +15,12 @@ cs: user/invite_request: text: Důvod errors: + attributes: + domain: + invalid: není platný název domény + messages: + invalid_domain_on_line: "%{value} není platný název domény" + too_many_lines: překročil limit %{limit} řádků models: account: attributes: diff --git a/config/locales/activerecord.cy.yml b/config/locales/activerecord.cy.yml index 0ad257db50..0337bc4f1e 100644 --- a/config/locales/activerecord.cy.yml +++ b/config/locales/activerecord.cy.yml @@ -3,7 +3,7 @@ cy: activerecord: attributes: poll: - expires_at: Terfyn amser + expires_at: Dyddiad cau options: Dewisiadau user: agreement: Cytundeb gwasanaeth @@ -53,7 +53,7 @@ cy: user_role: attributes: permissions_as_keys: - dangerous: yn cynnwys caniatâd nad ydynt yn ddiogel ar gyfer rôl sail + dangerous: yn cynnwys caniatâd nad ydyn nhw'n ddiogel ar gyfer rôl sail elevated: yn methu a chynnwys caniatâd nad yw eich rôl cyfredol yn ei gynnwys own_role: nid oes modd ei newid gyda'ch rôl cyfredol position: @@ -62,4 +62,4 @@ cy: webhook: attributes: events: - invalid_permissions: ni ellir cynnwys digwyddiadau nad oes gennych yr hawl iddynt + invalid_permissions: nid oes modd cynnwys digwyddiadau nad oes gennych yr hawl iddyn nhw diff --git a/config/locales/activerecord.eo.yml b/config/locales/activerecord.eo.yml index f99f726e23..45149cd117 100644 --- a/config/locales/activerecord.eo.yml +++ b/config/locales/activerecord.eo.yml @@ -25,7 +25,7 @@ eo: account: attributes: username: - invalid: nur literoj, ciferoj kaj substrekoj + invalid: devas enhavi nur literojn, ciferojn kaj substrekojn reserved: rezervita admin/webhook: attributes: diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index 4d2cba3a27..999ac6859a 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -42,7 +42,7 @@ es-MX: status: attributes: reblog: - taken: del estado ya existe + taken: de la publicación ya existe user: attributes: email: diff --git a/config/locales/activerecord.eu.yml b/config/locales/activerecord.eu.yml index a67c1403c5..e335196da9 100644 --- a/config/locales/activerecord.eu.yml +++ b/config/locales/activerecord.eu.yml @@ -15,6 +15,12 @@ eu: user/invite_request: text: Arrazoia errors: + attributes: + domain: + invalid: ez da domeinu izen baliogarria + messages: + invalid_domain_on_line: "%{value} ez da domeinu izen baliogarria" + too_many_lines: "%{limit} lerroko muga gainditzen du" models: account: attributes: diff --git a/config/locales/activerecord.fa.yml b/config/locales/activerecord.fa.yml index 3d1e8012bf..81e54ed3a9 100644 --- a/config/locales/activerecord.fa.yml +++ b/config/locales/activerecord.fa.yml @@ -15,6 +15,12 @@ fa: user/invite_request: text: دلیل errors: + attributes: + domain: + invalid: نام دامنهٔ معتبری نیست + messages: + invalid_domain_on_line: "%{value} نام دامنهٔ معتبری نیست" + too_many_lines: بیش از کران %{limit} خط است models: account: attributes: diff --git a/config/locales/activerecord.fy.yml b/config/locales/activerecord.fy.yml index b571ab60dc..69139eba1d 100644 --- a/config/locales/activerecord.fy.yml +++ b/config/locales/activerecord.fy.yml @@ -15,6 +15,12 @@ fy: user/invite_request: text: Reden errors: + attributes: + domain: + invalid: is in ûnjildige domeinnamme + messages: + invalid_domain_on_line: "%{value} is in ûnjildige domeinnamme" + too_many_lines: giet oer de limyt fan %{limit} rigels models: account: attributes: diff --git a/config/locales/activerecord.gl.yml b/config/locales/activerecord.gl.yml index 961c96edb4..11cae19c61 100644 --- a/config/locales/activerecord.gl.yml +++ b/config/locales/activerecord.gl.yml @@ -7,7 +7,7 @@ gl: options: Opcións user: agreement: Acordo do Servizo - email: Enderezo de email + email: Enderezo de correo locale: Locale password: Contrasinal user/account: diff --git a/config/locales/activerecord.ia.yml b/config/locales/activerecord.ia.yml index bccfb96602..809b8fd582 100644 --- a/config/locales/activerecord.ia.yml +++ b/config/locales/activerecord.ia.yml @@ -20,6 +20,7 @@ ia: invalid: non es un nomine de dominio valide messages: invalid_domain_on_line: "%{value} non es un nomine de dominio valide" + too_many_lines: il es ultra le limite de %{limit} lineas models: account: attributes: diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml index 468df9b12b..21be8aa345 100644 --- a/config/locales/activerecord.ja.yml +++ b/config/locales/activerecord.ja.yml @@ -15,6 +15,12 @@ ja: user/invite_request: text: 理由 errors: + attributes: + domain: + invalid: 有効なドメイン名ではありません + messages: + invalid_domain_on_line: "%{value} は有効なドメイン名ではありません" + too_many_lines: "%{limit} 行の制限を超えています。" models: account: attributes: diff --git a/config/locales/activerecord.lad.yml b/config/locales/activerecord.lad.yml index 31e0223cca..8fd23b53fe 100644 --- a/config/locales/activerecord.lad.yml +++ b/config/locales/activerecord.lad.yml @@ -15,6 +15,11 @@ lad: user/invite_request: text: Razon errors: + attributes: + domain: + invalid: no es un nombre de domeno valido + messages: + invalid_domain_on_line: "%{value} no es un nombre de domeno valido" models: account: attributes: diff --git a/config/locales/activerecord.ml.yml b/config/locales/activerecord.ml.yml index 8b20ee34b3..90c5b38ad5 100644 --- a/config/locales/activerecord.ml.yml +++ b/config/locales/activerecord.ml.yml @@ -4,23 +4,37 @@ ml: attributes: poll: expires_at: സമയപരിധി - options: ചോയ്‌സുകൾ + options: തിരഞ്ഞെടുപ്പുകൾ user: agreement: സേവന ഉടമ്പടി email: ഇ-മെയിൽ വിലാസം locale: ഭാഷ - password: രഹസ്യവാചകം + password: രഹസ്യവാക്കു് user/account: username: ഉപയോക്തൃനാമം user/invite_request: text: കാരണം errors: + attributes: + domain: + invalid: ഇതൊരു തെറ്റിയ മേഖലപേരാണു് + messages: + invalid_domain_on_line: "%{value} ഒരു തെറ്റിയ മേഖലപേരാണു്" + too_many_lines: ഇതു് %{limit} വരിയതിരിന്റെ മേലെയാണു് models: account: attributes: username: invalid: അക്ഷരങ്ങളും, അക്കങ്ങളും, പിന്നെ അടിവരയും മാത്രം reserved: കരുതിവച്ചു + admin/webhook: + attributes: + url: + invalid: ഇതൊരു തെറ്റിയ വിലാസമാണു് + doorkeeper/application: + attributes: + website: + invalid: ഇതൊരു തെറ്റിയ വിലാസമാണു് status: attributes: reblog: diff --git a/config/locales/activerecord.ms.yml b/config/locales/activerecord.ms.yml index 5f282702f1..02f836b356 100644 --- a/config/locales/activerecord.ms.yml +++ b/config/locales/activerecord.ms.yml @@ -15,6 +15,8 @@ ms: user/invite_request: text: Sebab errors: + messages: + too_many_lines: melebihi had %{limit} baris models: account: attributes: diff --git a/config/locales/activerecord.nan.yml b/config/locales/activerecord.nan.yml new file mode 100644 index 0000000000..b1e9dc67bf --- /dev/null +++ b/config/locales/activerecord.nan.yml @@ -0,0 +1,16 @@ +--- +nan: + activerecord: + attributes: + poll: + expires_at: 期限 + options: 選項 + user: + agreement: 服務協議 + email: 電子phue地址 + locale: 在地化 + password: 密碼 + user/account: + username: 用者ê名 + user/invite_request: + text: 原因 diff --git a/config/locales/activerecord.ne.yml b/config/locales/activerecord.ne.yml index db03c5186b..f2b7b0ef80 100644 --- a/config/locales/activerecord.ne.yml +++ b/config/locales/activerecord.ne.yml @@ -1 +1,31 @@ +--- ne: + activerecord: + attributes: + user: + agreement: सेवा सम्झौता + email: ईमेल ठेगाना + password: पासवर्ड + user/account: + username: प्रयोगकर्ता नाम + user/invite_request: + text: कारण + errors: + attributes: + domain: + invalid: मान्य डोमेन नाम होइन + messages: + invalid_domain_on_line: "%{value} मान्य डोमेन नाम होइन" + models: + account: + attributes: + username: + invalid: अक्षर, संख्या र अन्डरस्कोर मात्र हुनु पर्छ + admin/webhook: + attributes: + url: + invalid: मान्य URL होइन + doorkeeper/application: + attributes: + website: + invalid: मान्य URL होइन diff --git a/config/locales/activerecord.no.yml b/config/locales/activerecord.no.yml index 5abe3fdc38..b79a5bcccb 100644 --- a/config/locales/activerecord.no.yml +++ b/config/locales/activerecord.no.yml @@ -15,6 +15,9 @@ user/invite_request: text: Årsak errors: + attributes: + domain: + invalid: er ikke et gyldig domenenavn models: account: attributes: diff --git a/config/locales/activerecord.pt-BR.yml b/config/locales/activerecord.pt-BR.yml index 52f2b6ee87..2a36fd4905 100644 --- a/config/locales/activerecord.pt-BR.yml +++ b/config/locales/activerecord.pt-BR.yml @@ -49,7 +49,7 @@ pt-BR: blocked: usa provedor de e-mail não permitido unreachable: parece não existir role_id: - elevated: não pode maior que sua função atual + elevated: não pode ser maior que a sua função atual user_role: attributes: permissions_as_keys: diff --git a/config/locales/activerecord.pt-PT.yml b/config/locales/activerecord.pt-PT.yml index 60f3def5d3..a06fba32c6 100644 --- a/config/locales/activerecord.pt-PT.yml +++ b/config/locales/activerecord.pt-PT.yml @@ -7,7 +7,7 @@ pt-PT: options: Escolhas user: agreement: Contrato de prestação de serviço - email: Endereço de correio electrónico + email: Endereço de e-mail locale: Região password: Palavra-passe user/account: @@ -15,11 +15,17 @@ pt-PT: user/invite_request: text: Motivo errors: + attributes: + domain: + invalid: não é um nome de domínio válido + messages: + invalid_domain_on_line: "%{value} não é um nome de domínio válido" + too_many_lines: está acima do limite de %{limit} linhas models: account: attributes: username: - invalid: deve conter apenas letras, números e traços inferiores + invalid: deve conter apenas letras, números e traços inferiores (_) reserved: está reservado admin/webhook: attributes: diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 203d8e2c34..b62bf45fc7 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -3,7 +3,7 @@ ru: activerecord: attributes: poll: - expires_at: Крайний срок + expires_at: Срок окончания голосования options: Варианты user: agreement: Соглашение с условиями сервиса diff --git a/config/locales/activerecord.sl.yml b/config/locales/activerecord.sl.yml index 941b847090..299a936714 100644 --- a/config/locales/activerecord.sl.yml +++ b/config/locales/activerecord.sl.yml @@ -15,6 +15,12 @@ sl: user/invite_request: text: Razlog errors: + attributes: + domain: + invalid: ni veljavno ime domene + messages: + invalid_domain_on_line: "%{value} ni veljavno ime domene" + too_many_lines: presega omejitev %{limit} vrstic models: account: attributes: diff --git a/config/locales/activerecord.tok.yml b/config/locales/activerecord.tok.yml index 9862a7f953..14a0d3da08 100644 --- a/config/locales/activerecord.tok.yml +++ b/config/locales/activerecord.tok.yml @@ -4,11 +4,62 @@ tok: attributes: poll: expires_at: pini tenpo + options: wile + user: + agreement: nasin lawa + email: nimi ilo pi pana lipu + locale: toki + password: nimi len sijelo user/account: username: nimi jan + user/invite_request: + text: tan errors: + attributes: + domain: + invalid: li nimi ilo ike + messages: + invalid_domain_on_line: nimi "%{value}" li nimi ilo ike + too_many_lines: la %{limit} o mute nanpa wan pi linja sitelen models: account: attributes: username: - reserved: jan ante li jo e nimi ni + invalid: 'la ni taso li ken lon: sitelen nimi, en sitelen nanpa, en sitelen pi linja anpa' + reserved: la jan ante li jo e nimi ni + admin/webhook: + attributes: + url: + invalid: li nimi ike pi lipu ilo + doorkeeper/application: + attributes: + website: + invalid: li nimi ike pi lipu ilo + import: + attributes: + data: + malformed: li nasin ike + status: + attributes: + reblog: + taken: pi toki ni li lon + user: + attributes: + email: + blocked: la kulupu ni pi nimi ilo li ike + unreachable: li lon ala tawa mi + role_id: + elevated: o anpa sina + user_role: + attributes: + permissions_as_keys: + dangerous: la jan pi wawa ala o jo ala e ken pi mute ni + elevated: la sina jo ala e ken la ken ni o lon ala + own_role: la sina wawa lili la sina ken ala ante e ona + position: + elevated: o anpa sina + own_role: la sina wawa lili la sina ken ala ante e ona + webhook: + attributes: + events: + invalid_permissions: la sina ken ala lon tenpo namako la tenpo ni li ken ala lon diff --git a/config/locales/activerecord.tt.yml b/config/locales/activerecord.tt.yml index e53c2341e4..8c69a7e1b6 100644 --- a/config/locales/activerecord.tt.yml +++ b/config/locales/activerecord.tt.yml @@ -5,10 +5,47 @@ tt: poll: options: Сайлаулар user: - email: Почта адресы + email: Эл. почта адресы locale: Тел password: Серсүз user/account: username: Кулланучы исеме user/invite_request: text: Сәбәп + errors: + attributes: + domain: + invalid: бу домен исеме гамәлдә түгел + messages: + invalid_domain_on_line: "%{value} дөрес домен исеме түгел" + models: + account: + attributes: + username: + invalid: хәрефләр, цифрлар һәм ассызыклау билгеләре генә ярый + admin/webhook: + attributes: + url: + invalid: рөхсәт ителгән URL түгел + doorkeeper/application: + attributes: + website: + invalid: рөхсәт ителгән URL түгел + import: + attributes: + data: + malformed: формат дөрес түгел + status: + attributes: + reblog: + taken: язма инде бар + user: + attributes: + email: + blocked: ярамаган эл. почта провайдерын куллана + role_id: + elevated: сезнең хәзерге ролегездән югарырак була алмый + user_role: + attributes: + position: + elevated: сезнең хәзерге ролегездән югарырак була алмый diff --git a/config/locales/activerecord.zh-CN.yml b/config/locales/activerecord.zh-CN.yml index a4edf294a3..476947ea4d 100644 --- a/config/locales/activerecord.zh-CN.yml +++ b/config/locales/activerecord.zh-CN.yml @@ -49,16 +49,16 @@ zh-CN: blocked: 使用了被封禁的电子邮件提供商 unreachable: 似乎不存在 role_id: - elevated: 不能高于您当前的身份 + elevated: 不能高于你目前所处角色拥有的权限 user_role: attributes: permissions_as_keys: dangerous: 包含对基本角色不安全的权限 - elevated: 不能包含您当前身份未有的权限 - own_role: 无法以您当前的身份更改 + elevated: 不能包含你当前身份未有的权限 + own_role: 你当前的角色无权执行此更改 position: - elevated: 不能高于您当前的角色 - own_role: 无法以您当前的身份更改 + elevated: 不能高于你当前的角色 + own_role: 你当前的角色无权执行此更改 webhook: attributes: events: diff --git a/config/locales/activerecord.zh-TW.yml b/config/locales/activerecord.zh-TW.yml index 7422550660..113d881ae5 100644 --- a/config/locales/activerecord.zh-TW.yml +++ b/config/locales/activerecord.zh-TW.yml @@ -46,7 +46,7 @@ zh-TW: user: attributes: email: - blocked: 使用不被允許的電子郵件供應商 + blocked: 使用不被允許的電子郵件提供商 unreachable: 該電子郵件地址似乎無法使用 role_id: elevated: 不能高於您目前的角色 diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 72c5d9d752..623ad830a3 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -9,8 +9,8 @@ ast: last_active: última actividá nothing_here: "¡Equí nun hai nada!" posts: - one: Artículu - other: Artículos + one: Publicación + other: Publicaciones posts_tab_heading: Artículos admin: account_actions: @@ -76,7 +76,7 @@ ast: destroy_announcement_html: "%{name} desanició l'anunciu «%{target}»" destroy_custom_emoji_html: "%{name} desanició'l fustaxe %{target}" destroy_domain_block_html: "%{name} desbloquió'l dominiu %{target}" - destroy_status_html: "%{name} quitó l'artículu de: %{target}" + destroy_status_html: "%{name} quitó la publicación de: %{target}" destroy_user_role_html: "%{name} desanició'l rol %{target}" disable_custom_emoji_html: "%{name} desactivó'l fustaxe «%{target}»" enable_custom_emoji_html: "%{name} activó'l fustaxe «%{target}»" @@ -87,7 +87,7 @@ ast: unblock_email_account_html: "%{name} desbloquió la direición de corréu electrónicu de: %{target}" update_announcement_html: "%{name} anovó l'anunciu «%{target}»" update_custom_emoji_html: "%{name} anovó'l fustaxe «%{target}»" - update_status_html: "%{name} anovó l'artículu de: %{target}" + update_status_html: "%{name} anovó la publicación de: %{target}" update_user_role_html: "%{name} camudó'l rol %{target}" empty: Nun s'atopó nengún rexistru. announcements: @@ -100,7 +100,7 @@ ast: create: Crear l'anunciu title: Anunciu nuevu publish: Espublizar - published_msg: "¡L'anunciu espublizóse correutamente!" + published_msg: "¡L'anunciu publicóse correutamente!" scheduled_msg: "¡Programóse l'espublizamientu del anunciu!" title: Anuncios unpublish: Dexar d'espublizar @@ -347,14 +347,14 @@ ast: back_to_account: Volver a la páxina de la cuenta language: Llingua metadata: Metadatos - original_status: Artículu orixinal + original_status: Publicación orixinal visibility: Visibilidá with_media: Con elementos multimedia strikes: actions: - delete_statuses: "%{name} desanició l'artículu de: %{target}" + delete_statuses: "%{name} desanició la publicación de: %{target}" disable: "%{name} conxeló la cuenta de: %{target}" - mark_statuses_as_sensitive: "%{name} marcó l'artículu de %{target} como sensible" + mark_statuses_as_sensitive: "%{name} marcó la publicación de %{target} como sensible" none: "%{name} unvió una alvertencia a %{target}" sensitive: "%{name} marcó la cuenta de %{target} como sensible" suspend: "%{name} suspendió la cuenta de: %{target}" @@ -375,8 +375,8 @@ ast: preview_card_providers: title: Espublizadores statuses: - allow: Permitir l'artículu - disallow: Refugar l'artículu + allow: Permitir la publicación + disallow: Refugar la publicación title: Artículos en tendencia tags: current_score: 'Puntuación total: %{score}' @@ -449,7 +449,7 @@ ast: your_token: El pase d'accesu auth: delete_account: Desaniciu de la cuenta - delete_account_html: Si quies desaniciar la cuenta, pues facelo equí. Va pidísete que confirmes l'aición. + delete_account_html: Si quies desaniciar la cuenta, pues facelo equí. Vamos pidite que confirmes l'aición. description: prefix_sign_up: "¡Rexístrate güei en Mastodon!" didnt_get_confirmation: "¿Nun recibiesti l'enllaz de confirmación?" @@ -460,6 +460,10 @@ ast: migrate_account: Cambéu de cuenta migrate_account_html: Si quies redirixir esta cuenta a otra diferente, pues configurar esta opción equí. privacy_policy_agreement_html: Lleí y acepto la política de privacidá + progress: + confirm: Confirmación del corréu electrónicu + details: Los tos detalles + rules: Aceptación de normes providers: cas: CAS saml: SAML @@ -471,6 +475,8 @@ ast: security: Seguranza setup: link_not_received: "¿Nun consiguiesti l'enllaz?" + sign_in: + preamble_html: Anicia la sesión coles credenciales del dominiu %{domain}. Si la to cuenta ta agospiada n'otru sirvidor, nun vas ser a aniciar la sesión equí. sign_up: preamble: Con una cuenta nesti sirvidor de Mastodon vas ser a siguir a cualesquier perfil de la rede, independientemente del sirvidor onde s'agospie la so cuenta. title: 'Creación d''una cuenta en: %{domain}.' @@ -517,8 +523,8 @@ ast: created_at: Data recipient: Dirixóse a reject_appeal: Refugar l'apellación - status: 'Artículu #%{id}' - status_removed: L'artículu yá se quitó del sistema + status: 'Publicación #%{id}' + status_removed: La publicación yá se quitó del sistema your_appeal_approved: Aprobóse la to apellación your_appeal_pending: Unviesti una apellación your_appeal_rejected: Refugóse la to apellación @@ -574,8 +580,8 @@ ast: one: "%{count} pallabra clave" other: "%{count} pallabres claves" statuses: - one: "%{count} artículu" - other: "%{count} artículos" + one: "%{count} publicación" + other: "%{count} publicaciones" title: Peñeres new: title: Amestar una peñera @@ -639,12 +645,13 @@ ast: successful_sign_in_html: Anicióse correutamente la sesión col métodu «%{method}» dende %{ip} (%{browser}) media_attachments: validations: - images_and_video: Nun se pue axuntar nengún videu a un artículu que yá contién imáxenes + images_and_video: Nun se pue axuntar nengún videu a una publicación que yá contién imáxenes too_many: Nun se puen axuntar más de 4 ficheros migrations: errors: missing_also_known_as: nun ye un nomatu d'esta cuenta move_to_self: nun pue ser la cuenta actual + incoming_migrations: Migración d'otra cuenta incoming_migrations_html: Pa migrar d'otra cuenta a esta, primero tienes de crear un nomatu de cuenta. warning: followers: Esta aición va mover tolos siguidores de la cuenta actual a la nueva @@ -655,7 +662,7 @@ ast: sign_up: subject: "%{name} rexistróse" favourite: - subject: "%{name} marcó'l to artículu como favoritu" + subject: "%{name} marcó la to publicación como favorita" follow: body: "¡Agora %{name} siguete!" subject: "%{name} ta siguiéndote" @@ -667,10 +674,10 @@ ast: subject: "%{name} mentóte" title: Mención nueva reblog: - body: "%{name} compartió'l to artículu:" - subject: "%{name} compartió'l to artículu" + body: "%{name} compartió la to publicación:" + subject: "%{name} compartió la to publicación" update: - subject: "%{name} editó un artículu" + subject: "%{name} editó una publicación" notifications: email_events_hint: 'Seleiciona los eventos de los que quies recibir avisos:' number: @@ -726,6 +733,7 @@ ast: over_daily_limit: Superesti la llende de %{limit} artículos programaos pa güei over_total_limit: Superesti la llende de %{limit} artículos programaos sessions: + activity: Última actividá browser: Restolador browsers: alipay: Alipay @@ -778,6 +786,7 @@ ast: import: Importación import_and_export: Importación y esportación migrate: Migración de la cuenta + notifications: Avisos per corréu electrónicu preferences: Preferencies profile: Perfil públicu relationships: Perfiles que sigues y te siguen @@ -797,12 +806,12 @@ ast: other: "%{count} vídeos" default_language: La mesma que la de la interfaz errors: - in_reply_not_found: L'artículu al que tentes de responder paez que nun esiste. + in_reply_not_found: La publicación a la que tentes de responder paez que nun esiste. pin_errors: direct: Nun se puen fixar los artículos que son visibles namás pa los usuarios mentaos limit: Yá fixesti'l númberu máximu d'artículos - ownership: Nun se pue fixar l'artículu d'otru perfil - reblog: Nun se pue fixar un artículu compartíu + ownership: Nun se pue fixar la publicación d'otru perfil + reblog: Nun se pue fixar una publicación compartida title: "%{name}: «%{quote}»" visibilities: direct: Mensaxe direutu @@ -816,12 +825,12 @@ ast: keep_direct: Caltener los mensaxes direutos keep_direct_hint: Nun desanicia nengún mensaxe direutu keep_media: Caltener los artículos con elementos multimedia - keep_media_hint: Nun desanicia nengún artículu de to que contenta elementos multimedia + keep_media_hint: Nun desanicia nenguna publicación de to que contenta elementos multimedia keep_pinned: Caltener los artículos fixaos keep_polls: Caltener les encuestes keep_polls_hint: Nun desanicia nenguna encuesta de to keep_self_bookmark: Caltener los artículos que metieres en Marcadores - keep_self_bookmark_hint: Nun desanicia nengún artículu que metieres en Marcadores + keep_self_bookmark_hint: Nun desanicia nenguna publicación que metieres en Marcadores min_age: '1209600': 2 selmanes '15778476': 6 meses diff --git a/config/locales/az.yml b/config/locales/az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/be.yml b/config/locales/be.yml index d1d3e17679..b595e2cd3b 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -625,6 +625,7 @@ be: suspend_description_html: Уліковы запіс і ўсё яго змесціва будзе недаступна і ў далейшым выдалены, узаемадзеянне з ім будзе немагчыма. Магчыма адмяніць на працягу 30 дзён. Закрывае ўсе скаргі на гэты ўліковы запіс. actions_description_html: Вырашыце, якія дзеянні распачаць, каб вырашыць гэтую скаргу. Калі вы прымеце меры пакарання ў дачыненні да ўліковага запісу, пра які паведамляецца, ім будзе адпраўлена апавяшчэнне па электроннай пошце, за выключэннем выпадкаў, калі выбрана катэгорыя Спам. actions_description_remote_html: Вырашыце як паступіць з гэтай скаргай. Гэта паўплывае толькі на тое як ваш сервер звязваецца з аддалёным уліковым запісам і апрацоўвае яго кантэнт. + actions_no_posts: У гэтай скаргі няма зьвязаных паведамленьняў для выдаленьня add_to_report: Дадаць яшчэ дэталяў да скаргі already_suspended_badges: local: Ужо прыпынена на гэтым сэрвэры @@ -899,6 +900,9 @@ be: message_html: Вы не вызначылі ніякіх правілаў сервера. sidekiq_process_check: message_html: Не працуе працэс Sidekiq для %{value} чаргі. Калі ласка праверце вашу канфігурацыю Sidekiq + software_version_check: + action: Праверыць наяўнасьць абнаўленьняў + message_html: Даступна абнаўленьне Mastodon. software_version_critical_check: action: Прагледзець даступныя абнаўленні message_html: Даступна крытычнае абнаўленне Mastodon, калі ласка, зрабіце абнаўленне як мага хутчэй. @@ -925,6 +929,7 @@ be: name: Назва newest: Спачатку новыя oldest: Спачатку старыя + open: Глядзець публічна reset: Скінуць review: Стан праверкі search: Пошук @@ -1083,7 +1088,7 @@ be: localization: body: Mastodon перакладаецца добраахвотнікамі. guide_link: https://be.crowdin.com/project/mastodon/be - guide_link_text: Кожны і кожная можа зрабіць унёсак. + guide_link_text: Кожны можа зрабіць унёсак. sensitive_content: Далікатны змест application_mailer: notification_preferences: Змяніць налады эл. пошты @@ -1722,6 +1727,7 @@ be: delete: Выдаленне ўліковага запісу development: Распрацоўка edit_profile: Рэдагаваць профіль + export: Экспарт featured_tags: Выбраныя хэштэгі import: Імпарт import_and_export: Імпарт і экспарт diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 00b3a41167..f84e62730a 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -21,9 +21,12 @@ bg: one: Публикация other: Публикации posts_tab_heading: Публикации + self_follow_error: Не е позволено да следвате собствения си акаунт admin: account_actions: action: Изпълняване на действие + already_silenced: Този акаунт вече е ограничен. + already_suspended: Този акаунт вече е спрян. title: Извършване на модериращо действие за %{acct} account_moderation_notes: create: Оставяне на бележка @@ -45,6 +48,7 @@ bg: title: Промяна на имейл за %{username} change_role: changed_msg: Успешно променена роля! + edit_roles: Управление на потребителските роли label: Промяна на ролята no_role: Без роля title: Промяна на ролята за %{username} @@ -57,6 +61,7 @@ bg: demote: Понижаване destroyed_msg: Данните на %{username} вече са на опашка за незабавно изтриване disable: Замразяване + disable_sign_in_token_auth: Изключване на удостоверяването с маркер по е-поща disable_two_factor_authentication: Изключване на 2факт. удостов. disabled: Замразено display_name: Име на показ @@ -65,6 +70,7 @@ bg: email: Имейл email_status: Състояние на имейл enable: Размразяване + enable_sign_in_token_auth: Задействане на удостоверяването с маркер по е-поща enabled: Включено enabled_msg: Успешно размразяване на акаунта на %{username} followers: Последователи @@ -129,6 +135,7 @@ bg: resubscribe: Абониране пак role: Роля search: Търсене + search_same_email_domain: Други потребители със същия домейн за е-поща search_same_ip: Други потребители със същия IP security: Сигурност security_measures: @@ -169,21 +176,26 @@ bg: approve_appeal: Одобряване на обжалването approve_user: Одобряване на потребител assigned_to_self_report: Назначете доклад + change_email_user: Промяна на имейл за потребител change_role_user: Промяна на роля за потребител confirm_user: Потвърждаване на потребител create_account_warning: Създаване на предупреждение create_announcement: Създаване на оповестяване + create_canonical_email_block: Сътворяване на блоккиране за е-поща create_custom_emoji: Създаване на персонализирано емоджи create_domain_allow: Създаване на позволение за домейна create_domain_block: Създаване на блокиране за домейна + create_email_domain_block: Създаване на блокиране на имейл домейн create_ip_block: Създаване на правило за IP create_unavailable_domain: Създаване на недостъпен домейн create_user_role: Създаване на роля demote_user: Понижаване на потребител destroy_announcement: Изтриване на оповестяване + destroy_canonical_email_block: Изтриване на блокиране за е-поща destroy_custom_emoji: Изтриване на персонализирано емоджи destroy_domain_allow: Изтриване на позволението за домейн destroy_domain_block: Изтриване на блокирането за домейна + destroy_email_domain_block: Изтриване на блокиране на домейн на е-поща destroy_instance: Чистка на домейна destroy_ip_block: Изтриване на правило за IP destroy_status: Изтриване на публикация @@ -191,8 +203,10 @@ bg: destroy_user_role: Унищожаване на роля disable_2fa_user: Изкл. на 2факт.удостов. disable_custom_emoji: Деактивиране на персонализирано емоджи + disable_sign_in_token_auth_user: Изключване на удостоверяването с код по имейл за потребител disable_user: Изключване на потребител enable_custom_emoji: Включване на персонализирано емоджи + enable_sign_in_token_auth_user: Включване на аутентикацията на потребителя с имейл токен enable_user: Активиране на потребител memorialize_account: Възпоменаване на акаунта promote_user: Повишаване на потребител @@ -222,20 +236,26 @@ bg: approve_appeal_html: "%{name} одобри обжалването на решение за модериране от %{target}" approve_user_html: "%{name} одобри регистрирането от %{target}" assigned_to_self_report_html: "%{name} възложи на себе си доклад %{target}" + change_email_user_html: "%{name} промени адреса на имейла на потребителя %{target}" change_role_user_html: "%{name} промени ролята на %{target}" + confirm_user_html: "%{name} потвърди адреса на имейла на потребителя %{target}" create_account_warning_html: "%{name} изпрати предупреждение до %{target}" create_announcement_html: "%{name} създаде ново оповестяване %{target}" + create_canonical_email_block_html: "%{name} блокира имейл с хеш %{target}" create_custom_emoji_html: "%{name} качи ново емоджи %{target}" create_domain_allow_html: "%{name} позволи федерирането с домейн %{target}" create_domain_block_html: "%{name} блокира домейн %{target}" + create_email_domain_block_html: "%{name} блокира домейн за е-поща %{target}" create_ip_block_html: "%{name} създаде правило за IP %{target}" create_unavailable_domain_html: "%{name} спря доставянето до домейн %{target}" create_user_role_html: "%{name} създаде роля %{target}" demote_user_html: "%{name} понижи потребителя %{target}" destroy_announcement_html: "%{name} изтри оповестяване %{target}" + destroy_canonical_email_block_html: "%{name} отблокира имейла с хеш %{target}" destroy_custom_emoji_html: "%{name} изтри емоджито %{target}" destroy_domain_allow_html: "%{name} забрани федерирация с домейн %{target}" destroy_domain_block_html: "%{name} отблокира домейн %{target}" + destroy_email_domain_block_html: "%{name} отблокира домейн за е-поща %{target}" destroy_instance_html: "%{name} прочисти домейн %{target}" destroy_ip_block_html: "%{name} изтри правило за IP %{target}" destroy_status_html: "%{name} премахна публикация от %{target}" @@ -243,8 +263,10 @@ bg: destroy_user_role_html: "%{name} изтри роля %{target}" disable_2fa_user_html: "%{name} изключи двуфакторното изискване за потребител %{target}" disable_custom_emoji_html: "%{name} изключи емоджито %{target}" + disable_sign_in_token_auth_user_html: "%{name} изключва удостоверението с код по е-поща за %{target}" disable_user_html: "%{name} изключи влизането за потребител %{target}" enable_custom_emoji_html: "%{name} включи емоджито %{target}" + enable_sign_in_token_auth_user_html: "%{name} задейства удостоверението с код по е-поща за %{target}" enable_user_html: "%{name} включи влизането за потребител %{target}" memorialize_account_html: "%{name} превърна акаунта на %{target} във възпоменателна страница" promote_user_html: "%{name} повиши потребителя %{target}" @@ -252,6 +274,7 @@ bg: reject_user_html: "%{name} отхвърли регистрирането от %{target}" remove_avatar_user_html: "%{name} премахна аватара на %{target}" reopen_report_html: "%{name} отвори пак доклада на %{target}" + resend_user_html: "%{name} изпрати пак е-писмо за потвърждение за %{target}" reset_password_user_html: "%{name} нулира паролата на потребител %{target}" resolve_report_html: "%{name} разреши случая с доклада от %{target}" sensitive_account_html: "%{name} означи мултимедия на %{target} като деликатна" @@ -412,6 +435,7 @@ bg: attempts_over_week: one: "%{count} опит за изминалата седмица" other: "%{count} опита за регистрация през изминалата седмица" + created_msg: Успешно блокиран домейн на е-поща delete: Изтриване dns: types: @@ -420,8 +444,12 @@ bg: new: create: Добавяне на домейн resolve: Преобразуване на домейна + title: Блокиране на нов домейн на имейл + no_email_domain_block_selected: Няма промяна, тъй като няма избрани блокирания на домейн на имейл not_permitted: Няма позволение + resolved_dns_records_hint_html: Името на домейна се разрешава в следните MX домейни, които в крайна сметка са отговорни за приемането на е-писма. Блокирането на MX домейн блокира регистрациите от всеки имейл, използващ същия MX домейн, дори видимото име на домейна да е различно. Внимавайте и не блокирайте главните доставчици на е-поща. resolved_through_html: Преобразувано чрез %{domain} + title: Блокирани домейни на имейл export_domain_allows: new: title: Внасяне на позволенията на домейни @@ -575,7 +603,9 @@ bg: resolve_description_html: Няма да се предприеме действие срещу докладвания акаунт, няма да се записва нарушение и докладът ще се затвори. silence_description_html: Профилът ще е видим само за последователите му или търсещите го ръчно, което драстично ограничава обсега му. Настройката може да бъде отменена по всяко време. Затваря всички доклади срещу акаунта. suspend_description_html: Акаунтът и неговото съдържание ще бъдат недостъпни и евентуално изтрити и взаимодействието с него ще е невъзможно. Обрамотимо до 30 дни. Затваря всички доклади срещу този акаунт. + actions_description_html: Решете какво действие може да се предприеме, за да се отхвърли докладът. Ако предприемете наказателно действие срещу докладвания акаунт, към лицето ще се изпрати известие по имейл, освен ако не е била избрана категорията Спам. actions_description_remote_html: Преценете с какво действие да решите този доклад. Това ще има ефекет върху това как вашият сървър комуникира с този отдалечен акаунт и се справя с неговото съдържание. + actions_no_posts: Този доклад няма никакви свързани публикации за изтриване add_to_report: Добавяне на още към доклада already_suspended_badges: local: Вече е спряно на този сървър @@ -639,6 +669,7 @@ bg: delete_data_html: Изтриване на профила и съдържанието на @%{acct} за 30 дни от сега, освен ако междувременно не получи спиране preview_preamble_html: "@%{acct} ще получи предупреждение със следното съдържание:" record_strike_html: Запис на предупреждение против @%{acct}, за да ви помогне при изострянето на бъдещи нарушения от този акаунт + send_email_html: Изпращане на предупредително е-писмо на @%{acct} warning_placeholder: Незадължителни допълнителни причини за модераторско действие. target_origin: Произход на докладвания акаунт title: Доклади @@ -678,6 +709,7 @@ bg: manage_appeals: Управление на жалбите manage_appeals_description: Позволява на потребителите да разглеждат обжалвания срещу модераторски действия manage_blocks: Управляване на блокиранията + manage_blocks_description: Позволява на потребителите да блокират доставчици на е-поща и IP адреси manage_custom_emojis: Управляване на персонализирани емоджита manage_custom_emojis_description: Позволява на потребителите да управляват персонализирани емоджита в сървъра manage_federation: Управление на Федерацията @@ -695,6 +727,7 @@ bg: manage_taxonomies: Управление на класификации manage_taxonomies_description: Позволяване на потребителите да преглеждат нашумяло съдържание и да обновяват настройките за хаштагове manage_user_access: Управление на потребителския достъп + manage_user_access_description: Позволява потребителите да изключват за другите потребители двуфакторното удостоверяване, да променят имейл адресите и да си задават нови пароли manage_users: Управление на потребителите manage_users_description: Позволяване на потребителите да виждат подробностите за други потребители и да извършват модераторски действия срещу тях manage_webhooks: Управление на уебкуките @@ -769,6 +802,7 @@ bg: destroyed_msg: Успешно изтриване на качването на сайта! software_updates: critical_update: Критично важно - обновете бързо + description: Препоръчва се да държите осъвременена инсталацията си на Mastodon, за да се възползвате от най-новите поправки и функции. Освен това, понякога е много важно да се осъвременява навреме Mastodon, за да се избегнат проблеми със сигурността. Заради тези причини Mastodon проверява за обновление на всеки 30 минути и ще ви извести според предпочитанията ви за известяване по имейл. documentation_link: Научете повече release_notes: Бележки към изданието title: Налични обновявания @@ -842,6 +876,9 @@ bg: message_html: Не сте определили никакви правила на сървъра. sidekiq_process_check: message_html: Не работи процес Sidekiq за %{value} опашка/и. Прегледайте настройките си за Sidekiq + software_version_check: + action: Преглед на наличните обновявания + message_html: Налично е обновяване на Mastodon. software_version_critical_check: action: Преглед на наличните обновявания message_html: Налично e критично обновяване на Mastodon. Обновете възможно най-бързо. @@ -868,6 +905,7 @@ bg: name: Име newest: Най-нови oldest: Най-стари + open: Преглед публично reset: Нулиране review: Преглед на състояние search: Търсене @@ -881,7 +919,10 @@ bg: links: allow: Позволяване на връзка allow_provider: Позволяване на публикуващия + confirm_allow: Наистина ли искате да позволите избраните връзки? confirm_allow_provider: Наистина ли искате да позволите избраните доставчици? + confirm_disallow: Наистина ли искате да забраните избраните връзки? + confirm_disallow_provider: Наистина ли искате да забраните избраните доставчици? description_html: Това са връзки, които в момента са много пъти споделяни от акаунти, чиито публикации сървърът ви вижда. Може да помогне на потребителите ви да разберат какво се случва по света. Никоя връзка няма да се показва публично, докато не одобрите публикуващия. Може още и да одобрявате или отхвърляте отделни връзки. disallow: Забранявам връзката disallow_provider: Забраняване на публикуващия @@ -905,13 +946,17 @@ bg: statuses: allow: Позволяване на публикацията allow_account: Позволяване на автора - description_html: Това са публикации, за които сървърът ви знае, че са често споделяни или харесвани в момента. Това може да помогне на вашите нови и завръщащи се потребители да открият повече хора за следване. Никоя от публикациите няма да бъде показана публично, докато не одобрите автора и докато авторът не позволи акаунтът му да бъде предлган на другите. Също така можете да позволявате или отхвърляте отделни публикации. + confirm_allow: Наистина ли искате да позволите избраните статуси? + confirm_allow_account: Наистина ли искате да позволите избраните акаунти? + confirm_disallow: Наистина ли искате да забраните избраните статуси? + confirm_disallow_account: Наистина ли искате да забраните избраните акаунти? + description_html: Има публикации, за които сървърът ви знае, че в момента са често споделяни или любими. Биха помогнали на вашите нови и завръщащи се потребители да открият повече хора за последване. Никоя от публикациите няма да се показва публично, докато не одобрите автора и докато авторът не позволи акаунтът му да се предлага на другите. Може също така да позволявате или отхвърляте отделни публикации. disallow: Забраняване на публикацията disallow_account: Забрана на автора no_status_selected: Няма промяна, тъй като няма избрана нашумяла публикация not_discoverable: Авторът не е избрал да е откриваем shared_by: - one: Споделено или харесано веднъж + one: Еднократно споделено или любимо other: Споделено или харесано %{friendly_count} пъти title: Налагащи се публикации tags: @@ -937,6 +982,7 @@ bg: used_by_over_week: one: Употребено от един човек през последната седмица other: Използвано от %{count} души през последната седмица + title: Препоръки и насоки на развитие trending: Изгряващи warning_presets: add_new: Добавяне на ново @@ -1021,7 +1067,9 @@ bg: guide_link_text: Всеки може да участва. sensitive_content: Деликатно съдържание application_mailer: + notification_preferences: Промяна на предпочитанията за е-поща salutation: "%{name}," + settings: 'Промяна на предпочитанията за имейл: %{link}' unsubscribe: Стоп на абонамента view: 'Преглед:' view_profile: Преглед на профила @@ -1032,7 +1080,7 @@ bg: logout: Излизане regenerate_token: Регенериране на кода за достъп token_regenerated: Успешно генериране на код за достъп - warning: Бъдете внимателни с тези данни. Никога не ги споделяйте с никого! + warning: Много внимавайте с тези данни. Никога не ги споделяйте с никого! your_token: Вашият код за достъп auth: apply_for_account: Заявка за акаунт @@ -1041,6 +1089,7 @@ bg: hint_html: Просто още едно нещо! Трябва да потвърдим, че сте човек (това е с цел предпазване на нежелани съобщения!). Разгадайте капчата долу и щракнете на "Продължаване". title: Проверка за сигурност confirmations: + awaiting_review: Вашият адрес на е-поща е потвърден! Служителите на %{domain} сега разглеждат регистрацията ви. Ще получите е-писмо, ако одобрят акаунта ви! awaiting_review_title: Вашата регистрация се преглежда clicking_this_link: щракване на тази връзка login_link: влизане @@ -1048,6 +1097,7 @@ bg: redirect_to_app_html: Трябва да сте пренасочени към приложението %{app_name}. Ако не се случи това, то опитайте %{clicking_this_link} или ръчно се върнете към приложението. registration_complete: Вашата регистрация на %{domain} вече завърши! welcome_title: Добре дошли, %{name}! + wrong_email_hint: Ако този адрес на е-поща не е правилен, то може да го промените в настройките на акаунта. delete_account: Изтриване на акаунта delete_account_html: Ако желаете да изтриете акаунта си, може да сторите това тук. Ще ви се поиска потвърждение. description: @@ -1068,6 +1118,7 @@ bg: or_log_in_with: Или влизане с помощта на privacy_policy_agreement_html: Прочетох и има съгласието ми за политиката за поверителност progress: + confirm: Потвърждаване на имейл details: Вашите подробности review: Нашият преглед rules: Приемане на правилата @@ -1089,8 +1140,10 @@ bg: security: Сигурност set_new_password: Задаване на нова парола setup: + email_below_hint_html: Проверете папката си за спам или поискайте друго е-писмо. Може да поправите адреса на имейла си, ако е грешен. email_settings_hint_html: Щракнете на връзката за потвърждаване, която ви изпратихме до %{email}. Ще ви почакаме тук. link_not_received: Не получихте ли връзка? + new_confirmation_instructions_sent: До няколко минути ще получите друго е-писмо с връзка за потвърждаване! title: Проверете входящата си поща sign_in: preamble_html: Влезте с идентификационните данни за %{domain}. Ако вашият акаунт е хостван на различен сървър, няма да можете да влезете в този. @@ -1101,12 +1154,22 @@ bg: title: Първоначални настройки за %{domain}. status: account_status: Състояние на акаунта + confirming: Чака се потвърждението на имейла да завърши. functional: Вашият акаунт е в изправност. + pending: Вашето приложение чака преглед от персонала ни. Това може да отнеме време. Ще получите е-писмо, ако приложението ви се одобри. redirecting_to: Вашият акаунт е бездеен, защото сега се пренасочва към %{acct}. self_destruct: Затваряйки %{domain}, ще получите само ограничен достъп до акаунта си. view_strikes: Преглед на предишните предупреждения против акаунта ви too_fast: Образецът подаден пребързо, опитайте пак. use_security_key: Употреба на ключ за сигурност + author_attribution: + example_title: Примерен текст + hint_html: Пишете ли новинарски статии или блогове извън Mastodon? Управлявайте как ви приписват авторството, когато са споделени в Mastodon. + instructions: 'Уверете се, че този код е в HTML на статията ви:' + more_from_html: Още от %{name} + s_blog: Блогът на %{name} + then_instructions: Тогава добавете име на домейна на публикацията в долното поле. + title: Приписване на авторството challenge: confirm: Продължаване hint_html: "Съвет: няма да ви питаме пак за паролата през следващия час." @@ -1143,6 +1206,9 @@ bg: before: 'Прочетете внимателно тези бележки преди да продължите:' caches: Съдържание, което може да е кеширано от други сървъри, може да се задържи data_removal: Ваши публикации и други данни ще бъдат завинаги премахнати + email_change_html: Може да промените адреса на имейла си, без да изтривате акаунта си + email_contact_html: Ако още не сте го получили, то обърнете се за помощ към %{email} + email_reconfirmation_html: Ако не сте получили е-писмо за потвърждение, може да го заявите отново irreversible: Няма да може да възстановите или да задействате пак акаунта си more_details_html: За повече детайли прегледайте декларацията за поверителност. username_available: Вашето потребителско име ще стане налично отново @@ -1384,10 +1450,21 @@ bg: unsubscribe: action: Да, да се спре абонамента complete: Спрян абонамент + confirmation_html: Наистина ли искате да спрете абонамента от получаването на %{type} за Mastodon в %{domain} към имейла си при %{email}? Може винаги пак да се абонирате от своите настройки за известяване по е-поща. + emails: + notification_emails: + favourite: е-писма за известия с любими + follow: е-писма с известия за последване + follow_request: е-писма със заявки за следване + mention: е-писма с известия за споменаване + reblog: е-писма с известия за подсилване + resubscribe_html: Ако погрешка сте спрели абонамента, то може пак да се абонирате от своите настройки за известия по е-поща. + success_html: Повече няма да получавате %{type} за Mastodon на %{domain} към имейла си при %{email}. title: Спиране на абонамента media_attachments: validations: images_and_video: Не мога да прикача видеоклип към публикация, която вече съдържа изображения + not_found: Мултимедията %{ids} не е намерена или вече е прикачена към друга публикация not_ready: Не е възможно закачането на файлове, който все още се обработват. Опитайте отново след малко! too_many: Не мога да прикача повече от 4 файла migrations: @@ -1436,8 +1513,8 @@ bg: sign_up: subject: "%{name} се регистрира" favourite: - body: 'Вашата публикация беше харесана от %{name}:' - subject: "%{name} хареса вашата публикация" + body: 'Ваша публикация е любима за %{name}:' + subject: "%{name} означи като любима ваша публикация" title: Нова харесана публикация follow: body: "%{name} те последва!" @@ -1464,6 +1541,8 @@ bg: update: subject: "%{name} промени публикация" notifications: + administration_emails: Известия за администратори по е-поща + email_events: Събития за известяване по имейл email_events_hint: 'Изберете събития, за които искате да получавате известия:' number: human: @@ -1617,10 +1696,12 @@ bg: delete: Изтриване на акаунта development: Разработка edit_profile: Редактирай профила си + export: Изнасяне featured_tags: Актуални хаштагове import: Импортиране import_and_export: Импортиране и експортиране migrate: Миграция на акаунта + notifications: Известия по е-поща preferences: Предпочитания profile: Профил relationships: Последвания и последователи @@ -1695,8 +1776,8 @@ bg: keep_polls_hint: Не изтрива запитвания keep_self_bookmark: Запазване на публикации, добавени в отметки keep_self_bookmark_hint: Не се изтриват ваши публикации, ако сте ги добавили към отметки - keep_self_fav: Задържане на публикации, които сте харесали - keep_self_fav_hint: Не се изтриват публикации, които сте харесали + keep_self_fav: Задържане на любимите ви публикации + keep_self_fav_hint: Да не се изтриват ваши публикации, ако са ви любими min_age: '1209600': 2 седмици '15778476': 6 месеца @@ -1707,7 +1788,7 @@ bg: '63113904': 2 години '7889238': 3 месеца min_age_label: Възрастов праг - min_favs: Запазване на харесани публикации поне + min_favs: Задържане поне на любимите публикации min_favs_hint: Не се изтрива никоя от публикациите, които сте харесали поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от броя харесвания min_reblogs: Запазване на публикации с поне толкова раздувания min_reblogs_hint: Не се изтриват ваши публикации, споделени поне толкова пъти. Оставете празно, за да изтриете публикациите независимо от броя на техния раздувания @@ -1856,6 +1937,7 @@ bg: invalid_otp_token: Невалиден код otp_lost_help_html: Ако загубите достъп до двете, то може да се свържете с %{email} rate_limited: Премного опити за удостоверяване. Опитайте пак по-късно. + seamless_external_login: Влезли сте чрез външна услуга, така че настройките за парола и имейл не са налични. signed_in_as: 'Влезли като:' verification: extra_instructions_html: Съвет:Връзката в уебсайта ви може да е невидима. Важна част е rel="me", която предотврятява имитирането на уебсайтове с породено от потребителите съдържание. Може дори да употребите етикет за връзката в заглавката на странице вместо а, но HTML трябва да достъпен без изпълнение на JavaScript. @@ -1864,6 +1946,7 @@ bg: instructions_html: Копипейстнете кода долу в HTML на уебсайта си. Тогава добавете адреса на уебсайта си в едно от допълнителните полета на профила ви от раздела "Редактиране на профила" и запазане на промените. verification: Проверка verified_links: Вашите потвърдени връзки + website_verification: Потвърждаване на уебсайта webauthn_credentials: add: Добавяне на нов ключ за сигурност create: diff --git a/config/locales/br.yml b/config/locales/br.yml index f9fbd34adb..a3ba0db887 100644 --- a/config/locales/br.yml +++ b/config/locales/br.yml @@ -47,6 +47,7 @@ br: demote: Argilañ disable: Skornañ disabled: Skornet + display_name: Anv diskouezet domain: Domani edit: Kemmañ email: Postel @@ -66,6 +67,7 @@ br: moderation: active: Oberiant all: Pep tra + disabled: Diweredekaet pending: War ober silenced: Bevennet suspended: Astalet @@ -98,6 +100,7 @@ br: action_logs: action_types: destroy_status: Dilemel ar c'hannad + reset_password_user: Adderaouekaat ar ger-tremen update_status: Hizivaat ar c'hannad actions: destroy_status_html: Dilamet eo bet toud %{target} gant %{name} diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 965f354a35..a0178ad195 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -21,6 +21,7 @@ ca: one: Tut other: Tuts posts_tab_heading: Tuts + self_follow_error: No es permet seguir el compte propi admin: account_actions: action: Realitza l'acció @@ -446,6 +447,7 @@ ca: title: Blocar el nou domini de correu-e no_email_domain_block_selected: No s'han canviat els bloqueigs de domini perquè no se n'ha seleccionat cap not_permitted: No permés + resolved_dns_records_hint_html: El nom del domini resol als següents dominis MX, que són els responsables finals per a acceptar els correus. Blocar un domini MX blocarà els registres des de qualsevol adreça de correu que utilitzi el mateix domini MX, encara que el nom visible sigui diferent. Vigileu de no blocar els grans proveïdors de correu. resolved_through_html: Resolt mitjançant %{domain} title: Dominis de correu-e blocats export_domain_allows: @@ -800,6 +802,7 @@ ca: destroyed_msg: La càrrega al lloc s'ha suprimit correctament! software_updates: critical_update: Crítica - si us plau, actualitza ràpidament + description: Es recomana de mantenir actualizada la instal·lació de Mastodon per a beneficiar-se de les darreres correccions i característiques. A més, de vegades és fonamental actualitzar-la per a evitar problemes de seguretat. Per això Mastodon comprova si hi ha actualitzacions cada 30 minuts i us notificarà d'acord amb les preferències de notificacions de correu electrònic. documentation_link: Més informació release_notes: Notes de llançament title: Actualitzacions disponibles @@ -1155,6 +1158,7 @@ ca: account_status: Estat del compte confirming: Esperant que es completi la confirmació del correu-e. functional: El teu compte està completament operatiu. + pending: La vostra sol·licitud està pendent de revisió pel nostre personal. Això pot trigar una mica. Rebreu un correu electrònic quan s'aprovi. redirecting_to: El teu compte és inactiu perquè actualment està redirigint a %{acct}. self_destruct: Com que %{domain} tanca, només tindreu accés limitat al vostre compte. view_strikes: Veure accions del passat contra el teu compte @@ -1162,9 +1166,11 @@ ca: use_security_key: Usa clau de seguretat author_attribution: example_title: Text d'exemple - hint_html: Controleu com se us acredita quan els enllaços es comparteixen a Mastodon. + hint_html: Escriviu notícies o un blog fora de Mastodon? Controleu quin crèdit rebeu quan es comparteixen aquí. + instructions: 'Assegureu-vos que aquest codi és a l''HTML de l''article:' more_from_html: Més de %{name} s_blog: Blog de %{name} + then_instructions: Després, afegiu el nom del domini de la publicació aquí sota. title: Atribució d'autor challenge: confirm: Continua @@ -1202,6 +1208,9 @@ ca: before: 'Abans de procedir, llegiu amb cura aquestes notes:' caches: El contingut que ha estat memoritzat en la memòria cau per altres servidors pot persistir data_removal: Els teus tuts i altres dades seran permanentment eliminades + email_change_html: Podeu canviar l'adreça de correu sense eliminar el vostre compte + email_contact_html: Si encara no arriba, podeu enviar un correu-e a %{email} per a demanar ajuda + email_reconfirmation_html: Si no rebeu el correu electrònic de confirmació , podeu tornar-lo a demanar irreversible: No seràs capaç de restaurar o reactivar el teu compte more_details_html: Per a més detalls, llegeix la política de privadesa. username_available: El teu nom d'usuari esdevindrà altre cop disponible diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 91fa517944..ed57b01ea8 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -25,15 +25,19 @@ cs: one: Příspěvek other: Příspěvků posts_tab_heading: Příspěvky + self_follow_error: Sledování vašeho vlastního účtu není povoleno admin: account_actions: action: Vykonat akci + already_silenced: Tento účet je již omezený. + already_suspended: Tento účet již byl pozastaven. title: Vykonat moderátorskou akci pro účet %{acct} account_moderation_notes: create: Zanechat poznámku created_msg: Moderátorská poznámka byla úspěšně vytvořena! destroyed_msg: Moderátorská poznámka byla úspěšně zničena! accounts: + add_email_domain_block: Blokovat e-mailovou doménu approve: Schválit approved_msg: Žádost o registraci uživatele %{username} úspěšně schválena are_you_sure: Opravdu? @@ -48,6 +52,7 @@ cs: title: Změnit e-mail uživateli %{username} change_role: changed_msg: Role úspěšně změněna! + edit_roles: Správa uživatelských rolí label: Změnit roli no_role: Žádná role title: Změnit roli pro %{username} @@ -60,6 +65,7 @@ cs: demote: Degradovat destroyed_msg: Data účtu %{username} jsou nyní ve frontě k okamžitému smazání disable: Zmrazit + disable_sign_in_token_auth: Zrušit ověřování e-mailovým tokenem disable_two_factor_authentication: Vypnout 2FA disabled: Zmrazen display_name: Zobrazované jméno @@ -68,13 +74,14 @@ cs: email: E-mail email_status: Stav e-mailu enable: Rozmrazit + enable_sign_in_token_auth: Povolit ověřování e-mailovým tokenem enabled: Povoleno enabled_msg: Účet %{username} byl úspěšně rozmrazen followers: Sledující - follows: Sledované + follows: Sledovaní header: Záhlaví inbox_url: URL příchozí schránky - invite_request_text: Důvody založení + invite_request_text: Důvody pro připojení invited_by: Pozván uživatelem ip: IP adresa joined: Uživatelem od @@ -92,7 +99,7 @@ cs: active: Aktivní all: Vše disabled: Deaktivován - pending: Čekající + pending: Nevyřízeno silenced: Omezeno suspended: Pozastavené title: Moderování @@ -134,6 +141,7 @@ cs: resubscribe: Znovu odebírat role: Role search: Hledat + search_same_email_domain: Ostatní uživatelé se stejnou e-mailovou doménou search_same_ip: Další uživatelé se stejnou IP adresou security: Zabezpečení security_measures: @@ -174,21 +182,26 @@ cs: approve_appeal: Schválit odvolání approve_user: Schválit uživatele assigned_to_self_report: Přiřadit hlášení + change_email_user: Změnit e-mail uživatele change_role_user: Změnit roli uživatele confirm_user: Potvrdit uživatele create_account_warning: Vytvořit varování create_announcement: Nové oznámení + create_canonical_email_block: Vytvořit blok e-mailu create_custom_emoji: Vytvořit vlastní emoji create_domain_allow: Vytvořit povolení domény create_domain_block: Vytvořit blokaci domény + create_email_domain_block: Vytvořit blok e-mailové domény create_ip_block: Vytvořit IP pravidlo create_unavailable_domain: Vytvořit nedostupnou doménu create_user_role: Vytvořit roli demote_user: Snížit roli uživatele destroy_announcement: Odstranit oznámení + destroy_canonical_email_block: Odblokovat email destroy_custom_emoji: Odstranit vlastní emoji destroy_domain_allow: Odstranit povolení domény destroy_domain_block: Odstranit blokaci domény + destroy_email_domain_block: Smazat blokaci e-mailové domény destroy_instance: Odmazat doménu destroy_ip_block: Smazat IP pravidlo destroy_status: Odstranit Příspěvek @@ -196,8 +209,10 @@ cs: destroy_user_role: Zničit roli disable_2fa_user: Vypnout 2FA disable_custom_emoji: Zakázat vlastní emoji + disable_sign_in_token_auth_user: Zrušit uživatelovo ověřování e-mailovým tokenem disable_user: Deaktivovat uživatele enable_custom_emoji: Povolit vlastní emoji + enable_sign_in_token_auth_user: Povolit uživatelovo ověřování e-mailovým tokenem enable_user: Povolit uživatele memorialize_account: Změna na „in memoriam“ promote_user: Povýšit uživatele @@ -227,20 +242,26 @@ cs: approve_appeal_html: Uživatel %{name} schválil odvolání proti rozhodnutí moderátora %{target} approve_user_html: "%{name} schválil registraci od %{target}" assigned_to_self_report_html: Uživatel %{name} si přidělil hlášení %{target} + change_email_user_html: "%{name} změnil*a e-mailovou adresu %{target}" change_role_user_html: "%{name} změnil roli %{target}" + confirm_user_html: Uživatel %{name} potvrdil e-mailovou adresu uživatele %{target} create_account_warning_html: Uživatel %{name} poslal %{target} varování create_announcement_html: Uživatel %{name} vytvořil nové oznámení %{target} + create_canonical_email_block_html: "%{name} zablokoval e-mail s hashem %{target}" create_custom_emoji_html: Uživatel %{name} nahrál nové emoji %{target} create_domain_allow_html: Uživatel %{name} povolil federaci s doménou %{target} create_domain_block_html: Uživatel %{name} zablokoval doménu %{target} + create_email_domain_block_html: Uživatel %{name} zablokoval e-mailovou doménu %{target} create_ip_block_html: Uživatel %{name} vytvořil pravidlo pro IP %{target} create_unavailable_domain_html: "%{name} zastavil doručování na doménu %{target}" create_user_role_html: "%{name} vytvořil %{target} roli" demote_user_html: Uživatel %{name} degradoval uživatele %{target} destroy_announcement_html: Uživatel %{name} odstranil oznámení %{target} + destroy_canonical_email_block_html: "%{name} odblokoval*a e-mail s hashem %{target}" destroy_custom_emoji_html: "%{name} odstranil emoji %{target}" destroy_domain_allow_html: Uživatel %{name} zakázal federaci s doménou %{target} destroy_domain_block_html: Uživatel %{name} odblokoval doménu %{target} + destroy_email_domain_block_html: "%{name} odblokoval*a e-mailovou doménu %{target}" destroy_instance_html: Uživatel %{name} odmazal doménu %{target} destroy_ip_block_html: Uživatel %{name} odstranil pravidlo pro IP %{target} destroy_status_html: Uživatel %{name} odstranil příspěvek uživatele %{target} @@ -248,8 +269,10 @@ cs: destroy_user_role_html: "%{name} odstranil %{target} roli" disable_2fa_user_html: Uživatel %{name} vypnul dvoufázové ověřování pro uživatele %{target} disable_custom_emoji_html: Uživatel %{name} zakázal emoji %{target} + disable_sign_in_token_auth_user_html: "%{name} deaktivoval*a ověřování e-mailovým tokenem pro %{target}" disable_user_html: Uživatel %{name} zakázal přihlašování pro uživatele %{target} enable_custom_emoji_html: Uživatel %{name} povolil emoji %{target} + enable_sign_in_token_auth_user_html: "%{name} aktivoval*a ověřování e-mailovým tokenem pro %{target}" enable_user_html: Uživatel %{name} povolil přihlašování pro uživatele %{target} memorialize_account_html: Uživatel %{name} změnil účet %{target} na „in memoriam“ stránku promote_user_html: Uživatel %{name} povýšil uživatele %{target} @@ -257,6 +280,7 @@ cs: reject_user_html: "%{name} odmítl registraci od %{target}" remove_avatar_user_html: Uživatel %{name} odstranil avatar uživatele %{target} reopen_report_html: Uživatel %{name} znovu otevřel hlášení %{target} + resend_user_html: "%{name} znovu odeslal*a potvrzovací e-mail pro %{target}" reset_password_user_html: Uživatel %{name} obnovil heslo uživatele %{target} resolve_report_html: Uživatel %{name} vyřešil hlášení %{target} sensitive_account_html: "%{name} označil média účtu %{target} jako citlivá" @@ -427,6 +451,7 @@ cs: many: "%{count} pokusů o registraci za poslední týden" one: "%{count} pokus o registraci za poslední týden" other: "%{count} pokusů o registraci za poslední týden" + created_msg: E-mailová doména úspěšně zablokována delete: Smazat dns: types: @@ -435,8 +460,12 @@ cs: new: create: Přidat doménu resolve: Přeložit doménu + title: Blokovat novou e-mailovou doménu + no_email_domain_block_selected: Žádné blokace e-mailové domény nebyly změněny, protože žádné nebyly vybrány not_permitted: Nepovoleno + resolved_dns_records_hint_html: Doménové jméno vede na následující MX domény, které mají nakonec na starost přijímání e-mailů. Blokování MX domény zablokuje registrace z jakékoliv e-mailové adresy, která používá stejnou MX doménu, i když je viditelné doménové jméno jiné. Dejte si pozor, abyste nezablokovali velké e-mailové poskytovatele. resolved_through_html: Přeložena přes %{domain} + title: Blokované e-mailové domény export_domain_allows: new: title: Importovat povolené domény @@ -598,7 +627,9 @@ cs: resolve_description_html: Nebudou učiněny žádné kroky proti nahlášenému účtu, žádný prohřešek zaznamenán a hlášení bude uzavřeno. silence_description_html: Účet bude viditelný pouze těm, kdo jej již sledují nebo si jej ručně vyhledají, což výrazně omezí jeho dosah. Vždy lze vrátit zpět. Uzavře všechna hlášení proti tomuto účtu. suspend_description_html: Účet a veškerý jeho obsah se znepřístupní a bude nakonec smazán, interakce s ním nebude možná. Lze vrátit zpět do 30 dnů. Uzavře všechna hlášení proti tomuto účtu. + actions_description_html: Rozhodněte, který krok učinit pro vyřešení tohoto hlášení. Pokud podniknete kárný krok proti nahlášenému účtu, bude mu zasláno e-mailové oznámení, s výjimkou případu, kdy je zvolena kategorie Spam. actions_description_remote_html: Rozhodněte, co podniknout pro vyřešení tohoto hlášení. Toto ovlivní pouze to, jak váš server komunikuje s tímto vzdáleným účtem, a zpracuje jeho obsah. + actions_no_posts: Toto hlášení nemá žádné související příspěvky k odstranění add_to_report: Přidat do hlášení další already_suspended_badges: local: Již pozastaveno na tomto serveru @@ -662,6 +693,7 @@ cs: delete_data_html: Odstranit profil a obsah @%{acct} ode dneška po 30 dní, pokud mezitím nebude zrušeno jeho pozastavení preview_preamble_html: "@%{acct} obdrží varování s následujícím obsahem:" record_strike_html: Zaznamenat prohřešek @%{acct} pro pomoc s řešením budoucích přestupků z tohoto účtu + send_email_html: Poslat varovný e-mail pro @%{acct} warning_placeholder: Volitelné další odůvodnění moderační akce. target_origin: Původ nahlášeného účtu title: Hlášení @@ -705,6 +737,7 @@ cs: manage_appeals: Spravovat odvolání manage_appeals_description: Umožňuje uživatelům posuzovat odvolání proti moderátorským zásahům manage_blocks: Spravovat blokace + manage_blocks_description: Umožňuje uživatelům blokovat poskytovatele e-mailů a IP adresy manage_custom_emojis: Spravovat vlastní emoji manage_custom_emojis_description: Umožňuje uživatelům spravovat vlastní emoji na serveru manage_federation: Spravovat federaci @@ -722,6 +755,7 @@ cs: manage_taxonomies: Správa taxonomií manage_taxonomies_description: Umožňuje uživatelům zkontrolovat populární obsah a aktualizovat nastavení hashtag manage_user_access: Spravovat uživatelské přístupy + manage_user_access_description: Umožňuje uživatelům rušit jiným uživatelům dvoufázové ověřování, měnit jejich e-mailovou adresu a obnovovat jim hesla manage_users: Spravovat uživatele manage_users_description: Umožňuje uživatelům zobrazit podrobnosti ostatních uživatelů a provádět moderování proti nim manage_webhooks: Spravovat webhooky @@ -796,6 +830,7 @@ cs: destroyed_msg: Upload stránky byl úspěšně smazán! software_updates: critical_update: Kritické — aktualizujte, prosím, co nejdříve + description: Doporučuje se udržovat vaši instalaci Mastodonu aktuální, aby se využily nejnovější opravy a funkce. Kromě toho je někdy velmi důležité včas aktualizovat Mastodon, aby se předešlo bezpečnostním problémům. Z těchto důvodů Mastodon kontroluje aktualizace každých 30 minut a bude vás informovat podle nastavení vašeho e-mailového oznámení. documentation_link: Zjistit více release_notes: Poznámky k vydání title: Dostupné aktualizace @@ -869,6 +904,9 @@ 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_check: + action: Zobrazit dostupné aktualizace + message_html: K dispozici je aktualizace Mastodonu. software_version_critical_check: action: Zobrazit dostupné aktualizace message_html: K dispozici je kritická aktualizace Mastodonu, prosím aktualizujte co nejrychleji. @@ -895,6 +933,7 @@ cs: name: Název newest: Nejnovější oldest: Nejstarší + open: Zobrazit veřejně reset: Resetovat review: Stav posouzení search: Hledat @@ -904,10 +943,16 @@ cs: trends: allow: Povolit approved: Schválené + confirm_allow: Opravdu chcete povolit vybrané štítky? + confirm_disallow: Opravdu chcete zakázat vybrané štítky? disallow: Zakázat links: allow: Povolit odkaz allow_provider: Povolit vydavatele + confirm_allow: Jste si jist, že chcete povolit vybrané odkazy? + confirm_allow_provider: Opravdu chcete povolit vybrané poskytovatele? + confirm_disallow: Opravdu chcete zakázat vybrané odkazy? + confirm_disallow_provider: Opravdu chcete zakázat vybrané poskytovatele? description_html: Toto jsou odkazy, které jsou momentálně hojně sdíleny účty, jejichž příspěvky váš server vidí. To může pomoct vašim uživatelům zjistit, co se děje ve světě. Žádné odkazy se nezobrazují veřejně, dokud neschválíte vydavatele. Můžete také povolit nebo zamítnout jednotlivé odkazy. disallow: Zakázat odkaz disallow_provider: Zakázat vydavatele @@ -933,6 +978,10 @@ cs: statuses: allow: Povolit příspěvek allow_account: Povolit autora + confirm_allow: Opravdu chcete povolit vybrané tooty? + confirm_allow_account: Opravdu chcete povolit vybrané účty? + confirm_disallow: Opravdu chcete zakázat vybrané tooty? + confirm_disallow_account: Opravdu chcete zakázat vybrané účty? description_html: Toto jsou příspěvky, o kterých váš server ví, že jsou momentálně hodně sdíleny a oblibovány. To může pomoci vašim novým i vracejícím se uživatelům najít další lidi ke sledování. Žádné příspěvky se nezobrazují veřejně, dokud neschválíte autora a tento autor nepovolí navrhování svého účtu ostatním. Můžete také povolit či zamítnout jednotlivé příspěvky. disallow: Zakázat příspěvek disallow_account: Zakázat autora @@ -969,6 +1018,7 @@ cs: many: Použit %{count} lidmi za poslední týden one: Použit jedním člověkem za poslední týden other: Použit %{count} lidmi za poslední týden + title: Doporučení & Trendy trending: Populární warning_presets: add_new: Přidat nové @@ -1055,7 +1105,9 @@ cs: guide_link_text: Zapojit se může každý. sensitive_content: Citlivý obsah application_mailer: + notification_preferences: Změnit předvolby e-mailu salutation: "%{name}," + settings: 'Změnit předvolby e-mailu: %{link}' unsubscribe: Přestat odebírat view: 'Zobrazit:' view_profile: Zobrazit profil @@ -1075,6 +1127,7 @@ cs: 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: + awaiting_review: Vaše e-mailová adresa je potvrzena! Personál %{domain} nyní kontrolují vaši registraci. Pokud váš účet schválí, obdržíte e-mail! awaiting_review_title: Vaše registrace se ověřuje clicking_this_link: kliknutím na tento odkaz login_link: přihlásit se @@ -1082,6 +1135,7 @@ cs: redirect_to_app_html: Měli byste být přesměrováni do aplikace %{app_name}. Pokud se tak nestalo, zkuste %{clicking_this_link} nebo ručně se vrátit do aplikace. registration_complete: Vaše registrace na %{domain} je hotová! welcome_title: Vítám uživatele %{name}! + wrong_email_hint: Pokud není tento e-mail správný, můžete si ho změnit v nastavení účtu. delete_account: Odstranit účet delete_account_html: Chcete-li odstranit svůj účet, pokračujte zde. Budete požádáni o potvrzení. description: @@ -1102,6 +1156,7 @@ cs: or_log_in_with: Nebo se přihlaste pomocí privacy_policy_agreement_html: Četl jsem a souhlasím se zásadami ochrany osobních údajů progress: + confirm: Potvrdit e-mail details: Vaše údaje review: Naše hodnocení rules: Přijmout pravidla @@ -1123,11 +1178,13 @@ cs: security: Zabezpečení set_new_password: Nastavit nové heslo setup: + email_below_hint_html: Zkontrolujte složku se spamem, nebo požádejte o další. Svou e-mailovou adresu si můžete opravit, pokud je špatně. email_settings_hint_html: Klikněte na odkaz, který jsme Vám poslali k ověření %{email}. Budeme zde čekat. link_not_received: Nedostali jste odkaz? + new_confirmation_instructions_sent: Za několik minut obdržíte nový e-mail s potvrzovacím odkazem! title: Zkontrolujte doručenou poštu sign_in: - preamble_html: Přihlaste se se svýma %{domain} údajema. Pokud je váš účet hostován na jiném serveru, nemůžete se zde přihlásit. + preamble_html: Přihlaste se svými %{domain} údaji. Pokud je váš účet hostován na jiném serveru, přihlásit se zde nemůžete. title: Přihlásit se k %{domain} sign_up: manual_review: Registrace na %{domain} procházejí manuálním hodnocením od našich moderátorů. Abyste nám pomohli zpracovat Vaši registraci, napište trochu o sobě a proč chcete účet na %{domain}. @@ -1135,12 +1192,22 @@ cs: title: Pojďme vás nastavit na %{domain}. status: account_status: Stav účtu + confirming: Čekáme na dokončení potvrzení e-mailu. functional: Váš účet je plně funkční. + pending: Vaše žádost čeká na posouzení naším personálem. To může nějakou dobu trvat. Pokud bude váš požadavek schválen, obdržíte e-mail. redirecting_to: Váš účet je neaktivní, protože je právě přesměrován na účet %{acct}. self_destruct: Protože %{domain} končí, budete mít k účtu jen omezený přístup. view_strikes: Zobrazit minulé prohřešky vašeho účtu too_fast: Formulář byl odeslán příliš rychle, zkuste to znovu. use_security_key: Použít bezpečnostní klíč + author_attribution: + example_title: Ukázkový text + hint_html: Píšete novinové články nebo blog mimo Mastodon? Kontrolujte, jak Vám bude připisováno autorství, když jsou sdíleny na Mastodonu. + instructions: 'Ujistěte se, že tento kód je v HTML vašeho článku:' + more_from_html: Více od %{name} + s_blog: Blog %{name} + then_instructions: Poté přidejte název domény publikace do níže uvedeného pole. + title: Připisování autorství challenge: confirm: Pokračovat hint_html: "Tip: Po dobu jedné hodiny vás o heslo nebudeme znovu žádat." @@ -1177,6 +1244,9 @@ cs: before: 'Před pokračováním si prosím pečlivě přečtěte tyto poznámky:' caches: Obsah, který byl uložen do cache jiných serverů, nemusí být smazán data_removal: Vaše příspěvky a další data budou trvale smazána + email_change_html: Můžete změnit svou e-mailovou adresu bez odstranění svého účtu + email_contact_html: Pokud stále nedorazí, můžete poslat e-mail %{email} pro pomoc + email_reconfirmation_html: Pokud neobdržíte potvrzovací e-mail, můžete si ho vyžádat znovu irreversible: Váš účet nebude možné obnovit ani znovu aktivovat more_details_html: Podrobnosti najdete v zásadách ochrany osobních údajů. username_available: Vaše uživatelské jméno bude opět dostupné @@ -1423,6 +1493,7 @@ cs: authentication_methods: otp: aplikací pro dvoufaktorové ověření password: heslem + sign_in_token: bezpečnostní kód e-mailu webauthn: bezpečnostními klíči description_html: Pokud vidíte aktivitu, kterou nepoznáváte, zvažte změnu hesla a zapnutí dvoufaktorového ověřování. empty: Není k dispozici žádná historie přihlášení @@ -1433,10 +1504,21 @@ cs: unsubscribe: action: Ano, odeberte odběr complete: Odběr byl odhlášen + confirmation_html: Jste si jisti, že chcete odhlásit odběr %{type} pro Mastodon na %{domain} na váš e-mail %{email}? Vždy se můžete znovu přihlásit ve svém nastavení e-mailových oznámení. + emails: + notification_emails: + favourite: e-mailové oznámení při oblíbení + follow: e-mailové oznámení při sledování + follow_request: e-mail při žádost o sledování + mention: e-mailové oznámení při zmínění + reblog: e-mailové oznámení při boostu + resubscribe_html: Pokud jste se odhlásili omylem, můžete se znovu přihlásit ve svých nastavení e-mailových oznámení. + success_html: Již nebudete dostávat %{type} pro Mastodon na %{domain} na vaši e-mailovou adresu %{email}. title: Odhlásit odběr media_attachments: validations: images_and_video: K příspěvku, který již obsahuje obrázky, nelze připojit video + not_found: Média %{ids} nebyla nalezena nebo již byla připojena k jinému příspěvku not_ready: Nelze připojit soubory před jejich zpracováním. Zkuste to znovu za chvíli! too_many: Nelze připojit více než 4 soubory migrations: @@ -1513,6 +1595,8 @@ cs: update: subject: Uživatel %{name} upravil příspěvek notifications: + administration_emails: E-mailová oznámení administrátora + email_events: Události pro e-mailová oznámení email_events_hint: 'Vyberte události, pro které chcete dostávat oznámení:' number: human: @@ -1666,10 +1750,12 @@ cs: delete: Smazání účtu development: Vývoj edit_profile: Upravit profil + export: Export featured_tags: Zvýrazněné hashtagy import: Import import_and_export: Import a export migrate: Přesun účtu + notifications: Emailové oznámení preferences: Předvolby profile: Profil relationships: Sledovaní a sledující @@ -1915,6 +2001,7 @@ cs: invalid_otp_token: Neplatný kód pro dvoufázové ověřování otp_lost_help_html: Pokud jste ztratili přístup k oběma, spojte se s %{email} rate_limited: Příliš mnoho pokusů o ověření, zkuste to znovu později. + 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: extra_instructions_html: Tip: Odkaz na vaší webové stránce může být neviditelný. Důležitou součástí je rel="me", která brání proti napodování vás na webových stránkách s obsahem vytvořeným uživatelem. Můžete dokonce použít odkaz v záhlaví stránky místo a, ale HTML musí být přístupné bez spuštění JavaScript. @@ -1923,6 +2010,7 @@ cs: 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 + website_verification: Ověření webové stránky webauthn_credentials: add: Přidat nový bezpečnostní klíč create: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 1ae6aa08ff..b166709c28 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -29,6 +29,7 @@ cy: two: Postiadau zero: Postiadau posts_tab_heading: Postiadau + self_follow_error: Chewch chi ddim dilyn eich cyfrif eich hun admin: account_actions: action: Cyflawni gweithred @@ -918,7 +919,7 @@ cy: message_html: Mae gan eich clwstwr Elasticsearch fwy nag un nod, ond nid yw Mastodon wedi'i ffurfweddu i'w defnyddio. elasticsearch_preset_single_node: action: Darllenwch y ddogfennaeth - message_html: Dim ond un nod sydd gan eich clwstwr Elasticsearch, mae angen gosod ES_PRESET i single_node_cluster . + message_html: Dim ond un nod sydd gan eich clwstwr Elasticsearch, mae angen gosod ES_PRESET i single_node_cluster. elasticsearch_reset_chewy: message_html: Mae eich mynegai system Elasticsearch wedi dyddio oherwydd newid gosodiad. Rhedwch chwiliad tootctl search deploy --reset-chewy i'w ddiweddaru. elasticsearch_running_check: @@ -931,6 +932,9 @@ cy: message_html: Nid ydych wedi diffinio unrhyw reolau gweinydd. sidekiq_process_check: message_html: Does dim proses Sidekiq yn rhedeg ar gyfer y ciw(iau) %{value}. Adolygwch eich ffurfweddiad Sidekiq + software_version_check: + action: Gweld y diweddariadau sydd ar gael + message_html: Mae diweddariad Mastodon ar gael. software_version_critical_check: action: Gweld y diweddariadau sydd ar gael message_html: Mae diweddariad hanfodol Mastodon ar gael, diweddarwch cyn gynted â phosibl. @@ -1059,7 +1063,7 @@ cy: webhooks: add_new: Ychwanegu diweddbwynt delete: Dileu - description_html: Mae bachyn gwe yn galluogi Mastodon i wthio hysbysiadau amser real am ddigwyddiadau a ddewiswyd i'ch cais eich hun, fel y gall eich cais ysgogi ymatebion yn awtomatig . + description_html: Mae bachyn gwe yn galluogi Mastodon i wthio hysbysiadau amser real am ddigwyddiadau a ddewiswyd i'ch cais eich hun, fel y gall eich cais ysgogi ymatebion yn awtomatig. disable: Analluogi disabled: Wedi'i analluogi edit: Golygu diweddbwynt @@ -1123,7 +1127,7 @@ cy: created_msg: Wedi creu enw arall yn llwyddiannus. Gallwch nawr ddechrau symud o'r hen gyfrif. deleted_msg: Wedi tynnu enw arall yn llwyddiannus. Ni fydd symud o'r cyfrif hynny i'r cyfrif hon yn bosib. empty: Nid oes gennych enwau eraill. - hint_html: Os ydych chi am symud o gyfrif arall i'r un hwn, gallwch greu enw arall yma, sy'n ofynnol cyn y gallwch symud ymlaen i symud dilynwyr o'r hen gyfrif i'r un hwn. Mae'r weithred hon ynddo'i hun yn ddiniwed ac yn wrthdroadwy. Mae'r mudo cyfrif yn cael ei wneud o'r hen gyfrif . + hint_html: Os ydych chi am symud o gyfrif arall i'r un hwn, gallwch greu enw arall yma, sy'n ofynnol cyn y gallwch symud ymlaen i symud dilynwyr o'r hen gyfrif i'r un hwn. Mae'r weithred hon ynddo'i hun yn ddiniwed ac yn wrthdroadwy. Mae'r mudo cyfrif yn cael ei wneud o'r hen gyfrif. remove: Dadgysylltu'r enw arall appearance: advanced_web_interface: Rhyngwyneb gwe uwch @@ -1234,9 +1238,11 @@ cy: use_security_key: Defnyddiwch allwedd diogelwch author_attribution: example_title: Testun enghreifftiol - hint_html: Rheolwch sut rydych chi'n cael eich canmol pan fydd dolenni'n cael eu rhannu ar Mastodon. + hint_html: Ydych chi'n ysgrifennu erthyglau newyddion neu flog y tu allan i Mastodon? Rheolwch sut y byddwch yn cael eich cydnabod pan fyddan nhw'n cael eu rhannu ar Mastodon. + instructions: 'Gwnewch yn siŵr fod y cod hwn yn HTML eich erthygl:' more_from_html: Mwy gan %{name} s_blog: Blog %{name} + then_instructions: Yna, ychwanegwch enw parth y cyhoeddiad yn y maes isod. title: Priodoliad awdur challenge: confirm: Parhau @@ -1356,7 +1362,7 @@ cy: filters: contexts: account: Proffilau - home: Cartref a rhestrau + home: Ffrwd gartref notifications: Hysbysiadau public: Ffrydiau cyhoeddus thread: Sgyrsiau @@ -1364,7 +1370,7 @@ cy: add_keyword: Ychwanegu allweddair keywords: Allweddeiriau statuses: Postiadau unigol - statuses_hint_html: Mae'r hidlydd hwn yn berthnasol i ddewis postiadau unigol pa un ai a ydynt yn cyfateb i'r allweddeiriau isod. Adolygu neu ddileu postiadau o'r hidlydd . + statuses_hint_html: Mae'r hidlydd hwn yn berthnasol i ddewis postiadau unigol pa un ai a ydynt yn cyfateb i'r allweddeiriau isod. Adolygu neu ddileu postiadau o'r hidlydd. title: Golygu hidlydd errors: deprecated_api_multiple_keywords: Nid oes modd newid y paramedrau hyn o'r cais hwn oherwydd eu bod yn berthnasol i fwy nag un allweddair hidlo. Defnyddiwch raglen fwy diweddar neu'r rhyngwyneb gwe. @@ -1558,7 +1564,7 @@ cy: follow_request: e-byst ceisiadau dilyn mention: e-byst hysbysu crybwylliadau reblog: e-byst hysbysiadau hybu - resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost . + resubscribe_html: Os ydych wedi dad-danysgrifio trwy gamgymeriad, gallwch ail-danysgrifio drwy'ch gosodiadau hysbysu e-bost. success_html: Ni fyddwch bellach yn derbyn %{type} ar gyfer Mastodon ar %{domain} i'ch e-bost am %{email}. title: Dad-danysgrifio media_attachments: @@ -1580,7 +1586,7 @@ cy: on_cooldown: Rydych ar amser allan followers_count: Dilynwyr ar adeg y symud incoming_migrations: Symud o gyfrif wahanol - incoming_migrations_html: I symud o gyfrif arall i'r un hwn, yn gyntaf mae angen i chi greu enwarall (alias) cyfrif . + incoming_migrations_html: I symud o gyfrif arall i'r un hwn, yn gyntaf mae angen i chi greu enwarall (alias) cyfrif. moved_msg: Mae eich cyfrif bellach yn ailgyfeirio i %{acct} ac mae eich dilynwyr yn cael eu symud drosodd. not_redirecting: Nid yw eich cyfrif yn ailgyfeirio i unrhyw gyfrif arall ar hyn o bryd. on_cooldown: Rydych chi wedi mudo'ch cyfrif yn ddiweddar. Bydd y swyddogaeth hon ar gael eto ymhen %{count} diwrnod. @@ -1595,7 +1601,7 @@ cy: cooldown: Ar ôl symud, bydd yna cyfnod aros na fydd modd i chi symud eto disabled_account: Ni fydd modd defnyddio'ch cyfrif cyfredol yn llawn wedyn. Fodd bynnag, bydd gennych fynediad i allforio data yn ogystal ag ail agor. followers: Bydd y weithred hon yn symud yr holl ddilynwyr o'r cyfrif cyfredol i'r cyfrif newydd - only_redirect_html: Fel arall, dim ond ailgyfeiriad y gallwch chi ei osod ar eich proffil . + only_redirect_html: Fel arall, dim ond ailgyfeiriad y gallwch chi ei osod ar eich proffil. other_data: Ni fydd unrhyw data arall yn cael ei symud yn awtomatig redirect: Bydd proffil eich cyfrif presennol yn cael ei diweddaru gyda hysbysiad ailgyfeirio ac yn cael ei eithrio o chwiliadau moderation: @@ -1796,6 +1802,7 @@ cy: delete: Dileu cyfrif development: Datblygu edit_profile: Golygu proffil + export: Allforio featured_tags: Prif hashnodau import: Mewnforio import_and_export: Mewnforio ac allforio diff --git a/config/locales/da.yml b/config/locales/da.yml index 0da901d4a8..ec7e2da4fb 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -9,18 +9,19 @@ da: accounts: followers: one: Følger - other: tilhængere + other: Følgere following: Følger instance_actor_flash: Denne konto er en virtuel aktør repræsenterende selve serveren og ikke en individuel bruger. Den anvendes til fællesformål og bør ikke suspenderes. last_active: senest aktiv link_verified_on: Ejerskab af dette link blev tjekket %{date} - nothing_here: Der er intet hér! + nothing_here: Der er intet her! pin_errors: following: Man skal allerede følge den person, man ønsker at støtte posts: one: Indlæg other: Indlæg posts_tab_heading: Indlæg + self_follow_error: Det er ikke tilladt at følge sin egen konto admin: account_actions: action: Udfør handling @@ -107,11 +108,11 @@ da: not_subscribed: Abonnerer ikke pending: Afventende vurdering perform_full_suspension: Suspendér - previous_strikes: Tidligere anmeldelser (strikes) + previous_strikes: Tidligere anmeldelser previous_strikes_description_html: one: Denne konto har en anmeldelse. other: Denne konto har %{count} anmeldelser. - promote: Fremhæv + promote: Forfrem protocol: Protokol public: Offentlig push_subscription_expires: PuSH-abonnement udløber @@ -122,9 +123,9 @@ da: remote_suspension_irreversible: Denne kontos data er slettet permanent. remote_suspension_reversible_hint_html: Kontoen er suspenderet på den pågældende server, og kontodata fjernes fuldstændig pr. %{date}. Indtil da vil fjernserveren kunne foretage en komplet reetablering af kontoen. Ønskes alle kontodata fjernet straks, kan dette gøres nedenfor. remove_avatar: Fjern profilbillede - remove_header: Fjern overskrift + remove_header: Fjern banner removed_avatar_msg: "%{username}s profilbillede fjernet" - removed_header_msg: "%{username}s overskriftsbillede fjernet" + removed_header_msg: "%{username}s banner fjernet" resend_confirmation: already_confirmed: Denne bruger er allerede bekræftet send: Gensend bekræftelseslink @@ -140,8 +141,8 @@ da: security_measures: only_password: Kun adgangskode password_and_2fa: Adgangskode og 2FA - sensitive: Gennemtving sensitiv - sensitized: Markeret som sensitiv + sensitive: Gennemtving følsom + sensitized: Markeret som følsom shared_inbox_url: Delt indbakke-URL show: created_reports: Indsendte anmeldelser @@ -159,7 +160,7 @@ da: unblock_email: Afblokér e-mailadresse unblocked_email_msg: "%{username}s e-mail-adresse afblokeret" unconfirmed_email: Ubekræftet e-mail - undo_sensitized: Fortryd gennemtving sensitiv + undo_sensitized: Fortryd gennemtving-følsom undo_silenced: Fortryd begrænsning undo_suspension: Fortryd suspendering unsilenced_msg: "%{username}s kontobegrænsning er fjernet" @@ -168,8 +169,8 @@ da: username: Brugernavn view_domain: Vis domæneoversigt warn: Advar - web: Web - whitelisted: Tilladt for federering + web: Net + whitelisted: Tilladt for føderation action_logs: action_types: approve_appeal: Godkend appel @@ -219,8 +220,8 @@ da: sensitive_account: Gennemtving sensitiv konto silence_account: Begræns konto suspend_account: Suspendér konto - unassigned_report: Fjer anmeldelsestildeling - unblock_email_account: Afblokér e-mailadresse + unassigned_report: Fjern anmeldelsestildeling + unblock_email_account: Fjern blokering af e-mailadresse unsensitive_account: Fjern Gennemtving sensitiv konto unsilence_account: Fjern kontobegrænselse unsuspend_account: Afsuspendér konto @@ -363,7 +364,7 @@ da: other: "%{count} verserende anmeldelser" pending_tags_html: one: "%{count} afventende hashtag" - other: "%{count} afventende hashtags" + other: "%{count} afventende etiketter" pending_users_html: one: "%{count} afventende bruger" other: "%{count} afventende brugere" @@ -724,7 +725,7 @@ da: manage_settings: Håndtere indstillinger manage_settings_description: Tillader brugere at ændre webstedsindstillinger manage_taxonomies: Håndtere taksonomier - manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere hashtag-indstillinger + manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere etiket-indstillinger manage_user_access: Håndtere brugeradgang manage_user_access_description: Tillader brugere at deaktivere andre brugeres tofaktorgodkendelse, skifte deres e-mailadresse og nulstille deres adgangskode manage_users: Håndtere brugere @@ -908,7 +909,7 @@ da: reset: Nulstil review: Gennmgangsstatus search: Søg - title: Hashtags + title: Etiketter updated_msg: Hashtag-indstillinger opdateret title: Administration trends: @@ -968,14 +969,14 @@ da: tag_servers_dimension: Topservere tag_servers_measure: forskellige servere tag_uses_measure: anvendelser i alt - description_html: Disse er hashtags, som pt. vises i en masse indlæg, som serveren ser. Det kan hjælpe brugerne til at finde ud af, hvad folk taler mest om pt. Ingen hashtags vises offentligt, før man godkender dem. + description_html: Disse er etiketter, som pt. vises i en masse indlæg, som serveren ser. Det kan hjælpe brugerne til at finde ud af, hvad folk taler mest om pt. Ingen etiketter vises offentligt, før man godkender dem. listable: Kan foreslås no_tag_selected: Intet tag ændret (da intet var valgt) not_listable: Foreslås ikke not_trendable: Vises ikke under tendenser not_usable: Kan ikke anvendes peaked_on_and_decaying: Toppede pr. %{date}, nu for nedadgående - title: Populære hashtags + title: Populære etiketter trendable: Kan vises under tendenser trending_rank: 'Populær #%{rank}' usable: Kan anvendes @@ -1047,7 +1048,7 @@ da: new_trending_statuses: title: Populære opslag new_trending_tags: - title: Populære hashtags + title: Populære etiketter subject: Nye tendenser klar til gennemgang på %{instance} aliases: add_new: Opret alias @@ -1058,7 +1059,7 @@ da: remove: Fjern aliaslinkning appearance: advanced_web_interface: Avanceret webgrænseflade - advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede webgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, federeret tidslinje, et hvilket som helst antal lister og hashtags.' + advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede netgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, fødereret tidslinje, et hvilket som helst antal lister og etiketter.' animations_and_accessibility: Animationer og tilgængelighed confirmation_dialogs: Bekræftelsesdialoger discovery: Opdagelse @@ -1165,9 +1166,11 @@ da: use_security_key: Brug sikkerhedsnøgle author_attribution: example_title: Eksempeltekst - hint_html: Styrer, hvordan man krediteres, når links deles på Mastodon. + hint_html: Skriver du nyheder eller blogartikler uden for Mastodon? Styr, hvordan man bliver krediteret, når disse deles på Mastodon. + instructions: 'Sørg for, at denne kode er i artikelens HTML:' more_from_html: Flere fra %{name} s_blog: "%{name}s blog" + then_instructions: Tilføj dernæst publikationsdomænenavnet i feltet nedenfor. title: Forfattertilskrivning challenge: confirm: Fortsæt @@ -1277,13 +1280,13 @@ da: csv: CSV domain_blocks: Domæneblokeringer lists: Lister - mutes: Du tavsgør + mutes: Du skjuler storage: Medielagerplads featured_tags: add_new: Tilføj nyt errors: - limit: Det maksimale antal hashtags er allerede fremhævet - hint_html: "Hvad er fremhævede hashtags? De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse hashtags. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter." + limit: Det maksimale antal etiketter er allerede fremhævet + hint_html: "Hvad er fremhævede etiketter? De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse etiketter. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter." filters: contexts: account: Profiler @@ -1371,14 +1374,14 @@ da: domain_blocking_html: Du er ved at erstatte domæneblokeringslisten med op til %{total_items} domæner fra %{filename}. following_html: Du er ved at følge op til %{total_items} konti fra %{filename} og stoppe med at følge alle andre. lists_html: Du er ved at erstatte dine lister med indholdet af %{filename}. Op til %{total_items} konti tilføjes nye lister. - muting_html: Du er ved at erstatte listen over tavsgjorte konti med op til %{total_items} konti fra %{filename}. + muting_html: Du er ved at erstatte din liste over skjulte konti med op til %{total_items} konti fra %{filename}. preambles: blocking_html: Du er ved at blokere op til %{total_items} konti fra %{filename}. bookmarks_html: Du er ved at føje op til %{total_items} indlæg fra %{filename} til bogmærkelisten. domain_blocking_html: Du er ved at blokere op til %{total_items} domæner fra %{filename}. following_html: Du er ved at følge op til %{total_items} konti fra %{filename}. lists_html: Du er ved at tilføje op til %{total_items} konti fra %{filename} til dine lister. Nye lister oprettes, hvis der ikke er nogen liste at føje konti til. - muting_html: Du er ved at tavsgøre op til %{total_items} konti fra %{filename}. + muting_html: Du er ved at skjule op til %{total_items} konti fra %{filename}. preface: Du kan importere data, du har eksporteret fra en anden server, såsom en liste over folk du følger eller blokerer. recent_imports: Seneste importer states: @@ -1395,11 +1398,11 @@ da: domain_blocking: Importerer blokerede konti following: Importerer fulgte konti lists: Import af lister - muting: Importerer tavsgjorte konti + muting: Importerer skjulte kontoer type: Importtype type_groups: constructive: Følger og Bogmærker - destructive: Blokeringer og tavsgjorte + destructive: Blokerede og skjulte kontoer types: blocking: Blokeringsliste bookmarks: Bogmærker @@ -1456,7 +1459,7 @@ da: follow: e-mailnotifikationer om nye følgere follow_request: e-mailnotifikationer om følgeanmodninger mention: e-mailnotifikationer om omtaler - reblog: e-mailnotifikationer om boosts + reblog: e-mailnotifikationer om fremhævelser resubscribe_html: Har man afmeldt sig ved en fejl, kan man gentilmelde sig via indstillingerne E-mailnotifikationer. success_html: Man vil ikke længere modtage %{type} for Mastodon på %{domain} til e-mailen %{email}. title: Opsig abonnement @@ -1501,7 +1504,7 @@ da: title: Moderation move_handler: carry_blocks_over_text: Denne bruger er flyttet fra %{acct}, som du har haft blokeret. - carry_mutes_over_text: Denne bruger er flyttet fra %{acct}, som du har haft tavsgjort. + carry_mutes_over_text: Denne bruger er flyttet fra %{acct}, som du har haft skjult. copy_account_note_text: 'Denne bruger er flyttet fra %{acct}, hvor dine tidligere noter om dem var:' navigation: toggle_menu: Åbn/luk menu @@ -1532,9 +1535,9 @@ da: poll: subject: En afstemning fra %{name} er afsluttet reblog: - body: 'Dit indlæg blev boostet af %{name}:' - subject: "%{name} boostede dit indlæg" - title: Nyt boost + body: 'Dit indlæg blev fremhævet af %{name}:' + subject: "%{name} fremhævede dit indlæg" + title: Ny fremhævelse status: subject: "%{name} har netop postet" update: @@ -1631,7 +1634,7 @@ da: content_warning: 'Indholdsadvarsel:' descriptions: account: Offentlige indlæg fra @%{acct} - tag: 'Offentlige indlæg tagget #%{hashtag}' + tag: 'Offentlige indlæg etiketteret #%{hashtag}' scheduled_statuses: over_daily_limit: Den daglige grænse på %{limit} planlagte indlæg er nået over_total_limit: Grænsen på %{limit} planlagte indlæg er nået @@ -1696,7 +1699,7 @@ da: development: Udvikling edit_profile: Redigér profil export: Eksport - featured_tags: Udvalgte hashtags + featured_tags: Udvalgte etiketter import: Import import_and_export: Import og eksport migrate: Kontomigrering @@ -1732,12 +1735,12 @@ da: video: one: "%{count} video" other: "%{count} videoer" - boosted_from_html: Boostet fra %{acct_link} + boosted_from_html: Fremhævet fra %{acct_link} content_warning: 'Indholdsadvarsel: %{warning}' default_language: Samme som UI-sproget disallowed_hashtags: - one: 'indeholdte et ikke tilladt hashtag: %{tags}' - other: 'indeholdte de ikke tilladte hashtags: %{tags}' + one: 'indeholdte en ikke tilladt etiket: %{tags}' + other: 'indeholdte de ikke tilladte etiketter: %{tags}' edited_at_html: Redigeret %{date} errors: in_reply_not_found: Indlægget, der forsøges besvaret, ser ikke ud til at eksistere. @@ -1746,7 +1749,7 @@ da: direct: Indlæg, som kun kan ses af omtalte brugere, kan ikke fastgøres limit: Maksimalt antal indlæg allerede fastgjort ownership: Andres indlæg kan ikke fastgøres - reblog: Et boost kan ikke fastgøres + reblog: En fremhævelse kan ikke fastgøres title: '%{name}: "%{quote}"' visibilities: direct: Direkte @@ -1762,9 +1765,9 @@ da: exceptions: Undtagelser explanation: Sletning af indlæg er en ressourcekrævende operation, hvorfor dette sker gradvist over tid, når serveren ellers ikke er optaget. Indlæg kan derfor blive slettet efter, at de reelt har passeret aldersgrænsen. ignore_favs: Ignorér favoritter - ignore_reblogs: Ignorér boosts + ignore_reblogs: Ignorér fremhævelser interaction_exceptions: Undtagelser baseret på interaktioner - interaction_exceptions_explanation: Bemærk, at det ikke garanteres, at indlæg slettes, hvis de når under favorit- eller boost-tærsklerne efter én gang at været nået over dem. + interaction_exceptions_explanation: Bemærk, at det ikke garanteres, at indlæg slettes, hvis de når under favorit- eller fremhævelses-tærsklerne efter én gang at været nået over dem. keep_direct: Behold direkte besked keep_direct_hint: Sletter ingen af dine direkte beskeder keep_media: Behold indlæg med medievedhæftninger @@ -1789,8 +1792,8 @@ da: min_age_label: Alderstærskel min_favs: Behold indlæg favoritmarkeret mindst min_favs_hint: Sletter ingen egne indlæg, som har modtaget minimum dette antal favoritmarkeringer. Lad stå tomt for at slette indlæg uanset favoritmarkeringer - min_reblogs: Behold indlæg boostet mindst - min_reblogs_hint: Sletter ingen egne indlæg, som er boostet flere end dette antal gange. Lad stå tomt for at ignorere denne tærskel under sletning + min_reblogs: Behold indlæg fremhævet mindst + min_reblogs_hint: Sletter ingen af egne indlæg, som er fremhævet flere end dette antal gange. Lad stå tomt for at ignorere denne tærskel under sletning stream_entries: sensitive_content: Sensitivt indhold strikes: @@ -1919,8 +1922,8 @@ da: one: "%{people} person de seneste 2 dage" other: "%{people} personer de seneste 2 dage" hashtags_subtitle: Udforsk de seneste 2 dages tendenser - hashtags_title: Populære hashtags - hashtags_view_more: Se flere populære hashtags + hashtags_title: Populære etiketter + hashtags_view_more: Se flere populære etiketter post_action: Skriv post_step: Sig hej til verden med tekst, fotos, videoer eller afstemninger. post_title: Opret det første indlæg diff --git a/config/locales/de.yml b/config/locales/de.yml index c82e65282f..152aacc0cc 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -21,6 +21,7 @@ de: one: Beitrag other: Beiträge posts_tab_heading: Beiträge + self_follow_error: Es ist nicht erlaubt, deinem eigenen Konto zu folgen admin: account_actions: action: Aktion ausführen @@ -79,7 +80,7 @@ de: invite_request_text: Begründung für das Beitreten invited_by: Eingeladen von ip: IP-Adresse - joined: Beigetreten + joined: Mitglied seit location: all: Alle local: Lokal @@ -418,9 +419,9 @@ de: not_permitted: Du bist nicht berechtigt, diese Aktion durchzuführen obfuscate: Domain-Name verschleiern obfuscate_hint: Den Domain-Namen öffentlich nur teilweise bekannt geben, sofern die Liste der Domain-Beschränkungen aktiviert ist - private_comment: Interne bzw. nicht-öffentliche Notiz + private_comment: Nicht-öffentliche Notiz private_comment_hint: Kommentar zu dieser Domain-Beschränkung für die interne Nutzung durch die Moderator*innen. - public_comment: Öffentliche Notiz + public_comment: Öffentliche Begründung public_comment_hint: Öffentlicher Hinweis zu dieser Domain-Beschränkung, sofern das Veröffentlichen von Sperrlisten grundsätzlich aktiviert ist. reject_media: Mediendateien ablehnen reject_media_hint: Entfernt lokal gespeicherte Mediendateien und verhindert deren künftiges Herunterladen. Für Sperren irrelevant @@ -493,7 +494,7 @@ de: by_domain: Domain confirm_purge: Möchtest du die Daten von dieser Domain wirklich für immer löschen? content_policies: - comment: Interne Notiz + comment: Nicht-öffentliche Notiz description_html: Du kannst Inhaltsrichtlinien definieren, die auf alle Konten dieser Domain und einer ihrer Subdomains angewendet werden. limited_federation_mode_description_html: Du kannst auswählen, ob du eine Föderation mit dieser Domain erlaubst. policies: @@ -708,7 +709,7 @@ de: manage_appeals: Einsprüche verwalten manage_appeals_description: Erlaubt es Benutzer*innen, Entscheidungen der Moderator*innen zu widersprechen manage_blocks: Sperrungen verwalten - manage_blocks_description: Erlaubt Nutzer*innen das Sperren von E-Mail-Providern und IP-Adressen + manage_blocks_description: Erlaubt Nutzer*innen das Sperren von E-Mail-Anbietern und IP-Adressen manage_custom_emojis: Eigene Emojis verwalten manage_custom_emojis_description: Erlaubt es Benutzer*innen, eigene Emojis auf dem Server zu verwalten manage_federation: Föderation verwalten @@ -921,9 +922,9 @@ de: allow: Link erlauben allow_provider: Herausgeber*in erlauben confirm_allow: Möchtest du die ausgewählten Links wirklich erlauben? - confirm_allow_provider: Möchtest du die ausgewählten Provider wirklich erlauben? + confirm_allow_provider: Möchtest du die ausgewählten Anbieter wirklich erlauben? confirm_disallow: Möchtest du die ausgewählten Links wirklich verbieten? - confirm_disallow_provider: Möchtest du die ausgewählten Provider wirklich verbieten? + confirm_disallow_provider: Möchtest du die ausgewählten Anbieter wirklich verbieten? description_html: Dies sind Links, die derzeit von zahlreichen Konten geteilt werden und die deinem Server aufgefallen sind. Die Benutzer*innen können darüber herausfinden, was in der Welt vor sich geht. Die Links werden allerdings erst dann öffentlich vorgeschlagen, wenn du die Herausgeber*innen genehmigt hast. Du kannst alternativ aber auch nur einzelne URLs zulassen oder ablehnen. disallow: Link verbieten disallow_provider: Herausgeber*in verbieten @@ -1165,10 +1166,12 @@ de: use_security_key: Sicherheitsschlüssel verwenden author_attribution: example_title: Beispieltext - hint_html: Bestimme, wie du Anerkennungen durch geteilte Links auf Mastodon handhaben möchtest. + hint_html: Schreibst du außerhalb von Mastodon journalistische Artikel oder andere Texte, beispielsweise in einem Blog? Lege hier fest, wann auf dein Profil verwiesen werden soll, wenn Links zu deinen Werken auf Mastodon geteilt werden. + instructions: 'Der nachfolgende Code muss im HTML-Header deines zu verlinkenden Textes stehen:' more_from_html: Mehr von %{name} s_blog: Blog von %{name} - title: Anerkennung als Autor*in + then_instructions: Ergänze anschließend im unteren Feld die Domain, auf der sich deine Inhalte befinden. + title: Verifizierung als Autor*in challenge: confirm: Fortfahren hint_html: "Hinweis: Wir werden dich für die nächste Stunde nicht erneut nach deinem Passwort fragen." @@ -1522,7 +1525,7 @@ de: follow_request: action: Follower-Anfragen verwalten body: "%{name} möchte dir folgen" - subject: 'Ausstehende Folgeanfragen: %{name}' + subject: 'Ausstehende Follower-Anfragen: %{name}' title: Neue Follower-Anfrage mention: action: Antworten @@ -1584,7 +1587,7 @@ de: posting_defaults: Standardeinstellungen für Beiträge public_timelines: Öffentliche Timelines privacy: - hint_html: "Bestimme, wie dein Profil und deine Beiträge gefunden werden sollen. Eine Vielzahl von Funktionen in Mastodon können dir helfen, eine größere Reichweite zu erlangen, wenn sie aktiviert sind. Nimm dir einen Moment Zeit, um diese Einstellungen zu überprüfen und sicherzustellen, dass sie für deinen Anwendungsfall geeignet sind." + hint_html: "Bestimme selbst, wie dein Profil und deine Beiträge gefunden werden sollen. Zahlreiche Mastodon-Funktionen können dir für eine größere Reichweite behilflich sein. Nimm dir einen Moment Zeit, um diese Einstellungen zu überprüfen." privacy: Datenschutz privacy_hint_html: Bestimme, wie viele Informationen du für andere preisgeben möchtest. Viele Menschen entdecken interessante Profile und coole Apps, indem sie die Follower anderer Profile durchstöbern und die Apps sehen, über die Beiträge veröffentlicht wurden – möglicherweise möchtest du diese Informationen ausblenden. reach: Reichweite @@ -1760,7 +1763,7 @@ de: enabled: Alte Beiträge automatisch entfernen enabled_hint: Löscht automatisch deine Beiträge, sobald sie die angegebene Altersgrenze erreicht haben, es sei denn, sie entsprechen einer der unten angegebenen Ausnahmen exceptions: Ausnahmen - explanation: Damit Mastodon nicht durch das Löschen von Beiträgen ausgebremst wird, wartet der Server damit, bis wenig los ist. Aus diesem Grund werden deine Beiträge ggf. erst einige Zeit nach Erreichen der Altersgrenze gelöscht. + explanation: Damit der Server nicht durch das Löschen von Beiträgen ausgebremst wird, wartet die Mastodon-Software, bis wenig(er) los ist. Deshalb könnten deine Beiträge ggf. erst einige Zeit nach Erreichen der Altersgrenze gelöscht werden. ignore_favs: Favoriten ignorieren ignore_reblogs: Geteilte Beiträge ignorieren interaction_exceptions: Ausnahmen basierend auf Interaktionen @@ -1939,13 +1942,13 @@ de: seamless_external_login: Du bist über einen externen Dienst angemeldet, daher sind Passwort- und E-Mail-Einstellungen nicht verfügbar. 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. + extra_instructions_html: Hinweis: Der Link auf deiner Website kann unsichtbar sein. Der wichtige Teil ist rel="me". Du kannst auch den Tag link im head (statt a im body) verwenden, jedoch muss die Internetseite ohne JavaScript abrufbar sein. 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“. + instructions_html: Kopiere den unten stehenden Code und füge ihn in den HTML-Code 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 - verified_links: Deine verifizierten Links - website_verification: Website-Verifizierung + verified_links: Deine verifizierten Domains + website_verification: Verifizierung einer Website webauthn_credentials: add: Sicherheitsschlüssel hinzufügen create: diff --git a/config/locales/devise.az.yml b/config/locales/devise.az.yml new file mode 100644 index 0000000000..6a02cd7e49 --- /dev/null +++ b/config/locales/devise.az.yml @@ -0,0 +1,46 @@ +--- +az: + devise: + confirmations: + confirmed: E-poçt ünvanınız uğurla təsdiqləndi. + send_instructions: Bir neçə dəqiqə ərzində e-poçt ünvanınızı necə təsdiqləyəcəyinizə dair təlimatları olan bir e-məktub alacaqsınız. Bu e-məktubu almamısınızsa, spam qovluğunuzu yoxlayın. + send_paranoid_instructions: E-poçt ünvanınız verilənlər bazamızda varsa, bir neçə dəqiqədən sonra e-poçt ünvanınızı necə təsdiqləyəcəyinizə dair təlimatları olan bir e-məktub alacaqsınız. Bu e-məktubu almamısınızsa, spam qovluğunuzu yoxlayın. + failure: + already_authenticated: Siz artıq daxil olmusunuz. + inactive: Hesabınız hələ aktivləşdirilməyib. + invalid: Səhv %{authentication_keys} və ya parol. + last_attempt: Hesabınız blok olmamışdan əvvəl bir dəfə də cəhdiniz var. + locked: Hesabınız bloklandı. + not_found_in_database: Səhv %{authentication_keys} və ya parol. + omniauth_user_creation_failure: Bu kimlik üçün hesab yaradarkən xəta. + pending: Hesabınız hələ yoxlanışdadır. + timeout: Sessiyanın vaxtı bitdi. Xahiş edirik davam etmək üçün yenidən daxil olun. + unauthenticated: Davam etmək üçün daxil olmaq və ya qeydiyyatdan keçmək lazımdır. + unconfirmed: Davam etmək üçün e-poçt ünvanınızı təsdiqləməlisiniz. + mailer: + confirmation_instructions: + action: E-poçt ünvanını təsdiqlə + action_with_app: Təsdiqlə və %{app}-a geri qayıt + explanation: Siz %{host} saytında bu e-poçt ilə hesab yaratmısınız. Onu aktivləşdirməkdən bir klik uzaqlıqdasınız. Əgər bu siz olmamısınızsa, zəhmət olmasa, bu e-məktuba məhəl qoymayın. + explanation_when_pending: Bu e-poçt ünvanı ilə %{host} saytına dəvət üçün müraciət etmisiniz. Siz e-poçt ünvanınızı təsdiqlədikdən sonra müraciətinizi nəzərdən keçirəcəyik. Siz məlumatlarınızı dəyişdirmək və ya hesabınızı silmək üçün daxil ola bilərsiniz, lakin hesabınız təsdiqlənənə qədər əksər funksiyaları istifadə edə bilməzsiniz. Müraciətiniz rədd edilərsə, məlumatlarınız silinəcək, buna görə də sizdən heç bir tədbir tələb olunmayacaq. Əgər bu siz deyildinizsə, zəhmət, bu e-məktuba məhəl qoymayın. + extra_html: Həmçinin zəhmət olmasa, serverin qaydalarınıistifadə şərtlərini oxuyun. + subject: 'Mastodon: %{instance} üçün təsdiqlənmə təlimatları' + title: E-poçt ünvanını təsdiqlə + email_changed: + explanation: 'Hesabınız üçün e-poçt ünvanı buna dəyişdirilir:' + extra: E-poçtunuzu dəyişməmisinizsə, çox güman ki, kimsə hesabınıza giriş əldə edib. Zəhmət olmasa, parolunuzu dərhal dəyişdirin və ya hesabınıza daxil ola bilməyəcəksinizsə, server admini ilə əlaqə saxlayın. + subject: 'Mastodon: E-poçt dəyişdirildi' + title: Yeni e-poçt ünvanı + password_change: + explanation: Hesabınızın parolu dəyişdirilib. + extra: Parolunuzu dəyişməmisinizsə, çox güman ki, kimsə hesabınıza giriş əldə edib. Zəhmət olmasa, parolunuzu dərhal dəyişdirin və ya hesabınıza daxil ola bilməyəcəksinizsə, server admini ilə əlaqə saxlayın. + subject: 'Mastodon: Parol dəyişdirildi' + title: Parol dəyişdirildi + reconfirmation_instructions: + explanation: E-poçtunuzu dəyişdirmək üçün yeni ünvanı təsdiqləyin. + extra: Əgər bu dəyişiklik sizin tərəfinizdən deyilsə, zəhmət olmasa, bu e-məktuba məhəl qoymayın. Siz yuxarıdakı linkə daxil olana qədər Mastodon hesabının e-poçt ünvanı dəyişməyəcək. + subject: 'Mastodon: %{instance} üçün e-poçtu təsdiqlə' + title: E-poçt ünvanını təsdiqlə + reset_password_instructions: + action: Parolu dəyiş + explanation: Siz hesabınız üçün yeni parol tələb etmisiniz. diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml index 9d946967e9..754fa01550 100644 --- a/config/locales/devise.eo.yml +++ b/config/locales/devise.eo.yml @@ -6,7 +6,7 @@ eo: send_instructions: Vi ricevos retmesaĝon kun instrukcioj por konfirmi vian retadreson ene de kelkaj minutoj. Bonvolu kontroli vian spamujon se vi ne ricevis ĉi tiun retmesaĝon. send_paranoid_instructions: Se via retadreso ekzistas en nia datumbazo, vi ricevos retmesaĝon kun instrukcioj por konfirmi vian retadreson ene de kelkaj minutoj. Bonvolu kontroli vian spamujon se vi ne ricevis ĉi tiun retmesaĝon. failure: - already_authenticated: Vi jam salutis. + already_authenticated: Vi jam ensalutis. inactive: Via konto ankoraŭ ne estas konfirmita. invalid: Nevalida %{authentication_keys} aŭ pasvorto. last_attempt: Vi ankoraŭ povas provi unufoje antaŭ ol via konto estos ŝlosita. @@ -53,12 +53,14 @@ eo: subtitle: Dupaŝa aŭtentigo por via konto estas malŝaltita. title: 2FA estas malŝaltita two_factor_enabled: + explanation: Tokeno generita de la parigita TOTP-aplikaĵo estos necesa por ensaluti. subject: 'Mastodon: Dufaktora aŭtentigo ebligita' subtitle: Dupaŝa aŭtentigo por via konto estas ŝaltita. title: 2FA aktivigita two_factor_recovery_codes_changed: explanation: La antaŭaj reakiraj kodoj estis nuligitaj kaj novaj estis generitaj. subject: 'Mastodon: Reakiraj kodoj de dufaktora aŭtentigo rekreitaj' + subtitle: La antaŭaj restarigaj kodoj estis malvalidigitaj kaj novaj estis generitaj. title: Reakiraj kodoj de 2FA estas ŝanĝitaj unlock_instructions: subject: 'Mastodon: Instrukcioj por malŝlosi' @@ -73,9 +75,11 @@ eo: title: Unu el viaj sekurecaj ŝlosiloj estis forigita webauthn_disabled: explanation: Aŭtentigo per sekurecaj ŝlosiloj estas malŝaltita por via konto. + extra: Ensaluto nun eblas uzante nur la ĵetonon generitan de la parigita tempbazita unufoja pasvorta aplikaĵo. subject: 'Mastodon: sekureca-ŝlosila aŭtentigo malebligita' title: Sekurecaj ŝlosiloj malaktivigitaj webauthn_enabled: + explanation: Sekurecŝlosila aŭtentigo estas ebligita por via konto. extra: Via sekureca ŝlosilo nun povas esti uzata por ensaluto. subject: 'Mastodon: sekureca-ŝlosila aŭtentigo ebligita' title: Sekurecaj ŝlosiloj aktivigitaj diff --git a/config/locales/devise.fa.yml b/config/locales/devise.fa.yml index c441e346a2..bc5242e3c2 100644 --- a/config/locales/devise.fa.yml +++ b/config/locales/devise.fa.yml @@ -16,13 +16,13 @@ fa: pending: حساب شما همچنان در دست بررسی است. timeout: مهلت این ورود شما به سر رسید. برای ادامه، دوباره وارد شوید. unauthenticated: برای ادامه باید وارد شوید یا ثبت نام کنید. - unconfirmed: برای ادامه باید نشانی ایمیل خود را تأیید کنید. + unconfirmed: پیش از ادامه باید نشانی رایانامه‌تان را تأیید کنید. mailer: confirmation_instructions: - action: تأیید نشانی ایمیل + action: تأیید نشانی رایانامه action_with_app: پذیرش و بازگشت به %{app} - explanation: شما با این نشانی ایمیل حسابی در %{host} باز کرده‌اید. با یک کلیک می‌توانید این حساب را فعال کنید. اگر شما چنین کاری نکردید، لطفاً این ایمیل را نادیده بگیرید. - explanation_when_pending: شما با این نشانی ایمیل برای %{host} درخواست دعوت‌نامه داده‌اید. اگر ایمیل خود را تأیید کنید، ما درخواست شما را بررسی خواهیم کرد. تا وقتی بررسی تمام نشده، شما نمی‌توانید به حساب خود وارد شوید. اگر درخواست شما رد شود، ما اطلاعاتی را که از شما داریم پاک خواهیم کرد پس نیازی به کاری از سمت شما نخواهد بود. اگر شما چنین درخواستی نداده‌اید، لطفاً این ایمیل را نادیده بگیرید. + explanation: حسابی با این نشانی رایانامه روی %{host} ساخته‌اید. یک کلیک با فعّال کردنش فاصله دارید. اگر شما نبودید از این رایانامه چشم بپوشید. + explanation_when_pending: درخواستی برای دعوت به %{host} با این نشانی رایانامه داده‌اید. درخواستتان را پس از تأیید نشانی رایانامه‌تان بررسی خواهیم کرد. می‌توانید برای تغییر جزییات یا حذف حسابتان وارد شوید؛ ولی تا پیش از تأیید حساب نمی‌توانید به بیش‌تر قابلیت‌ها دسترسی داشته باشید. داده‌هایتان در صورت رد شدن درخواست برداشته خواهد شد و نیازی به اقدامی از سوی شما نیست. اگر شما نبودید از این رایانامه چشم بپوشید. extra_html: لطفاً همچنین قوانین کارساز و شرایط خدمتمان را بررسی کنید. subject: 'ماستودون: دستورالعمل تأیید برای %{instance}' title: تأیید نشانی رایانامه @@ -87,9 +87,9 @@ fa: failure: تآیید هویتتان از %{kind} نتوانست انجام شود چرا که «%{reason}». success: تأیید هویت از حساب %{kind} با موفقیت انجام شد. passwords: - no_token: این صفحه را تنها از راه یک ایمیل بازنشانی گذرواژه می‌شود دید. اگر از چنین ایمیلی می‌آیید، لطفاً مطمئن شوید که نشانی موجود در ایمیل را کامل به کار برده‌اید. - send_instructions: اگر ایمیل شما در پایگاه دادهٔ ما موجود باشد، تا دقایقی دیگر یک ایمیل بازیابی گذرواژه دریافت خواهید کرد. اگر این ایمیل نیامد، لطفاً پوشهٔ هرزنامه‌هایتان را بررسی کنید. - send_paranoid_instructions: اگر ایمیل شما در پایگاه دادهٔ ما موجود باشد، تا دقایقی دیگر یک ایمیل بازیابی گذرواژه دریافت خواهید کرد. اگر این ایمیل نیامد، لطفاً پوشهٔ هرزنامه‌هایتان را بررسی کنید. + no_token: بدون آمدن از رایانامهٔ بازنشانی گذرواژه نمی‌توان به این صفحه دسترسی داشت. اگر از چنین رایانامه‌ای آمده‌اید لطفاً از استفادهٔ نشانی کامل مطمئن شوید. + send_instructions: اگر نشانی رایانامه‌تان در پایگاه داده‌مان باشد تا چند دقیقهٔ دیگر پیوند بازیابی گذرواژه‌ای در آن خواهید گرفت. بررسی شاخهٔ هرزنامه در صورت نگرفتن این رایانامه. + send_paranoid_instructions: اگر نشانی رایانامه‌تان در پایگاه داده‌مان باشد تا چند دقیقهٔ دیگر پیوند بازیابی گذرواژه‌ای در آن خواهید گرفت. بررسی شاخهٔ هرزنامه در صورت نگرفتن این رایانامه. updated: گذرواژه شما با موفقیت تغییر کرد. شما الان وارد سیستم هستید. updated_not_active: گذرواژه شما با موفقیت تغییر کرد. registrations: @@ -99,15 +99,15 @@ fa: signed_up_but_locked: با موفّقیت ثبت‌نام کرده‌اید. با این حال نمی‌توان واردتان کرد؛ چرا که حسابتان قفل است. signed_up_but_pending: پیامی با پیوند تأیید به نشانی رایانامه‌تان فرستاده شده. پس از زدن پیوند درخواستتان را بازبینی خواهیم کرد. در صورت پذیرش آگاه خواهید شد. signed_up_but_unconfirmed: پیامی با پیوند تأیید به نشانی رایانامه‌تان فرستاده شده. لطفاً برای فعّال کردن حسابتان پیوند را بزنید. اگر این رایانامه را نگرفته‌اید شاخهٔ هرزنامه‌ها را بررسی کنید. - update_needs_confirmation: حسابتان را با موفّقیت به‌روز کردید؛‌ ولی باید نشانی رایانامهٔ جدیتان را تأیید کنیم. لطفاً رایانامه‌تان را بررسی کرده و برای تأیید نشانی رایانهٔ جدیدتان پیوند را بزنید. اگر این رایانامه را نگرفته‌اید شاخهٔ هرزنامه‌ها را بررسی کنید. + update_needs_confirmation: حسابتان را با موفّقیت به‌روز کردید؛ ولی نشانی رایانامهٔ جدیدتان باید تأیید شود. بررسی رایانامه و پیروی از پیوند تأییدیه برای تأیید نشانی رایانهٔ جدیدتان. بررسی شاخهٔ هرزنامه در صورت نگرفتن این رایانامه. updated: حسابتان با موفّقیت به‌روز شد. sessions: already_signed_out: با موفّقیت خارج شدید. signed_in: با موفّقیت وارد شدید. signed_out: با موفّقیت خارج شدید. unlocks: - send_instructions: تا دقایقی دیگر رایانامه‌ای با دستورالعمل قفل‌گشایی حسابتان دریافت خواهید کرد. اگر این رایانامه را نگرفتید، لطفاً پوشهٔ هرزنامه‌هایتان را بررسی کنید. - send_paranoid_instructions: اگر حسابتان وجود داشته باشد تا دقایقی دیگر رایانامه‌ای با دستورالعمل قفل‌گشاییش دریافت خواهید کرد. اگر این رایانامه را نگرفتید، لطفاً پوشهٔ هرزنامه‌هایتان را بررسی کنید. + send_instructions: تا دقایقی دیگر رایانامه‌ای با دستورالعمل قفل‌گشایی حسابتان دریافت خواهید کرد. بررسی شاخهٔ هرزنامه در صورت نگرفتن این رایانامه. + send_paranoid_instructions: اگر حسابتان وجود داشته باشد تا دقایقی دیگر رایانامه‌ای با دستورالعمل قفل‌گشاییش دریافت خواهید کرد. بررسی شاخهٔ هرزنامه در صورت نگرفتن این رایانامه. unlocked: حسابتان با موفّقیت قفل‌گشایی شد. لطفاً برای ادامه وارد شوید. errors: messages: diff --git a/config/locales/devise.fil.yml b/config/locales/devise.fil.yml index 4084bf2f90..ad9a917cdf 100644 --- a/config/locales/devise.fil.yml +++ b/config/locales/devise.fil.yml @@ -1 +1,110 @@ +--- fil: + devise: + confirmations: + confirmed: Matagumpay na nakumpirma ang email address mo. + send_instructions: Makakatanggap ka ng email na may instruksiyon kung paano kumpirmahin ang email address mo sa ilang minuto. Paki-check ang spam folder mo kung hindi mo natanggap ang email na ito. + send_paranoid_instructions: Kung nasa database namin ang email address mo, makakatanggap ka ng email na may instruksiyon kung paano kumpirmahin ang email address mo sa ilang minuto. Paki-check ang spam folder mo kung hindi mo natanggap ang email na ito. + failure: + already_authenticated: Naka-sign in ka na. + inactive: Hindi pa naa-activate ang account mo. + invalid: Invalid na %{authentication_keys} o password. + last_attempt: May isa ka pang attempt bago ma-lock ang account mo. + locked: Na-lock ang account mo. + not_found_in_database: Invalid na %{authentication_keys} o password. + omniauth_user_creation_failure: May error sa paggawa ng account para sa identidad na ito. + pending: Nire-review pa ang account mo. + timeout: Natapos na ang sesyon mo. Mag-login ulit para magpatuloy. + unauthenticated: Kailangan mong mag-login o mag-sign up bago magpatuloy. + unconfirmed: Kailangan mong kumpirmahin ang email address mo bago ka magpatuloy. + mailer: + confirmation_instructions: + action: Beripikahin ang email address + action_with_app: Kumpirmahin at bumalik sa %{app} + explanation: Nakagawa ka ng account sa %{host} gamit ang email address na ito. Isang click na lang para ma-activate ito. Kung hindi ikaw ito, balewalain ang email na ito. + explanation_when_pending: Nag-apply ka para sa imbitasyon sa %{host} gamit ang email address na ito. Kapag nakumpirma mo ang email address mo, rerebyuhin namin ang aplikasyon mo. Maaari kang mag-login para baguhin ang mga detalye mo o tanggalin ang iyong account, pero hindi mo maaakses ang karamihan sa mga function hanggang hindi naaaprubahan ang account mo. Kung tinanggihan ang aplikasyon mo, aalisin ang data mo, kaya wala ka nang ibang kailangang gawing aksiyon. Kung hindi ikaw ito, balewalain ang email na ito. + extra_html: Paki-check din ang mga tuntunin ng server at ang aming mga tuntunin sa serbisyo. + subject: 'Mastodon: Instruksiyon sa kumpirmasyon para sa %{instance}' + title: Beripikahin ang email address + email_changed: + explanation: 'Ang email address para sa account mo ay binabago sa:' + extra: Kung hindi mo binago ang email mo, malamang ay may nagkaroon ng akses sa account mo. Pakipalitan agad ang password mo o kontakin ang server admin kung na-lock out ka sa account mo. + subject: 'Mastodon: Napalitan ang email' + title: Bagong email address + password_change: + explanation: Nabago na ang password ng account mo. + extra: Kung hindi mo binago ang email mo, malamang ay may nagkaroon ng akses sa account mo. Pakipalitan agad ang password mo o kontakin ang server admin kung na-lock out ka sa account mo. + subject: 'Mastodon: Napalitan ang password' + title: Napalitan ang password + reconfirmation_instructions: + explanation: Kumpirmahin ang bagong address para baguhin ang email mo. + extra: Kung hindi ikaw ang gumawa ng pagbabagong ito, balewalain ang email na ito. Hindi mapapalitan ang email address para sa account sa Mastodon hanggang hindi mo napupuntahan ang link sa itaas. + subject: 'Mastodon: Kumpirmahin ang email para sa %{instance}' + title: Beripikahin ang email address + reset_password_instructions: + action: Palitan ang password + explanation: Humiling ka ng bagong passwird para sa account mo. + extra: Kung hindi mo hiniling ito, balewalain ang email na ito. Hindi mababago ang password mo hanggang hindi mo napupuntahan ang link sa itaas at nakakagawa ng bago. + subject: 'Mastodon: Instruksiyon sa pag-reset ng password' + title: Ang pasword nay nareset + two_factor_disabled: + explanation: Puwede nang mag-login gamit lang ang email address at password. + subject: 'Mastodon: Naka-disable ang two-factor authentication' + subtitle: Naka-disable ang two-factor authentication para sa account mo. + title: Naka-disable ang 2FA + two_factor_enabled: + explanation: Kakailanganin ang token na na-generate ng paired TOTP app para maka-login. + subject: 'Mastodon: Naka-enable ang two-factor authentication' + subtitle: Naka-enable ang two-factor authentication para sa account mo. + title: Naka-enable ang 2FA + two_factor_recovery_codes_changed: + explanation: Na-invalidate ang naunang mga recovery code at nakagawa na ng bago. + subject: 'Mastodon: Nakagawa ulit ng mga two-factor reecover code' + subtitle: Na-invalidate ang naunang mga recovery code at nakagawa na ng bago. + title: Nabago ang 2FA recovery codes + unlock_instructions: + subject: 'Mastodon: Buksan ang instruksiyon' + webauthn_credential: + added: + explanation: Naidagdag na sa account mo ang sumusunod na security key + subject: 'Mastodon: Bagong security key' + title: May naidagdag nang bagong security key + deleted: + explanation: Natanggal na sa account mo ang sumusunod na security key + subject: 'Mastodon: Na-delete ang security key' + title: Na-delete ang isa sa mga security key mo + webauthn_disabled: + explanation: Naka-disable ang authentication sa mga security key para sa account mo. + extra: Puwede nang mag-login gamit lang ang token na na-gennerate ng paired TOTP app. + subject: 'Mastodon: Naka-disable ang authentication sa mga security key' + title: Naka-disable ang mga security key + webauthn_enabled: + explanation: Naka-enable ang two-factor authentication para sa account mo. + extra: Magagamit na ngayon ang security key para maka-login. + subject: 'Mastodon: Naka-enable ang security key authentication' + title: Naka-enable ang mga security key + omniauth_callbacks: + failure: Hindi ka ma-authenticate mula sa %{kind} dahil “%{reason}”. + success: Matagumpay na na-aurthenticate mula sa %{kind} account. + passwords: + no_token: Hindi mo maaakses ang page na ito nang hindi nangaggaling sa password reset na email. Kung nangggaling ka sa password reset na email, siguruhin mong ginamit mo ang binigay na URL. + send_instructions: Kung nasa database namin ang email address mo, makakatanggap ka ng password recovery link ilang minuto. Paki-check ang spam folder mo kung hindi mo natanggap ang email na ito. + send_paranoid_instructions: Kung nasa database namin ang email address mo, makakatanggap ka ng password recovery link sa email address mo sa ilang minuto. Paki-check ang spam folder mo kung hindi mo natanggap ang email na ito. + updated: Matagumpay na napalitan ang password mo. Naka-sign in ka na. + updated_not_active: Matagumpay na napalitan ang password mo. + registrations: + destroyed: Paalam! Matagumpay na nakansela ang account mo. Sana ay magkita ulit tayo sa hinaharap. + signed_up: Maligayang pagdating! Nakapag-sign up ka na. + signed_up_but_inactive: Nakapag-sign up ka na. Pero ka namin ma-sign in dahil hindi pa naa-activate ang account mo. + signed_up_but_locked: Nakapag-sign up ka na. Pero ka namin ma-sign in dahil naka-lock ang account mo. + signed_up_but_pending: Naipadala na sa email address mo ang mensaheng may confirmation link. Pagka-click ng link, ire-review namin ang application. Aabisuhan ka kapag naaprobahan ito. + signed_up_but_unconfirmed: Naipadala na sa email address mo ang mensaheng may confirmation link. Pakisundan ang link para ma-activate ang account mo. Pakitingnan ang spam folder mo kung hindi mo natanggap ang email na ito. + update_needs_confirmation: Na-update mo na ang account mo, pero kailangan naming beripikahin ang bago mong email address. Pakitingnan ang email mo at sundan ang confirm link para makumpirma ang bagong email address mo. Pakitingnan ang spam folder mo kung hindi mo natanggap ang email na ito. + updated: Matagumpay na na-update ang account mo. + sessions: + already_signed_out: Matagumpay na naka-sign out. + signed_in: Matagumpay na naka-sign in. + signed_out: Matagumpay na naka-sign out. + unlocks: + send_instructions: Makakatanggap ka ng email na may instruksiyon kung paano i-unlock ang account mo sa ilang minuto. Pakitingnan ang spam folder mo kung hindi mo natanggap ang email na ito. + send_paranoid_instructions: Kung may account ka, makakatanggap ka ng email na may instruksiyon kung paano ito i-unlock sa ilang minuto. Pakitingnan ang spam folder mo kung hindi mo natanggap ang email na ito. diff --git a/config/locales/devise.gl.yml b/config/locales/devise.gl.yml index 00b1824808..d04afe8e2a 100644 --- a/config/locales/devise.gl.yml +++ b/config/locales/devise.gl.yml @@ -2,8 +2,8 @@ gl: devise: confirmations: - confirmed: O teu enderezo de email foi confirmado. - send_instructions: Vas recibir un email coas instrucións para confirmar o teu enderezo de email dentro dalgúns minutos. Por favor, comproba o cartafol de spam se non recibiches o correo. + confirmed: Confirmouse correctamente o teu enderezo de correo. + send_instructions: Nuns minutos vas recibir un correo coas instrucións para confirmar o teu enderezo de correo. Por favor, comproba o cartafol de spam se non recibiches o correo. send_paranoid_instructions: Se o teu enderezo de email xa existira na nosa base de datos, vas recibir un correo coas instrucións de confirmación dentro dalgúns minutos. Por favor, comproba o cartafol de spam se non recibiches o correo. failure: already_authenticated: Xa estás conectada. @@ -16,31 +16,31 @@ gl: pending: A túa conta aínda está baixo revisión. timeout: A túa sesión caducou. Accede outra vez para continuar. unauthenticated: Precisas iniciar sesión ou rexistrarte antes de continuar. - unconfirmed: Tes que confirmar o teu enderezo de email antes de continuar. + unconfirmed: Tes que confirmar o teu enderezo de correo antes de continuar. mailer: confirmation_instructions: - action: Verificar o enderezo de email + action: Verificar o enderezo de correo action_with_app: Confirmar e volver a %{app} - explanation: Creaches unha conta en %{host} con este enderezo de email. Estás a un clic de activala. Se non foches ti o que fixeches este rexisto, por favor ignora esta mensaxe. - explanation_when_pending: Solicitaches un convite para %{host} con este enderezo de email. Logo de que confirmes o teu enderezo de email, imos revisar a túa inscrición. Podes iniciar sesión para mudar os teus datos ou eliminar a túa conta, mais non poderás aceder á meirande parte das funcións até que a túa conta sexa aprobada. Se a túa inscrición for rexeitada, os teus datos serán eliminados, polo que non será necesaria calquera acción adicional da túa parte. Se non solicitaches este convite, por favor, ignora este correo. + explanation: Creaches unha conta en %{host} con este enderezo de correo. Estás a un clic de activala. Se non foches ti quen fixo esta solicitude, por favor ignora esta mensaxe. + explanation_when_pending: Solicitaches un convite para %{host} con este enderezo de correo. Logo confirmes o teu enderezo de correo, imos revisar a túa inscrición. Podes iniciar sesión para mudar os teus datos ou eliminar a túa conta, mais non poderás aceder á meirande parte das funcións até que a túa conta sexa aprobada. Se a túa inscrición for rexeitada, os teus datos serán eliminados, polo que non será necesaria calquera acción adicional da túa parte. Se non solicitaches este convite, por favor, ignora este correo. extra_html: Por favor, le as regras do servidor e os nosos termos do servizo. subject: 'Mastodon: Instrucións de confirmación para %{instance}' - title: Verificar o enderezo de email + title: Verificar o enderezo de correo email_changed: explanation: 'O email asociado á túa conta será mudado a:' extra: Se non mudaches o teu email é posíbel que alguén teña conseguido acceder á túa conta. Por favor muda o teu contrasinal de xeito imediato ou entra en contacto cun administrador do servidor se non podes acceder a túa conta. subject: 'Mastodon: Email mudado' - title: Novo enderezo de email + title: Novo enderezo de correo password_change: explanation: O contrasinal da túa conta foi mudado. extra: Se non mudaches o teu contrasinal, é posíbel que alguén teña conseguido acceder á túa conta. Por favor muda o teu contrasinal de xeito imediato ou entra en contato cun administrador do servidor se non podes acceder a túa conta. subject: 'Mastodon: Contrasinal mudado' title: Contrasinal mudado reconfirmation_instructions: - explanation: Confirma o teu novo enderezo para mudar o email. - extra: Se esta mudanza non foi comezada por ti, por favor ignora este email. O enderezo de email para a túa conta do Mastodon non mudará mentres non accedas á ligazón de enriba. + explanation: Confirma o teu novo enderezo para mudar o correo. + extra: Se esta mudanza non foi iniciada por ti, por favor ignora este correo. O enderezo de correo para a túa conta do Mastodon non mudará mentres non accedas á ligazón de enriba. subject: 'Mastodon: Confirmar email para %{instance}' - title: Verificar o enderezo de email + title: Verificar o enderezo de correo reset_password_instructions: action: Mudar contrasinal explanation: Solicitaches un novo contrasinal para a túa conta. @@ -87,9 +87,9 @@ gl: failure: Non foi posible autenticarte desde %{kind} debido a "%{reason}". success: Autenticado con éxito na conta %{kind}. passwords: - no_token: Non podes acceder a esta páxina se non vés a través da ligazón enviada por email para o mudado do teu contrasinal. Se empregaches esa ligazón para chegar aquí, por favor verifica que o enderezo URL actual é o mesmo do que foi enviado no email. - send_instructions: Se o teu enderezo de email existe na nosa base de datos, vas recibir un email coas instrucións para mudar o contrasinal dentro duns minutos. Por favor, comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o email. - send_paranoid_instructions: Se o teu enderezo de email existe na nosa base de datos, vas recibir unha ligazón para recuperar o contrasinal dentro duns minutos. Por favor, comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o email. + no_token: Non podes acceder a esta páxina se non vés a través da ligazón enviada por correo para o cambio do contrasinal. Se empregaches esa ligazón para chegar aquí, por favor verifica que o enderezo URL actual é o mesmo do que foi enviado no correo. + send_instructions: Se o teu enderezo de correo existe na nosa base de datos, vas recibir un email coas instrucións para mudar o contrasinal dentro duns minutos. Por favor, comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo. + send_paranoid_instructions: Se o teu enderezo de correo existe na nosa base de datos, vas recibir un email coas instrucións para mudar o contrasinal dentro duns minutos. Por favor, comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo. updated: O teu contrasinal foi mudado. Estás xa autenticado na túa conta. updated_not_active: O teu contrasinal foi mudado de xeito correcto. registrations: @@ -97,9 +97,9 @@ gl: signed_up: Benvido! Rexistrácheste de xeito correcto. signed_up_but_inactive: A túa conta foi rexistada. Porén aínda non está activada. signed_up_but_locked: A túa conta foi rexistada. Porén está bloqueada. - signed_up_but_pending: Acabamos de enviar unha mensaxe ao teu email cunha ligazón de confirmación. Após premer na ligazón, revisaremos a túa solicitude. Recibirás unha notificación se a túa conta é aprobada. + signed_up_but_pending: Acabamos de enviar unha mensaxe ao teu correo cunha ligazón de confirmación. Após premer na ligazón, revisaremos a túa solicitude. Recibirás unha notificación se a túa conta é aprobada. signed_up_but_unconfirmed: Enviouse unha mensaxe cunha ligazón de confirmación ao teu email. Por favor, preme nesa ligazón para activar a túa conta. Comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo. - update_needs_confirmation: Actualizaches a túa conta de xeito correcto, pero precisamos verificar o teu novo enderezo de email. Por favor, revisa o teu email e segue a ligazón para confirmar o teu novo enderezo de email. Comproba o teu cartafol de correo lixo (spam) se ves que non recibiches o correo. + update_needs_confirmation: Actualizaches a túa conta de xeito correcto, pero precisamos verificar o teu novo enderezo de correo. Por favor, revisa o teu correo e segue a ligazón para confirmar o teu novo enderezo de correo. Comproba o cartafol de correo lixo (spam) se ves que non recibiches o correo. updated: A túa conta foi actualizada de xeito correcto. sessions: already_signed_out: Pechouse a sesión de xeito correcto. diff --git a/config/locales/devise.io.yml b/config/locales/devise.io.yml index 49637579e4..c76f5fb9af 100644 --- a/config/locales/devise.io.yml +++ b/config/locales/devise.io.yml @@ -21,19 +21,19 @@ io: confirmation_instructions: action: Verifikez retpostadreso action_with_app: Konfirmez e retrovenez a %{app} - explanation: Vu kreis konto che %{host} per ca retpostadreso. Vu povas facile aktivigar lu. Se vu ne agis lu, ignorez ca retposto. + explanation: Vu kreis konto sur %{host} per ca retpostadreso. Se vu ne agis lu, ignorez ca retposto. explanation_when_pending: Vu aplikis por ganar invito a %{host} per ca retpostkonto. Pos vu konfirmas vua retpostkonto, ni kontrolos vua apliko. Vu povas enirar por chanjar vua detali o efacar vua konto, ma vu ne povas acesar maxim de funcioni til vua konto aprobesas. Se vua apliko refuzesas, vua informi efacesos, do plusa ago ne bezonesos de vu. Se vu ne agis lu, ignorez ca retposto. extra_html: Anke videz reguli di la servilo e nia servokondicioni. subject: Instrucioni por konfirmar %{instance} title: Verifikez retpostadreso email_changed: explanation: 'Retpostadreso di vua konto chanjesas a:' - extra: Se vu ne chanjesis vua retpostadreso, nulu posible acesis vua konto. Chanjez vua pasvorto quik o kontaktez serviladministratero se vu ne povas enirar vua konto. + extra: Se vu ne chanjesis vua retpostadreso, eble ulu adiris vua konto. subject: 'Mastodon: Retpostadreso chanjesis' title: Nova retpostadreso password_change: explanation: La pasvorto di vua konto chanjesis. - extra: Se vu ne chanjesis vua pasvorto, nulu posible acesis vua konto. Chanjez vua pasvorto quik o kontaktez serviladministratero se vu ne povas enirar vua konto. + extra: Se vu ne chanjesis vua pasvorto, eble ulu adiris vua konto. subject: Tua pasvorto chanjesis senprobleme. title: Pasvorto chanjesis reconfirmation_instructions: @@ -49,14 +49,14 @@ io: title: Richanjo di pasvorto two_factor_disabled: explanation: Eniro esas nun posibla per nur retpostoadreso e pasvorto. - subject: 'Mastodon: 2-faktorverifiko deaktivigesis' - subtitle: 2-faktora verifiko por vua konto desaktivigesis. - title: 2FA deaktivigesis + subject: 'Mastodon: Dufaktora yurizo desebligesis' + subtitle: Dufaktora yurizo por vua konto desebligesis. + title: 2FA desebligesis two_factor_enabled: explanation: Ficho facesis da parigita softwaro TOTP bezonesos por eniro. - subject: 'Mastodon: 2-faktorverifiko aktivigesis' - subtitle: 2-faktora verifiko aktivigesis por vua konto. - title: 2FA aktivigesis + subject: 'Mastodon: Dufaktora yurizo ebligesis' + subtitle: Dufaktora yurizo ebligesis por vua konto. + title: 2FA ebligesis two_factor_recovery_codes_changed: explanation: Antea rigankodexi devalidesis e novo facesis. subject: 'Mastodon: 2-faktorrigankodexi rifacesis' @@ -66,23 +66,23 @@ io: subject: Instructioni por riacendar la konto webauthn_credential: added: - explanation: Ca sekurklefo insertesis a vua konto + explanation: Ca sekuresklefo adjuntesis ad vua konto subject: 'Mastodon: Nova sekurklefo' - title: Nova sekurklefo insertesis + title: Nova sekuresklefo adjuntesis deleted: explanation: Ca sekurklefo efacesis de vua konto subject: 'Mastodon: Sekurklefo efacesis' title: 1 de vua sekurklefi efacesis webauthn_disabled: - explanation: Verifiko per sekuresklefi desaktivigesis por vua konto. + explanation: Yurizo kun sekuresklefi desebligesis por vua konto. extra: Eniro esas nun posibla per nur ficho qua facesis da parigita softwaro TOTP. - subject: 'Mastodon: Verifiko per sekurklefi deaktivigesis' - title: Sekurklefi deaktivigesis + subject: 'Mastodon: Yurizo per sekuresklefi desebligesis' + title: Sekuresklefi desebligesis webauthn_enabled: - explanation: Sekuresklefoa verifiko aktivigesis por vua konto. + explanation: Sekuresklefyurizo ebligesis por vua konto. extra: Vua sekuresklefo povas nun uzesar por eniro. - subject: 'Mastodon: Sekurklefverifiko aktivigesis' - title: Sekurklefi aktivigesis + subject: 'Mastodon: Sekuresklefyurizo ebligesis' + title: Sekuresklefi ebligesis omniauth_callbacks: failure: 'Ni ne povis autentikigar tu per %{kind}: ''%{reason}''.' success: Autentikigita senprobleme per %{kind}. @@ -97,7 +97,7 @@ io: signed_up: Bonveno! Tu membreskis senprobleme. signed_up_but_inactive: Tu bone membreskis, ma tu ankore ne povas enirar pro ke tua konto ne konfirmesis. signed_up_but_locked: Tu bone membreskis, ma tu ne povas enirar pro ke tua konto extingesis. - signed_up_but_pending: Mesajo kun konfirmoligilo sendesis a vua retpostadreso. Pos vu kliktas la ligilo, ni kontrolos vua apliko. Vu notifikesos se ol aprobesas. + signed_up_but_pending: Mesajo kun konfirmligilo sendesis ad vua retpostadreso. Vu savigesos se ol aprobesas. signed_up_but_unconfirmed: Retpost-mesajo kun tua ligilo por konfirmar tua konto sendesis a tua retpost-adreso. Voluntez uzar ta ligilo por konfirmar tua konto. update_needs_confirmation: Tu vone aktualigis tua konto, ma ni bezonas kontrolar tua nova retpost-adreso. Voluntez kontrolar tua retpost-mesaji ed uzar la ligilo por konfirmar tua nova retpost-adreso. updated: Tua konto aktualigesis senprobleme. diff --git a/config/locales/devise.kab.yml b/config/locales/devise.kab.yml index 32a98a37c3..95969fdfd0 100644 --- a/config/locales/devise.kab.yml +++ b/config/locales/devise.kab.yml @@ -88,8 +88,8 @@ kab: success: Asesṭeb idda akken iwata seg umiḍan %{kind}. passwords: no_token: Ur tezmireḍ ara ad tkecmeḍ ɣer usebter-a war ma tusiḍ-d seg imayl n uwennez n wawal uffir. ma syin i d-tusiḍ, wali ma tesqedceḍ tansa URL i d ak·am-d-nuzen. - send_instructions: Ma nufa tansa-inek imayl tella deg uzadur-nneγ n yisefka, ad n-teṭṭfeḍ izen deg kra n tesdatin, deg-s assaγ i uɛawed n wawal uffir. Ma ur k-in-yewwiḍ ara yizen, ttxil-k ẓer deg ukaram spam. - send_paranoid_instructions: Ma nufa tansa-inek imayl tella deg uzadur-nneγ n yisefka, ad n-teṭṭfeḍ izen deg kra n tesdatin, deg-s assaγ i uɛawed n wawal uffir. Ma ur k-in-yewwiḍ ara yizen, ttxil-k ẓer deg ukaram spam. + send_instructions: Ma nufa tansa-inek·inem imayl tella deg uzadur-nneɣ n yisefka, ad n-teṭṭfeḍ izen deg kra n tesdatin, deg-s assaɣ i uɛawed n wawal uffir. Ma ur k-in-yewwiḍ ara yizen, ttxil-k·m ẓer deg ukaram yespamen. + send_paranoid_instructions: Ma nufa tansa-inek·inem imayl tella deg uzadur-nneɣ n yisefka, ad n-teṭṭfeḍ izen deg kra n tesdatin, deg-s assaɣ i uɛawed n wawal uffir. Ma ur k-in-yewwiḍ ara yizen, ttxil-k·m ẓer deg ukaram yespamen. updated: Awal-ik uffir yettwabeddel mebla ugur. Aqla-k tura tjerrḍeḍ. updated_not_active: Awal-ik uffir yettwabeddel mebla ugur. registrations: diff --git a/config/locales/devise.la.yml b/config/locales/devise.la.yml index a6fe5e1e4b..e6d3cb1f78 100644 --- a/config/locales/devise.la.yml +++ b/config/locales/devise.la.yml @@ -5,4 +5,8 @@ la: send_instructions: Sī adresa tua epistularis in nostra basi datōrum exstat, vinculum ad recuperandam clavem adresa tua epistulari adferētur pauca momenta post. Sī autem hanc epistulam nōn recēpistī, rogāmus ut scrūtināriōnem spurcāriī tuī faciās. registrations: destroyed: Vale! Ratio tua succēssu cancellāta est. Spērāmus tē mox iterum vidēre. - signed_up_but_inactive: Te cōnscrīpsistī succēdāneē. At nōn potuimus tē introīre quod ratio* tua nōn adhūc est activāta.* + signed_up: Bene vēnistī! Tē adscrīpsistī fēlīciter. + signed_up_but_inactive: Tē adscrīpsistī fēlīciter. Tamen, tibi nōn licuit intrāre, quia ratiō tua adhūc nōn est ācta. + signed_up_but_locked: Tē adscrīpsistī fēlīciter. Tamen, tibi nōn licuit intrāre, quia ratiō tua clāusa est. + signed_up_but_pending: Nūntius cum nexū cōnfirmātiōnis ad tuam īnscrīptiōnem ēlectronicam missus est. Posteā, cum nexum premseris, rogātiōnem tuam recēnseāmus. Sī probāta erit, certior fēceris. + signed_up_but_unconfirmed: Nūntius cum nexū cōnfirmātiōnis ad tuam īnscrīptiōnem ēlectronicam missus est. Quaesō, nexum sequere ut ratiōnem tuam āctīvēs. Quaesō, scrīnium spammae īnspice sī hunc nūntium nōn accēpistī. diff --git a/config/locales/devise.lt.yml b/config/locales/devise.lt.yml index 7c72543574..4c54c50e4f 100644 --- a/config/locales/devise.lt.yml +++ b/config/locales/devise.lt.yml @@ -94,11 +94,11 @@ lt: updated_not_active: Tavo slaptažodis buvo sėkmingai pakeistas. registrations: destroyed: Iki pasimatymo! Tavo paskyra sėkmingai atšaukta. Tikimės, kad netrukus vėl pamatysime tave. - signed_up: Sveiki! Tu sėkmingai užsiregistravai. - signed_up_but_inactive: Sėkmingai užsiregistravai. Tačiau negalėjome tavęs prijungti, nes tavo paskyra dar nėra aktyvuota. - signed_up_but_locked: Sėkmingai užsiregistravai. Tačiau negalėjome tavęs prijungti, nes tavo paskyra dar užrakinta. - signed_up_but_pending: Į tavo el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Paspaudęs (-usi) nuorodą, peržiūrėsime tavo paraišką. Tau bus pranešta, jei ji patvirtinta. - signed_up_but_unconfirmed: Į tavo el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Sek nuorodą, kad aktyvuotum savo paskyrą. Jei negavai šio el. laiško, patikrink šlamšto aplanką. + signed_up: Sveiki atvykę! Sėkmingai užsiregistravote. + signed_up_but_inactive: Sėkmingai užsiregistravote. Tačiau negalėjome jūsų prijungti, nes jūsų paskyra dar nėra aktyvuota. + signed_up_but_locked: Sėkmingai užsiregistravote. Tačiau negalėjome jūsų prijungti, nes jūsų paskyra yra užrakinta. + signed_up_but_pending: Į jūsų el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Paspaudę nuorodą, peržiūrėsime jūsų paraišką. Jums bus pranešta, jei ji bus patvirtinta. + signed_up_but_unconfirmed: Į jūsų el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Sekite nuorodą, kad aktyvuotumėte savo paskyrą. Jei negavote šio el. laiško, patikrinkite brukalo (kartais vadinamo šlamšto) aplanką. update_needs_confirmation: Sėkmingai atnaujinai savo paskyrą, bet mums reikia patvirtinti naująjį el. pašto adresą. Patikrink savo el. paštą ir sek patvirtinimo nuorodą, kad patvirtintum savo naują el. pašto adresą. Jei negavai šio el. laiško, patikrink šlamšto aplanką. updated: Tavo paskyra buvo sėkmingai atnaujinta. sessions: diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index 4470c8109e..7d1201c1ae 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -2,9 +2,9 @@ lv: devise: confirmations: - confirmed: Tava e-pasta adrese ir veiksmīgi apstiprināta. - send_instructions: Pēc dažām minūtēm saņemsi e-pastu ar norādījumiem, kā apstiprināt savu e-pasta adresi. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - send_paranoid_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm saņemsi e-pastu ar norādījumiem, kā apstiprināt savu e-pasta adresi. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. + confirmed: Tava e-pasta adrese tika sekmīgi apstiprināta. + send_instructions: Pēc dažām minūtēm saņemsi e-pasta ziņojum ar norādēm, kā apstiprināt savu e-pasta adresi. Lūgums pārbaudīt mēstuļu mapi, ja nesaņēmi šo e-pasta ziņojumu. + send_paranoid_instructions: Ja Tava e-pasta adrese ir mūsu datubāzē, pēc dažām minūtēm saņemsi e-pasta ziņojumu ar norādēm, kā apstiprināt savu e-pasta adresi. Lūgums pārbaudīt mēstuļu mapi, ja nesaņēmi šo e-pasta ziņojumu. failure: already_authenticated: Tu jau esi pieteicies. inactive: Tavs konts vēl nav aktivizēts. @@ -14,7 +14,7 @@ lv: not_found_in_database: Nederīga %{authentication_keys} vai parole. omniauth_user_creation_failure: Kļūda šīs identitātes konta izveidošanā. pending: Tavs konts joprojām tiek pārskatīts. - timeout: Sesijair beigusies. Lūgums vēlreiz pieteikties, lai turpinātu. + timeout: Sesija ir beigusies. Lūgums vēlreiz pieteikties, lai turpinātu. unauthenticated: Lai turpinātu, jāpiesakās vai jāreģistrējas. unconfirmed: Lai turpinātu, jāapliecina sava e-pasta adrese. mailer: @@ -58,10 +58,10 @@ lv: subtitle: Tavam kontam tika iespējota divpakāpju autentifikācija. title: 2FA iespējota two_factor_recovery_codes_changed: - explanation: Iepriekšējie atkopšanas kodi ir atzīti par nederīgiem un ģenerēti jauni. - subject: 'Mastodon: Divfaktoru atkopšanas kodi pārģenerēti' - subtitle: Iepriekšējie atkopšanas kodi tika padarīti par nederīgiem, un tika izveidoti jauni. - title: 2FA atkopšanas kodi mainīti + explanation: Iepriekšējie atkopes kodi ir padarīt nederīgi, un ir izveidoti jauni. + subject: 'Mastodon: atkārtoti izveidoti divpakāpju atkopes kodi' + subtitle: Iepriekšējie atkopes kodi tika padarīti par nederīgiem, un tika izveidoti jauni. + title: 2FA atkopes kodi nomainīti unlock_instructions: subject: 'Mastodon: Norādījumi atbloķēšanai' webauthn_credential: @@ -85,33 +85,33 @@ lv: title: Drošības atslēgas iespējotas omniauth_callbacks: failure: Nevarēja autentificēt tevi no %{kind}, jo "%{reason}". - success: Veiksmīgi autentificēts no %{kind} konta. + success: Sekmīgi autentificēts no %{kind} konta. passwords: no_token: Tu nevari piekļūt šai lapai, ja neesi saņēmis paroles atiestatīšanas e-pasta ziņojumu. Ja ienāci no paroles atiestatīšanas e-pasta, lūdzu, pārliecinies, vai izmanto visu norādīto URL. - send_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm uz savu e-pasta adresi saņemsi paroles atkopšanas saiti. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - send_paranoid_instructions: Ja tava e-pasta adrese ir mūsu datu bāzē, pēc dažām minūtēm uz savu e-pasta adresi saņemsi paroles atkopšanas saiti. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - updated: Tava parole tika veiksmīgi nomainīta. Tu tagad esi pieteicies. - updated_not_active: Tava parole ir veiksmīgi nomainīta. + send_instructions: Ja Tava e-pasta adrese ir mūsu datubāzē, pēc dažām minūtēm savā e-pasta adresē saņemsi paroles atkopes saiti. Lūgums pārbaudīt mēstuļu mapi, ja nesaņēmi šo e-pasta ziņojumu. + send_paranoid_instructions: Ja Tava e-pasta adrese ir mūsu datubāzē, pēc dažām minūtēm savā e-pasta adresē saņemsi paroles atkopes saiti. Lūgums pārbaudīt mēstuļu mapi, ja nesaņēmi šo e-pasta ziņojumu. + updated: Tava parole tika sekmīgi nomainīta. Tagad esi pieteicies. + updated_not_active: Tava parole tika sekmīgi nomainīta. registrations: - destroyed: Visu labu! Tavs konts ir veiksmīgi atcelts. Mēs ceram tevi drīz atkal redzēt. - signed_up: Laipni lūdzam! Tu esi veiksmīgi reģistrējies. - signed_up_but_inactive: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām tevi pierakstīt, jo tavs konts vēl nav aktivizēts. - signed_up_but_locked: Tava reģistrācija bija veiksmīga. Tomēr mēs nevarējām tevi pierakstīt, jo tavs konts ir bloķēts. - signed_up_but_pending: Uz tavu e-pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Pēc noklikšķināšanas uz saites mēs izskatīsim tavu pieteikumu. Tu tiksi informēts, ja tas tiks apstiprināts. - signed_up_but_unconfirmed: Uz tavu e-pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Lūdzu, seko saitei, lai aktivizētu savu kontu. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - update_needs_confirmation: Tu veiksmīgi atjaunināji savu kontu, taču mums ir jāverificē teva jaunā e-pasta adrese. Lūdzu, pārbaudi savu e-pastu un seko apstiprinājuma saitei, lai apstiprinātu savu jauno e-pasta adresi. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - updated: Tavs konts ir veiksmīgi atjaunināts. + destroyed: Visu labu! Tavs konts ir sekmīgi atcelts. Mēs ceram Tevi drīz atkal redzēt. + signed_up: Laipni lūdzam! Reģistrēšanās bija sekmīga. + signed_up_but_inactive: Reģistrēšanās bija sekmīga. Tomēr mēs nevarējām Tevi pieteikt, jo Tavs konts vēl nav aktivēts. + signed_up_but_locked: Reģistrēšanās bija sekmīga. Tomēr mēs nevarējām Tevi pieteikt, jo Tavs konts ir slēgts. + signed_up_but_pending: Ziņojums ar apstiprinājuma saiti tika nosūtīts uz Tavu e-pasta adresi. Pēc tam, kad atvērsi saiti, mēs izskatīsim Tavu pieteikumu. Tev tiks paziņots, ja tas tiks apstiprināts. + signed_up_but_unconfirmed: Ziņojums ar apstiprinājuma saiti tika nosūtīts uz Tavu e-pasta adresi. Lūgums sekot saitei, lai aktivētu savu kontu. Lūgums pārbaudīt savu mēstuļu mapi, ja nesaņēmi šo e-pasta ziņojumu. + update_needs_confirmation: Tu sekmīgi atjaunināji savu kontu, taču mums ir jāapliecina Tava jaunā e-pasta adrese. Lūgums pārbaudīt savu e-pastu un sekot apstiprinājuma saitei, lai apstiprinātu savu jauno e-pasta adresi. Lūgums pārbaudīt mēstuļu mapi, ja nesaņēmi šo e-pasta ziņojumu. + updated: Tavs konts tika sekmīgi atjaunināts. sessions: - already_signed_out: Veiksmīgi izrakstījies. - signed_in: Veiksmīgi pieteicies. - signed_out: Veiksmīgi izrakstījies. + already_signed_out: Sekmīgi izrakstījies. + signed_in: Sekmīgi pierakstījies. + signed_out: Sekmīgi izrakstījies. unlocks: - send_instructions: Pēc dažām minūtēm tu saņemsi e-pastu ar norādījumiem, kā atbloķēt savu kontu. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - send_paranoid_instructions: Ja tavs konts eksistē, dažu minūšu laikā tu saņemsi e-pastu ar norādījumiem, kā to atbloķēt. Lūdzu, pārbaudi spama mapi, ja neesi saņēmis šo e-pastu. - unlocked: Konts tika veiksmīgi atbloķēts. Lūgums pieteikties, lai turpinātu. + send_instructions: Pēc dažām minūtēm Tu saņemsi e-pasta ziņojumu ar norādēm, kā atslēgt savu kontu. Lūgums pārbaudīt mēstuļu mapi, ja nesaņēmi šo e-pasta ziņojumu. + send_paranoid_instructions: Ja Tavs konts pastāv, dažu minūšu laikā saņemsi e-pasta ziņojumu ar norādēm, kā to atslēgt. Lūgums pārbaudīt mēstuļu mapi, ja nesaņēmi šo e-pasta ziņojumu. + unlocked: Konts tika sekmīgi atslēgts. Lūgums pieteikties, lai turpinātu. errors: messages: - already_confirmed: jau tika apstiprināts, lūdzu, mēģini pierakstīties + already_confirmed: jau tika apstiprināts, lūgums mēģināt pieteikties confirmation_period_expired: jāapstiprina %{period} laikā, lūdzu, pieprasi jaunu expired: ir beidzies derīguma termiņš, lūdzu, pieprasi jaunu not_found: nav atrasts diff --git a/config/locales/devise.nan.yml b/config/locales/devise.nan.yml new file mode 100644 index 0000000000..dce568bfcc --- /dev/null +++ b/config/locales/devise.nan.yml @@ -0,0 +1,21 @@ +--- +nan: + devise: + failure: + locked: Lí ê口座hőng鎖定ah。 + not_found_in_database: Bô ha̍p規定ê %{authentication_keys} á是密碼。 + pending: Lí ê口座iáu teh審查。 + timeout: Lí ê作業階段kàu期ah。請koh登入,繼續完成。 + mailer: + two_factor_disabled: + title: 2FA關掉ah + two_factor_enabled: + title: 2FA啟用ah + two_factor_recovery_codes_changed: + title: 2FA驗證碼改ah + registrations: + signed_up: 歡迎!Lí成功註冊ah。 + signed_up_but_inactive: Lí成功註冊ah。M̄-kú,你ê口座iáu-buē啟用,guán bē-tàng hōo lí登入。 + signed_up_but_locked: Lí成功註冊ah。M̄-kú,你ê口座hőng鎖定,guán bē-tàng hōo lí登入。 + signed_up_but_pending: 有確認連結ê訊息,已經寄kàu lí ê電子phue箱ah。Tshi̍h連結了後,guán ē審查你ê申請。Nā核准就通知lí。 + signed_up_but_unconfirmed: 有確認連結ê訊息,已經寄kàu lí ê電子phue箱ah。請跟tuè連結來啟用口座。Nā無收著,請檢查lí ê pùn-sò批資料giap-á。 diff --git a/config/locales/devise.pt-BR.yml b/config/locales/devise.pt-BR.yml index 8f504362de..3a1a2d90ca 100644 --- a/config/locales/devise.pt-BR.yml +++ b/config/locales/devise.pt-BR.yml @@ -14,7 +14,7 @@ pt-BR: not_found_in_database: "%{authentication_keys} ou senha inválida." omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade. pending: Sua conta está sendo revisada. - timeout: Sua sessão expirou. Faça ‘login’ novamente para continuar. + timeout: Sua sessão expirou. Por favor, entre novamente para continuar. unauthenticated: Você precisa entrar ou criar uma conta antes de continuar. unconfirmed: Você precisa confirmar o seu endereço de e-mail antes de continuar. mailer: @@ -48,12 +48,12 @@ pt-BR: subject: 'Mastodon: Instruções para alterar senha' title: Redefinir senha two_factor_disabled: - explanation: O ‘login’ agora é possível usando apenas o endereço eletrônico e senha. + explanation: Agora você pode entrar usando apenas seu e-mail e senha. subject: 'Mastodon: Autenticação de dois fatores desativada' subtitle: A autenticação de dois fatores foi desativada. title: 2FA desativada two_factor_enabled: - explanation: Será necessário um código gerado pelo aplicativo de autenticação TOTP para fazer login. + explanation: Um código de autenticação de dois fatores será necessário para entrar em sua conta. subject: 'Mastodon: Autenticação de dois fatores ativada' subtitle: A autenticação de dois fatores foi ativada para sua conta. title: 2FA ativada @@ -75,11 +75,11 @@ pt-BR: title: Uma das suas chaves de segurança foi excluída webauthn_disabled: explanation: A autenticação por chaves de segurança foi desativada para sua conta. - extra: Agora você pode fazer login usando apenas o código gerado pelo aplicativo de autenticação TOTP. + extra: Agora você pode entrar usando apenas o código de autenticação de dois fatores. subject: 'Mastodon: Autenticação por chaves de segurança desativada' title: Chaves de segurança desativadas webauthn_enabled: - explanation: A autenticação por chave de segurança foi ativada para sua conta. + explanation: A autenticação por chave de segurança foi ativada. extra: Sua chave de segurança agora pode ser usada para ‘login’. subject: 'Mastodon: Autenticação por chaves de segurança ativada' title: Chaves de segurança ativadas diff --git a/config/locales/devise.pt-PT.yml b/config/locales/devise.pt-PT.yml index edfb798509..5a1defba3a 100644 --- a/config/locales/devise.pt-PT.yml +++ b/config/locales/devise.pt-PT.yml @@ -2,21 +2,21 @@ pt-PT: devise: confirmations: - confirmed: O seu endereço de e-mail foi corretamente confirmado. - send_instructions: Irá receber um e-mail com instruções sobre como confirmar o seu endereço de e-mail dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu este e-mail. - send_paranoid_instructions: Se o seu endereço de e-mail existir na nossa base de dados, receberá um e-mail com instruções sobre como confirmar o seu endereço de e-mail dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu este e-mail. + confirmed: O teu endereço de e-mail foi confirmado com sucesso. + send_instructions: Vais receber um e-mail com as instruções para confirmar o teu endereço de e-mail dentro de alguns minutos. Verifica na caixa de spam se não recebeste o e-mail. + send_paranoid_instructions: Se o teu endereço de e-mail já existir na nossa base de dados, vais receber um e-mail com as instruções de confirmação dentro de alguns minutos. Verifica na caixa de spam se não recebeste o e-mail. failure: - already_authenticated: Já tem sessão iniciada. - inactive: A sua conta ainda não está ativada. + already_authenticated: Já iniciaste a sessão. + inactive: A tua conta ainda não está ativada. invalid: "%{authentication_keys} ou palavra-passe inválida." - last_attempt: Tem só mais uma tentativa antes da sua conta ser bloqueada. - locked: A sua conta está bloqueada. + last_attempt: Tens mais uma tentativa antes de a tua conta ser bloqueada. + locked: A tua conta está bloqueada. not_found_in_database: "%{authentication_keys} ou palavra-passe inválida." omniauth_user_creation_failure: Erro ao criar uma conta para esta identidade. - pending: A sua conta está ainda a aguardar revisão. - timeout: A sua sessão expirou. Inicie sessão novamente para continuar. - unauthenticated: É necessário iniciar sessão ou registar-se antes de continuar. - unconfirmed: Tem de confirmar o seu endereço de e-mail antes de continuar. + pending: A tua conta está ainda a aguardar revisão. + timeout: A tua sessão expirou. Inicia a sessão novamente para continuar. + unauthenticated: Precisas de entrar na tua conta ou de te registares antes de continuar. + unconfirmed: Tens de confirmar o teu endereço de e-mail antes de continuar. mailer: confirmation_instructions: action: Verificar o endereço de e-mail @@ -27,93 +27,93 @@ pt-PT: subject: 'Mastodon: instruções de confirmação para %{instance}' title: Verificar o endereço de e-mail email_changed: - explanation: 'O e-mail associado à sua conta será alterado para:' - extra: Se não alterou o seu e-mail, é possível que alguém tenha conseguido aceder à sua conta. Por favor altere a sua palavra-passe imediatamente ou entre em contacto com um administrador do servidor se tiver ficado sem acesso à sua conta. + explanation: 'O e-mail associado à tua conta será alterado para:' + extra: Se não alteraste o seu e-mail, é possível que alguém tenha conseguido aceder à tua conta. Por favor altera a tua palavra-passe imediatamente ou entra em contacto com um administrador do servidor se tiveres ficado sem acesso à tua conta. subject: 'Mastodon: e-mail alterado' title: Novo endereço de e-mail password_change: - explanation: A palavra-passe da sua conta foi alterada. - extra: Se não alterou a sua palavra-passe, é possível que alguém tenha conseguido aceder à sua conta. Por favor altere a sua palavra-passe imediatamente ou entre em contacto com um administrador do servidor se tiver ficado sem acesso à sua conta. + explanation: A palavra-passe da tua conta foi alterada. + extra: Se não alteraste a tua palavra-passe, é possível que alguém tenha conseguido aceder à tua conta. Por favor altera a tua palavra-passe imediatamente ou entra em contacto com um administrador do servidor se tiveres ficado sem acesso à tua conta. subject: 'Mastodon: palavra-passe alterada' title: Palavra-passe alterada reconfirmation_instructions: - explanation: Confirme o seu novo endereço para alterar o e-mail. - extra: Se esta alteração não foi iniciada por si, ignore este e-mail. O endereço de e-mail da conta Mastodon não será alterado até aceder à hiperligação acima. + explanation: Confirma o teu novo endereço para alterar o e-mail. + extra: Se esta alteração não foi iniciada por ti, ignora este e-mail. O endereço de e-mail da conta Mastodon não será alterado até acederes à hiperligação acima. subject: 'Mastodon: confirmação de e-mail para %{instance}' title: Validar o endereço de e-mail reset_password_instructions: action: Alterar palavra-passe - explanation: Solicitou uma nova palavra-passe para a sua conta. - extra: Se não solicitou esta alteração, ignore este e-mail. A sua palavra-passe não será alterada até aceder à hiperligação acima e criar uma nova. + explanation: Pediste a alteração da palavra-passe da tua conta. + extra: Se não fizeste este pedido, por favor ignora este e-mail. A tua palavra-passe não irá mudar se não acederes à hiperligação acima e criares uma nova. subject: 'Mastodon: instruções para redefinir a palavra-passe' title: Solicitar nova palavra-passe two_factor_disabled: explanation: O início de sessão é agora possível utilizando apenas o endereço de e-mail e a palavra-passe. - subject: 'Mastodon: autenticação de duas etapas desativada' - subtitle: A autenticação de dois fatores foi desativada para a sua conta. - title: 2FA desativado + subject: 'Mastodon: autenticação de dois fatores desativada' + subtitle: A autenticação de dois fatores foi desativada para a tua conta. + title: 2FA desativada two_factor_enabled: explanation: Para iniciar sessão, será necessário um token gerado pela aplicação TOTP emparelhada. - subject: 'Mastodon: autenticação em duas etapas ativada' - subtitle: A autenticação de dois fatores foi ativada para a sua conta. + subject: 'Mastodon: autenticação de dois fatores ativada' + subtitle: A autenticação de dois fatores foi ativada para a tua conta. title: 2FA ativado two_factor_recovery_codes_changed: explanation: Os códigos de recuperação anteriores foram invalidados e foram gerados novos códigos. - subject: 'Mastodon: gerados novos códigos de recuperação em duas etapas' + subject: 'Mastodon: foram gerados novos códigos de recuperação de dois fatores' subtitle: Os códigos de recuperação anteriores foram invalidados e foram gerados novos códigos. title: Códigos de recuperação 2FA alterados unlock_instructions: subject: 'Mastodon: instruções para desbloquear' webauthn_credential: added: - explanation: A seguinte chave de segurança foi adicionada à sua conta + explanation: A seguinte chave de segurança foi adicionada à tua conta subject: 'Mastodon: nova chave de segurança' title: Foi adicionada uma nova chave de segurança deleted: explanation: A seguinte chave de segurança foi eliminada da sua conta subject: 'Mastodon: chave de segurança eliminada' - title: Uma das suas chaves de segurança foi eliminada + title: Uma das tuas chaves de segurança foi eliminada webauthn_disabled: - explanation: A autenticação com chaves de segurança foi desativada para sua conta. + explanation: A autenticação com chaves de segurança foi desativada para a tua conta. extra: O início de sessão é agora possível utilizando apenas o token gerado pela aplicação TOTP emparelhada. subject: 'Mastodon: autenticação com chave de segurança desativada' title: Chaves de segurança desativadas webauthn_enabled: - explanation: A autenticação por chave de segurança foi ativada para a sua conta. - extra: A sua chave de segurança pode agora ser utilizada para iniciar sessão. + explanation: A autenticação por chave de segurança foi ativada para a tua conta. + extra: A tua chave de segurança pode agora ser utilizada para iniciar a sessão. subject: 'Mastodon: autenticação com chave de segurança ativada' title: Chaves de segurança ativadas omniauth_callbacks: failure: Não foi possível autenticar %{kind} porque "%{reason}". - success: Autenticado correctamente na conta %{kind}. + success: Autenticado corretamente na conta %{kind}. passwords: - no_token: Não pode aceder a esta página se não vier através da hiperligação enviada por e-mail para alteração da sua palavra-passe. Se de facto usou essa hiperligação para chegar até aqui, verifique se usou o endereço URL completo. - send_instructions: Se o seu endereço de e-mail existir na nossa base de dados, receberá uma hiperligação de recuperação da palavra-passe no seu endereço de e-mail dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu esta mensagem de correio eletrónico. - send_paranoid_instructions: Se o seu endereço de e-mail existir na nossa base de dados, receberá uma hiperligação de recuperação da palavra-passe no seu endereço de e-mail dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu esta mensagem de correio eletrónico. - updated: A sua palavra-passe foi alterada com sucesso. Está agora autenticado. + no_token: Não podes aceder a esta página se não vieres através da hiperligação enviada por e-mail para alteração da tua palavra-passe. Se de facto usaste essa hiperligação para chegar até aqui, verifica se usaste o endereço URL completo. + send_instructions: Se o teu endereço de e-mail existir na nossa base de dados, receberás uma hiperligação de recuperação da palavra-passe no teu endereço de e-mail dentro de alguns minutos. Verifica a tua pasta de spam se não recebeste esta mensagem de correio eletrónico. + send_paranoid_instructions: Se o teu endereço de e-mail existir na nossa base de dados, receberás uma hiperligação de recuperação da palavra-passe no teu endereço de e-mail dentro de alguns minutos. Verifica a tua pasta de spam se não recebeste esta mensagem de correio eletrónico. + updated: A tua palavra-passe foi alterada. Estás agora autenticado na tua conta. updated_not_active: A tua palavra-passe foi alterada. registrations: - destroyed: Adeus! A sua conta foi cancelada com sucesso. Esperamos voltar a vê-lo em breve. + destroyed: Adeus! A tua conta foi cancelada. Esperamos ver-te em breve. signed_up: Bem-vindo! A sua conta foi registada com sucesso. signed_up_but_inactive: Registou-se com sucesso. No entanto, não foi possível iniciar sessão porque a sua conta ainda não está ativada. signed_up_but_locked: Registou-se com sucesso. No entanto, não foi possível iniciar sessão porque a sua conta está bloqueada. signed_up_but_pending: Foi enviada uma mensagem com uma hiperligação de confirmação para o seu endereço de e-mail. Depois de clicar na hiperligação, analisaremos a sua candidatura. Será notificado se for aprovado. signed_up_but_unconfirmed: Foi enviada para o seu endereço de e-mail uma mensagem com uma hiperligação de confirmação. Siga a hiperligação para ativar a sua conta. Verifique a sua pasta de spam se não recebeu esta mensagem de e-mail. - update_needs_confirmation: Atualizou a sua conta com sucesso, mas temos de verificar o seu novo endereço de e-mail. Verifique o seu e-mail e siga a hiperligação de confirmação para confirmar o seu novo endereço de e-mail. Verifique a sua pasta de spam se não recebeu esta mensagem de correio eletrónico. - updated: A sua conta foi corretamente atualizada. + update_needs_confirmation: Atualizaste a tua conta com sucesso, mas temos de verificar o teu novo endereço de e-mail. Verifica o teu e-mail e segue a hiperligação de confirmação para confirmares o teu novo endereço de e-mail. Verifica a tua pasta de spam se não recebeste esta mensagem de correio eletrónico. + updated: A tua conta foi corretamente atualizada. sessions: already_signed_out: Sessão encerrada. signed_in: Sessão iniciada. signed_out: Sessão encerrada. unlocks: - send_instructions: Receberá um e-mail com instruções sobre como desbloquear a sua conta dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu este e-mail. - send_paranoid_instructions: Se a sua conta existir, receberá um e-mail com instruções sobre como a desbloquear dentro de alguns minutos. Verifique a sua pasta de spam se não recebeu este e-mail. - unlocked: A sua conta foi desbloqueada com sucesso. Inicie sessão para continuar. + send_instructions: Vais receber um email com instruções para desbloquear a tua conta dentro de alguns minutos. + send_paranoid_instructions: Se a sua conta existir, receberás um e-mail com instruções sobre como a desbloquear dentro de alguns minutos. Verifica a tua pasta de spam se não recebeste este e-mail. + unlocked: A tua conta foi desbloqueada com sucesso. Inicia a sessão para continuar. errors: messages: - already_confirmed: já confirmado, por favor tente iniciar sessão - confirmation_period_expired: tem de ser confirmado dentro de %{period}, por favor tente outra vez - expired: expirou, por favor tente outra vez + already_confirmed: já foi confirmado, por favor tenta iniciar a sessão + confirmation_period_expired: tem de ser confirmado dentro de %{period}, por favor tenta outra vez + expired: expirou, por favor tenta outra vez not_found: não encontrado not_locked: não estava bloqueada not_saved: diff --git a/config/locales/devise.tok.yml b/config/locales/devise.tok.yml index d15ecd21b2..0b21d839f5 100644 --- a/config/locales/devise.tok.yml +++ b/config/locales/devise.tok.yml @@ -1 +1,11 @@ +--- tok: + devise: + confirmations: + confirmed: sina lon e nimi ilo sina pi pana lipu. + failure: + already_authenticated: sina lon sijelo a. + inactive: sijelo sina li open ala ken. + locked: sijelo sina li pini ken. + pending: jan lawa li awen alasa sona e pona sina. + timeout: ilo li pini sona e sina. o kama sin lon sijelo. diff --git a/config/locales/devise.tt.yml b/config/locales/devise.tt.yml index 8757bcc033..4b47757112 100644 --- a/config/locales/devise.tt.yml +++ b/config/locales/devise.tt.yml @@ -3,7 +3,19 @@ tt: devise: confirmations: confirmed: Сезнең э. почта адресыгыз уңышлы расланган. + failure: + already_authenticated: Сез кердегез инде. + inactive: Сезнең аккаунтыгыз әле активламаган. + invalid: "%{authentication_keys} яки серсүз дөрес кертелмәгән." + locked: Сезнең хисапъязмагыз блокланган. + not_found_in_database: "%{authentication_keys} яки серсүз дөрес кертелмәгән." mailer: + confirmation_instructions: + action: Email адресын расла + action_with_app: Расла һәм %{app} эченә кайт + title: Email адресын раслагыз + email_changed: + explanation: 'Сезнең аккаунтыгызның email адресы моңа үзгәртеләчәк:' reset_password_instructions: action: Серсүзне үзгәртү title: Серсүзне алыштыру diff --git a/config/locales/devise.zh-CN.yml b/config/locales/devise.zh-CN.yml index 86e78c1b18..5c14d3c571 100644 --- a/config/locales/devise.zh-CN.yml +++ b/config/locales/devise.zh-CN.yml @@ -7,12 +7,12 @@ zh-CN: send_paranoid_instructions: 如果你的邮箱地址存在于我们的数据库中,你将在几分钟内收到一封邮件,内含如何验证邮箱地址的指引。如果你没有收到这封邮件,请检查你的垃圾邮件文件夹。 failure: already_authenticated: 你已登录。 - inactive: 你还没有激活账户。 + inactive: 你还没有激活账号。 invalid: "%{authentication_keys} 无效或密码错误。" - last_attempt: 你只有最后一次尝试机会,若未通过,帐号将被锁定。 - locked: 你的账户已被锁定。 + last_attempt: 你只有最后一次尝试机会,若未通过,账号将被锁定。 + locked: 你的账号已被锁定。 not_found_in_database: "%{authentication_keys}或密码错误。" - omniauth_user_creation_failure: 为此身份创建账户时出错。 + omniauth_user_creation_failure: 为此身份创建账号时出错。 pending: 你的账号仍在审核中。 timeout: 你的会话已过期。请重新登录再继续操作。 unauthenticated: 继续操作前请注册或者登录。 @@ -23,39 +23,39 @@ zh-CN: action_with_app: 确认并返回%{app} explanation: 你在 %{host} 上使用此电子邮箱地址创建了一个账号。点击下面的链接即可激活账号。如果你没有创建账号,请忽略此邮件。 explanation_when_pending: 你用这个邮箱申请了在 %{host} 注册。在确认邮箱地址之后,我们会审核你的申请。在此之前,你不能登录。如果你的申请被驳回,你的数据会被移除,因此你无需再采取任何行动。如果申请人不是你,请忽略这封邮件。 - extra_html: 请记得阅读本实例的相关规定我们的使用条款。 + extra_html: 请记得阅读本实例的相关规定我们的服务条款。 subject: Mastodon:来自 %{instance} 的确认指引 title: 验证邮箱地址 email_changed: explanation: 你的账号的邮箱地址将变更为: - extra: 如果你并没有请求更改你的邮箱地址,则他人很有可能已经入侵你的账户。请立即更改你的密码,或者,如果你已经无法访问你的账户,请联系服务器管理员请求协助。 + extra: 如果你并没有请求更改你的邮箱地址,则他人很有可能已经入侵你的账号。请立即更改你的密码,或者,如果你已经无法访问你的账号,请联系服务器管理员请求协助。 subject: Mastodon:邮箱地址已被更改 title: 新邮箱地址 password_change: - explanation: 你的账户密码已更改。 - extra: 如果你并没有申请更改密码,那似乎有人已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系服务器的管理员获取帮助。 + explanation: 你的账号密码已更改。 + extra: 如果你并没有申请更改密码,那似乎有人已经入侵你的账号。请立即更改你的密码;如果你已经无法访问你的账号,请联系服务器的管理员获取帮助。 subject: Mastodon:密码已被更改 title: 密码已被重置 reconfirmation_instructions: explanation: 点击下面的链接来确认你的新邮箱地址。 - extra: 如果你并没有请求本次更改,请忽略此邮件。Mastodon 账户的邮箱地址只有在你点击上面的链接后才会更改。 + extra: 如果你并没有请求本次更改,请忽略此邮件。Mastodon 账号的邮箱地址只有在你点击上面的链接后才会更改。 subject: Mastodon:确认 %{instance} 电子邮箱地址 title: 验证邮箱地址 reset_password_instructions: action: 更改密码 - explanation: 点击下面的链接来更改账户的密码。 + explanation: 点击下面的链接来更改账号的密码。 extra: 如果你并没有请求本次变更,请忽略此邮件。你的密码只有在你点击上面的链接并输入新密码后才会更改。 subject: Mastodon:重置密码说明 title: 重置密码 two_factor_disabled: explanation: 目前只能通过邮箱地址和密码登录。 subject: Mastodon:双因素认证已禁用 - subtitle: 你账户的双因素认证已被停用。 + subtitle: 你账号的双因素认证已被停用。 title: 双因素认证已停用 two_factor_enabled: explanation: 登录时需要输入先前配对好的TOTP应用生成的令牌。 subject: Mastodon:双因素认证已启用 - subtitle: 你账户的双因素认证已被启用。 + subtitle: 你账号的双因素认证已被启用。 title: 双因素认证已启用 two_factor_recovery_codes_changed: explanation: 新恢复码已生成,同时旧恢复码已失效。 @@ -63,23 +63,23 @@ zh-CN: subtitle: 新恢复码已生成,同时旧恢复码已失效。 title: 双因素认证恢复码已更改 unlock_instructions: - subject: Mastodon:账户解锁信息 + subject: Mastodon:账号解锁信息 webauthn_credential: added: - explanation: 以下安全密钥已添加到你的帐户 + explanation: 以下安全密钥已添加到你的账号 subject: Mastodon:新的安全密钥 title: 已添加一个新的安全密钥 deleted: - explanation: 以下安全密钥已从你的账户中删除 + explanation: 以下安全密钥已从你的账号中删除 subject: Mastodon:安全密钥已删除 title: 你的安全密钥之一已被删除 webauthn_disabled: - explanation: 你账户的安全密钥身份认证已被停用。 + explanation: 你账号的安全密钥身份认证已被停用。 extra: 目前只能用先前配对的TOTP应用生成的令牌登录。 subject: Mastodon:安全密钥认证已禁用 title: 安全密钥已禁用 webauthn_enabled: - explanation: 你账户的安全密钥身份认证已被启用。 + explanation: 你账号的安全密钥身份认证已被启用。 extra: 你的安全密钥现在可用于登录。 subject: Mastodon:安全密钥认证已启用 title: 已启用安全密钥 @@ -93,22 +93,22 @@ zh-CN: updated: 你的密码已成功修改,现在你已登录。 updated_not_active: 你的密码已修改成功。 registrations: - destroyed: 再见!你的账户已成功注销。我们希望很快可以再见到你。 + destroyed: 再见!你的账号已成功注销。我们希望很快可以再见到你。 signed_up: 欢迎!你已成功注册。 - signed_up_but_inactive: 你已成功注册,但我们无法让你登录,因为你的账户还没有激活。 - signed_up_but_locked: 你已成功注册,但我们无法让你登录,因为你的账户已被锁定。 + signed_up_but_inactive: 你已成功注册,但我们无法让你登录,因为你的账号还没有激活。 + signed_up_but_locked: 你已成功注册,但由于你的账户已被锁定,我们无法让你登录。 signed_up_but_pending: 一条带有确认链接的邮件已经发送到你的邮箱地址。在你点击该链接后,我们将会审核你的申请。如果申请被批准,你将收到通知。 - signed_up_but_unconfirmed: 一封带有确认链接的邮件已经发送至你的邮箱,请点击邮件中的链接以激活你的账户。如果没有,请检查你的垃圾邮件。 + signed_up_but_unconfirmed: 一封带有确认链接的邮件已经发送至你的邮箱,请点击邮件中的链接以激活你的账号。如果没有,请检查你的垃圾邮件。 update_needs_confirmation: 账号信息更新成功,但我们需要验证你的新邮箱地址,请点击邮件中的链接以确认。如果没有收到邮件,请检查你的垃圾邮件文件夹。 - updated: 账户资料更新成功。 + updated: 账号资料更新成功。 sessions: already_signed_out: 已成功退出登录。 signed_in: 已成功登录。 signed_out: 已成功退出登录。 unlocks: - send_instructions: 几分钟后,你将收到一封解锁账户的邮件。如果没有,请检查你的垃圾邮箱。 + send_instructions: 几分钟后,你将收到一封解锁账号的邮件。如果没有,请检查你的垃圾邮箱。 send_paranoid_instructions: 如果你的账号存在,你将会在几分钟内收到一封指引你如何解锁账号的邮件。如果你没有收到这封邮件,请检查你邮箱的垃圾箱。 - unlocked: 你的账户已成功解锁。登录以继续。 + unlocked: 你的账号已成功解锁。登录以继续。 errors: messages: already_confirmed: 已经成功确认,请尝试登录 diff --git a/config/locales/doorkeeper.ast.yml b/config/locales/doorkeeper.ast.yml index c9c831f7f5..3df18d6f7a 100644 --- a/config/locales/doorkeeper.ast.yml +++ b/config/locales/doorkeeper.ast.yml @@ -50,7 +50,9 @@ ast: confirmations: revoke: "¿De xuru que quies facer esta aición?" index: + authorized_at: 'Data d''autorización: %{date}' description_html: Estes son les aplicaciones que puen acceder a la cuenta cola API. Si equí hai aplicaciones que nun conoces o hai dalguna aplicación que nun funciona correutamente, pues revocar el so accesu. + last_used_at: 'Últimu usu: %{date}' never_used: Enxamás s'usó scopes: Permisos title: Les aplicaciones qu'autoricesti diff --git a/config/locales/doorkeeper.az.yml b/config/locales/doorkeeper.az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/doorkeeper.az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml index 882be66ee0..1ee73c2cb9 100644 --- a/config/locales/doorkeeper.cs.yml +++ b/config/locales/doorkeeper.cs.yml @@ -60,6 +60,7 @@ cs: error: title: Vyskytla se chyba new: + prompt_html: "%{client_name} by chtěl oprávnění k přístupu k vašemu účtu. Schvalte tuto žádost pouze pokud rozpoznáte a důvěřujete tomuto zdroji." review_permissions: Zkontrolujte oprávnění title: Je vyžadována autorizace show: diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml index 7ac16e0012..a10bee34df 100644 --- a/config/locales/doorkeeper.da.yml +++ b/config/locales/doorkeeper.da.yml @@ -130,11 +130,11 @@ da: crypto: Ende-til-ende kryptering favourites: Favoritter filters: Filtre - follow: Følger, Tavsgør og Blokerer + follow: Fulgte, skjjulte og blokerede kontoer follows: Følger lists: Lister media: Medievedhæftninger - mutes: Tavsgørelser + mutes: Skjulte kontoer notifications: Notifikationer profile: Din Mastodon-profil push: Push-notifikationer @@ -177,7 +177,7 @@ da: read:filters: se dine filtre read:follows: se dine følger read:lists: se dine lister - read:mutes: se dine tavsgørelser + read:mutes: se dine skjulte kontoer read:notifications: se dine notifikationer read:reports: se dine anmeldelser read:search: søg på dine vegne @@ -186,13 +186,13 @@ da: write:accounts: ændre din profil write:blocks: blokere konti og domæner write:bookmarks: bogmærke indlæg - write:conversations: tavsgøre og slette konversationer + write:conversations: skjul og slet samtaler write:favourites: favoritmarkere indlæg write:filters: oprette filtre write:follows: følge personer write:lists: oprette lister write:media: uploade mediefiler - write:mutes: tavsgøre personer og konversationer + write:mutes: skjul personer og samtaler write:notifications: rydde dine notifikationer write:reports: anmelde personer write:statuses: udgive indlæg diff --git a/config/locales/doorkeeper.el.yml b/config/locales/doorkeeper.el.yml index 59877b6bd0..984eff8871 100644 --- a/config/locales/doorkeeper.el.yml +++ b/config/locales/doorkeeper.el.yml @@ -60,6 +60,7 @@ el: error: title: Εμφανίστηκε σφάλμα new: + prompt_html: Το %{client_name} επιθυμεί το δικαίωμα πρόσβασης στον λογαριασμό σας. Εγκρίνετε αυτό το αίτημα μόνο αν αναγνωρίζετε και εμπιστεύεστε αυτήν την πηγή. review_permissions: Ανασκόπηση δικαιωμάτων title: Απαιτείται έγκριση show: diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml index 12e120f8be..ede1ef815e 100644 --- a/config/locales/doorkeeper.eo.yml +++ b/config/locales/doorkeeper.eo.yml @@ -60,6 +60,7 @@ eo: error: title: Eraro okazis new: + prompt_html: "%{client_name} ŝatus permeson aliri vian konton. Nur aprobu ĉi tiun peton se vi rekonas kaj fidas ĉi tiun fonton." review_permissions: Revizu permesojn title: Rajtigo bezonata show: @@ -82,6 +83,7 @@ eo: access_denied: La posedanto de la rimedo aŭ de la rajtiga servilo rifuzis vian peton. credential_flow_not_configured: La sendado de la identigiloj de la posedanto de la rimedo malsukcesis ĉar Doorkeeper.configure.resource_owner_from_credentials ne estis agordita. invalid_client: Klienta aŭtentigo malsukcesa pro nekonata kliento, neniu klienta aŭtentigo inkluzivita, aŭ nesubtenata aŭtentiga metodo. + invalid_code_challenge_method: La koda defia metodo devas esti S256, ebenaĵo estas nesubtenata. invalid_grant: La rajtiga konsento ne estas valida, ne plu estas valida, estis forigita, ne kongruas kun la plusenda URI uzita en la aŭtentiga peto, aŭ estis sendita al alia kliento. invalid_redirect_uri: La plusenda URI uzita ne estas valida. invalid_request: @@ -134,6 +136,7 @@ eo: media: Plurmediaj aldonaĵoj mutes: Silentigitaj notifications: Sciigoj + profile: Via Mastodon-profilo push: Puŝsciigoj reports: Raportoj search: Serĉi @@ -164,6 +167,7 @@ eo: admin:write:reports: plenumi agojn de kontrolo sur signaloj crypto: uzi fin-al-finan ĉifradon follow: ŝanĝi rilatojn al aliaj kontoj + profile: legu nur la profilinformojn de via konto push: ricevi viajn puŝ-sciigojn read: legi ĉiujn datumojn de via konto read:accounts: vidi la informojn de la kontoj @@ -187,7 +191,7 @@ eo: write:filters: krei filtrilojn write:follows: sekvi homojn write:lists: krei listojn - write:media: alŝuti plurmediojn + write:media: alŝuti aŭdovidaĵojn write:mutes: silentigi homojn kaj konversaciojn write:notifications: forigi viajn sciigojn write:reports: signali aliajn homojn diff --git a/config/locales/doorkeeper.es-MX.yml b/config/locales/doorkeeper.es-MX.yml index e119d71f4e..eaf1bf69fb 100644 --- a/config/locales/doorkeeper.es-MX.yml +++ b/config/locales/doorkeeper.es-MX.yml @@ -60,7 +60,7 @@ es-MX: error: title: Ha ocurrido un error new: - prompt_html: A %{client_name} le gustaría obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solo si reconoces y confías en esta fuente. + prompt_html: "%{client_name} desea obtener permiso para acceder a tu cuenta. Aprueba esta solicitud solamente si reconoces y confías en esta fuente." review_permissions: Revisar permisos title: Se requiere autorización show: diff --git a/config/locales/doorkeeper.et.yml b/config/locales/doorkeeper.et.yml index ebfaf5c710..b21afa9a79 100644 --- a/config/locales/doorkeeper.et.yml +++ b/config/locales/doorkeeper.et.yml @@ -60,6 +60,7 @@ et: error: title: Ilmnes viga new: + prompt_html: "%{client_name} soovib saada ligipääsu su kontole. Kinnita see taotlus ainult siis, kui sa tunned ja usaldad seda allikat." review_permissions: Lubade ülevaade title: Autoriseerimine vajalik show: @@ -131,7 +132,7 @@ et: filters: Filtrid follow: Jälgitavad, Vaigistatud ja Blokeeritud follows: Jälgimised - lists: Nimekirjad + lists: Loetelud media: Lisatud meedia mutes: Vaigistused notifications: Teavitused @@ -175,7 +176,7 @@ et: read:favourites: näha sinu lemmikuid read:filters: näha su filtreid read:follows: näha su jälgimisi - read:lists: näha su nimekirju + read:lists: näha su loetelusid read:mutes: näha su vaigistusi read:notifications: näha teateid read:reports: näha teavitusi @@ -189,7 +190,7 @@ et: write:favourites: lisada postitusi lemmikuks write:filters: luua filtreid write:follows: jälgida inimesi - write:lists: luua nimekirju + write:lists: luua loetelusid write:media: üles laadida meediafaile write:mutes: vaigista inimesi ja vestluseid write:notifications: tühjendada teateid diff --git a/config/locales/doorkeeper.eu.yml b/config/locales/doorkeeper.eu.yml index a09fe42f40..7b25004385 100644 --- a/config/locales/doorkeeper.eu.yml +++ b/config/locales/doorkeeper.eu.yml @@ -60,6 +60,7 @@ eu: error: title: Errore bat gertatu da new: + prompt_html: "%{client_name}-(e)k zure kontura sartzeko baimena nahi du. Eskaera hau onartu, iturri hori ezagutu eta harengan konfiantza baduzu" review_permissions: Berrikusi baimenak title: Baimena behar da show: @@ -134,6 +135,7 @@ eu: media: Multimedia eranskinak mutes: Mututzeak notifications: Jakinarazpenak + profile: Zure Mastodon profila push: Push jakinarazpenak reports: Salaketak search: Bilaketak @@ -164,6 +166,7 @@ eu: admin:write:reports: salaketetan moderazio ekintzak burutu crypto: erabili muturretik muturrerako zifraketa follow: aldatu kontuaren erlazioak + profile: irakurri soilik zure kontuaren profileko informazioa push: jaso push jakinarazpenak read: irakurri zure kontuko datu guztiak read:accounts: ikusi kontuaren informazioa diff --git a/config/locales/doorkeeper.fa.yml b/config/locales/doorkeeper.fa.yml index 4ff03950b5..e36694dbbb 100644 --- a/config/locales/doorkeeper.fa.yml +++ b/config/locales/doorkeeper.fa.yml @@ -60,6 +60,7 @@ fa: error: title: خطایی رخ داد new: + prompt_html: "%{client_name} برای دسترسی به حساب شما اجازه می‌خواهد. فقط در صورتی این درخواست را تأیید کنید که این منبع را بشناسید و به آن اعتماد دارید." review_permissions: بازبینی اجازه‌ها title: نیاز به اجازه دادن show: @@ -130,7 +131,7 @@ fa: favourites: برگزیده‌ها filters: پالایه‌ها follow: پی‌گیری، خموشی و مسدودی‌ها - follows: پی‌گرفتگان + follows: پی‌گرفتن‌ها lists: سیاهه‌ها media: پیوست‌های رسانه‌ای mutes: خموش‌ها diff --git a/config/locales/doorkeeper.fi.yml b/config/locales/doorkeeper.fi.yml index 7d44a6a6b9..ddaff5b93a 100644 --- a/config/locales/doorkeeper.fi.yml +++ b/config/locales/doorkeeper.fi.yml @@ -130,8 +130,8 @@ fi: crypto: Päästä päähän -salaus favourites: Suosikit filters: Suodattimet - follow: Seuratut, mykistykset ja estot - follows: Seuratut + follow: Seurattavat, mykistykset ja estot + follows: Seurattavat lists: Listat media: Medialiitteet mutes: Mykistykset @@ -139,7 +139,7 @@ fi: profile: Mastodon-profiilisi push: Puskuilmoitukset reports: Raportit - search: Hae + search: Haku statuses: Julkaisut layouts: admin: @@ -175,7 +175,7 @@ fi: read:bookmarks: katso kirjanmerkkejäsi read:favourites: katso suosikkejasi read:filters: katso suodattimiasi - read:follows: katso seurattujasi + read:follows: katso seurattaviasi read:lists: katso listojasi read:mutes: katso mykistyksiäsi read:notifications: katso ilmoituksiasi diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml index 71c9605d8a..d956225dba 100644 --- a/config/locales/doorkeeper.fr.yml +++ b/config/locales/doorkeeper.fr.yml @@ -25,7 +25,7 @@ fr: edit: Modifier submit: Envoyer confirmations: - destroy: En êtes-vous sûr ? + destroy: En êtes-vous certain ? edit: title: Modifier l’application form: diff --git a/config/locales/doorkeeper.fy.yml b/config/locales/doorkeeper.fy.yml index 94e67d17a6..180c7e733f 100644 --- a/config/locales/doorkeeper.fy.yml +++ b/config/locales/doorkeeper.fy.yml @@ -60,6 +60,7 @@ fy: error: title: Der is in flater bard new: + prompt_html: "%{client_name} freget om tagong ta jo account. Keur dit fersyk allinnich goed as jo dizze boarne werkenne en fertrouwe." review_permissions: Tastimmingen beoardiele title: Autorisaasje fereaske show: diff --git a/config/locales/doorkeeper.gl.yml b/config/locales/doorkeeper.gl.yml index adee6bd3d3..5d7148b84b 100644 --- a/config/locales/doorkeeper.gl.yml +++ b/config/locales/doorkeeper.gl.yml @@ -69,7 +69,7 @@ gl: buttons: revoke: Retirar autorización confirmations: - revoke: Estás segura? + revoke: Tes certeza? index: authorized_at: Autorizada o %{date} description_html: Estas aplicacións poden acceder á túa conta usando a API. Se ves aplicacións que non recoñeces, ou hai comportamentos non consentidos dalgunha delas, podes revogar o acceso. diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml index 6bf5e38506..efde9be9c0 100644 --- a/config/locales/doorkeeper.ia.yml +++ b/config/locales/doorkeeper.ia.yml @@ -60,6 +60,7 @@ ia: error: title: Un error ha occurrite new: + prompt_html: "%{client_name} vole haber le permission de acceder a tu conto. Solmente approba iste requesta si tu recognosce e confide in iste fonte." review_permissions: Revider permissiones title: Autorisation necessari show: @@ -82,6 +83,7 @@ ia: access_denied: Le proprietario del ressource o servitor de autorisation ha refusate le requesta. credential_flow_not_configured: Le processo de credentiales de contrasigno del proprietario del ressource ha fallite perque Doorkeeper.configure.resource_owner_from_credentials non es configurate. invalid_client: Le authentication del cliente ha fallite perque le cliente es incognite, necun authentication de cliente es includite, o le methodo de authentication non es supportate. + invalid_code_challenge_method: Le methodo de defia de codice debe esser S256. Le methodo simple (plain) non es supportate. invalid_grant: Le concession de autorisation fornite es invalide, expirate, revocate, non corresponde al URI de redirection usate in le requesta de autorisation, o ha essite emittite a un altere cliente. invalid_redirect_uri: Le URI de redirection includite non es valide. invalid_request: diff --git a/config/locales/doorkeeper.ig.yml b/config/locales/doorkeeper.ig.yml index 7c264f0d73..ef11972aed 100644 --- a/config/locales/doorkeeper.ig.yml +++ b/config/locales/doorkeeper.ig.yml @@ -1 +1,11 @@ +--- ig: + doorkeeper: + grouped_scopes: + title: + filters: Myọ + profile: Profaịlụ Mastọdọnụ gị + scopes: + read:filters: lelee myọ gị + write:accounts: dezie profaịlụ gị + write:filters: mepụta myọ diff --git a/config/locales/doorkeeper.io.yml b/config/locales/doorkeeper.io.yml index 0384d968be..94efbfc9d7 100644 --- a/config/locales/doorkeeper.io.yml +++ b/config/locales/doorkeeper.io.yml @@ -60,6 +60,7 @@ io: error: title: Eroro eventis new: + prompt_html: "%{client_name} volas permiso por adirar vua konto." review_permissions: Kontrolez permisi title: Yurizo bezonesas show: @@ -82,6 +83,7 @@ io: access_denied: Moyenproprietanto o yurizservilo refuzis la demando. credential_flow_not_configured: Moyenproprietantpasvortidentesesofluo faliis pro ke Doorkeeper.configure.resource_owner_from_credentials ne ajustesis. invalid_client: Klientpermiso falias pro nesavita kliento, neinkluzita klientpermiso o nesuportita permismetodo. + invalid_code_challenge_method: La kodexchalenjmetodo mustas esar S256. invalid_grant: Provizita yurizo esis nevalida, expiris, deaprobesis, ne parigas uzita ridirektoligilo dum yurizdemando o facesis a altra kliento. invalid_redirect_uri: La inkluzita ridirektoligilo esas nevalida. invalid_request: @@ -123,7 +125,7 @@ io: admin/reports: Administro di raporti all: Kompleta aceso a vua Mastodon-konto blocks: Restriktita - bookmarks: Libromarki + bookmarks: Lektosigni conversations: Konversi crypto: Intersequanta chifro favourites: Favoriziti @@ -131,9 +133,10 @@ io: follow: Sequati, silencigati e blokusati follows: Sequati lists: Listi - media: Mediatachaji + media: Audvidajaddonaji mutes: Silencigati notifications: Avizi + profile: Vua Mastodon-profilo push: Pulsavizi reports: Raporti search: Trovez @@ -148,17 +151,28 @@ io: scopes: admin:read: lektez omna informi di la servilo admin:read:accounts: lektez privata informo di omna konti + admin:read:canonical_email_blocks: lektar trublema informo di omna retpostoblokusi + admin:read:domain_allows: lektar trublema informo di omna domenpermisi + admin:read:domain_blocks: lektar trublema informo di omna domenblokusi + admin:read:email_domain_blocks: lektar trublema informo di omna retpostodomenblokusi + admin:read:ip_blocks: lektar trublema informo di omna IP-blokusi admin:read:reports: lektez privata informo di omna raporti e raportizita konti - admin:write: modifikez omna informi di la servilo + admin:write: redaktar omna informi di la servilo admin:write:accounts: jerez konti + admin:write:canonical_email_blocks: agar jeri ad retpostoblokusi + admin:write:domain_allows: agar jeri ad domenpermisi + admin:write:domain_blocks: agar jeri ad domenblokusi + admin:write:email_domain_blocks: agar jeri ad retpostodomenblokusi + admin:write:ip_blocks: agar jeri ad IP-blokusi admin:write:reports: jerez raporti crypto: uzas intersequanta chifro follow: follow, block, unblock and unfollow accounts + profile: lektar nur profilinformo di vua konto push: ganez vua pulsavizi read: read your account's data read:accounts: videz kontinformo read:blocks: videz restrikti - read:bookmarks: videz vua libromarki + read:bookmarks: vidar vua lektosigni read:favourites: videz vua favoriziti read:filters: videz vua filtrili read:follows: videz vua sequinti @@ -169,15 +183,15 @@ io: read:search: trovez por vu read:statuses: videz omna posti write: post on your behalf - write:accounts: modifikez vua porfilo + write:accounts: redaktar vua porfilo write:blocks: restriktez konti e domeni - write:bookmarks: libromarkez posti + write:bookmarks: lektosignar afishi write:conversations: silencigez e efacez konversi write:favourites: favorizita posti write:filters: kreez filtrili write:follows: sequez personi write:lists: kreez listi - write:media: adchargez mediifaili + write:media: adkargar audvidajdoseri write:mutes: silencigez personi e konversi write:notifications: efacez vua avizi write:reports: raportizez altra omni diff --git a/config/locales/doorkeeper.is.yml b/config/locales/doorkeeper.is.yml index 05f2415eea..1fabd1b55f 100644 --- a/config/locales/doorkeeper.is.yml +++ b/config/locales/doorkeeper.is.yml @@ -60,6 +60,7 @@ is: error: title: Villa kom upp new: + prompt_html: "%{client_name} vill fá heimild til að skoða aðganginn þinn. Ekki samþykkja þessa beiðni nema þú þekkir og treystir viðkomandi." review_permissions: Yfirfara heimildir title: Auðkenning er nauðsynleg show: diff --git a/config/locales/doorkeeper.ja.yml b/config/locales/doorkeeper.ja.yml index 7cfddf50a1..d44451c746 100644 --- a/config/locales/doorkeeper.ja.yml +++ b/config/locales/doorkeeper.ja.yml @@ -60,6 +60,7 @@ ja: error: title: エラーが発生しました new: + prompt_html: "%{client_name} があなたのアカウントにアクセスするための許可を求めています。このリクエストを承認するのは、信頼できる相手であると認識している場合のみです。" review_permissions: アクセス許可を確認 title: 認証が必要です show: diff --git a/config/locales/doorkeeper.lv.yml b/config/locales/doorkeeper.lv.yml index 55e288a9d6..15c1e7692a 100644 --- a/config/locales/doorkeeper.lv.yml +++ b/config/locales/doorkeeper.lv.yml @@ -60,6 +60,7 @@ lv: error: title: Radās kļūda new: + prompt_html: "%{client_name} vēlas atļauju piekļūt Tavam kontam. Apstiprini šo pieprasījumu tikai tad, ja atpazīsti un uzticies šim avotam!" review_permissions: Pārskatīt atļaujas title: Nepieciešama autorizācija show: @@ -119,9 +120,9 @@ lv: write: Tikai rakstīšanas piekļuve title: accounts: Konti - admin/accounts: Kontu administrēšana + admin/accounts: Kontu pārvaldīšana admin/all: Visas administrēšanas funkcijas - admin/reports: Ziņojumu administrēšana + admin/reports: Ziņojumu pārvaldīšana all: Pilna piekļuve tavam Mastodon kontam blocks: Bloķētie bookmarks: Grāmatzīmes @@ -149,21 +150,21 @@ lv: title: OAuth nepieciešama autorizācija scopes: admin:read: lasīt visus datus uz servera - admin:read:accounts: lasīt sensitīvu informāciju no visiem kontiem - admin:read:canonical_email_blocks: lasīt sensitīvu informāciju par visiem kanoniskajiem e-pasta blokiem - admin:read:domain_allows: lasīt visu domēnu sensitīvo informāciju, ko atļauj - admin:read:domain_blocks: lasīt sensitīvu informāciju par visiem domēna blokiem - admin:read:email_domain_blocks: lasīt sensitīvu informāciju par visiem e-pasta domēna blokiem - admin:read:ip_blocks: lasīt sensitīvu informāciju par visiem IP blokiem - admin:read:reports: lasīt sensitīvu informāciju no visiem pārskatiem un kontiem, par kuriem ziņots + admin:read:accounts: lasīt jūtīgu informāciju no visiem kontiem + admin:read:canonical_email_blocks: lasīt jūtīgu informāciju par visiem kanoniskajiem e-pasta blokiem + admin:read:domain_allows: lasīt jūtīgu informāciju par visiem atļautajiem domēniem + admin:read:domain_blocks: lasīt jūtīgu informāciju par visiem domēna blokiem + admin:read:email_domain_blocks: lasīt jūtīgu informāciju par visiem e-pasta domēna blokiem + admin:read:ip_blocks: lasīt jūtīgu informāciju par visiem IP blokiem + admin:read:reports: lasīt jūtīgu informāciju no visiem pārskatiem un kontiem, par kuriem ziņots admin:write: modificēt visus datus uz servera - admin:write:accounts: veikt moderācijas darbības kontos - admin:write:canonical_email_blocks: veikt regulēšanas darbības kanoniskajos e-pasta blokos - admin:write:domain_allows: veikt moderēšanas darbības domēna atļaujā - admin:write:domain_blocks: veikt moderēšanas darbības domēna blokos - admin:write:email_domain_blocks: veikt moderēšanas darbības e-pasta domēna blokos - admin:write:ip_blocks: veikt moderēšanas darbības IP blokos - admin:write:reports: veikt moderācijas darbības pārskatos + admin:write:accounts: veikt satura pārraudzības darbības kontos + admin:write:canonical_email_blocks: veikt satura pārraudzības darbības kanoniskajos e-pasta blokos + admin:write:domain_allows: veikt satura pārraudzības darbības domēna atļaujā + admin:write:domain_blocks: veikt satura pārraudzības darbības domēna blokos + admin:write:email_domain_blocks: veikt satura pārraudzības darbības e-pasta domēna blokos + admin:write:ip_blocks: veikt satura pārraudzības darbības IP blokos + admin:write:reports: veikt satura pārraudzības darbības pārskatos crypto: lieto pilnīgu šifrēšanu follow: mainīt konta attiecības profile: lasīt tikai Tava konta profila informāciju diff --git a/config/locales/doorkeeper.ms.yml b/config/locales/doorkeeper.ms.yml index b52824e8c3..f89def7b85 100644 --- a/config/locales/doorkeeper.ms.yml +++ b/config/locales/doorkeeper.ms.yml @@ -126,7 +126,7 @@ ms: bookmarks: Penanda buku conversations: Perbualan crypto: Penyulitan hujung ke hujung - favourites: Kegemaran + favourites: Sukaan filters: Penapis follow: Ikut, Senyap dan Blok follows: Ikutan @@ -169,7 +169,7 @@ ms: read:accounts: lihat maklumat akaun read:blocks: lihat blok anda read:bookmarks: lihat penanda halaman anda - read:favourites: lihat kegemaran anda + read:favourites: lihat sukaan anda read:filters: lihat penapis anda read:follows: lihat senarai yang anda ikuti read:lists: lihat senarai anda @@ -183,7 +183,7 @@ ms: write:blocks: domain dan akaun blok write:bookmarks: menandabuku hantaran write:conversations: senyapkan dan padamkan perbualan - write:favourites: pos kesukaan + write:favourites: hantaran disukai write:filters: cipta penapis write:follows: ikut orang write:lists: cipta senarai diff --git a/config/locales/doorkeeper.nan.yml b/config/locales/doorkeeper.nan.yml new file mode 100644 index 0000000000..554d991641 --- /dev/null +++ b/config/locales/doorkeeper.nan.yml @@ -0,0 +1,17 @@ +--- +nan: + activerecord: + attributes: + doorkeeper/application: + name: 應用程式ê名 + redirect_uri: 重轉ê URI + scopes: 範圍 + website: 應用程式ê網站 + errors: + models: + doorkeeper/application: + attributes: + redirect_uri: + invalid_uri: Tio̍h愛是合規定ê URI。 + relative_uri: Tio̍h愛是絕對ê URI。 + secured_uri: Tio̍h愛是HTTPS/SSL URI。 diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index 85bf5d60c0..a92819bf68 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -61,7 +61,7 @@ pt-BR: title: Ocorreu um erro new: prompt_html: "%{client_name} gostaria de permissão para acessar sua conta. Aprove esta solicitação apenas se você reconhecer e confiar nesta fonte." - review_permissions: Rever permissões + review_permissions: Revisar permissões title: Autorização necessária show: title: Copie este código de autorização e cole no aplicativo. @@ -130,7 +130,7 @@ pt-BR: crypto: Criptografia de ponta a ponta favourites: Favoritos filters: Filtros - follow: Seguimentos, Silenciamentos e Bloqueios + follow: Seguidos, Silenciados e Bloqueados follows: Seguidos lists: Listas media: Mídias anexadas @@ -165,7 +165,7 @@ pt-BR: admin:write:email_domain_blocks: executar ações de moderação em domínios de e-mail bloqueados admin:write:ip_blocks: executar ações de moderação em IPs bloqueados admin:write:reports: executar ações de moderação em denúncias - crypto: usar criptografia de ponta-a-ponta + crypto: usar criptografia de ponta a ponta follow: alterar o relacionamento das contas profile: ler somente as informações do perfil da sua conta push: receber notificações push diff --git a/config/locales/doorkeeper.pt-PT.yml b/config/locales/doorkeeper.pt-PT.yml index e2ac275335..6285794aa5 100644 --- a/config/locales/doorkeeper.pt-PT.yml +++ b/config/locales/doorkeeper.pt-PT.yml @@ -29,21 +29,21 @@ pt-PT: edit: title: Editar aplicação form: - error: Ups! Verifique que o formulário não tem erros + error: Oops! Verifica que o formulário não tem erros help: native_redirect_uri: Usar %{native_redirect_uri} para testes locais redirect_uri: Usar uma linha por URI - scopes: Separe os âmbitos de aplicação com espaços. Deixe em branco para utilizar os âmbitos de aplicação predefinidos. + scopes: Separa os âmbitos de aplicação com espaços. Deixa em branco para utilizar os âmbitos de aplicação predefinidos. index: application: Aplicação callback_url: URL de retorno delete: Eliminar - empty: Não tem aplicações. + empty: Não tens aplicações. name: Nome new: Nova aplicação scopes: Âmbitos show: Mostrar - title: As suas aplicações + title: As tuas aplicações new: title: Nova aplicação show: @@ -60,18 +60,19 @@ pt-PT: error: title: Ocorreu um erro new: + prompt_html: "%{client_name} gostaria de obter autorização para aceder à tua conta. Só deves aprovar este pedido se reconheceres e confiares nesta fonte." review_permissions: Rever permissões title: Autorização necessária show: - title: Copie este código de autorização e cole-o na aplicação. + title: Copia este código de autorização e cola-o na aplicação. authorized_applications: buttons: revoke: Revogar confirmations: - revoke: Tem a certeza? + revoke: Tens a certeza? index: authorized_at: Autorizado em %{date} - description_html: Estas são as aplicações que podem aceder à sua conta utilizando a API. Se houver aplicações que não reconhece aqui, ou se uma aplicação estiver a comportar-se mal, pode revogar o seu acesso. + description_html: Estas são as aplicações que podem aceder à tua conta utilizando a API. Se houver aplicações que não reconheces aqui, ou se uma aplicação estiver a dar problemas, podes revogar o seu acesso. last_used_at: Última utilização em %{date} never_used: Nunca utilizado scopes: Permissões @@ -129,14 +130,14 @@ pt-PT: crypto: Encriptação ponta a ponta favourites: Favoritos filters: Filtros - follow: A seguir, a silenciar e a bloquear + follow: A seguir, a ocultar e a bloquear follows: Seguidores lists: Listas - media: Anexos de media - mutes: Silenciados + media: Anexos multimédia + mutes: Ocultados notifications: Notificações - profile: O seu perfil Mastodon - push: Notificações push + profile: O teu perfil Mastodon + push: Notificações "push" reports: Denúncias search: Pesquisar statuses: Publicações @@ -150,15 +151,15 @@ pt-PT: scopes: admin:read: ler todos os dados no servidor admin:read:accounts: ler informações sensíveis de todas as contas - admin:read:canonical_email_blocks: ler informações sensíveis de todos os bloqueios de endereços de e-mail canônicos - admin:read:domain_allows: ler informações sensíveis de todos os domínios permitios + admin:read:canonical_email_blocks: ler informações sensíveis de todos os bloqueios de endereços de e-mail canónicos + admin:read:domain_allows: ler informações sensíveis de todos os domínios permitidos admin:read:domain_blocks: ler informações sensíveis de todos os bloqueios de domínio admin:read:email_domain_blocks: ler informações sensíveis de todos os bloqueios de domínio de e-mail admin:read:ip_blocks: ler informações sensíveis de todos os bloqueios de IPs - admin:read:reports: ler informações sensíveis de todas as denúnicas e contas denunciadas + admin:read:reports: ler informações sensíveis de todas as denúncias e contas denunciadas admin:write: modificar todos os dados no servidor admin:write:accounts: executar ações de moderação em contas - admin:write:canonical_email_blocks: executar ações de moderação no bloqueio de endereços de e-mail canônicos + admin:write:canonical_email_blocks: executar ações de moderação no bloqueio de endereços de e-mail canónicos admin:write:domain_allows: executar ações de moderação na permissão de domínios admin:write:domain_blocks: executar ações de moderação no bloqueio de domínios admin:write:email_domain_blocks: executar ações de moderação no bloqueio de domínios de e-mail @@ -166,32 +167,32 @@ pt-PT: admin:write:reports: executar ações de moderação em denúncias crypto: usar encriptação ponta a ponta follow: alterar relações de conta - profile: ler apenas as informações do perfil da sua conta - push: receber as suas notificações push - read: ler todos os dados da sua conta + profile: ler apenas as informações do perfil da tua conta + push: receber as tuas notificações "push" + read: ler todos os dados da tua conta read:accounts: ver as informações da conta - read:blocks: ver os seus bloqueios - read:bookmarks: ver os seus marcadores - read:favourites: ver os seus favoritos - read:filters: ver os seus filtros - read:follows: ver quem você segue - read:lists: ver as suas listas - read:mutes: ver os utilizadores que silenciou - read:notifications: ver as suas notificações - read:reports: ver as suas denúncias - read:search: pesquisar em seu nome + read:blocks: ver os teus bloqueios + read:bookmarks: ver os teus marcadores + read:favourites: ver os teus favoritos + read:filters: ver os teus filtros + read:follows: ver quem segues + read:lists: ver as tuas listas + read:mutes: ver os utilizadores que ocultaste + read:notifications: ver as tuas notificações + read:reports: ver as tuas denúncias + read:search: pesquisar em teu nome read:statuses: ver todas as publicações - write: alterar todos os dados da sua conta - write:accounts: alterar o seu perfil + write: alterar todos os dados da tua conta + write:accounts: alterar o teu perfil write:blocks: bloquear contas e domínios write:bookmarks: marcar publicações - write:conversations: silenciar e eliminar conversas - write:favourites: favoritar publicações + write:conversations: ocultar e eliminar conversas + write:favourites: assinalar como favoritas write:filters: criar filtros write:follows: seguir pessoas write:lists: criar listas - write:media: enviar ficheiros de media - write:mutes: silenciar pessoas e conversas - write:notifications: limpar as suas notificações + write:media: enviar ficheiros multimédia + write:mutes: ocultar pessoas e conversas + write:notifications: limpar as tuas notificações write:reports: denunciar outras pessoas write:statuses: publicar publicações diff --git a/config/locales/doorkeeper.ro.yml b/config/locales/doorkeeper.ro.yml index 9c02501eff..08b7c3fa8d 100644 --- a/config/locales/doorkeeper.ro.yml +++ b/config/locales/doorkeeper.ro.yml @@ -60,6 +60,7 @@ ro: error: title: A apărut o eroare new: + prompt_html: "%{client_name} ar dori să vă acceseze contul. Aprobați această solicitare numai dacă recunoașteți și aveți încredere în această sursă." review_permissions: Revizuiți permisiunile title: Autorizare necesară show: @@ -82,6 +83,7 @@ ro: access_denied: Proprietarul de resurse sau serverul de autorizare a refuzat cererea. credential_flow_not_configured: Fluxul Resurselor de Acreditări Parole a eșuat din cauza faptului că Doorkeeper.configure.resource_owner_from_credentials nu este configurat. invalid_client: Autentificarea clientului a eșuat din cauza unui client necunoscut, nici o autentificare client inclusă, sau metodă de autentificare nesuportată. + invalid_code_challenge_method: Metoda de provocare a codului trebuie să fie S256, simplu nu este acceptată. invalid_grant: Acordarea autorizației furnizată este invalidă, expirată, revocată, nu corespunde URI-ului de redirecționare folosit în cererea de autorizare, sau a fost eliberat altui client. invalid_redirect_uri: Uri-ul de redirecționare inclus nu este valid. invalid_request: @@ -134,6 +136,7 @@ ro: media: Atașamente media mutes: Pus pe silențios notifications: Notificări + profile: Profilul tău Mastodon push: Notificări push reports: Rapoarte search: Căutare @@ -148,12 +151,23 @@ ro: scopes: admin:read: citește toate datele de pe server admin:read:accounts: citește informații sensibile ale tuturor conturilor + admin:read:canonical_email_blocks: citește informații sensibile ale tuturor blocurilor de e-mail canonice + admin:read:domain_allows: citește informații sensibile ale tuturor domeniilor permise + admin:read:domain_blocks: citește informații sensibile ale tuturor blocurilor de domeniu + admin:read:email_domain_blocks: citește informații sensibile ale tuturor blocurilor de domeniu de e-mail + admin:read:ip_blocks: citește informații sensibile ale tuturor blocurilor IP admin:read:reports: citește informații sensibile din toate rapoartele și conturile raportate admin:write: modifică toate datele de pe server admin:write:accounts: efectuează acțiuni de moderare pe conturi + admin:write:canonical_email_blocks: efectuează acțiuni de moderare pe blocurile de e-mail canonice + admin:write:domain_allows: efectuează acțiuni de moderare pe domeniile permise + admin:write:domain_blocks: efectuează acțiuni de moderare pe blocurile de domeniu + admin:write:email_domain_blocks: efectuează acțiuni de moderare pe blocurile de domeniu de e-mail + admin:write:ip_blocks: efectuează acțiuni de moderare pe blocurile IP admin:write:reports: efectuează acțiuni de moderare pe rapoarte crypto: utilizează criptare la ambele capete follow: modifică relațiile contului + profile: citește doar informațiile de profil ale contului tău push: primește notificările tale push read: citește toate datele contului tău read:accounts: vede informațiile privind conturile diff --git a/config/locales/doorkeeper.ru.yml b/config/locales/doorkeeper.ru.yml index 1dcb2093d5..c7ea94c2e3 100644 --- a/config/locales/doorkeeper.ru.yml +++ b/config/locales/doorkeeper.ru.yml @@ -60,6 +60,7 @@ ru: error: title: Произошла ошибка new: + prompt_html: "%{client_name} хочет получить доступ к вашему аккаунту. Принимайте запрос только в том случае, если узнаёте, откуда он, и доверяете источнику." review_permissions: Просмотр разрешений title: Требуется авторизация show: diff --git a/config/locales/doorkeeper.sk.yml b/config/locales/doorkeeper.sk.yml index 774a2648f9..ba9a440a11 100644 --- a/config/locales/doorkeeper.sk.yml +++ b/config/locales/doorkeeper.sk.yml @@ -134,6 +134,7 @@ sk: media: Mediálne prílohy mutes: Stíšenia notifications: Upozornenia + profile: Váš Mastodon profil push: Upozornenia push reports: Hlásenia search: Vyhľadávanie diff --git a/config/locales/doorkeeper.sl.yml b/config/locales/doorkeeper.sl.yml index 3f36c73756..8b28d1532a 100644 --- a/config/locales/doorkeeper.sl.yml +++ b/config/locales/doorkeeper.sl.yml @@ -60,6 +60,7 @@ sl: error: title: Prišlo je do napake new: + prompt_html: "%{client_name} želi dostopati do vašega računa. To prošnjo odobrite le, če tega odjemalca prepoznate in mu zaupate." review_permissions: Preglej dovoljenja title: Potrebna je odobritev show: @@ -82,6 +83,7 @@ sl: access_denied: Lastnik virov ali odobritveni strežnik je zavrnil zahtevo. credential_flow_not_configured: Pretok geselskih pooblastil lastnika virov ni uspel, ker Doorkeeper.configure.resource_owner_from_credentials ni nastavljen. invalid_client: Odobritev odjemalca ni uspela zaradi neznanega odjemalca, zaradi nevključitve odobritve odjemalca ali zaradi nepodprte metode odobritve. + invalid_code_challenge_method: Metoda za kodo mora biti S256, čistopis ni podprt. invalid_grant: Predložena odobritev je neveljavna, je potekla, je preklicana, se ne ujema z URI-jem za preusmeritev uporabljenim v zahtevi za odobritev, ali pa je bila izdana drugemu odjemalcu. invalid_redirect_uri: URI za preusmeritev ni veljaven. invalid_request: diff --git a/config/locales/doorkeeper.sv.yml b/config/locales/doorkeeper.sv.yml index 9f646fd3e4..3c8b08ff26 100644 --- a/config/locales/doorkeeper.sv.yml +++ b/config/locales/doorkeeper.sv.yml @@ -60,6 +60,7 @@ sv: error: title: Ett fel har uppstått new: + prompt_html: "%{client_name} vill ha behörighet att komma åt ditt konto. Godkänn bara denna begäran om du känner igen och litar på källan." review_permissions: Granska behörigheter title: Godkännande krävs show: @@ -71,7 +72,7 @@ sv: revoke: Är du säker? index: authorized_at: Godkändes den %{date} - description_html: Dessa applikationer har åtkomst till ditt konto genom API:et. Om det finns applikationer du inte känner igen här, eller om en applikation inte fungerar, kan du återkalla dess åtkomst. + description_html: Detta är program som kan komma åt ditt konto med hjälp av API. Om det finns program som du inte känner igen här, eller om ett program är inte fungerar kan du återkalla dess åtkomst. last_used_at: Användes senast %{date} never_used: Aldrig använd scopes: Behörigheter @@ -132,7 +133,7 @@ sv: follow: Följare, mjutade och blockerade follows: Följer lists: Listor - media: Mediabilagor + media: Mediebilagor mutes: Tystade användare notifications: Aviseringar profile: Din Mastodon-profil diff --git a/config/locales/doorkeeper.th.yml b/config/locales/doorkeeper.th.yml index e7ed0ba8a3..3b52e170ea 100644 --- a/config/locales/doorkeeper.th.yml +++ b/config/locales/doorkeeper.th.yml @@ -60,6 +60,7 @@ th: error: title: เกิดข้อผิดพลาด new: + prompt_html: "%{client_name} ต้องการสิทธิอนุญาตเพื่อเข้าถึงบัญชีของคุณ อนุมัติคำขอนี้เฉพาะหากคุณรู้จักและเชื่อถือแหล่งที่มานี้เท่านั้น" review_permissions: ตรวจทานสิทธิอนุญาต title: ต้องการการอนุญาต show: diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml index 6687c0339d..2219599c57 100644 --- a/config/locales/doorkeeper.vi.yml +++ b/config/locales/doorkeeper.vi.yml @@ -150,30 +150,30 @@ vi: title: Đăng nhập bằng OAuth scopes: admin:read: đọc mọi dữ liệu trên máy chủ - admin:read:accounts: đọc thông tin nhạy cảm của tất cả các tài khoản - admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của tất cả khối email chuẩn - admin:read:domain_allows: đọc thông tin nhạy cảm của tất cả các tên miền cho phép - admin:read:domain_blocks: đọc thông tin nhạy cảm của tất cả các tên miền chặn - admin:read:email_domain_blocks: đọc thông tin nhạy cảm của tất cả các miền email chặn - admin:read:ip_blocks: đọc thông tin nhạy cảm của tất cả các IP chặn + admin:read:accounts: đọc thông tin nhạy cảm của mọi tài khoản + admin:read:canonical_email_blocks: đọc thông tin nhạy cảm của mọi khối email biến thể + admin:read:domain_allows: đọc thông tin nhạy cảm của mọi máy chủ liên hợp + admin:read:domain_blocks: đọc thông tin nhạy cảm của mọi máy chủ chặn + admin:read:email_domain_blocks: đọc thông tin nhạy cảm của mọi tên miền email chặn + admin:read:ip_blocks: đọc thông tin nhạy cảm của mọi IP chặn admin:read:reports: đọc thông tin của các báo cáo và các tài khoản bị báo cáo admin:write: sửa đổi tất cả dữ liệu trên máy chủ admin:write:accounts: áp đặt hành động kiểm duyệt trên tài khoản - admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email + admin:write:canonical_email_blocks: áp đặt kiểm duyệt đối với chặn email biến thể admin:write:domain_allows: áp đặt kiểm duyệt đối với các email cho phép admin:write:domain_blocks: áp đặt kiểm duyệt đối với các tên miền chặn admin:write:email_domain_blocks: áp đặt kiểm duyệt đối với các tên miền email chặn admin:write:ip_blocks: áp đặt kiểm duyệt với các IP chặn admin:write:reports: áp đặt kiểm duyệt với các báo cáo crypto: dùng mã hóa đầu cuối - follow: sửa đổi các mối quan hệ tài khoản - profile: chỉ đọc thông tin tài khoản cơ bản + follow: sửa đổi các mối quan hệ + profile: chỉ xem thông tin tài khoản cơ bản push: nhận thông báo đẩy read: đọc mọi dữ liệu tài khoản read:accounts: xem thông tin tài khoản read:blocks: xem những người đã chặn read:bookmarks: xem tút đã lưu - read:favourites: xem lượt thích + read:favourites: xem tút đã thích read:filters: xem bộ lọc read:follows: xem những người theo dõi read:lists: xem danh sách @@ -182,7 +182,7 @@ vi: read:reports: xem báo cáo của bạn read:search: tìm kiếm read:statuses: xem toàn bộ tút - write: sửa đổi mọi dữ liệu tài khoản của bạn + write: sửa đổi mọi dữ liệu tài khoản write:accounts: sửa đổi trang hồ sơ write:blocks: chặn người và máy chủ write:bookmarks: sửa đổi những tút lưu @@ -194,5 +194,5 @@ vi: write:media: tải lên tập tin write:mutes: ẩn người và thảo luận write:notifications: xóa thông báo - write:reports: báo cáo người khác + write:reports: báo cáo write:statuses: đăng tút diff --git a/config/locales/doorkeeper.zh-CN.yml b/config/locales/doorkeeper.zh-CN.yml index 46253d01b3..2c096720c2 100644 --- a/config/locales/doorkeeper.zh-CN.yml +++ b/config/locales/doorkeeper.zh-CN.yml @@ -60,7 +60,7 @@ zh-CN: error: title: 发生错误 new: - prompt_html: "%{client_name} 请求获得访问您账户的权限。 请在确保自己了解并信任此来源后再批准该请求。" + prompt_html: "%{client_name} 请求获得访问你账号的权限。 请在确保自己了解并信任此来源后再批准该请求。" review_permissions: 检查权限 title: 需要授权 show: @@ -85,7 +85,7 @@ zh-CN: invalid_client: 由于应用信息未知、未提交认证信息或使用了不支持的认证方式,认证失败 invalid_code_challenge_method: 代码验证方法必须是 S256,不支持明文。 invalid_grant: 授权方式无效、过期或已被撤销、与授权请求中的回调地址不一致,或使用了其他应用的回调地址 - invalid_redirect_uri: 无效的登录回调地址 + invalid_redirect_uri: 登录回调地址无效。 invalid_request: missing_param: 缺少必需的参数:%{value} request_not_authorized: 请求需要被授权。授权请求所需的参数缺失或无效。 @@ -123,14 +123,14 @@ zh-CN: admin/accounts: 账号管理 admin/all: 所有管理功能 admin/reports: 举报管理 - all: 完全访问您的Mastodon账户 + all: 完全访问你的Mastodon账号 blocks: 屏蔽 - bookmarks: 书签 + bookmarks: 收藏 conversations: 会话 crypto: 端到端加密 favourites: 喜欢 - filters: 过滤器 - follow: 关注者,隐藏与屏蔽 + filters: 过滤规则 + follow: 关注,隐藏与屏蔽 follows: 关注 lists: 列表 media: 媒体文件 @@ -152,29 +152,29 @@ zh-CN: admin:read: 读取服务器上的所有数据 admin:read:accounts: 读取所有账号的敏感信息 admin:read:canonical_email_blocks: 读取所有已屏蔽邮箱的敏感信息 - admin:read:domain_allows: 读取所有域的敏感信息 - admin:read:domain_blocks: 读取所有域块的敏感信息 - admin:read:email_domain_blocks: 读取所有已屏蔽邮箱域名的敏感信息 + admin:read:domain_allows: 读取敏感信息 - 站点允许列表 + admin:read:domain_blocks: 读取敏感信息 - 站点屏蔽列表 + admin:read:email_domain_blocks: 读取敏感信息 - 邮箱域名屏蔽列表 admin:read:ip_blocks: 读取所有IP块的敏感信息 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: 对已屏蔽邮箱域名执行管理操作 - admin:write:ip_blocks: 在 IP 块上执行管理操作 + admin:write:domain_allows: 修改站点允许列表 + admin:write:domain_blocks: 修改站点屏蔽列表 + admin:write:email_domain_blocks: 修改邮箱域名屏蔽列表 + admin:write:ip_blocks: 针对 IP 段执行管理操作 admin:write:reports: 对举报执行管理操作 crypto: 使用端到端加密 follow: 关注或屏蔽用户 - profile: 仅读取你账户中的个人资料信息 - push: 接收你的账户的推送通知 - read: 读取你的账户数据 + profile: 仅读取你账号的个人资料信息 + push: 接收你的账号的推送通知 + read: 读取你的账号数据 read:accounts: 查看账号信息 read:blocks: 查看你的屏蔽列表 read:bookmarks: 查看你的书签 read:favourites: 查看喜欢的嘟文 - read:filters: 查看你的过滤器 + read:filters: 查看你的过滤规则 read:follows: 查看你的关注 read:lists: 查看你的列表 read:mutes: 查看你的隐藏列表 @@ -184,11 +184,11 @@ zh-CN: read:statuses: 查看所有嘟文 write: 修改你的账号数据 write:accounts: 修改你的个人资料 - write:blocks: 屏蔽账号和域名 - write:bookmarks: 为嘟文添加书签 + write:blocks: 屏蔽账号与站点 + write:bookmarks: 将嘟文加入书签 write:conversations: 静音并删除会话 write:favourites: 喜欢嘟文 - write:filters: 创建过滤器 + write:filters: 创建过滤规则 write:follows: 关注其他人 write:lists: 创建列表 write:media: 上传媒体文件 diff --git a/config/locales/el.yml b/config/locales/el.yml index 610ae40265..a842f78fb2 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -21,6 +21,7 @@ el: one: Ανάρτηση other: Αναρτήσεις posts_tab_heading: Αναρτήσεις + self_follow_error: Δεν επιτρέπεται να ακολουθήσεις τον δικό σου λογαριασμό admin: account_actions: action: Εκτέλεση ενέργειας @@ -250,9 +251,11 @@ el: create_user_role_html: Ο/Η %{name} δημιούργησε ρόλο %{target} demote_user_html: Ο/Η %{name} υποβίβασε τον χρήστη %{target} destroy_announcement_html: Ο/Η %{name} διέγραψε την ανακοίνωση %{target} + destroy_canonical_email_block_html: Ο χρήστης %{name} έκανε άρση αποκλεισμού email με το hash %{target} destroy_custom_emoji_html: Ο/Η %{name} διέγραψε το emoji %{target} destroy_domain_allow_html: Ο/Η %{name} αφαίρεσε τον τομέα %{target} από τη λίστα εγκρίσεων destroy_domain_block_html: Ο/Η %{name} επέτρεψε τον τομέα %{target} + destroy_email_domain_block_html: Ο χρήστης %{name} έκανε άρση αποκλεισμού του τομέα email %{target} destroy_instance_html: Ο/Η %{name} εκκαθάρισε τον τομέα %{target} destroy_ip_block_html: Ο/Η %{name} διέγραψε τον κανόνα για την IP %{target} destroy_status_html: Ο/Η %{name} αφαίρεσε την ανάρτηση του/της %{target} @@ -260,8 +263,10 @@ el: destroy_user_role_html: Ο/Η %{name} διέγραψε τον ρόλο του %{target} disable_2fa_user_html: Ο/Η %{name} απενεργοποίησε την απαίτηση για ταυτοποίηση δύο παραγόντων για τον χρήστη %{target} disable_custom_emoji_html: Ο/Η %{name} απενεργοποίησε το emoji %{target} + disable_sign_in_token_auth_user_html: Ο χρήστης %{name} απενεργοποίησε την ταυτοποίηση χαρακτηριστικού μέσω e-mail για %{target} disable_user_html: Ο/Η %{name} απενεργοποίησε τη σύνδεση για τον χρήστη %{target} enable_custom_emoji_html: Ο/Η %{name} ενεργοποίησε το emoji %{target} + enable_sign_in_token_auth_user_html: Ο χρήστης %{name} ενεργοποίησε την πιστοποίηση αναγνωριστικού email του %{target} enable_user_html: Ο/Η %{name} ενεργοποίησε τη σύνδεση για τον χρήστη %{target} memorialize_account_html: O/H %{name} μετέτρεψε τον λογαριασμό του %{target} σε σελίδα εις μνήμην promote_user_html: Ο/Η %{name} προβίβασε το χρήστη %{target} @@ -269,6 +274,7 @@ el: reject_user_html: ο/η %{name} απέρριψε την εγγραφή από %{target} remove_avatar_user_html: ο/η %{name} αφαίρεσε το άβαταρ του/της %{target} reopen_report_html: Ο/Η %{name} ξανάνοιξε την αναφορά %{target} + resend_user_html: Ο χρήστης %{name} έστειλε ξανά email επιβεβαίωσης για τον χρήστη %{target} reset_password_user_html: Ο/Η %{name} επανέφερε το συνθηματικό του χρήστη %{target} resolve_report_html: Ο/Η %{name} επέλυσε την αναφορά %{target} sensitive_account_html: Ο/Η %{name} επισήμανε τα πολυμέσα του/της %{target} ως ευαίσθητα @@ -429,6 +435,7 @@ el: attempts_over_week: one: "%{count} προσπάθεια την τελευταία εβδομάδα" other: "%{count} προσπάθειες εγγραφής την τελευταία εβδομάδα" + created_msg: Επιτυχής αποκλεισμός τομέα email delete: Διαγραφή dns: types: @@ -437,8 +444,12 @@ el: new: create: Προσθήκη τομέα resolve: Επίλυση τομέα + title: Αποκλεισμός νέου τομέα email + no_email_domain_block_selected: Δεν άλλαξαν οι αποκλεισμοί τομέα email καθώς δεν επιλέχθηκε κανένας not_permitted: Δεν επιτρέπεται + resolved_dns_records_hint_html: Το όνομα τομέα επιλύεται στους ακόλουθους τομείς MX, οι οποίοι είναι τελικά υπεύθυνοι για την αποδοχή των email. Αποκλείοντας έναν τομέα MX θα αποκλείει τις εγγραφές από οποιαδήποτε διεύθυνση email που χρησιμοποιεί τον ίδιο τομέα MX, ακόμη και αν το ορατό όνομα τομέα είναι διαφορετικό. Προσέξτε να μην αποκλείσετε τους μεγάλους παρόχους ηλεκτρονικού ταχυδρομείου. resolved_through_html: Επιλύθηκε μέσω %{domain} + title: Αποκλεισμένοι τομείς email export_domain_allows: new: title: Εισαγωγή επιτρεπόμενων τομέων @@ -592,7 +603,9 @@ el: resolve_description_html: Δεν θα ληφθούν μέτρα κατά του αναφερόμενου λογαριασμού, δεν θα καταγραφεί κανένα παράπτωμα, και η αναφορά θα κλείσει. silence_description_html: Ο λογαριασμός θα είναι ορατός μόνο σε εκείνους που ήδη τον ακολουθούν ή τον αναζητούν χειροκίνητα, περιορίζοντας κατά πολύ την εμβέλειά του. Η ενέργεια αυτή είναι αναστρέψιμη. Κλείνει όλες τις αναφορές εναντίον αυτού του λογαριασμού. suspend_description_html: Ο λογαριασμός και όλο το περιεχόμενό του θα είναι απρόσιτα και τελικά θα διαγραφούν και η αλληλεπίδραση με αυτόν θα είναι αδύνατη. Αναστρέψιμη εντός 30 ημερών. Κλείνει όλες τις αναφορές εναντίον αυτού του λογαριασμού. + actions_description_html: Αποφάσισε ποια μέτρα θα ληφθούν για την επίλυση αυτής της αναφοράς. Εάν προβείς σε τιμωρητική ενέργεια κατά του αναφερόμενου λογαριασμού, θα αποσταλεί ειδοποίηση μέσω ηλεκτρονικού ταχυδρομείου σε αυτόν, εκτός όταν η κατηγορία Spam είναι επιλεγμένη. actions_description_remote_html: Αποφάσισε ποια μέτρα θα ληφθούν για την επίλυση αυτής της αναφοράς. Αυτό θα επηρεάσει μόνο το πώς ο δικός σας διακομιστής επικοινωνεί με αυτόν τον απομακρυσμένο λογαριασμό και χειρίζεται το περιεχόμενό του. + actions_no_posts: Αυτή η αναφορά δεν έχει συσχετισμένες αναρτήσεις για διαγραφή add_to_report: Πρόσθεσε περισσότερα στην αναφορά already_suspended_badges: local: Ήδη σε αναστολή σε αυτόν τον διακομιστή @@ -656,6 +669,7 @@ el: delete_data_html: Διάγραψε το προφίλ και το περιεχόμενο του @%{acct} σε 30 ημέρες από τώρα εκτός αν, εν τω μεταξύ, ανακληθεί η αναστολή preview_preamble_html: 'Ο @%{acct} θα λάβει μια προειδοποίηση με τα ακόλουθο περιεχόμενο:' record_strike_html: Κατάγραψε ένα παράπτωμα εναντίον του @%{acct} για να σε βοηθήσει να αποφασίσεις σε μελλοντικές παραβιάσεις από αυτόν τον λογαριασμό + send_email_html: Στείλε στον λογαριασμό @%{acct} ένα προειδοποιητικό email warning_placeholder: Προαιρετικές επιπλέον εξηγήσεις για αυτή την ενέργεια από την ομάδα συντονισμού. target_origin: Προέλευση του αναφερόμενου λογαριασμού title: Αναφορές @@ -695,6 +709,7 @@ el: manage_appeals: Διαχείριση Εφέσεων manage_appeals_description: Επιτρέπει στους χρήστες να εξετάζουν τις εφέσεις κατά των ενεργειών της ομάδας συντονισμού manage_blocks: Διαχείριση Αποκλεισμών + manage_blocks_description: Επιτρέπει στους χρήστες να αποκλείουν παρόχους email και διευθύνσεις IP manage_custom_emojis: Διαχείριση Προσαρμοσμένων Emojis manage_custom_emojis_description: Επιτρέπει στους χρήστες να διαχειρίζονται προσαρμοσμένα emojis στον διακομιστή manage_federation: Διαχείριση Συναλλαγών @@ -712,6 +727,7 @@ el: manage_taxonomies: Διαχείριση Ταξινομιών manage_taxonomies_description: Επιτρέπει στους χρήστες να εξετάζουν το δημοφιλές περιεχόμενο και να ενημερώνουν τις ρυθμίσεις ετικέτας manage_user_access: Διαχείριση Πρόσβασης Χρήστη + manage_user_access_description: Επιτρέπει στους χρήστες να απενεργοποιούν την ταυτοποίηση δύο παραγόντων άλλων χρηστών, να αλλάξουν τη διεύθυνση ηλεκτρονικού ταχυδρομείου τους και να επαναφέρουν τον κωδικό πρόσβασής τους manage_users: Διαχείριση Χρηστών manage_users_description: Επιτρέπει στους χρήστες να βλέπουν τις λεπτομέρειες άλλων χρηστών και να εκτελούν ενέργειες συντονισμού εναντίον τους manage_webhooks: Διαχείριση Webhooks @@ -786,6 +802,7 @@ el: destroyed_msg: Η μεταφόρτωση ιστότοπου διαγράφηκε επιτυχώς! software_updates: critical_update: Κρίσιμο - παρακαλώ ενημέρωσε γρήγορα + description: Συνιστάται να διατηρείς την εγκατάσταση του Mastodon ενημερωμένη για να επωφεληθείς από τις πιο πρόσφατες διορθώσεις και δυνατότητες. Επιπλέον, μερικές φορές είναι κρίσιμο να ενημερώσεις το Mastodon εγκαίρως για να αποφύγεις προβλήματα ασφαλείας. Για αυτούς τους λόγους, το Mastodon ελέγχει για ενημερώσεις κάθε 30 λεπτά και θα σε ειδοποιεί σύμφωνα με τις προτιμήσεις ειδοποίησης μέσω email. documentation_link: Μάθε περισσότερα release_notes: Σημειώσεις έκδοσης title: Διαθέσιμες ενημερώσεις @@ -859,6 +876,9 @@ el: message_html: Δεν έχεις ορίσει κανέναν κανόνα διακομιστή. sidekiq_process_check: message_html: Καμία διεργασία Sidekiq δεν εκτελείται για την ουρά %{value}. Παρακαλώ έλεγξε τη διαμόρφωση του Sidekiq + software_version_check: + action: Δες τις διαθέσιμες ενημερώσεις + message_html: Μια ενημέρωση Mastodon είναι διαθέσιμη. software_version_critical_check: action: Δες τις διαθέσιμες ενημερώσεις message_html: Μια κρίσιμη ενημέρωση του Mastodon είναι διαθέσιμη, παρακαλώ ενήμερωσε το συντομότερο δυνατόν. @@ -885,6 +905,7 @@ el: name: Όνομα newest: Νεότερη όλων oldest: Παλαιότερη όλων + open: Προβολή Δημόσια reset: Επαναφορά review: Κατάσταση αξιολόγησης search: Αναζήτηση @@ -894,10 +915,16 @@ el: trends: allow: Επιτρέπεται approved: Εγκρίθηκε + confirm_allow: Σίγουρα θες να επιτρέψεις τις επιλεγμένες ετικέτες; + confirm_disallow: Σίγουρα θες να απορρίψεις τις επιλεγμένες ετικέτες; disallow: Να μην επιτρέπεται links: allow: Να επιτρέπεται σύνδεσμος allow_provider: Να επιτρέπεται ο εκδότης + confirm_allow: Σίγουρα θες να επιτρέψεις τουςεπιλεγμένους συνδέσμους; + confirm_allow_provider: Σίγουρα θες να επιτρέψεις τους επιλεγμένους παρόχους; + confirm_disallow: Σίγουρα θες να απορρίψεις τους επιλεγμένους συνδέσμους; + confirm_disallow_provider: Σίγουρα θες να απορρίψεις τους επιλεγμένους παρόχους; description_html: Αυτοί οι σύνδεσμοι μοιράζονται αρκετά από λογαριασμούς των οποίων τις δημοσιεύσεις, βλέπει ο διακομιστής σας. Μπορεί να βοηθήσει τους χρήστες σας να μάθουν τί συμβαίνει στον κόσμο. Οι σύνδεσμοι δεν εμφανίζονται δημόσια μέχρι να εγκρίνετε τον εκδότη. Μπορείς επίσης να επιτρέψεις ή να απορρίψεις μεμονωμένους συνδέσμους. disallow: Να μην επιτρέπεται ο σύνδεσμος disallow_provider: Να μην επιτρέπεται ο εκδότης @@ -921,6 +948,10 @@ el: statuses: allow: Να επιτρέπεται η ανάρτηση allow_account: Να επιτρέπεται ο συγγραφέας + confirm_allow: Σίγουρα θες να επιτρέψεις τις επιλεγμένες καταστάσεις; + confirm_allow_account: Σίγουρα θες να επιτρέψεις τους επιλεγμένους λογαριασμούς; + confirm_disallow: Σίγουρα θες να απορρίψεις τις επιλεγμένες καταστάσεις; + confirm_disallow_account: Σίγουρα θες να απορρίψεις τους επιλεγμένους λογαριασμούς; description_html: Αυτές είναι αναρτήσεις για τις οποίες ο διακομιστής σας γνωρίζει ότι κοινοποιούνται και αρέσουν πολύ αυτή τη περίοδο. Μπορεί να βοηθήσει νέους και χρήστες που επιστρέφουν, να βρουν περισσότερα άτομα να ακολουθήσουν. Καμία ανάρτηση δεν εμφανίζεται δημόσια μέχρι να εγκρίνεις τον συντάκτη και ο συντάκτης να επιτρέπει ο λογαριασμός του να προτείνεται και σε άλλους. Μπορείς επίσης να επιτρέψεις ή να απορρίψεις μεμονωμένες δημοσιεύσεις. disallow: Να μην επιτρέπεται η δημοσίευση disallow_account: Να μην επιτρέπεται ο συντάκτης @@ -953,6 +984,7 @@ el: used_by_over_week: one: Χρησιμοποιήθηκε από ένα άτομο την τελευταία εβδομάδα other: Χρησιμοποιήθηκε από %{count} άτομα την τελευταία εβδομάδα + title: Προτάσεις και τάσεις trending: Τάσεις warning_presets: add_new: Πρόσθεση νέου @@ -1037,7 +1069,9 @@ el: guide_link_text: Μπορεί να συνεισφέρει ο οποιοσδήποτε. sensitive_content: Ευαίσθητο περιεχόμενο application_mailer: + notification_preferences: Αλλαγή προτιμήσεων email salutation: "%{name}," + settings: 'Αλλαγή προτιμήσεων email: %{link}' unsubscribe: Κατάργηση εγγραφής view: 'Προβολή:' view_profile: Προβολή προφίλ @@ -1057,6 +1091,7 @@ el: hint_html: Και κάτι ακόμα! Πρέπει να επιβεβαιώσουμε ότι είσαι άνθρωπος (αυτό γίνεται για να κρατήσουμε μακριά το σπαμ!). Λύσε το CAPTCHA παρακάτω και κάνε κλικ "Συνέχεια". title: Ελεγχος ασφαλείας confirmations: + awaiting_review: Η διεύθυνση email σου επιβεβαιώθηκε! Το προσωπικό του %{domain} εξετάζει τώρα την εγγραφή σου. Θα λάβεις ένα email εάν εγκρίνουν τον λογαριασμό σου! awaiting_review_title: Η εγγραφή σου εξετάζεται clicking_this_link: κάνοντας κλικ σε αυτόν τον σύνδεσμο login_link: σύνδεση @@ -1064,6 +1099,7 @@ el: redirect_to_app_html: Θα πρέπει να μεταφέρθηκες στην εφαρμογή %{app_name}. Αν αυτό δεν συμβεί, δοκιμάσε το %{clicking_this_link} ή επέστρεψε χειροκίνητα στην εφαρμογή. registration_complete: Η εγγραφή σου στο %{domain} έχει πλέον ολοκληρωθεί! welcome_title: Καλώς ήρθες, %{name}! + wrong_email_hint: Εάν αυτή η διεύθυνση email δεν είναι σωστή, μπορείς να την αλλάξεις στις ρυθμίσεις λογαριασμού. delete_account: Διαγραφή λογαριασμού delete_account_html: Αν θέλεις να διαγράψεις το λογαριασμό σου, μπορείς να συνεχίσεις εδώ. Θα σου ζητηθεί επιβεβαίωση. description: @@ -1084,6 +1120,7 @@ el: or_log_in_with: Ή συνδέσου με privacy_policy_agreement_html: Έχω διαβάσει και συμφωνώ με την πολιτική απορρήτου progress: + confirm: Επιβεβαίωση email details: Τα στοιχεία σας review: Η αξιολόγησή μας rules: Αποδοχή κανόνων @@ -1105,8 +1142,10 @@ el: security: Ασφάλεια set_new_password: Ορισμός νέου συνθηματικού setup: + email_below_hint_html: Έλεγξε τον φάκελο ανεπιθύμητης αλληλογραφίας ή ζήτα καινούργιο. Μπορείς να διορθώσεις τη διεύθυνση email σου αν είναι λάθος. email_settings_hint_html: Πάτησε το σύνδεσμο που σου στείλαμε για να επαληθεύσεις το %{email}. Θα σε περιμένουμε εδώ. link_not_received: Δεν έλαβες τον σύνδεσμο; + new_confirmation_instructions_sent: Θα λάβεις ένα νέο email με το σύνδεσμο επιβεβαίωσης σε λίγα λεπτά! title: Ελέγξτε τα εισερχόμενά σας sign_in: preamble_html: Συνδεθείτε με τα διαπιστευτήριά σας στον %{domain}. Αν ο λογαριασμός σας φιλοξενείται σε διαφορετικό διακομιστή, δε θα μπορείτε να συνδεθείτε εδώ. @@ -1117,12 +1156,22 @@ el: title: Ας ξεκινήσουμε τις ρυθμίσεις στο %{domain}. status: account_status: Κατάσταση λογαριασμού + confirming: Αναμονή για ολοκλήρωση επιβεβαίωσης του email. functional: Ο λογαριασμός σας είναι πλήρως λειτουργικός. + pending: Η εφαρμογή σου εκκρεμεί έγκρισης. Ίσως θα διαρκέσει κάποιο χρόνο. Θα λάβεις email αν εγκριθεί. redirecting_to: Ο λογαριασμός σου είναι ανενεργός γιατί επί του παρόντος ανακατευθύνει στον %{acct}. self_destruct: Καθώς το %{domain} κλείνει, θα έχεις μόνο περιορισμένη πρόσβαση στον λογαριασμό σου. view_strikes: Προβολή προηγούμενων ποινών εναντίον του λογαριασμού σας too_fast: Η φόρμα υποβλήθηκε πολύ γρήγορα, προσπαθήστε ξανά. use_security_key: Χρήση κλειδιού ασφαλείας + author_attribution: + example_title: Δείγμα κειμένου + hint_html: Γράφεις ειδήσεις ή blog άρθρα εκτός του Mastodon; Έλεγξε πώς μπορείς να πάρεις τα εύσημα όταν μοιράζονται στο Mastodon. + instructions: 'Βεβαιώσου ότι ο κώδικας αυτός είναι στο HTML του άρθρου σου:' + more_from_html: Περισσότερα από %{name} + s_blog: Ιστολόγιο του/της %{name} + then_instructions: Στη συνέχεια, πρόσθεσε το όνομα τομέα της δημοσίευσης στο παρακάτω πεδίο. + title: Αναφορά συγγραφέα challenge: confirm: Συνέχεια hint_html: "Συμβουλή: Δεν θα σου ζητήσουμε τον κωδικό ασφαλείας σου ξανά για την επόμενη ώρα." @@ -1159,6 +1208,9 @@ el: before: 'Πριν συνεχίσεις, παρακαλούμε να διαβάσεις τις παρακάτω σημειώσεις προσεκτικά:' caches: Περιεχόμενο που έχει αποθηκευτεί προσωρινά σε άλλους διακομιστές ίσως παραμείνει data_removal: Οι αναρτήσεις σου και άλλα δεδομένα θα διαγραφούν οριστικά + email_change_html: Μπορείς να αλλάξεις τη διεύθυνση email σου χωρίς να διαγράψεις το λογαριασμό σου + email_contact_html: Αν και πάλι δεν εμφανιστεί, μπορείς να στείλεις email στο %{email} για βοήθεια + email_reconfirmation_html: Αν δεν έχεις λάβει το email επιβεβαίωσης, μπορείς να το ζητήσεις ξανά irreversible: Δεν θα μπορείς να ανακτήσεις ή ενεργοποιήσεις ξανά το λογαριασμό σου more_details_html: Για περισσότερες πληροφορίες, δες την πολιτική απορρήτου. username_available: Το όνομα χρήστη σου θα γίνει ξανά διαθέσιμο @@ -1342,15 +1394,21 @@ el: time_started: Ξεκίνησε στις titles: blocking: Εισαγωγή αποκλεισμένων λογαριασμών + bookmarks: Εισαγωγή σελιδοδεικτών + domain_blocking: Εισαγωγή αποκλεισμένων τομέων following: Εισαγωγή λογαριασμών που ακολουθείτε + lists: Εισαγωγή λιστών + muting: Εισαγωγή λογαριασμών σε σίγαση type: Τύπος εισαγωγής type_groups: + constructive: Ακολουθείς & Σελιδοδείκτες destructive: Μπλοκ & σίγαση types: blocking: Λίστα αποκλεισμού bookmarks: Σελιδοδείκτες domain_blocking: Λίστα αποκλεισμένων τομέων following: Λίστα ατόμων που ακολουθείτε + lists: Λίστες muting: Λίστα αποσιωπήσεων upload: Μεταμόρφωση invites: @@ -1365,6 +1423,7 @@ el: '86400': 1 μέρα expires_in_prompt: Ποτέ generate: Δημιουργία συνδέσμου πρόσκλησης + invalid: Αυτή η πρόσκληση δεν είναι έγκυρη invited_by: 'Σε προσκάλεσε ο/η:' max_uses: one: 1 χρήσης @@ -1382,15 +1441,32 @@ el: authentication_methods: otp: εφαρμογή ταυτοποίησης δύο παραγόντων password: συνθηματικό + sign_in_token: κωδικός ασφαλείας email webauthn: κλειδιά ασφαλείας description_html: Αν δεις δραστηριότητα που δεν αναγνωρίζεις, σκεφτείς να αλλάξεις τον κωδικό πρόσβασής σου και να ενεργοποιήσεις τον έλεγχο ταυτότητας δύο παραγόντων. empty: Δεν υπάρχει διαθέσιμο ιστορικό ελέγχου ταυτότητας failed_sign_in_html: Αποτυχημένη προσπάθεια σύνδεσης με %{method} από %{ip} (%{browser}) successful_sign_in_html: Επιτυχής σύνδεση με %{method} από %{ip} (%{browser}) title: Ιστορικό ελέγχου ταυτότητας + mail_subscriptions: + unsubscribe: + action: Ναι, κατάργηση συνδρομής + complete: Η συνδρομή καταργήθηκε + confirmation_html: Σίγουρα θες να καταργήσεις την εγγραφή σου για %{type} για το Mastodon στο %{domain} στο email σου %{email}; Μπορείς πάντα να εγγραφείς ξανά από τις ρυθμίσεις ειδοποιήσεων email. + emails: + notification_emails: + favourite: ειδοποιήσεις email για αγαπημένα + follow: ειδοποιήσεις email για ακολουθήσεις + follow_request: email για αιτήματα ακολούθησης + mention: ειδοποιήσεις email για επισημάνσεις + reblog: ειδοποιήσεις email για ενίσχυση + resubscribe_html: Αν έχεις καταργήσει την εγγραφή σου κατά λάθος, μπορείς να εγγραφείς εκ νέου από τις ρυθμίσεις ειδοποίησης email. + success_html: Δεν θα λαμβάνεις πλέον %{type} για το Mastodon στο %{domain} στο email σου στο %{email}. + title: Κατάργηση συνδρομής media_attachments: validations: images_and_video: Δεν γίνεται να προσθέσεις βίντεο σε ανάρτηση που ήδη περιέχει εικόνες + not_found: Το πολυμέσο %{ids} δε βρέθηκε ή είναι ήδη συννημένο σε άλλη ανάρτηση not_ready: Δεν μπορούν να επισυναφθούν αρχεία για τα οποία δεν έχει τελειώσει η επεξεργασία. Προσπαθήστε ξανά σε λίγο! too_many: Δεν γίνεται να επισυνάψεις περισσότερα από 4 αρχεία migrations: @@ -1467,6 +1543,8 @@ el: update: subject: "%{name} επεξεργάστηκε μια ανάρτηση" notifications: + administration_emails: Ειδοποιήσεις email διαχειριστή + email_events: Συμβάντα για ειδοποιήσεις μέσω email email_events_hint: 'Επέλεξε συμβάντα για τα οποία θέλεις να λαμβάνεις ειδοποιήσεις μέσω email:' number: human: @@ -1501,18 +1579,31 @@ el: expired: Η δημοσκόπηση έχει ήδη λήξει invalid_choice: Αυτή η επιλογή ψήφου δεν υπάρχει over_character_limit: δε μπορεί να υπερβαίνει τους %{max} χαρακτήρες έκαστη + self_vote: Δεν μπορείς να ψηφίσεις στις δικές σου δημοσκοπήσεις too_few_options: πρέπει να έχει περισσότερες από μια επιλογές too_many_options: δεν μπορεί να έχει περισσότερες από %{max} επιλογές preferences: other: Άλλες posting_defaults: Προεπιλογές ανάρτησης public_timelines: Δημόσιες ροές + privacy: + hint_html: "Παραμετροποίησε πώς θες το προφίλ και οι αναρτήσεις σου να ανακαλύπτονται.. Μια ποικιλία δυνατοτήτων στο Mastodon μπορούν να σε βοηθήσουν να απευθυνθείς σε μεγαλύτερο κοινό όταν ενεργοποιηθούν. Αφιέρωσε μερικά λεπτά για να εξετάσεις τις ρυθμίσεις και να σιγουρευτείς ότι σου ταιριάζουν." + privacy: Απόρρητο + privacy_hint_html: "'Έλεγξε πόσο θες να αποκαλύπτεις προς όφελος των άλλων. Οι άνθρωποι ανακαλύπτουν ενδιαφέροντα προφίλ και εφαρμογές με την περιήγηση των ακολούθων άλλων ατόμων και βλέποντας από ποιες εφαρμογές δημοσιεύουν, αλλά μπορεί να προτιμάς να το κρατάς κρυφό." + reach: Προσιτότητα + reach_hint_html: Έλεγξε αν θες να ανακαλύπτεσαι και να ακολουθείσαι από καινούρια άτομα. Θες οι αναρτήσεις σου να εμφανίζονται στην οθόνη Εξερεύνηση; Θες άλλα άτομα να σε βλέπουν στις προτάσεις ακολούθησής τους; Θες να αποδέχεσαι όλους τους νέους ακολούθους αυτόματα ή να έχεις εξονυχιστικό έλεγχο στο καθένα; + search: Αναζήτηση + search_hint_html: Έλεγξε πώς θες να σε βρίσκουν. Θες οι χρήστες να σε βρουν από ό,τι έχεις αναρτήσει δημόσια; Θες άτομα εκτός Mastodon να βρουν το προφίλ σου κατά την αναζήτηση στο διαδίκτυο; Λάβε υπόψη ότι ο πλήρης αποκλεισμός από όλες τις μηχανές αναζήτησης δεν μπορεί να διασφαλιστεί για δημόσια ενημέρωση. + title: Ιδιωτικότητα και προσιτότητα privacy_policy: title: Πολιτική Απορρήτου reactions: errors: limit_reached: Το όριο διαφορετικών αντιδράσεων ξεπεράστηκε unrecognized_emoji: δεν είναι ένα αναγνωρισμένο emoji + redirects: + prompt: Αν εμπιστεύεστε αυτόν τον σύνδεσμο, κάντε κλικ σε αυτόν για να συνεχίσετε. + title: Αποχωρείτε από το %{instance}. relationships: activity: Δραστηριότητα λογαριασμού confirm_follow_selected_followers: Είσαι βέβαιος ότι θες να ακολουθήσεις τους επιλεγμένους ακόλουθους; @@ -1548,6 +1639,9 @@ el: over_daily_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων αναρτήσεων για εκείνη τη μέρα over_total_limit: Έχεις υπερβεί το όριο των %{limit} προγραμματισμένων αναρτήσεων too_soon: Η προγραμματισμένη ημερομηνία πρέπει να είναι στο μέλλον + self_destruct: + lead_html: Δυστυχώς, το %{domain} κλείνει οριστικά. Αν είχατε λογαριασμό εκεί, δεν θα μπορείτε να συνεχίσετε τη χρήση του, αλλά μπορείτε ακόμα να ζητήσετε ένα αντίγραφο ασφαλείας των δεδομένων σας. + title: Αυτός ο διακομιστής κλείνει οριστικά sessions: activity: Τελευταία δραστηριότητα browser: Φυλλομετρητής @@ -1604,17 +1698,31 @@ el: delete: Διαγραφή λογαριασμού development: Ανάπτυξη edit_profile: Επεξεργασία προφίλ + export: Εξαγωγή featured_tags: Παρεχόμενες ετικέτες import: Εισαγωγή import_and_export: Εισαγωγή και εξαγωγή migrate: Μετακόμιση λογαριασμού + notifications: Ειδοποιήσεις μέσω email preferences: Προτιμήσεις profile: Προφίλ relationships: Ακολουθείς και σε ακολουθούν + severed_relationships: Αποκομμένες σχέσεις statuses_cleanup: Αυτοματοποιημένη διαγραφή αναρτήσεων strikes: Παραπτώματα από ομάδα συντονισμού two_factor_authentication: Πιστοποίηση 2 παραγόντων webauthn_authentication: Κλειδιά ασφαλείας + severed_relationships: + download: Λήψη (%{count}) + event_type: + account_suspension: Αναστολή λογαριασμού (%{target_name}) + domain_block: Αναστολή διακομιστή (%{target_name}) + user_domain_block: Απέκλεισες τον χρήστη %{target_name} + lost_followers: Χαμένοι ακόλουθοι + lost_follows: Χαμένες ακολουθήσεις + preamble: Μπορεί να χάσεις ακολουθήσεις και ακόλουθους όταν αποκλείεις έναν τομέα ή όταν οι συντονιστές σου αποφασίζουν να αναστείλουν έναν απομακρυσμένο διακομιστή. Όταν συμβεί αυτό, θα είσαι σε θέση να κατεβάσεις λίστες των αποκομμένων σχέσεων, για να επιθεωρούνται και ενδεχομένως να εισάγονται σε άλλο διακομιστή. + purged: Πληροφορίες σχετικά με αυτόν τον διακομιστή έχουν εκκαθαριστεί από τους διαχειριστές του διακομιστή σου. + type: Συμβάν statuses: attached: audio: @@ -1697,11 +1805,17 @@ el: contrast: Mastodon (Υψηλή αντίθεση) default: Mastodon (Σκοτεινό) mastodon-light: Mastodon (Ανοιχτόχρωμο) + system: Αυτόματο (θέμα συστήματος) time: formats: default: "%b %d, %Y, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%d %b %Y, %H:%M %Z" + translation: + errors: + quota_exceeded: Υπέρβαση του ορίου χρήσης για την υπηρεσία μετάφρασης για ολόκληρο τον διακομιστή. + too_many_requests: Υπήρξαν πάρα πολλά αιτήματα προς την υπηρεσία μετάφρασης τελευταία. two_factor_authentication: add: Προσθήκη disable: Απενεργοποίηση 2FA @@ -1735,6 +1849,9 @@ el: subject: Το αρχείο σου είναι έτοιμο για λήψη title: Λήψη εφεδρικού αρχείου failed_2fa: + details: 'Εδώ είναι οι λεπτομέρειες της προσπάθειας σύνδεσης:' + explanation: Κάποιος έχει προσπαθήσει να εισέλθει στον λογαριασμό σου, αλλά παρείχε έναν μη έγκυρο δεύτερο παράγοντα ελέγχου ταυτότητας. + further_actions_html: Αν δεν ήσουν εσύ, σου συνιστούμε να %{action} αμέσως, καθώς μπορεί να έχει εκτεθεί. subject: Αποτυχία ταυτοποίησης δεύτερου παράγοντα title: Αποτυχία ελέγχου ταυτότητας δεύτερου παράγοντα suspicious_sign_in: @@ -1789,6 +1906,31 @@ el: feature_action: Μάθε περισσότερα feature_audience: Το Mastodon σού παρέχει μια μοναδική δυνατότητα διαχείρισης του κοινού σου χωρίς μεσάζοντες. Το Mastodon όταν αναπτύσσεται στη δική σου υποδομή σού επιτρέπει να ακολουθείς και να ακολουθείσαι από οποιονδήποτε άλλο συνδεδεμένο διακομιστή Mastodon και κανείς δεν τον ελέγχει, εκτός από σένα. feature_audience_title: Χτίσε το κοινό σου με σιγουριά + feature_control: Εσύ ξέρεις καλύτερα τι θες να βλέπεις στην αρχική σου ροή. Δεν υπάρχουν αλγόριθμοι ή διαφημίσεις για να σπαταλάς το χρόνο σου. Ακολούθησε οποιονδήποτε σε οποιονδήποτε διακομιστή Mastodon από έναν λογαριασμό και δες τις αναρτήσεις τους με χρονολογική σειρά και κάνε τη δική σου γωνιά του ίντερνετ, λίγο πιο προσωπική. + feature_control_title: Διατήρησε τον έλεγχο της ροής σου + feature_creativity: Το Mastodon υποστηρίζει αναρτήσεις ήχου, βίντεο και εικόνας, περιγραφές για προσβασιμότητα, δημοσκοπήσεις, προειδοποιήσεις περιεχομένου, κινούμενα άβαταρ, προσαρμοσμένα εμότζι, έλεγχος περικοπής μικρογραφιών και πολλά άλλα, για να σε βοηθήσει να εκφραστείς στο διαδίκτυο. Είτε δημοσιεύεις την τέχνη σου, είτε τη μουσική σου, είτε το podcast σου, το Mastodon είναι εκεί για σένα. + feature_creativity_title: Ασύγκριτη δημιουργικότητα + feature_moderation: Το Mastodon δίνει την λήψη αποφάσεων πίσω σε σένα. Κάθε διακομιστής δημιουργεί τους δικούς του κανόνες και κανονισμούς, οι οποίοι επιβάλλονται τοπικά και όχι από πάνω προς τα κάτω όπως τα εταιρικά μέσα κοινωνικής δικτύωσης, καθιστώντας την πιο ευέλικτη στην ανταπόκριση στις ανάγκες των διαφορετικών ομάδων ανθρώπων. Γίνε μέλος σε έναν διακομιστή με τους κανόνες που συμφωνείς ή δημιούργησε τον δικό σου. + feature_moderation_title: Συντονισμός όπως θα έπρεπε + follow_action: Ακολούθησε + follow_step: Το να ακολουθείς ενδιαφέροντα άτομα είναι όλη η ουσία του Mastodon. + follow_title: Προσάρμοσε την αρχική ροή σου + follows_subtitle: Ακολουθήστε γνωστούς λογαριασμούς + follows_title: Ποιον να ακολουθήσεις + follows_view_more: Δες περισσότερα άτομα για να ακολουθήσεις + hashtags_recent_count: + one: "%{people} άτομο τις τελευταίες 2 ημέρες" + other: "%{people} άτομα τις τελευταίες 2 ημέρες" + hashtags_subtitle: Εξερεύνησε τις τάσεις των τελευταίων 2 ημερών + hashtags_title: Ετικέτες σε τάση + hashtags_view_more: Δες περισσότερες ετικέτες σε τάση + post_action: Σύνθεση + post_step: Πες γεια στον κόσμο με κείμενο, φωτογραφίες, βίντεο ή δημοσκοπήσεις. + post_title: Κάνε την πρώτη σου ανάρτηση + share_action: Κοινοποίηση + share_step: Πες στους φίλους σου πώς να σε βρουν στο Mastodon. + share_title: Μοιραστείτε το προφίλ σας στο Mastodon + sign_in_action: Σύνδεση subject: Καλώς ήρθες στο Mastodon title: Καλώς όρισες, %{name}! users: @@ -1796,9 +1938,17 @@ el: go_to_sso_account_settings: Πήγαινε στις ρυθμίσεις λογαριασμού του παρόχου ταυτότητας σου invalid_otp_token: Άκυρος κωδικός πιστοποίησης 2 παραγόντων otp_lost_help_html: Αν χάσεις πρόσβαση και στα δύο, μπορείς να επικοινωνήσεις με %{email} + rate_limited: Πάρα πολλές προσπάθειες ελέγχου ταυτότητας, προσπάθησε ξανά αργότερα. + seamless_external_login: Επειδή έχεις συνδεθεί μέσω τρίτης υπηρεσίας, οι ρυθμίσεις συνθηματικού και email δεν είναι διαθέσιμες. signed_in_as: 'Έχεις συνδεθεί ως:' verification: + extra_instructions_html: Συμβουλή: Ο σύνδεσμος στην ιστοσελίδα σου μπορεί να είναι αόρατος. Το σημαντικό μέρος είναι το rel="me" που αποτρέπει την μίμηση σε ιστοσελίδες με περιεχόμενο παραγόμενο από χρήστες. Μπορείς ακόμη να χρησιμοποιήσεις μια ετικέτα συνδέσμου στην κεφαλίδα της σελίδας αντί για a, αλλά ο κώδικας HTML πρέπει να είναι προσβάσιμος χωρίς την εκτέλεση JavaScript. + here_is_how: Δείτε πώς + hint_html: Η επαλήθευση της ταυτότητας στο Mastodon είναι για όλους. Βασισμένο σε ανοιχτά πρότυπα ιστού, τώρα και για πάντα δωρεάν. Το μόνο που χρειάζεσαι είναι μια προσωπική ιστοσελίδα που ο κόσμος να σε αναγνωρίζει από αυτή. Όταν συνδέεσαι σε αυτήν την ιστοσελίδα από το προφίλ σου, θα ελέγξουμε ότι η ιστοσελίδα συνδέεται πίσω στο προφίλ σου και θα δείξει μια οπτική ένδειξη σε αυτό. + instructions_html: Αντέγραψε και επικόλλησε τον παρακάτω κώδικα στην HTML της ιστοσελίδας σου. Στη συνέχεια, πρόσθεσε τη διεύθυνση της ιστοσελίδας σου σε ένα από τα επιπλέον πεδία στο προφίλ σου από την καρτέλα "Επεξεργασία προφίλ" και αποθήκευσε τις αλλαγές. verification: Πιστοποίηση + verified_links: Οι επαληθευμένοι σύνδεσμοι σας + website_verification: Επαλήθευση ιστοτόπου webauthn_credentials: add: Προσθήκη νέου κλειδιού ασφαλείας create: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index fbd48d1c31..42eae026fb 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -21,6 +21,7 @@ en-GB: one: Post other: Posts posts_tab_heading: Posts + self_follow_error: Following your own account is not allowed admin: account_actions: action: Perform action @@ -875,6 +876,9 @@ en-GB: message_html: You haven't defined any server rules. sidekiq_process_check: message_html: No Sidekiq process running for the %{value} queue(s). Please review your Sidekiq configuration + software_version_check: + action: See available updates + message_html: A Mastodon update is available. software_version_critical_check: action: See available updates message_html: A critical Mastodon update is available, please update as quickly as possible. @@ -1162,9 +1166,11 @@ en-GB: use_security_key: Use security key author_attribution: example_title: Sample text - hint_html: Control how you're credited when links are shared on Mastodon. + hint_html: Are you writing news or blog articles outside of Mastodon? Control how you get credited when they are shared on Mastodon. + instructions: 'Make sure this code is in your article''s HTML:' more_from_html: More from %{name} s_blog: "%{name}'s Blog" + then_instructions: Then, add the domain name of the publication in the field below. title: Author attribution challenge: confirm: Continue diff --git a/config/locales/en.yml b/config/locales/en.yml index fa57cd73f4..6d042c747e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -21,6 +21,7 @@ en: one: Post other: Posts posts_tab_heading: Posts + self_follow_error: Following your own account is not allowed admin: account_actions: action: Perform action @@ -1488,9 +1489,11 @@ en: with_login_options: Will you disable your custom css? author_attribution: example_title: Sample text - hint_html: Control how you're credited when links are shared on Mastodon. + hint_html: Are you writing news or blog articles outside of Mastodon? Control how you get credited when they are shared on Mastodon. + instructions: 'Make sure this code is in your article''s HTML:' more_from_html: More from %{name} s_blog: "%{name}'s Blog" + then_instructions: Then, add the domain name of the publication in the field below. title: Author attribution bookmark_categories: errors: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index a3f968d139..35e96fe1c2 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -5,7 +5,7 @@ eo: contact_missing: Ne elektita contact_unavailable: Ne disponebla hosted_on: "%{domain} estas nodo de Mastodon" - title: Pri + title: Prio accounts: followers: one: Sekvanto @@ -19,8 +19,9 @@ eo: following: Vi devas sekvi la homon, kiun vi volas proponi posts: one: Afiŝo - other: Mesaĝoj + other: Afiŝoj posts_tab_heading: Afiŝoj + self_follow_error: Sekvi vian propran konton ne estas permesita admin: account_actions: action: Plenumi agon @@ -40,7 +41,7 @@ eo: by_domain: Domajno change_email: changed_msg: Retpoŝta adreso sukcese ŝanĝita! - current_email: Nuna retadreso + current_email: Aktuala retadreso label: Ŝanĝi retadreson new_email: Nova retadreso submit: Ŝanĝi retadreson @@ -60,6 +61,7 @@ eo: demote: Degradi destroyed_msg: Datumoj de %{username} nun enviciĝis por esti forigita baldaǔ disable: Frostigi + disable_sign_in_token_auth: Malebligu retpoŝtan ĵeton-aŭtentikigon disable_two_factor_authentication: Malŝalti 2FA-n disabled: Frostigita display_name: Montrata nomo @@ -68,9 +70,10 @@ eo: email: Retpoŝto email_status: Stato de retpoŝto enable: Malfrostigi + enable_sign_in_token_auth: Ebligu retpoŝtan ĵeton-aŭtentikigon enabled: Ebligita enabled_msg: Sukcese malfrostigis konton de %{username} - followers: Sekvantoj + followers: Sekvoj follows: Sekvatoj header: Kapa bildo inbox_url: Enira URL @@ -80,8 +83,8 @@ eo: joined: Aliĝis location: all: Ĉiuj - local: Lokaj - remote: Foraj + local: Loka + remote: Fora title: Loko login_status: Ensaluta stato media_attachments: Plurmediaj aldonaĵoj @@ -99,7 +102,7 @@ eo: moderation_notes: Notoj de moderigado most_recent_activity: Lastaj afiŝoj most_recent_ip: Lasta IP - no_account_selected: Neniu konto estis ŝanĝita ĉar neniu estis selektita + no_account_selected: Neniu konto estis ŝanĝita kial neniu estis selektita no_limits_imposed: Neniu limito trudita no_role_assigned: Sen rolo not_subscribed: Ne abonita @@ -132,13 +135,14 @@ eo: resubscribe: Reaboni role: Rolo search: Serĉi + search_same_email_domain: Aliaj uzantoj kun la sama retpoŝta domajno search_same_ip: Aliaj uzantoj kun la sama IP security: Sekureco security_measures: only_password: Nur pasvorto password_and_2fa: Pasvorto kaj 2FA sensitive: Tikla - sensitized: markita tikla + sensitized: Markita kiel tikla shared_inbox_url: URL de kunhavigita leterkesto show: created_reports: Faritaj raportoj @@ -172,30 +176,37 @@ eo: approve_appeal: Aprobis Apelacion approve_user: Aprobi Uzanton assigned_to_self_report: Atribui Raporton + change_email_user: Ŝanĝu retpoŝton por uzanto change_role_user: Ŝanĝi Rolon de Uzanton confirm_user: Konfirmi uzanton create_account_warning: Krei averton create_announcement: Krei Anoncon + create_canonical_email_block: Krei retpoŝtan blokon create_custom_emoji: Krei Propran Emoĝion create_domain_allow: Krei Domajnan Permeson create_domain_block: Krei Blokadon De Domajno + create_email_domain_block: Krei retpoŝtan domajnan blokon create_ip_block: Krei IP-regulon create_unavailable_domain: Krei Nehaveblan Domajnon create_user_role: Krei Rolon demote_user: Malpromocii Uzanton destroy_announcement: Forigi Anoncon + destroy_canonical_email_block: Forigi retpoŝtan blokon destroy_custom_emoji: Forigi Propran Emoĝion destroy_domain_allow: Forigi Domajnan Permeson destroy_domain_block: Forigi blokadon de domajno + destroy_email_domain_block: Forigi retpoŝtan domajnan blokon destroy_instance: Forigi Domajnon destroy_ip_block: Forigi IP-regulon destroy_status: Forigi Afiŝon destroy_unavailable_domain: Forigi Nehaveblan Domajnon destroy_user_role: Detrui Rolon disable_2fa_user: Malebligi 2FA - disable_custom_emoji: Malebligi proprajn emoĝiojn + disable_custom_emoji: Malŝalti Proprajn Bildosignojn + disable_sign_in_token_auth_user: Malebligi aŭtentigon per retpoŝta ĵetono por la uzanto disable_user: Neebligi la uzanton enable_custom_emoji: Ebligi Propran Emoĝion + enable_sign_in_token_auth_user: Ebligi aŭtentigon per retpoŝta ĵetono por la uzanto enable_user: Ebligi uzanton memorialize_account: Memorigu Konton promote_user: Promocii Uzanton @@ -204,49 +215,58 @@ eo: remove_avatar_user: Forigi la profilbildon reopen_report: Remalfermi signalon resend_user: Resendi konfirman retmesaĝon - reset_password_user: Restarigi pasvorton + reset_password_user: Restarigi Pasvorton resolve_report: Solvitaj reporto sensitive_account: Marki tikla la aŭdovidaĵojn de via konto - silence_account: Silentigi konton - suspend_account: Suspendi la konton + silence_account: Silentigi Konton + suspend_account: Suspendi Konton unassigned_report: Malatribui Raporton unblock_email_account: Malbloki retpoŝtadreson - unsensitive_account: Malmarku la amaskomunikilojn en via konto kiel sentemaj + unsensitive_account: Malmarki Konton kiel Sentime Tikla unsilence_account: Malsilentigi konton unsuspend_account: Malsuspendi la konton update_announcement: Ĝisdatigi anoncon update_custom_emoji: Ĝisdatigi proprajn emoĝiojn update_domain_block: Ĝigdatigi domajnan blokadon update_ip_block: Krei IP-regulon - update_status: Ĝisdatigi afiŝon + update_report: Ĝisdatigo de Raporto + update_status: Ĝisdatigi Afiŝon update_user_role: Ĝisdatigi rolon actions: - approve_appeal_html: "%{name} aprobis apelacion kontraŭ moderiga decido de %{target}" - approve_user_html: "%{name} aprobis registriĝon de %{target}" + approve_appeal_html: "%{name} aprobis apelacion kontraŭ reguliga decido de %{target}" + approve_user_html: "%{name} aprobis la registriĝon de %{target}" assigned_to_self_report_html: "%{name} asignis signalon %{target} al si mem" + change_email_user_html: "%{name} ŝanĝis la retadreson de uzanto %{target}" change_role_user_html: "%{name} ŝanĝis rolon de %{target}" + confirm_user_html: "%{name} konfirmis retadreson de uzanto %{target}" create_account_warning_html: "%{name} sendis averton al %{target}" create_announcement_html: "%{name} kreis novan anoncon %{target}" - create_custom_emoji_html: "%{name} alŝutis novan emoĝion %{target}" + create_canonical_email_block_html: "%{name} blokis retpoŝtadreson per krado %{target}" + create_custom_emoji_html: "%{name} alŝutis novan bildosignon %{target}" create_domain_allow_html: "%{name} aldonis domajnon %{target} al la blanka listo" create_domain_block_html: "%{name} blokis domajnon %{target}" + create_email_domain_block_html: "%{name} blokis retpoŝtan domajnon %{target}" create_ip_block_html: "%{name} kreis regulon por IP %{target}" create_unavailable_domain_html: "%{name} ĉesis sendon al domajno %{target}" create_user_role_html: "%{name} kreis rolon de %{target}" demote_user_html: "%{name} degradis uzanton %{target}" destroy_announcement_html: "%{name} forigis anoncon %{target}" - destroy_custom_emoji_html: "%{name} forigis emoĝion %{target}" + destroy_canonical_email_block_html: "%{name} malblokis retpoŝtadreson per krado %{target}" + destroy_custom_emoji_html: "%{name} forigis la bildosignon %{target}" destroy_domain_allow_html: "%{name} forigis domajnon %{target} el la blanka listo" destroy_domain_block_html: "%{name} malblokis domajnon %{target}" + destroy_email_domain_block_html: "%{name} malblokis retpoŝtan domajnon %{target}" destroy_instance_html: "%{name} forigis domajnon %{target}" destroy_ip_block_html: "%{name} forigis regulon por IP %{target}" destroy_status_html: "%{name} forigis mesaĝojn de %{target}" destroy_unavailable_domain_html: "%{name} restartigis sendon al domajno %{target}" destroy_user_role_html: "%{name} forigis rolon de %{target}" disable_2fa_user_html: "%{name} malebligis dufaktoran aŭtentigon por uzanto %{target}" - disable_custom_emoji_html: "%{name} malebligis la emoĝion %{target}" + disable_custom_emoji_html: "%{name} malebligis la bildosignon %{target}" + disable_sign_in_token_auth_user_html: "%{name} malebligis la aŭtentigon de retpoŝta ĵetono por %{target}" disable_user_html: "%{name} malebligis ensaluton por uzanto %{target}" - enable_custom_emoji_html: "%{name} ebligis la emoĝion %{target}" + enable_custom_emoji_html: "%{name} ebligis la bildosignon %{target}" + enable_sign_in_token_auth_user_html: "%{name} ebligis la aŭtentigon de retpoŝta ĵetono por %{target}" enable_user_html: "%{name} ebligis ensaluton por uzanto %{target}" memorialize_account_html: "%{name} ŝanĝis la konton de %{target} al memora paĝo" promote_user_html: "%{name} plirangigis uzanton %{target}" @@ -254,6 +274,7 @@ eo: reject_user_html: "%{name} malakceptis registriĝon de %{target}" remove_avatar_user_html: "%{name} forigis la profilbildon de %{target}" reopen_report_html: "%{name} remalfermis signalon %{target}" + resend_user_html: "%{name} resendis konfirman retmesaĝon por %{target}" reset_password_user_html: "%{name} restarigis la pasvorton de la uzanto %{target}" resolve_report_html: "%{name} solvis raporton %{target}" sensitive_account_html: "%{name} markis audovidaĵon de %{target} kiel tiklan" @@ -265,9 +286,10 @@ eo: unsilence_account_html: "%{name} malfaris limon al konto de %{target}" unsuspend_account_html: "%{name} malsuspendis la konton de %{target}" update_announcement_html: "%{name} ĝisdatigis la anoncon %{target}" - update_custom_emoji_html: "%{name} ĝisdatigis la emoĝion %{target}" + update_custom_emoji_html: "%{name} ĝisdatigis la bildosignon %{target}" update_domain_block_html: "%{name} ĝisdatigis domajnblokon por %{target}" update_ip_block_html: "%{name} ŝanĝis regulon por IP %{target}" + update_report_html: "%{name} ĝisdatigis la raporton %{target}" update_status_html: "%{name} ĝisdatigis afiŝon de %{target}" update_user_role_html: "%{name} ŝanĝis la rolon %{target}" deleted_account: forigita konto @@ -277,17 +299,17 @@ eo: title: Ĵurnalo de revizo unavailable_instance: "(domajna nomo nedisponebla)" announcements: - destroyed_msg: Anonco sukcese forigita! + destroyed_msg: La anonco sukcese forigita! edit: title: Redakti anoncon - empty: Neniu anonco trovita. + empty: Neniu anonco troviĝas. live: Publikigita new: create: Krei anoncon title: Nova anonco publish: Publikigi published_msg: Anonco sukcese publikigita! - scheduled_for: Planigita je %{time} + scheduled_for: Planigota je %{time} scheduled_msg: Anonco planigita por publikigo! title: Anoncoj unpublish: Malpublikigi @@ -309,7 +331,7 @@ eo: disabled_msg: Emoĝio sukcese malebligita emoji: Emoĝio enable: Ebligi - enabled: Ebligita + enabled: Ŝaltita enabled_msg: Emoĝio sukcese ebligita image_hint: PNG aŭ GIF malpli granda ol %{size} list: Listo @@ -331,7 +353,7 @@ eo: dashboard: active_users: aktivaj uzantoj interactions: interago - media_storage: Konservo de plurmedioj + media_storage: Konservo de aŭdovidaĵoj new_users: novaj uzantoj opened_reports: raportoj malfermitaj pending_appeals_html: @@ -423,8 +445,11 @@ eo: create: Aldoni domajnon resolve: Solvi domajnon title: Bloki novan retpoŝtan domajnon + no_email_domain_block_selected: Neniuj domajn blokoj ŝanĝiĝis ĉar nenio estis elektita not_permitted: Ne permesita + resolved_dns_records_hint_html: La nomo de la domajno almontras la sekvajn MX-domajnojn, kiuj estas fine responsaj por akcepti retpoŝton. Blokas MX-domajnon blokus enskribadojn el retpoŝtadreso ajn, kiu uzas la saman MX-domajnon, eĉ se la videbla domajnnomo estas malsama. Gardemu ne bloki maĵorajn provizistojn de retpoŝto. resolved_through_html: Solvis tra %{domain} + title: Blokis retpoŝtajn domajnojn export_domain_allows: new: title: Importi domajnpermesojn @@ -449,6 +474,9 @@ eo: title: Rekomendoj de sekvado unsuppress: Regajni sekvorekomendon instances: + audit_log: + title: Novaj Protokoloj Pri Ekzamenoj + view_all: Vidu la tutan protokolon de revizio availability: description_html: one: Se sendo la domajno malsukcesis por %{count} dio, ne estas sendprovo plu escepte de la dojmano. @@ -470,7 +498,7 @@ eo: description_html: Vi povas difini enhavopolitikojn al la ĉiuj kontoj. limited_federation_mode_description_html: Vi povas elekti, ĉu permesi federacion kun tiu domajno. policies: - reject_media: Malakcepti plurmediojn + reject_media: Malakcepti la vidaŭdaĵojn reject_reports: Malakcepti raportojn silence: Kaŝu suspend: Suspendi @@ -516,6 +544,7 @@ eo: total_reported: Signaloj pri ili total_storage: Aŭdovidaj kunsendaĵoj totals_time_period_hint_html: Sumo montritas malsupre inkluzivas datumo ekde komenco. + unknown_instance: Nuntempe ne ekzistas registro pri ĉi tiu domajno sur ĉi tiu servilo. invites: deactivate_all: Malaktivigi ĉion filter: @@ -574,9 +603,13 @@ eo: resolve_description_html: Nenio okazotas al la raportita konto kaj la raporto fermotas. silence_description_html: La konto estos videbla al nur personoj kiu jam sekvis ĝin au permane serĉo ĝin, ege limigante ĝian atingon. Malfermi ciujn raportojn kontra ĉi tiun konton. suspend_description_html: La konto kaj ciuj ĝiaj enhavoj estos neatingebla kaj poŝte forigitas, kaj interagi per ĝi estos neebla. Malfermi ciujn raportojn kontra ĉi tiu konto. + actions_description_html: Elektu kiun agon fari por ripari ĉi tiun raporton. Se vi punus la raportitan uzanton, sciigon de retpoŝto sendos al ri, krom kiam la Spamo kategorio estas elektita. actions_description_remote_html: Decidu kiun klopodon por solvi ĉi tiun raporton. Ĉi tiu efikas kiel nur via servilo komuniki per ĉi tiu fora konto kaj trakti ĝian enhavon. actions_no_posts: Ĉi tiu raporto havas neniujn rilatajn afiŝojn por forigi add_to_report: Aldoni pli al raporto + already_suspended_badges: + local: Jam malakceptita sur ĉi tiu servilo + remote: Jam malakceptita sur ilia servilo are_you_sure: Ĉu vi certas? assign_to_self: Asigni al mi assigned: Asignita kontrolanto @@ -592,6 +625,7 @@ eo: created_at: Signalita delete_and_resolve: Forigi afiŝojn forwarded: Plusendita + forwarded_replies_explanation: Ĉi tiu raporto estas de malproksima uzanto kaj estas pri malproksima enhavo. Ĝi plusendis al vi ĉar la raportita enhavo estas rediraĵo je unu el viaj uzantoj. forwarded_to: Plusendita al %{domain} mark_as_resolved: Marki solvita mark_as_sensitive: Marki kiel tiklan @@ -635,6 +669,7 @@ eo: delete_data_html: Forigi profilon kaj enhavojn de @%{acct} post 30 tagoj se ili ne malsuspenditas dum la dauro preview_preamble_html: "@%{acct} akiros averton kun ĉi tiuj enhavoj:" record_strike_html: Rekordu admonon kontra @%{acct} por helpi vi plikontroli estontajn malobservojn de ĉi tiu konto + send_email_html: Sendu @%{acct} retpoŝto de averto warning_placeholder: Nedeviga aldona kialo por la moderigadago. target_origin: Origino de raportita konto title: Signaloj @@ -674,6 +709,7 @@ eo: manage_appeals: Administri Apelaciojn manage_appeals_description: Rajtigas al uzantoj kontroli apelaciojn kontraǔ kontrolaj agoj manage_blocks: Administri Blokojn + manage_blocks_description: Permesas uzantojn bloki provizistojn de retpoŝto kaj IP adresojn manage_custom_emojis: Administri propajn emoĝiojn manage_custom_emojis_description: Permesi uzantojn administri propajn emoĝiojn ĉe la servilo manage_federation: Administri Federacion @@ -691,6 +727,7 @@ eo: manage_taxonomies: Administri kategoriarojn manage_taxonomies_description: Permesi uzantojn kontroli popularan enhavon kaj ĝisdatigi kradvortopciojn manage_user_access: Administri uzantoaliron + manage_user_access_description: Permesas uzantojn invalidi la du-faktoran aŭtentigon de aliaj uzantoj, ŝanĝi siajn retpoŝtadresojn, kaj restarigi siajn pasvorton manage_users: Administri uzantojn manage_users_description: Permesi uzantaojn vidi detalojn de aliaj uzantoj kaj administri ilin manage_webhooks: Administri rethokojn @@ -725,6 +762,7 @@ eo: desc_html: Ĉi tio dependas de eksteraj hCaptcha-skriptoj, kiuj povas esti problemo pri sekureco kaj privateco. Ankaŭ, ĝi povas igi la registran procezon multe malpli alirebla por iuj homoj (precipe homoj kun handikapoj). Pro ĉi tiuj kialoj, bonvolu konsideri alternativajn rimedojn kiel registradon per aprobo aŭ per invito. title: Postuli novajn uzantojn solvi CAPTCHA por konfirmi sian konton content_retention: + danger_zone: Danĝera zono preamble: Regi kiel uzantogenerita enhavo konservitis en Mastodon. title: Enhavkonservo default_noindex: @@ -744,6 +782,7 @@ eo: disabled: Al neniu users: Al salutintaj lokaj uzantoj registrations: + moderation_recommandation: Bonvolu certigi, ke vi havas taŭgan kaj reaktivan moderigan teamon antaŭ ol vi malfermas registriĝojn al ĉiuj! preamble: Regi kiu povas krei konton ĉe via servilo. title: Registriĝoj registrations_mode: @@ -751,14 +790,19 @@ eo: approved: Bezonas aprobi por aliĝi none: Neniu povas aliĝi open: Iu povas aliĝi + warning_hint: Ni rekomendas uzi "Konsento neprigas por enskribiĝi" krom se vi memcertas, ke via teamo de moderistoj povas ellabori spamon kaj malignajn registradojn rapide. security: authorized_fetch: Devigi aŭtentigon de frataraj serviloj + authorized_fetch_hint: Neprigante aŭtentigon por federataj serviloj permesas pli striktan devigon de ambaŭ uzanto-nivelaj kaj servilo-nivelaj blokoj. Tamen, ĉi tiu uzas pli risurcojn, reduktas la ĝisiradon de viaj respondoj, kaj povas enkonduki aferoj, pri kongruoj. Plu, ĉi tiu ne preventos homojn el alporti viajn afiŝojn kaj uzantojn. + authorized_fetch_overridden_hint: Vi nuntempe ne povas ŝanĝi ĉi tiun agordon ĉar ĝi estas anstataŭita de mediovariablo. + federation_authentication: Devigado de la aŭtentigo de la federacio title: Agordoj de la servilo site_uploads: delete: Forigi elŝutitan dosieron destroyed_msg: Reteja alŝuto sukcese forigita! software_updates: critical_update: Kritika — bonvolu ĝisdatiĝi rapide + description: Ni rekomendas ĝisdatigadi vian instalaĵon de Mastodon por deutili la plej ĵusajn riparojn kaj trajtojn. Plu, estas kelkajfoje grava ĝisdati Mastodon rapide por eviti problemojn pri sekureco. Tial, Mastodon kontrolas por ĝisdataĵoj ĉiuj 30 minutoj, kaj sciigos vin laŭ viaj agordoj pri retpoŝtaj sciigoj. documentation_link: Lerni pli release_notes: Eldono-notoj title: Disponeblaj ĝisdatigoj @@ -766,6 +810,7 @@ eo: types: major: Ĉefa eldono minor: Neĉefa eldono + patch: Eldono de flikaĵo — korektoj de eraroj kaj facile apliki ŝanĝojn version: Versio statuses: account: Skribanto @@ -807,10 +852,20 @@ eo: system_checks: database_schema_check: message_html: Estas pritraktataj datumbazaj migradoj. Bonvolu ekzekuti ilin por certigi, ke la apliko kondutas kiel atendite + elasticsearch_health_red: + message_html: Elasticsearch peniko estas malsana (ruĝa statuso), trajtoj de serĉo malhaveblas + elasticsearch_health_yellow: + message_html: Peniko de Elasticsearch malsana (flava status), vi eble povas enketi la kialon + elasticsearch_index_mismatch: + message_html: Bildigoj de enhavtabelo de Elasticsearch posttempas. Bonvolu, rulu tootctl search deploy --only=%{value} elasticsearch_preset: action: Legi dokumentaron + message_html: Via peniko de Elasticsearch havas pli ol unu verticon, sed Mastodon ne estas agordita uzi ilin. elasticsearch_preset_single_node: action: Vidi dokumentadon + message_html: Via peniko de Elasticsearch havas nur unu verticon, ES_PRESET devus munti al single_node_cluster. + elasticsearch_reset_chewy: + message_html: Via enhavtabelo de la sistemo de Elasticsearch posttempas pro ŝanĝo de agordoj. Bonvolu, rulu tootctl search deploy --reset-chewy por ĝisdatigi ĝin. elasticsearch_running_check: message_html: Ne eblas konekti Elasticsearch. Bonvolu kontroli ke ĝi funkcias, aǔ malŝaltu plentekstan serĉon elasticsearch_version_check: @@ -822,11 +877,14 @@ eo: sidekiq_process_check: message_html: Neniu Sidekiq-procezo por la %{value} vico software_version_check: + action: Vidi disponeblajn ĝisdatigojn message_html: Mastodon-ĝisdatigo disponeblas. software_version_critical_check: action: Vidi disponeblajn ĝisdatigojn + message_html: Grava ĝisdatigo de Mastodon disponeblas, bonvolu ĝisdatigi kiel eble plej rapide. software_version_patch_check: action: Vidi disponeblajn ĝisdatigojn + message_html: Ĝisdataĵo de Mastodon pri cimriparo haveblas. upload_check_privacy_error: action: Klaku ĉi tie por pliaj informoj message_html: "Via retservilo estas misagordita. La privateco de viaj uzantoj estas en risko." @@ -835,10 +893,20 @@ eo: message_html: "Via objektostokado estas misagordita. La privateco de viaj uzantoj estas en risko." tags: moderation: + not_trendable: Ne modebla + not_usable: Ne uzebla + pending_review: Pendata superrigardo + review_requested: Revizio petita + reviewed: Reviziita title: Stato + trendable: Modebla + unreviewed: Nereviziita + usable: Uzebla name: Nomo newest: Plej novaj oldest: Plej malnovaj + open: Vidu publike + reset: Restartigi review: La statuso de la recenzo search: Serĉi title: Kradvortoj @@ -854,7 +922,9 @@ eo: allow: Permesi ligilon allow_provider: Permesi publikiganto confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn ligilojn? + confirm_allow_provider: Ĉu vi certas, ke vi volas permesi elektitajn provizantojn? confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn ligilojn? + confirm_disallow_provider: Ĉu vi certas, ke vi volas malpermesi elektitajn provizantojn? description_html: Ĉioj estas ligiloj kiuj nun diskonitajs multe de kontoj kiujn via servilo vidas. Ligiloj ne montritas publike se vi ne aprobis la publikiganton. disallow: Malpermesi ligilon disallow_provider: Malpermesi publikiganton @@ -878,7 +948,9 @@ eo: statuses: allow: Permesi afiŝon allow_account: Permesi aŭtoron + confirm_allow: Ĉu vi certas, ke vi volas permesi elektitajn statusojn? confirm_allow_account: Ĉu vi certas, ke vi volas permesi elektitajn kontojn? + confirm_disallow: Ĉu vi certas, ke vi volas malpermesi elektitajn statusojn? confirm_disallow_account: Ĉu vi certas, ke vi volas malpermesi elektitajn kontojn? description_html: Oni multe diskonigas kaj stelumas ĉi tiujn mesaĝojn nuntempe laŭ via servilo. Tio povas helpi novajn kaj revenantajn uzantojn trovi pli da homoj por sekvi. Mesaĝo estas montrita publike nur se vi aprobis la aŭtoron kaj se la aŭtoro aprobis ke ties konto estu proponita al aliaj. Vi ankaŭ povas permesi aŭ malakcepti specifajn mesaĝojn. disallow: Malpermesi afiŝon @@ -912,12 +984,14 @@ eo: used_by_over_week: one: Uzita de 1 persono ekde lasta semajno other: Uzita de %{count} personoj ekde lasta semajno + title: Rekomendoj kaj Tendencoj trending: Popularaĵoj warning_presets: add_new: Aldoni novan delete: Forigi edit_preset: Redakti avertan antaŭagordon empty: Vi ankoraŭ ne difinis iun ajn antaŭagordon de averto. + title: Antaŭdifinoj de averto webhooks: add_new: Aldoni finpunkton delete: Forigi @@ -939,6 +1013,9 @@ eo: title: Rethokoj webhook: Rethoko admin_mailer: + auto_close_registrations: + body: Pro seneco de ĵusaj aktivaĵoj de moderistoj, enskribadojn en %{instance} aŭtomate ŝanĝis al mana superrigardo, por eviti %{instance} estas uzita por eblaj fiuloj. Vi povas reŝanĝi ĝin al malfermaj enskribadoj iam ajn. + subject: Enskribadoj por %{instance} aŭtomate ŝanĝis al mana konsento new_appeal: actions: delete_statuses: por forigi iliajn afiŝojn @@ -951,6 +1028,9 @@ eo: body: "%{target} apelacias kontroldecido de %{action_taken_by} de %{date}, kiu estas %{type}. Ĝi skribis:" next_steps: Vi povas aprobi apelacion por malfari kontroldecidon au ignori. subject: "%{username} apelacias kontroldecidon ĉe %{instance}" + new_critical_software_updates: + body: Novaj gravaj versioj de Mastodon estis publikigitaj, vi eble volas ĝisdatigi kiel eble plej baldaŭ! + subject: Sojlaj ĝisdataĵoj de Mastodon haveblas por %{instance}! new_pending_account: body: La detaloj de la nova konto estas ĉi-sube. Vi povas akcepti aŭ malakcepti tiun aliĝilon. subject: Nova konto atendas por recenzo en %{instance} (%{username}) @@ -960,6 +1040,7 @@ eo: subject: Nova signalo por %{instance} (#%{id}) new_software_updates: body: Novaj versioj de Mastodon estis publikigitaj, vi eble volas ĝisdatigi! + subject: Novaj versioj de Mastodon disponeblas por %{instance}! new_trends: body: 'La eroj bezonas kontrolon antau ol ili povas montritas publike:' new_trending_links: @@ -1007,10 +1088,15 @@ eo: apply_for_account: Peti konton captcha_confirmation: help_html: Se vi havas problemojn solvi la CAPTCHA, vi povas kontakti nin per %{email} kaj ni povas helpi vin. + hint_html: Nur unu plia afero! Ni devas konfirmi, ke vi estas homo (tio estas por ke ni povu konservi la spamon ekstere!). Solvu la CAPTCHA sube kaj alklaku "Daŭrigu". title: Sekureckontrolo confirmations: + awaiting_review: Via retpoŝtadreso estas konfirmita! La teamo de %{domain} nun superrigardas vian enskribiĝon. Vi ricevos retpoŝton, se ili aprobos vian konton! + awaiting_review_title: Via registriĝo estas reviziita clicking_this_link: alklakante ĉi tiun ligilon login_link: ensaluti + proceed_to_login_html: Vi nun povas iri al %{login_link}. + redirect_to_app_html: Vi devus sendigi al la %{app_name} aplikaĵo. Se tion ne okazis, provu %{clicking_this_link} aŭ mane reiras al la aplikaĵo. registration_complete: Via registriĝo sur %{domain} nun finiĝis! welcome_title: Bonvenon, %{name}! wrong_email_hint: Se tiu retadreso ne estas ĝusta, vi povas ŝanĝi ĝin en kontagordoj. @@ -1056,25 +1142,35 @@ eo: security: Sekureco set_new_password: Elekti novan pasvorton setup: + email_below_hint_html: Kontrolu vian spam-dosierujon aŭ petu novan. Se necese, vi povas korekti vian retadreson. + email_settings_hint_html: Enklaku la ligilon, ke ni sendis al vi por kontroli %{email}. Ni estos tien. link_not_received: Ĉu vi ne ricevis ligilon? + new_confirmation_instructions_sent: Vi ricevos novan retpoŝton kun la konfirma ligilo post kelkaj minutoj! title: Kontrolu vian retpoŝta enirkesto sign_in: preamble_html: Ensalutu per via detaloj de %{domain}. Se via konto gastigantigas sur malsama servilo, vi ne povas ensaluti ĉi tie. title: Saluti en %{domain} sign_up: + manual_review: Enskriboj en %{domain} havas manan superrigardon, farita de niaj moderistoj. Por helpi nin por procezi vian enskribon, skribu ion pri vi mem, kaj kial vi volas konton en %{domain}. preamble: Per konto ĉe ĉi tiu Mastodon-servilo, vi povas sekvi ajn personojn en la reto. title: Ni pretigu vin ĉe %{domain}. status: account_status: Statuso de la konto + confirming: Atendante ke retpoŝta konfirmo estos kompletigita. functional: Via konto estas tute funkcia. + pending: Via apliko estas superrigardata de niaj teamo. Ĉi tiu povas bezoni iom da tempo. Vi ricevos retpoŝton, se via apliko estas konsentita. redirecting_to: Via konto estas neaktiva ĉar ĝi nun alidirektas al %{acct}. + self_destruct: Pro %{domain} ekfermas, vi povos nur havi malvastan atingon al via konto. view_strikes: Vidi antauaj admonoj kontra via konto too_fast: Formularo sendita tro rapide, klopodu denove. use_security_key: Uzi sekurecan ŝlosilon author_attribution: example_title: Ekzempla teksto + hint_html: Ĉu vi skribas novaĵojn aŭ blogartikolojn ekster Mastodon? Kontrolu kiel vi estas kreditita kiam ili estas kunhavataj ĉe Mastodon. + instructions: 'Certigu, ke ĉi tiu kodo estas en la HTML de via artikolo:' more_from_html: Pli de %{name} s_blog: Blogo de %{name} + then_instructions: Poste, aldonu la domajnan nomon de la publikigado en la suba kampo. title: Atribuo de aŭtoro challenge: confirm: Daŭrigi @@ -1112,6 +1208,9 @@ eo: before: 'Antau ol dauri, legu ĉi tiujn notojn zorgeme:' caches: Enhavo kiu kaŝmemorigitas de aliaj serviloj eble restas data_removal: Viaj afiŝoj kaj aliaj informoj estos forigita por eterne + email_change_html: Vi povas ŝanĝi vian retadreson sen forigi vian konton + email_contact_html: Se ĝi ankoraŭ ne alvenas, vi povas retpoŝti al %{email} por helpo + email_reconfirmation_html: Se vi ne ricevas la konfirmretpoŝton, vi povas denove peti irreversible: Vi ne povas regajni au reaktivigi vian konton more_details_html: Por pli da detaloj, vidi la privatecan politikon. username_available: Via uzantnomo iĝos denove disponebla @@ -1148,6 +1247,7 @@ eo: your_appeal_rejected: Via apelacio malakceptitas edit_profile: basic_information: Baza informo + hint_html: "Personigi, kion homoj vidi en via publika profilo kaj apud viaj afiŝoj. Aliaj homoj estas pli probable resekvi vin kaj interagi kun vi se vi havus finigitan profilon kaj profilan foton." other: Alia errors: '400': La peto kiun vi sendis estas nevalida au malformas. @@ -1167,8 +1267,8 @@ eo: Por uzi la retan aplikaĵon de Mastodon, bonvolu ebligi JavaScript. Alimaniere, provu unu el la operaciumaj aplikaĵoj por Mastodon por via platformo. existing_username_validator: - not_found: Ne povas trovi lokaj uzanto kun tiu uzantnomo - not_found_multiple: Ne povas trovi %{usernames} + not_found: ne povas trovi lokaj uzanto kun tiu uzantnomo + not_found_multiple: ne povas trovi %{usernames} exports: archive_takeout: date: Dato @@ -1270,15 +1370,34 @@ eo: merge_long: Konservi ekzistajn registrojn kaj aldoni novajn overwrite: Anstataŭigi overwrite_long: Anstataŭigi la nunajn registrojn per la novaj + overwrite_preambles: + blocking_html: Vi estas anstataŭonta vian blokliston per ĝis %{total_items} kontoj de %{filename}. + bookmarks_html: Vi estas anstataŭonta viajn legosignojn per ĝis %{total_items} afiŝoj de %{filename}. + domain_blocking_html: Vi estas anstataŭonta vian domajnan blokliston per ĝis %{total_items} domajnoj de %{filename}. + following_html: Vi estas sekvonta ĝis %{total_items} kontoj de %{filename} kaj ĉesos sekvi iun alian. + lists_html: Vi estas anstataŭonta viajn listojn per enhavo de %{filename}. Ĝis %{total_items} kontoj estos aldonitaj al novaj listoj. + muting_html: Vi estas anstataŭonta viajn listojn de silentigitaj kontoj per ĝis%{total_items} kontoj de %{filename}. + preambles: + blocking_html: Vi estas blokonta ĝis %{total_items} kontoj de %{filename}. + bookmarks_html: Vi estas aldononta ĝis %{total_items} afiŝojn de %{filename} al viaj legosignoj. + domain_blocking_html: Vi estas blokonta ĝis %{total_items} domajnoj de %{filename}. + following_html: Vi estas sekvonta ĝis %{total_items} kontoj de %{filename}. + lists_html: Vi estas aldononta ĝis %{total_items} kontojn de %{filename} al viaj listoj. Novaj listoj estos kreitaj se ne estas listo por aldoni. + muting_html: Vi estas silentonta ĝis %{total_items} kontoj de %{filename}. preface: Vi povas importi datumojn, kiujn vi eksportis el alia servilo, kiel liston de homoj, kiujn vi sekvas aŭ blokas. recent_imports: Lastatempaj importoj states: finished: Finita in_progress: Farata + scheduled: Planitaj unconfirmed: Nekonfirmita status: Stato success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite + time_started: Komencis je titles: + blocking: Enportante blokitajn kontojn + bookmarks: Enportante legosignojn + domain_blocking: Enportante blokitajn domajnojn following: Importado de sekvaj kontoj lists: Importi listojn muting: Importado de silentigitaj kontoj @@ -1324,6 +1443,7 @@ eo: authentication_methods: otp: 2-faktora autentigprogramaro password: pasvorto + sign_in_token: retpoŝta sekureca kodo webauthn: sekurecaj ŝlosiloj description_html: Se vi vidas nerekonitan agon, eble ŝanĝu vian pasvorton. empty: Neniu autentighistorio disponebla @@ -1334,11 +1454,22 @@ eo: unsubscribe: action: Jes, malabonu complete: Malabonita + confirmation_html: Ĉu vi certas, ke vi volas malaboni je ricevi %{type} por Mastodon ĉe %{domain} al via retpoŝto ĉe %{email}? Vi ĉiam povas reaboni de viaj retpoŝtaj sciigaj agordoj. + emails: + notification_emails: + favourite: sciigoj retpoŝtaj de ŝatataj + follow: sciigoj retpoŝtaj de sekvoj + follow_request: retpoŝtajn petoj de sekvado + mention: sciigoj retpoŝtaj de mencioj + reblog: sciigoj retpoŝtaj de diskonigoj + resubscribe_html: Se vi malabonis erare, vi povas reaboni de viaj retpoŝtaj sciigaj agordoj. + success_html: Vi ne plu ricevos %{type} por Mastodon ĉe %{domain} al via retpoŝto ĉe %{email}. title: Malaboni media_attachments: validations: images_and_video: Aldoni videon al mesaĝo, kiu jam havas bildojn ne eblas - not_ready: Ne povas aldoni dosieron kiu ne finas procezitis. + not_found: Dosiero %{ids} ne trovis aŭ jam alteniĝis al alia afiŝo + not_ready: Ne povas aldoni dosieron kiu ne finis procezitis. too_many: Aldoni pli ol 4 dosierojn ne eblas migrations: acct: Movigita al @@ -1414,6 +1545,8 @@ eo: update: subject: "%{name} redaktis afiŝon" notifications: + administration_emails: Sciigoj retpoŝtaj de administacio + email_events: Eventoj por retpoŝtaj sciigoj email_events_hint: 'Elekti la eventojn pri kioj vi volas ricevi sciigojn:' number: human: @@ -1470,6 +1603,9 @@ eo: errors: limit_reached: Limito de malsamaj reagoj atinginta unrecognized_emoji: ne estas rekonita emoĝio + redirects: + prompt: Se vi fidas ĉi tiun ligon, alklaku ĝin por daŭrigi. + title: Vi foriras %{instance}. relationships: activity: Konta aktiveco confirm_follow_selected_followers: Ĉu vi certas ke vi volas sekvi la elektitajn sekvantojn? @@ -1564,19 +1700,30 @@ eo: delete: Konta forigo development: Evoluigado edit_profile: Redakti profilon + export: Eksporti featured_tags: Elstarigitaj kradvortoj import: Enporti import_and_export: Importi kaj eksporti migrate: Konta migrado + notifications: Retpoŝtaj sciigoj preferences: Preferoj - profile: Profilo + profile: Publika profilo relationships: Sekvatoj kaj sekvantoj + severed_relationships: Finitaj rilatoj statuses_cleanup: Automata mesaĝforigo strikes: Kontroladmonoj two_factor_authentication: Dufaktora aŭtentigo webauthn_authentication: Sekurecaj ŝlosiloj severed_relationships: + download: Elŝuti (%{count}) + event_type: + account_suspension: Suspendado de konto (%{target_name}) + domain_block: Suspendado de servilo (%{target_name}) + user_domain_block: Vi blokis %{target_name} lost_followers: Perditaj sekvantoj + lost_follows: Perditaj sekvantoj + preamble: Vi eble perdos sekvojn kaj sekvantojn, kiam vi blockus domajnon aŭ kiam viaj moderantoj elektus suspendi malproksiman servilon. Kiam tio okazas, vi povus elŝulti registrojn de finitaj rilatoj, por inspektiĝi kaj eble enporti en alia servilo. + purged: Informo pri ĉi tiu servilo foriĝis de la administracio de via servilo. type: Evento statuses: attached: @@ -1660,11 +1807,13 @@ eo: contrast: Mastodon (Forta kontrasto) default: Mastodon (Malhela) mastodon-light: Mastodon (Hela) + system: Aŭtomata (uzu sisteman temon) time: formats: default: "%Y.%b.%d, %H:%M" month: "%b %Y" time: "%H:%M" + with_time_zone: "%b %d, %Y, %H:%M %Z" translation: errors: quota_exceeded: La tutservila uzkvoto por la tradukservo estas superita. @@ -1689,15 +1838,24 @@ eo: action: Konto-agordoj explanation: La apelacio de la admono kontra via konto je %{strike_date} pri sendodato %{appeal_date} aprobitas. subject: Via apelacio de %{date} aprobitas + subtitle: Via konto estas denove bone. title: Apelacio estis aprobita appeal_rejected: explanation: La apelacio je %{strike_date} pri dato %{appeal_date} malakceptitas. subject: Via apelacio de %{date} estis malaprobita + subtitle: Via revizio negiĝis. title: Apelacio estis malaprobita backup_ready: + explanation: Vi petis por tuta rezervo de via Mastodon-a konto. extra: Estas nun preta por elŝuto! subject: Via arkivo estas preta por elŝutado title: Arkiva elŝuto + failed_2fa: + details: 'Jen detaloj de la provaĵo de ensaluti:' + explanation: Iu provis ensaluti al via konto sed provizis nevalidan duan aŭtentikigfaktoron. + further_actions_html: Se ĉi tio ne estis vi, ni rekomendas ke vi %{action} tuj ĉar ĝi povas esti endanĝerigita. + subject: Malsukceso dum la dua aŭtentikigfaktoro + title: Du-faktora aŭtentigo malsukcesis suspicious_sign_in: change_password: ŝanĝi vian pasvorton details: 'Ĉi-sube estas detaloj pri la saluto:' @@ -1737,18 +1895,43 @@ eo: silence: Konto limigita suspend: Konto suspendita welcome: + apps_android_action: Akiru ĝin ĉe Google Play + apps_ios_action: Elŝutu ĉe la App Store apps_step: Elŝutu niajn oficialajn aplikaĵojn. apps_title: Aplikaĵoj de Mastodon + checklist_subtitle: 'Nin eku vin en ĉi tiu nova socia rando:' + checklist_title: Bonvenan Markolisto edit_profile_action: Agordi + edit_profile_step: Plibonigi viajn interagojn per havas finitan profilon. edit_profile_title: Agordi vian profilon explanation: Jen kelkaj konsiloj por helpi vin komenci feature_action: Lerni pli + feature_audience: Mastodon provizas vin per unika eblo por administri vian sekvantaron sen perantoj. Mastodon disponigita en via propra infrastrukturo ebligas al vi sekvi kaj esti sekvita de alia ajn Mastodon-servilo kaj estas tute sub via kontrolo nure. + feature_audience_title: Konstruu vian spektantaron memfide + feature_control: Vi scias plej bone, kion vi volas vidi en via hejmtemplinio. Neniaj algoritmoj nek reklamoj por malŝpari vian tempon. Sekvu iun ajn trans Mastodon-servilo ajn el unu konto kaj ricevu iliajn afiŝojn kronologie, kaj igu vian ejon de reto iom pli kiel vi. + feature_control_title: Havu la kontrolon de via propra templinio + feature_creativity: Mastodon subtenas aŭdaj, videajn kaj bildajn afiŝojn, priskribojn alireblecajn, enketojn, avertojn pri enhavo, animitajn bildetojn, personajn emoĝiojn, stucan kontrolon de bildetoj, kaj pli, por helpi al vi esprimi vin rete. Ĉu vi publikigas vian arton, vian muzikon, aŭ viajn podkastojn, Mastodon estas por vi. + feature_creativity_title: Senkompara kreemeco + feature_moderation: Mastodon denove donas al vi decidpovon. Ĉiu servilo kreas siajn proprajn regulojn kaj gvidliniojn, kiuj estas devigitaj loke kaj ne desupre kiel en firmaaj sociaj retejoj, igante ĝin la plej agordebla respondante al la bezonoj de malsamaj aroj de homoj. Aliĝu servilon kun la reguloj, kun kiuj vi konsentas, aŭ gastigu vian propran. + feature_moderation_title: Moderante kiel ĝi devus esti follow_action: Sekvi + follow_step: Sekvi interesajn homojn estas pri kio Mastodon temas. + follow_title: Personigu vian hejmtemplinion + follows_subtitle: Sekvu konatajn kontojn + follows_title: Kiun sekvi + follows_view_more: Rigardu pli da homoj por sekvi + hashtags_recent_count: + one: "%{people} homo en la pasintaj 2 tagoj" + other: "%{people} homoj en la pasintaj 2 tagoj" + hashtags_subtitle: Esploru kio estas tendenco ekde la pasintaj 2 tagoj hashtags_title: Popularaj kradvortoj hashtags_view_more: Vidi pli da popularaj kradvortoj + post_action: Redakti post_step: Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj. post_title: Faru vian unuan afiŝon + share_action: Kundividi share_step: Sciigu viajn amikojn kiel trovi vin sur Mastodon. + share_title: Kunhavigu vian Mastodon-profilon sign_in_action: Ensaluti subject: Bonvenon en Mastodon title: Bonvenon, %{name}! @@ -1758,6 +1941,7 @@ eo: invalid_otp_token: Nevalida kodo de dufaktora aŭtentigo otp_lost_help_html: Se vi perdas aliron al ambaŭ, vi povas kontakti %{email} rate_limited: Estas tro multaj aŭtentigaj provoj, reprovu poste. + seamless_external_login: Vi estas ensalutinta per ekstera servo, do pasvortaj kaj retpoŝtaj agordoj ne estas disponeblaj. signed_in_as: 'Salutinta kiel:' verification: extra_instructions_html: Konsilo: La ligilo en via retejo povas esti nevidebla. La grava parto estas rel="me", kiu evitas identoŝtelon en retejoj kun enhavo generita de uzantoj. Vi povas eĉ uzi link-etikedon en la header de la paĝo anstataŭ a, sed la HTML devas esti atingebla sen plenumado de JavaScript. @@ -1766,6 +1950,7 @@ eo: instructions_html: Kopiu kaj algluu la jenan kodon en la HTML de via retejo. Poste aldonu la adreson de via retejo en unu el la kromaj kampoj de via profilo en la langeto "Redakti profilon" kaj konservu la ŝanĝojn. verification: Kontrolo verified_links: Via kontrolitaj ligiloj + website_verification: Reteja konfirmo webauthn_credentials: add: Aldoni novan sekurecan ŝlosilon create: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 49b8f288fa..b3fe023417 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -21,6 +21,7 @@ es-AR: one: Mensaje other: Mensajes posts_tab_heading: Mensajes + self_follow_error: No está permitido seguir tu propia cuenta admin: account_actions: action: Ejecutar acción @@ -1165,9 +1166,11 @@ es-AR: use_security_key: Usar la llave de seguridad author_attribution: example_title: Texto de ejemplo - hint_html: Controlá cómo se te da crédito cuando los enlaces son compartidos en Mastodon. + hint_html: "¿Escribís artículos de noticias o de blog fuera de Mastodon? Controlá cómo se te acredita cuando se comparten en Mastodon." + instructions: 'Asegurate de que este código está en el HTML de tu artículo:' more_from_html: Más de %{name} s_blog: Blog de %{name} + then_instructions: Luego, agregá el nombre de dominio de la publicación en el campo de abajo. title: Atribución del autor challenge: confirm: Continuar diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 0f4c8452c0..5ed74a1c4b 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -18,9 +18,10 @@ es-MX: pin_errors: following: Debes estar siguiendo a la persona a la que quieres aprobar posts: - one: Toot - other: Toots - posts_tab_heading: Toots + one: Publicación + other: Publicaciones + posts_tab_heading: Publicaciones + self_follow_error: No se permite seguir tu propia cuenta admin: account_actions: action: Realizar acción @@ -56,18 +57,18 @@ es-MX: confirming: Confirmando custom: Personalizado delete: Eliminar datos - deleted: Borrado + deleted: Eliminado demote: Degradar destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Deshabilitar disable_sign_in_token_auth: Deshabilitar la autenticación por token de correo electrónico disable_two_factor_authentication: Desactivar autenticación de dos factores disabled: Deshabilitada - display_name: Nombre + display_name: Nombre para mostrar domain: Dominio edit: Editar - email: E-mail - email_status: E-mail Status + email: Correo electrónico + email_status: Estado del correo electrónico enable: Habilitar enable_sign_in_token_auth: Habilitar la autenticación por token de correo electrónico enabled: Habilitada @@ -85,8 +86,8 @@ es-MX: local: Local remote: Remoto title: Localización - login_status: Estado del login - media_attachments: Multimedia + login_status: Estado de la sesión + media_attachments: Archivos multimedia memorialize: Convertir en memorial memorialized: Cuenta conmemorativa memorialized_msg: "%{username} se convirtió con éxito en una cuenta conmemorativa" @@ -148,7 +149,7 @@ es-MX: targeted_reports: Reportes hechos sobre esta cuenta silence: Silenciar silenced: Silenciado - statuses: Estados + statuses: Publicaciones strikes: Amonestaciones previas subscribe: Suscribir suspend: Suspender @@ -180,24 +181,24 @@ es-MX: confirm_user: Confirmar Usuario create_account_warning: Crear Advertencia create_announcement: Crear Anuncio - create_canonical_email_block: Crear Bloqueo de Correo Electrónico + create_canonical_email_block: Crear bloqueo de correo electrónico create_custom_emoji: Crear Emoji Personalizado create_domain_allow: Crear Permiso de Dominio create_domain_block: Crear Bloqueo de Dominio - create_email_domain_block: Crear Bloqueo de Dominio de Correo Electrónico + create_email_domain_block: Crear bloqueo de dominio de correo electrónico create_ip_block: Crear regla IP create_unavailable_domain: Crear Dominio No Disponible create_user_role: Crear rol demote_user: Degradar Usuario destroy_announcement: Eliminar Anuncio - destroy_canonical_email_block: Eliminar Bloqueo de Correo Electrónico + destroy_canonical_email_block: Eliminar bloqueo de correo electrónico destroy_custom_emoji: Eliminar Emoji Personalizado destroy_domain_allow: Eliminar Permiso de Dominio destroy_domain_block: Eliminar Bloqueo de Dominio - destroy_email_domain_block: Eliminar Bloqueo de Dominio de Correo Electrónico + destroy_email_domain_block: Eliminar bloqueo de dominio de correo electrónico destroy_instance: Purgar dominio destroy_ip_block: Eliminar regla IP - destroy_status: Eliminar Estado + destroy_status: Eliminar Publicación destroy_unavailable_domain: Eliminar Dominio No Disponible destroy_user_role: Destruir Rol disable_2fa_user: Deshabilitar 2FA @@ -229,7 +230,7 @@ es-MX: update_domain_block: Actualizar el Bloqueo de Dominio update_ip_block: Actualizar regla IP update_report: Actualizar informe - update_status: Actualizar Estado + update_status: Actualizar Publicación update_user_role: Actualizar Rol actions: approve_appeal_html: "%{name} aprobó la solicitud de moderación de %{target}" @@ -240,7 +241,7 @@ es-MX: confirm_user_html: "%{name} confirmó la dirección de correo electrónico del usuario %{target}" create_account_warning_html: "%{name} envió una advertencia a %{target}" create_announcement_html: "%{name} ha creado un nuevo anuncio %{target}" - create_canonical_email_block_html: "%{name} bloqueó el correo electrónico con el hash %{target}" + create_canonical_email_block_html: "%{name} ha bloqueado el correo electrónico con el hash %{target}" create_custom_emoji_html: "%{name} subió un nuevo emoji %{target}" create_domain_allow_html: "%{name} permitió la federación con el dominio %{target}" create_domain_block_html: "%{name} bloqueó el dominio %{target}" @@ -250,22 +251,22 @@ es-MX: create_user_role_html: "%{name} creó el rol %{target}" demote_user_html: "%{name} degradó al usuario %{target}" destroy_announcement_html: "%{name} eliminó el anuncio %{target}" - destroy_canonical_email_block_html: "%{name} desbloqueó el correo electrónico con el hash %{target}" + destroy_canonical_email_block_html: "%{name} ha desbloqueado el correo electrónico con el hash %{target}" destroy_custom_emoji_html: "%{name} eliminó el emoji %{target}" destroy_domain_allow_html: "%{name} bloqueó la federación con el dominio %{target}" destroy_domain_block_html: "%{name} desbloqueó el dominio %{target}" destroy_email_domain_block_html: "%{name} desbloqueó el dominio de correo electrónico %{target}" destroy_instance_html: "%{name} purgó el dominio %{target}" destroy_ip_block_html: "%{name} eliminó una regla para la IP %{target}" - destroy_status_html: "%{name} eliminó el estado por %{target}" + destroy_status_html: "%{name} eliminó la publicación por %{target}" destroy_unavailable_domain_html: "%{name} reanudó las entregas al dominio %{target}" destroy_user_role_html: "%{name} eliminó el rol %{target}" disable_2fa_user_html: "%{name} desactivó el requisito de dos factores para el usuario %{target}" disable_custom_emoji_html: "%{name} desactivó el emoji %{target}" - disable_sign_in_token_auth_user_html: "%{name} ha deshabilitado la autenticación por token de correo electrónico para %{target}" + disable_sign_in_token_auth_user_html: "%{name} desactivó la autenticación por token de correo electrónico para %{target}" disable_user_html: "%{name} deshabilitó el inicio de sesión para el usuario %{target}" enable_custom_emoji_html: "%{name} activó el emoji %{target}" - enable_sign_in_token_auth_user_html: "%{name} ha habilitado la autenticación por token de correo electrónico para %{target}" + enable_sign_in_token_auth_user_html: "%{name} activó autenticación por token de correo electrónico para %{target}" enable_user_html: "%{name} habilitó el inicio de sesión para el usuario %{target}" memorialize_account_html: "%{name} convirtió la cuenta de %{target} en una página in memoriam" promote_user_html: "%{name} promoción al usuario %{target}" @@ -273,7 +274,7 @@ es-MX: reject_user_html: "%{name} rechazó el registro de %{target}" remove_avatar_user_html: "%{name} eliminó el avatar de %{target}" reopen_report_html: "%{name} reabrió el informe %{target}" - resend_user_html: "%{name} ha reenviado el correo de confirmación para %{target}" + resend_user_html: "%{name} reenvió correo electrónico de confirmación para %{target}" reset_password_user_html: "%{name} reinició la contraseña del usuario %{target}" resolve_report_html: "%{name} resolvió el informe %{target}" sensitive_account_html: "%{name} marcó la multimedia de %{target} como sensible" @@ -289,7 +290,7 @@ es-MX: update_domain_block_html: "%{name} actualizó el bloqueo de dominio para %{target}" update_ip_block_html: "%{name} cambió la regla para la IP %{target}" update_report_html: "%{name} actualizó el informe %{target}" - update_status_html: "%{name} actualizó el estado de %{target}" + update_status_html: "%{name} actualizó la publicación de %{target}" update_user_role_html: "%{name} cambió el rol %{target}" deleted_account: cuenta eliminada empty: No se encontraron registros. @@ -572,11 +573,11 @@ es-MX: relays: add_new: Añadir un nuevo relés delete: Borrar - description_html: Un relés de federation es un servidor intermedio que intercambia grandes volúmenes de toots públicos entre servidores que se suscriben y publican en él. Puede ayudar a servidores pequeños y medianos a descubir contenido del fediverso, que de otra manera requeriría que los usuarios locales siguiesen manialmente a personas de servidores remotos. + description_html: Un relés de federación es un servidor intermedio que intercambia grandes volúmenes de publicaciones públicas entre servidores que se suscriben y publican en él. Puede ayudar a servidores pequeños y medianos a descubrir contenido del fediverso, que de otra manera requeriría que los usuarios locales siguiesen manualmente a personas de servidores remotos. disable: Deshabilitar disabled: Deshabilitado enable: Hablitar - enable_hint: Una vez conectado, tu servidor se suscribirá a todos los toots públicos de este relés, y comenzará a enviar los toots públicos de este servidor hacia él. + enable_hint: Una vez conectado, tu servidor se suscribirá a todas las publicaciones públicas de este relé, y comenzará a enviar las publicaciones públicas de este servidor hacia él. enabled: Habilitado inbox_url: URL del relés pending: Esperando la aprobación del relés @@ -596,15 +597,15 @@ es-MX: action_log: Registro de auditoría action_taken_by: Acción tomada por actions: - delete_description_html: Los mensajes denunciados serán eliminados y se registrará una amonestación para ayudarte a escalar en futuras infracciones por la misma cuenta. - mark_as_sensitive_description_html: Los archivos multimedia en los mensajes informados se marcarán como sensibles y se aplicará una amonestación para ayudarte a escalar las futuras infracciones de la misma cuenta. + delete_description_html: Las publicaciones denunciadas serán eliminadas y se registrará una amonestación para ayudarte a escalar en futuras infracciones por la misma cuenta. + mark_as_sensitive_description_html: Los archivos multimedia en las publicaciones reportadas se marcarán como sensibles y se aplicará una amonestación para ayudarte a escalar las futuras infracciones de la misma cuenta. other_description_html: Ver más opciones para controlar el comportamiento de la cuenta y personalizar la comunicación de la cuenta reportada. resolve_description_html: No se tomarán medidas contra la cuenta denunciada, no se registrará la amonestación, y se cerrará el informe. silence_description_html: La cuenta será visible sólo para aquellos que ya la sigan o la busquen manualmente, limitando severamente su visibilidad. Siempre puede ser revertido. Cierra todos los reportes contra esta cuenta. suspend_description_html: La cuenta y todos sus contenidos serán inaccesibles y eventualmente eliminados, e interactuar con ella será imposible. Reversible durante 30 días. Cierra todos los reportes contra esta cuenta. actions_description_html: Decide qué medidas tomar para resolver esta denuncia. Si tomas una acción punitiva contra la cuenta denunciada, se le enviará a dicha cuenta una notificación por correo electrónico, excepto cuando se seleccione la categoría Spam. actions_description_remote_html: Decide qué medidas tomar para resolver este reporte. Esto solo afectará a la forma en que tu servidor se comunica con esta cuenta remota y gestiona su contenido. - actions_no_posts: Este informe no tiene ningún mensaje asociado para eliminar + actions_no_posts: Este informe no tiene ninguna publicación asociada para eliminar add_to_report: Añadir más al reporte already_suspended_badges: local: Ya suspendido en este servidor @@ -801,7 +802,7 @@ es-MX: destroyed_msg: "¡Carga del sitio eliminada con éxito!" software_updates: critical_update: Crítico — por favor actualiza rápidamente - description: Se recomienda mantener actualizada tu instalación de Mastodon para beneficiarte de las últimas correcciones y características. Además, a veces es crítico actualizar Mastodon de manera oportuna para evitar problemas de seguridad. Por estas razones, Mastodon comprueba si hay actualizaciones cada 30 minutos, y te notificará de acuerdo a tus preferencias de notificación por correo electrónico. + description: Se recomienda mantener tu instalación de Mastodon actualizada para beneficiarte de las últimas correcciones y características. Además, a veces es crítico actualizar Mastodon a tiempo para evitar problemas de seguridad. Por estas razones, Mastodon busca actualizaciones cada 30 minutos, y le notificará de acuerdo a sus preferencias de notificación por correo electrónico. documentation_link: Saber más release_notes: Notas de la versión title: Actualizaciones disponibles @@ -827,7 +828,7 @@ es-MX: media: title: Multimedia metadata: Metadatos - no_status_selected: No se cambió ningún estado al no seleccionar ninguno + no_status_selected: No se cambió ninguna publicación al no seleccionar ninguna open: Abrir publicación original_status: Publicación original reblogs: Impulsos @@ -876,8 +877,8 @@ es-MX: sidekiq_process_check: message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq software_version_check: - action: Ver actualizaciones disponibles - message_html: Hay disponible una actualización de Mastodon. + action: Ver las actualizaciones disponibles + message_html: Ya está disponible una actualización de Mastodon. software_version_critical_check: action: Ver actualizaciones disponibles message_html: Una actualización crítica de Mastodon está disponible, por favor actualice lo antes posible. @@ -909,7 +910,7 @@ es-MX: review: Estado de revisión search: Buscar title: Etiquetas - updated_msg: Hashtags actualizados exitosamente + updated_msg: Etiquetas actualizadas exitosamente title: Administración trends: allow: Permitir @@ -968,7 +969,7 @@ es-MX: tag_servers_dimension: Servidores principales tag_servers_measure: diferentes servidores tag_uses_measure: usuarios totales - description_html: Estos son etiquetas que están apareciendo en muchos posts que tu servidor ve. Pueden ayudar a tus usuarios a averiguar de qué habla más gente en estos momentos. No hay hashtags que se muestren públicamente hasta que los apruebes. + description_html: Estos son etiquetas que están apareciendo en muchas publicaciones que tu servidor ve. Pueden ayudar a tus usuarios a averiguar de qué habla más gente en estos momentos. No hay etiquetas que se muestren públicamente hasta que los apruebes. listable: Pueden ser recomendadas no_tag_selected: No se cambió ninguna etiqueta ya que no se seleccionó ninguna not_listable: No serán recomendadas @@ -1017,9 +1018,9 @@ es-MX: subject: Los registros para %{instance} han sido cambiados automáticamente para requerir aprobación new_appeal: actions: - delete_statuses: para eliminar sus mensajes + delete_statuses: para eliminar sus publicaciones disable: para congelar su cuenta - mark_statuses_as_sensitive: para marcar sus mensajes como sensibles + mark_statuses_as_sensitive: para marcar sus publicaciones como sensibles none: una alvertencia sensitive: para marcar su cuenta como sensible silence: para limitar su cuenta @@ -1054,11 +1055,11 @@ es-MX: created_msg: El nuevo alias se ha creado correctamente. Ahora puedes empezar el traslado desde la cuenta antigua. deleted_msg: Elimina el alias correctamente. El traslado de esa cuenta a esta ya no será posible. empty: No tienes ningún alias. - hint_html: Si quieres migrar de otra cuenta a esta, aquí puedes crear un alias, es necesario proceder antes de empezar a mover seguidores de la cuenta anterior a esta. Esta acción por sí misma es inofensiva y reversible. La migración de la cuenta se inicia desde la cuenta antigua. + hint_html: Si deseas migrar de otra cuenta a esta, aquí puedes crear un alias, que es necesario para poder mover seguidores de la cuenta anterior a esta. Esta acción por sí misma es inofensiva y reversible. La migración de la cuenta se inicia desde la cuenta anterior. remove: Desvincular alias appearance: advanced_web_interface: Interfaz web avanzada - advanced_web_interface_hint: 'Si desea utilizar todo el ancho de pantalla, la interfaz web avanzada le permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quiera: Inicio, notificaciones, línea de tiempo federada, cualquier número de listas y etiquetas.' + advanced_web_interface_hint: 'Si deseas aprovechar todo el ancho de tu pantalla, la interfaz web avanzada te permite configurar muchas columnas diferentes para ver toda la información que quieras al mismo tiempo: inicio, notificaciones, cronología federada, cualquier número de listas y etiquetas.' animations_and_accessibility: Animaciones y accesibilidad confirmation_dialogs: Diálogos de confirmación discovery: Descubrir @@ -1074,7 +1075,7 @@ es-MX: unsubscribe: Cancelar suscripción view: 'Vista:' view_profile: Ver perfil - view_status: Ver estado + view_status: Ver publicación applications: created: Aplicación creada exitosamente destroyed: Apicación eliminada exitosamente @@ -1100,7 +1101,7 @@ es-MX: welcome_title: "¡Bienvenido, %{name}!" wrong_email_hint: Si esa dirección de correo electrónico no es correcta, puedes cambiarla en la configuración de la cuenta. delete_account: Borrar cuenta - delete_account_html: Si desea eliminar su cuenta, puede proceder aquí. Será pedido de una confirmación. + delete_account_html: Si deseas eliminar tu cuenta, puedes proceder aquí. Se te pedirá una confirmación. description: prefix_invited_by_user: "¡@%{name} te invita a unirte a este servidor de Mastodon!" prefix_sign_up: "¡Únete a Mastodon hoy!" @@ -1165,9 +1166,11 @@ es-MX: use_security_key: Usar la clave de seguridad author_attribution: example_title: Texto de ejemplo - hint_html: Controla cómo se te dará atribución cuando se compartan enlaces en Mastodon. + hint_html: "¿Estás escribiendo artículos de noticias o blogs fuera de Mastodon? Controla cómo te acreditan cuando se comparten en Mastodon." + instructions: 'Asegúrate de que este código esté en el HTML de tu artículo:' more_from_html: Más de %{name} s_blog: Blog de %{name} + then_instructions: A continuación, añade el nombre de dominio de la publicación en el campo inferior. title: Atribución del autor challenge: confirm: Continuar @@ -1234,7 +1237,7 @@ es-MX: title_actions: delete_statuses: Eliminación de publicación disable: Congelación de la cuenta - mark_statuses_as_sensitive: Marcando los mensajes como sensibles + mark_statuses_as_sensitive: Marcando las publicaciones como sensibles none: Advertencia sensitive: Marcando la cuenta como sensible silence: Limitación de cuenta @@ -1268,7 +1271,7 @@ es-MX: archive_takeout: date: Fecha download: Descargar tu archivo - hint_html: Puedes solicitar un archivo de tus toots y archivos multimedia subidos. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible. + hint_html: Puedes solicitar un archivo de tus publicaciones y archivos multimedia subidos. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible. Puedes solicitar un archivo cada 7 días. in_progress: Recopilando tu archivo... request: Solicitar tu archivo size: Tamaño @@ -1282,7 +1285,7 @@ es-MX: featured_tags: add_new: Añadir nuevo errors: - limit: Ya has alcanzado la cantidad máxima de hashtags + limit: Ya has alcanzado la cantidad máxima de etiquetas hint_html: "¿Qué son las etiquetas destacadas? Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus publicaciones públicas específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo." filters: contexts: @@ -1453,8 +1456,8 @@ es-MX: emails: notification_emails: favourite: correos de notificación de favoritos - follow: correos de notificación de nuevos seguidores - follow_request: correos de notificación de solicitud de seguidor + follow: correos electrónicos de notificación de seguimiento + follow_request: correos electrónicos de solicitud de seguimiento mention: correos de notificación de menciones reblog: correos de notificación de impulsos resubscribe_html: Si te has dado de baja por error, puedes volver a darte de alta desde tus ajustes de notificaciones por correo. @@ -1462,7 +1465,7 @@ es-MX: title: Cancelar suscripción media_attachments: validations: - images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes + images_and_video: No se puede adjuntar un video a una publicación que ya contenga imágenes not_found: Archivos multimedia %{ids} no encontrados, o ya se encuentran adjuntos a otra publicación not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Inténtalo de nuevo en un momento! too_many: No se pueden adjuntar más de 4 archivos @@ -1512,8 +1515,8 @@ es-MX: sign_up: subject: "%{name} se registró" favourite: - body: 'Tu estado fue marcado como favorito por %{name}:' - subject: "%{name} marcó como favorito tu estado" + body: 'Tu publicación fue marcada como favorita por %{name}:' + subject: "%{name} marcó como favorita tu publicación" title: Nuevo favorito follow: body: "¡%{name} te está siguiendo!" @@ -1532,9 +1535,9 @@ es-MX: poll: subject: Una encuesta de %{name} ha terminado reblog: - body: "%{name} ha retooteado tu estado:" - subject: "%{name} ha retooteado tu estado" - title: Nueva difusión + body: 'Tu publicación fue impulsada por %{name}:' + subject: "%{name} ha impulsado tu publicación" + title: Nuevo impulso status: subject: "%{name} acaba de publicar" update: @@ -1633,8 +1636,8 @@ es-MX: account: Publicaciones públicas de @%{acct} tag: 'Publicaciones públicas etiquetadas con #%{hashtag}' scheduled_statuses: - over_daily_limit: Ha superado el límite de %{limit} toots programados para ese día - over_total_limit: Ha superado el límite de %{limit} toots programados + over_daily_limit: Has superado el límite de %{limit} publicaciones programadas para ese día + over_total_limit: Has superado el límite de %{limit} publicaciones programadas too_soon: La fecha programada debe estar en el futuro self_destruct: lead_html: Desafortunadamente, %{domain} está cerrando de manera permanente. Si tenías una cuenta ahí, no puedes continuar utilizándolo, pero puedes solicitar un respaldo de tus datos. @@ -1696,7 +1699,7 @@ es-MX: development: Desarrollo edit_profile: Editar perfil export: Exportar - featured_tags: Hashtags destacados + featured_tags: Etiquetas destacadas import: Importar import_and_export: Importar y exportar migrate: Migración de cuenta @@ -1736,17 +1739,17 @@ es-MX: content_warning: 'Alerta de contenido: %{warning}' default_language: Igual que el idioma de la interfaz disallowed_hashtags: - one: 'contenía un hashtag no permitido: %{tags}' - other: 'contenía los hashtags no permitidos: %{tags}' + one: 'contenía una etiqueta no permitida: %{tags}' + other: 'contenía las etiquetas no permitidas: %{tags}' edited_at_html: Editado %{date} errors: - in_reply_not_found: El estado al que intentas responder no existe. + in_reply_not_found: La publicación a la que estás intentando responder no existe. over_character_limit: Límite de caracteres de %{max} superado pin_errors: direct: Las publicaciones que son visibles solo para los usuarios mencionados no pueden fijarse limit: Ya has fijado el número máximo de publicaciones - ownership: El toot de alguien más no puede fijarse - reblog: Un boost no puede fijarse + ownership: La publicación de alguien más no puede fijarse + reblog: No se puede fijar una publicación impulsada title: "%{name}: «%{quote}»" visibilities: direct: Directa @@ -1762,9 +1765,9 @@ es-MX: exceptions: Excepciones explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente, a lo largo de un tiempo, cuando el servidor no está ocupado. Por este motivo, puede que tus publicaciones sean borradas algo después de que alcancen el umbral de tiempo especificado. ignore_favs: Ignorar favoritos - ignore_reblogs: Ignorar reblogueos + ignore_reblogs: Ignorar impulsos interaction_exceptions: Excepciones basadas en interacciones - interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de reblogueos si los han superado en algún momento. + interaction_exceptions_explanation: Ten en cuenta que no se garantiza la eliminación de las publicaciones si bajan del umbral de favoritos o de impulso después de haberlos superado una vez. keep_direct: Mantener mensajes directos keep_direct_hint: No elimina ninguno de tus mensajes directos keep_media: Mantener publicaciones con multimedia adjunto @@ -1789,7 +1792,7 @@ es-MX: min_age_label: Umbral de tiempo min_favs: Mantener mensajes con un número de favoritos mayor que min_favs_hint: No borra ninguna de las publicaciones que hayan recibido al menos esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos - min_reblogs: Mantener publicaciones reblogueadas más de + min_reblogs: Mantener publicaciones impulsadas más de min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido reblogueadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de reblogueos stream_entries: sensitive_content: Contenido sensible @@ -1865,9 +1868,9 @@ es-MX: spam: Spam violation: El contenido viola las siguientes directrices de la comunidad explanation: - delete_statuses: Se ha determinado que algunos de tus mensajes violan una o más directrices de la comunidad y han sido por tanto eliminados por los moderadores de %{instance}. + delete_statuses: Se ha determinado que algunas de tus publicaciones violan una o más directrices de la comunidad y han sido, por tanto, eliminados por los moderadores de %{instance}. disable: Ya no puedes usar tu cuenta, pero tu perfil y el resto de datos permanecen intactos. Puedes solicitar una copia de seguridad de tus datos, cambiar la configuración de tu cuenta o eliminarla. - mark_statuses_as_sensitive: Algunos de tus mensajes han sido marcados como sensibles por los moderadores de %{instance}. Esto significa que la gente tendrá que pulsar los archivos multimedia en las publicaciones antes de que se muestre una vista previa. Puedes marcar los archivos multimedia como sensibles tú mismo cuando publiques en el futuro. + mark_statuses_as_sensitive: Algunas de tus publicaciones han sido marcadas como sensibles por los moderadores de %{instance}. Esto significa que la gente tendrá que pulsar los archivos multimedia en las publicaciones antes de que se muestre una vista previa. Puedes marcar los archivos multimedia como sensibles tú mismo cuando publiques en el futuro. sensitive: A partir de ahora, todos los archivos multimedia que subas serán marcados como sensibles y ocultos tras una advertencia que habrá que clicar. silence: Aún puedes usar tu cuenta, pero solo las personas que te están siguiendo verán tus publicaciones en este servidor, y puedes ser excluido de varias funcionalidades de descubrimiento. Sin embargo, otras cuentas podrán empezar a seguirte manualmente. suspend: Ya no puedes utilizar tu cuenta, y tu perfil y el resto de datos ya no son accesibles. Todavía puedes iniciar sesión para solicitar una copia de seguridad de tus datos, hasta que estos sean eliminados por completo en unos 30 días, aunque conservaremos algunos datos básicos para impedir que esquives la suspensión. @@ -1897,7 +1900,7 @@ es-MX: checklist_subtitle: 'Comencemos en esta nueva frontera social:' checklist_title: Lista de bienvenida edit_profile_action: Personalizar - edit_profile_step: Aumenta tus interacciones con un perfil completo. + edit_profile_step: Aumenta tus interacciones completando tu perfil. edit_profile_title: Personaliza tu perfil explanation: Aquí hay algunos consejos para empezar feature_action: Leer más diff --git a/config/locales/es.yml b/config/locales/es.yml index aa18e7b52e..bcad1bc3ef 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -2,7 +2,7 @@ es: about: about_mastodon_html: 'La red social del futuro: ¡Sin anuncios, sin vigilancia corporativa, diseño ético, y descentralización! ¡Sé dueño de tu información con Mastodon!' - contact_missing: No especificado + contact_missing: No establecido contact_unavailable: No disponible hosted_on: Mastodon alojado en %{domain} title: Acerca de @@ -11,7 +11,7 @@ es: one: Seguidor other: Seguidores following: Siguiendo - instance_actor_flash: Esta cuenta es un actor virtual utilizado para representar al servidor en sí mismo y no a ningún usuario individual. Se utiliza para propósitos de la federación y no se debe suspender. + instance_actor_flash: Esta cuenta es un actor virtual utilizado para representar al propio servidor y no a ningún usuario individual. Se utiliza con fines de federación y no debe suspenderse. last_active: última conexión link_verified_on: La propiedad de este vínculo fue verificada el %{date} nothing_here: "¡No hay nada aquí!" @@ -21,6 +21,7 @@ es: one: Publicación other: Publicaciones posts_tab_heading: Publicaciones + self_follow_error: No está permitido seguir tu propia cuenta admin: account_actions: action: Realizar acción @@ -39,7 +40,7 @@ es: avatar: Avatar by_domain: Dominio change_email: - changed_msg: "¡Email cambiado con éxito!" + changed_msg: "¡Correo electrónico cambiado con éxito!" current_email: Correo electrónico actual label: Cambiar el correo electrónico new_email: Nuevo correo electrónico @@ -56,18 +57,18 @@ es: confirming: Confirmando custom: Personalizado delete: Eliminar datos - deleted: Borrado + deleted: Eliminado demote: Degradar destroyed_msg: Los datos de %{username} están ahora en cola para ser eliminados inminentemente disable: Deshabilitar disable_sign_in_token_auth: Deshabilitar la autenticación por token de correo electrónico disable_two_factor_authentication: Desactivar autenticación de dos factores disabled: Deshabilitada - display_name: Nombre + display_name: Nombre para mostrar domain: Dominio edit: Editar - email: E-mail - email_status: E-mail Status + email: Correo electrónico + email_status: Estado del correo electrónico enable: Habilitar enable_sign_in_token_auth: Habilitar la autenticación por token de correo electrónico enabled: Habilitada @@ -85,7 +86,7 @@ es: local: Local remote: Remoto title: Localización - login_status: Estado del login + login_status: Estado de inicio de sesión media_attachments: Multimedia memorialize: Convertir en memorial memorialized: Cuenta conmemorativa @@ -101,7 +102,7 @@ es: moderation_notes: Notas de moderación most_recent_activity: Actividad más reciente most_recent_ip: IP más reciente - no_account_selected: Ninguna cuenta se cambió como ninguna fue seleccionada + no_account_selected: No se ha modificado ninguna cuenta porque no se ha seleccionado ninguna no_limits_imposed: Sin límites impuestos no_role_assigned: Ningún rol asignado not_subscribed: No se está suscrito @@ -115,7 +116,7 @@ es: protocol: Protocolo public: Público push_subscription_expires: Expiración de la suscripción PuSH - redownload: Refrescar avatar + redownload: Refrescar perfil redownloaded_msg: Se actualizó correctamente el perfil de %{username} desde el origen reject: Rechazar rejected_msg: La solicitud de registro de %{username} ha sido rechazada con éxito @@ -131,17 +132,17 @@ es: success: "¡Enlace de confirmación enviado con éxito!" reset: Reiniciar reset_password: Reiniciar contraseña - resubscribe: Re-suscribir + resubscribe: Volver a suscribirse role: Rol search: Buscar search_same_email_domain: Otros usuarios con el mismo dominio de correo search_same_ip: Otros usuarios con la misma IP security: Seguridad security_measures: - only_password: Sólo contraseña + only_password: Solo contraseña password_and_2fa: Contraseña y 2FA sensitive: Sensible - sensitized: marcado como sensible + sensitized: Marcada como sensible shared_inbox_url: URL de bandeja compartida show: created_reports: Reportes hechos por esta cuenta @@ -160,10 +161,10 @@ es: unblocked_email_msg: Se ha desbloqueado correctamente la dirección de correo de %{username} unconfirmed_email: Correo electrónico sin confirmar undo_sensitized: Desmarcar como sensible - undo_silenced: Des-silenciar - undo_suspension: Des-suspender + undo_silenced: Dejar de silenciar + undo_suspension: Deshacer suspensión unsilenced_msg: Se quitó con éxito el límite de la cuenta %{username} - unsubscribe: Desuscribir + unsubscribe: Cancelar suscripción unsuspended_msg: Se quitó con éxito la suspensión de la cuenta de %{username} username: Nombre de usuario view_domain: Ver resumen del dominio @@ -295,7 +296,7 @@ es: empty: No se encontraron registros. filter_by_action: Filtrar por acción filter_by_user: Filtrar por usuario - title: Log de auditoría + title: Registro de auditoría unavailable_instance: "(nombre de dominio no disponible)" announcements: destroyed_msg: "¡Anuncio eliminado con éxito!" @@ -337,7 +338,7 @@ es: listed: Listados new: title: Añadir nuevo emoji personalizado - no_emoji_selected: No se cambió ningún emoji ya que no se seleccionó ninguno + no_emoji_selected: No se cambió ningún emoji, ya que no se seleccionó ninguno not_permitted: No tienes permiso para realizar esta acción overwrite: Sobrescribir shortcode: Código de atajo @@ -565,7 +566,7 @@ es: '94670856': 3 años new: title: Crear nueva regla IP - no_ip_block_selected: No se han cambiado reglas IP ya que no se ha seleccionado ninguna + no_ip_block_selected: No se han cambiado reglas IP, ya que no se ha seleccionado ninguna title: Reglas IP relationships: title: Relaciones de %{acct} @@ -909,7 +910,7 @@ es: review: Estado de revisión search: Buscar title: Etiquetas - updated_msg: Hashtags actualizados exitosamente + updated_msg: La configuración de etiquetas se actualizó correctamente title: Administración trends: allow: Permitir @@ -1058,7 +1059,7 @@ es: remove: Desvincular alias appearance: advanced_web_interface: Interfaz web avanzada - advanced_web_interface_hint: 'Si desea utilizar todo el ancho de pantalla, la interfaz web avanzada le permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quiera: Inicio, notificaciones, línea de tiempo federada, cualquier número de listas y etiquetas.' + advanced_web_interface_hint: 'Si quieres aprovechar todo el ancho de tu pantalla, la interfaz web avanzada te permite configurar muchas columnas diferentes para ver toda la información que quieras al mismo tiempo: Inicio, notificaciones, cronología federada, cualquier número de listas y etiquetas.' animations_and_accessibility: Animaciones y accesibilidad confirmation_dialogs: Diálogos de confirmación discovery: Descubrir @@ -1100,7 +1101,7 @@ es: welcome_title: "¡Te damos la bienvenida, %{name}!" wrong_email_hint: Si esa dirección de correo electrónico no es correcta, puedes cambiarla en la configuración de la cuenta. delete_account: Borrar cuenta - delete_account_html: Si desea eliminar su cuenta, puede proceder aquí. Será pedido de una confirmación. + delete_account_html: Si deseas eliminar tu cuenta, puedes hacerlo aquí. Se te pedirá una confirmación. description: prefix_invited_by_user: "¡@%{name} te invita a unirte a este servidor de Mastodon!" prefix_sign_up: "¡Únete a Mastodon hoy!" @@ -1108,7 +1109,7 @@ es: didnt_get_confirmation: "¿No recibiste un enlace de confirmación?" dont_have_your_security_key: "¿No tienes tu clave de seguridad?" forgot_password: "¿Olvidaste tu contraseña?" - invalid_reset_password_token: El token de reinicio de contraseña es inválido o expiró. Por favor pide uno nuevo. + invalid_reset_password_token: El token de restablecimiento de contraseña no es válido o ha expirado. Por favor solicita uno nuevo. link_to_otp: Introduce un código de dos factores desde tu teléfono o un código de recuperación link_to_webauth: Utilice su dispositivo de clave de seguridad log_in_with: Iniciar sesión con @@ -1142,7 +1143,7 @@ es: set_new_password: Establecer nueva contraseña setup: email_below_hint_html: Comprueba tu carpeta de correo no deseado o solicita otro enlace de confirmación. Puedes corregir tu dirección de correo electrónico si está mal. - email_settings_hint_html: Pulsa el enlace que te hemos enviado para verificar %{email}. Esperaremos aquí mismo. + email_settings_hint_html: Haz clic en el enlace que te hemos enviado para verificar %{email}. Te esperamos aquí. link_not_received: "¿No recibiste un enlace?" new_confirmation_instructions_sent: "¡Recibirás un nuevo correo electrónico con el enlace de confirmación en unos minutos!" title: Revisa tu bandeja de entrada @@ -1165,9 +1166,11 @@ es: use_security_key: Usar la clave de seguridad author_attribution: example_title: Texto de ejemplo - hint_html: Controla cómo se te dará atribución cuando se compartan enlaces en Mastodon. + hint_html: "¿Escribes noticias o artículos de blog fuera de Mastodon? Controla cómo se te acredita cuando se comparten en Mastodon." + instructions: 'Asegúrate de que este código está en el HTML de tu artículo:' more_from_html: Más de %{name} s_blog: Blog de %{name} + then_instructions: A continuación, añade el nombre de dominio de la publicación en el campo inferior. title: Atribución del autor challenge: confirm: Continuar @@ -1255,7 +1258,7 @@ es: '422': content: Verificación de seguridad fallida. ¿Estás bloqueando algunas cookies? title: Verificación de seguridad fallida - '429': Asfixiado + '429': Demasiadas solicitudes '500': content: Lo sentimos, algo ha funcionado mal por nuestra parte. title: Esta página no es correcta @@ -1282,7 +1285,7 @@ es: featured_tags: add_new: Añadir nuevo errors: - limit: Ya has alcanzado la cantidad máxima de hashtags + limit: Ya has alcanzado la cantidad máxima de etiquetas hint_html: "¿Qué son las etiquetas destacadas? Se muestran de forma prominente en tu perfil público y permiten a los usuarios navegar por tus publicaciones públicas específicamente bajo esas etiquetas. Son una gran herramienta para hacer un seguimiento de trabajos creativos o proyectos a largo plazo." filters: contexts: @@ -1335,7 +1338,7 @@ es: one: "%{count} elemento que coincide con su búsqueda está seleccionado." other: Todos los %{count} elementos que coinciden con su búsqueda están seleccionados. cancel: Cancelar - changes_saved_msg: "¡Cambios guardados con éxito!" + changes_saved_msg: "¡Los cambios se han guardado correctamente!" confirm: Confirmar copy: Copiar delete: Eliminar @@ -1359,7 +1362,7 @@ es: too_large: El archivo es demasiado grande failures: Fallos imported: Importado - mismatched_types_warning: Parece que podrías haber seleccionado el tipo incorrecto para esta importación, por favor vuelve a verificarlo. + mismatched_types_warning: Parece que has seleccionado el tipo incorrecto para esta importación, vuelve a comprobarlo. modes: merge: Unir merge_long: Mantener registros existentes y añadir nuevos @@ -1419,7 +1422,7 @@ es: '604800': 1 semana '86400': 1 día expires_in_prompt: Nunca - generate: Generar + generate: Generar enlace de invitación invalid: Esta invitación no es válida invited_by: 'Fuiste invitado por:' max_uses: @@ -1462,12 +1465,12 @@ es: title: Cancelar suscripición media_attachments: validations: - images_and_video: No se puede adjuntar un video a unapublicación que ya contenga imágenes + images_and_video: No se puede adjuntar un video a una publicación que ya contenga imágenes not_found: Archivos multimedia %{ids} no encontrados, o ya se encuentran adjuntos a otra publicación not_ready: No se pueden adjuntar archivos que no se han terminado de procesar. ¡Inténtalo de nuevo en un momento! too_many: No se pueden adjuntar más de 4 archivos migrations: - acct: username@domain de la nueva cuenta + acct: Movido a cancel: Cancelar redireccionamiento cancel_explanation: Al cancelar el redireccionamiento se reactivará tu cuenta actual, pero no recuperarás los seguidores que hayan sido trasladados a la otra cuenta. cancelled_msg: El redireccionamiento se ha cancelado correctamente. @@ -1696,13 +1699,13 @@ es: development: Desarrollo edit_profile: Editar perfil export: Exportar - featured_tags: Hashtags destacados + featured_tags: Etiquetas destacadas import: Importar import_and_export: Importar y exportar migrate: Migración de cuenta notifications: Notificaciones por correo electrónico preferences: Preferencias - profile: Perfil + profile: Perfil público relationships: Siguiendo y seguidores severed_relationships: Relaciones cortadas statuses_cleanup: Eliminación automática de publicaciones @@ -1736,8 +1739,8 @@ es: content_warning: 'Alerta de contenido: %{warning}' default_language: Igual que el idioma de la interfaz disallowed_hashtags: - one: 'contenía un hashtag no permitido: %{tags}' - other: 'contenía los hashtags no permitidos: %{tags}' + one: 'contenía una etiqueta no permitida: %{tags}' + other: 'contenía las etiquetas no permitidas: %{tags}' edited_at_html: Editado %{date} errors: in_reply_not_found: La publicación a la que intentas responder no existe. @@ -1746,11 +1749,11 @@ es: direct: Las publicaciones que son visibles solo para los usuarios mencionados no pueden fijarse limit: Ya has fijado el número máximo de publicaciones ownership: La publicación de otra persona no puede fijarse - reblog: Un boost no puede fijarse + reblog: Una publicación impulsada no puede fijarse title: "%{name}: «%{quote}»" visibilities: direct: Directa - private: Sólo mostrar a seguidores + private: Solo seguidores private_long: Solo mostrar a tus seguidores public: Pública public_long: Todos pueden ver @@ -1762,9 +1765,9 @@ es: exceptions: Excepciones explanation: Debido a que la eliminación de mensajes es una operación costosa, esto se hace lentamente, a lo largo de un tiempo, cuando el servidor no está ocupado. Por este motivo, puede que tus publicaciones sean borradas algo después de que alcancen el umbral de tiempo especificado. ignore_favs: Ignorar favoritos - ignore_reblogs: Ignorar reblogueos + ignore_reblogs: Ignorar impulsos interaction_exceptions: Excepciones basadas en interacciones - interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de reblogueos si los han superado en algún momento. + interaction_exceptions_explanation: Ten en cuenta que no hay garantía de que se eliminen las publicaciones que están por debajo de los umbrales de favoritos o de impulsos si los han superado en algún momento. keep_direct: Mantener mensajes directos keep_direct_hint: No elimina ninguno de tus mensajes directos keep_media: Mantener publicaciones con multimedia adjunto @@ -1790,7 +1793,7 @@ es: min_favs: Mantener mensajes con un número de favoritos mayor que min_favs_hint: No borra ninguna de las publicaciones que hayan recibido al menos esta cantidad de favoritos. Deja en blanco para eliminar publicaciones sin importar el número de favoritos min_reblogs: Mantener publicaciones reblogueadas más de - min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido reblogueadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de reblogueos + min_reblogs_hint: No borra ninguna de las publicaciones que hayan sido impulsadas más de este número de veces. Deja en blanco para eliminar publicaciones sin importar el número de impulsos stream_entries: sensitive_content: Contenido sensible strikes: @@ -1799,8 +1802,8 @@ es: tags: does_not_match_previous_name: no coincide con el nombre anterior themes: - contrast: Alto contraste - default: Mastodon + contrast: Mastodon (alto contraste) + default: Mastodon (oscuro) mastodon-light: Mastodon (claro) system: Automático (usar tema del sistema) time: @@ -1820,7 +1823,7 @@ es: edit: Editar enabled: La autenticación de dos factores está activada enabled_success: Verificación de dos factores activada exitosamente - generate_recovery_codes: generar códigos de recuperación + generate_recovery_codes: Generar códigos de recuperación lost_recovery_codes: Los códigos de recuperación te permiten obtener acceso a tu cuenta si pierdes tu teléfono. Si has perdido tus códigos de recuperación, puedes regenerarlos aquí. Tus viejos códigos de recuperación se harán inválidos. methods: Métodos de autenticación de doble factor otp: Aplicación de autenticación @@ -1941,7 +1944,7 @@ es: verification: extra_instructions_html: Consejo: El enlace en tu web puede ser invisible. La parte importante es rel="me", que evita la suplantación de identidad en sitios con contenido generado por el usuario. Puedes incluso usar una etiqueta enlace en el encabezado de la página en vez de a, pero el HTML debe ser accesible sin ejecutar JavaScript. here_is_how: Así es como se hace - hint_html: "Verificar tu identidad en Mastodon es para todos. Basado en estándares web abiertos, ahora y para siempre. Todo lo que necesitas es un sitio web propio que la gente reconozca. Cuando enlaces a este sitio web desde tu perfil, comprobaremos que el sitio web se enlaza a tu perfil y mostraremos un indicador visual en él." + hint_html: "Verificar tu identidad en Mastodon es para todos. Basado en estándares web abiertos, ahora y siempre gratis. Todo lo que necesitas es un sitio web personal por el que la gente te reconozca. Cuando enlaces a este sitio web desde tu perfil, comprobaremos que el sitio web enlaza con tu perfil y mostraremos un indicador visual en él." instructions_html: Copia y pega el siguiente código en el HTML de tu sitio web. A continuación, añade la dirección de su sitio web en uno de los campos extra de tu perfil desde la pestaña "Editar perfil" y guarda los cambios. verification: Verificación verified_links: Tus enlaces verificados diff --git a/config/locales/et.yml b/config/locales/et.yml index b71e3ccb68..19c7f8c799 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -21,6 +21,7 @@ et: one: Postitus other: Postitused posts_tab_heading: Postitused + self_follow_error: Omaenda konto jälgimine ei ole lubatud admin: account_actions: action: Täida tegevus @@ -334,7 +335,7 @@ et: enabled_msg: Selle emotikoni lubamine õnnestus image_hint: PNG või GIF suurusega kuni %{size} list: Loend - listed: Nimekirjastatud + listed: Loetletud new: title: Lisa uus emotikon no_emoji_selected: Emotikone ei muudetud, kuna ühtegi polnud valitud @@ -344,8 +345,8 @@ et: shortcode_hint: Vähemalt 2 tähemärki, ainult tähted, numbrid ja alakriipsud title: Emotikonid uncategorized: Kategoriseerimata - unlist: Kirjendamata - unlisted: Kirjendamata + unlist: Loetlemata + unlisted: Loetlemata update_failed_msg: Ei saanud seda emotikoni uuendada updated_msg: Emotikoni uuendamine õnnestus! upload: Lae üles @@ -875,6 +876,9 @@ et: message_html: Serverireegleid pole defineeritud. sidekiq_process_check: message_html: Ühtegi Sidekiq protsessi pole %{value} järjekorra jaoks. Sidekiq seadistus vajab üle vaatamist + software_version_check: + action: Vaata saadaval uuendusi + message_html: Mastodoni uuendus on saadaval. software_version_critical_check: action: Vaata saadaolevaid uuendusi message_html: Saadaval on Mastodoni kriitiline uuendus, uuenda nii kiiresti kui võimalik. @@ -1162,9 +1166,11 @@ et: use_security_key: Kasuta turvavõtit author_attribution: example_title: Näidistekst - hint_html: Määra, kuidas sind krediteeritakse, kui linke Mastodonis jagatakse. + hint_html: Kirjutad uudiseid või blogisid Mastodonist väljapool? Määra, kuidas sinule viidatakse, kui neid lehti jagatakse Mastodonis. + instructions: 'Vaata, et artikli HTML sisus oleks see kood sees:' more_from_html: Rohkem kasutajalt %{name} s_blog: Kasutaja %{name} blogi + then_instructions: Siis lisa avaldaja domeeninimi allolevasse välja. title: Autori tunnustamine challenge: confirm: Jätka @@ -1273,7 +1279,7 @@ et: bookmarks: Järjehoidjad csv: CSV domain_blocks: Domeeni blokeeringud - lists: Nimekirjad + lists: Loetelud mutes: Oled vaigistanud storage: Meedia hoidla featured_tags: @@ -1692,6 +1698,7 @@ et: delete: Konto kustutamine development: Arendus edit_profile: Muuda profiili + export: Eksport featured_tags: Esile toodud sildid import: Impordi import_and_export: Import / eksport @@ -1750,7 +1757,7 @@ et: private_long: Näevad ainult jälgijad public: Avalik public_long: Postitused on kõigile näha - unlisted: Kirjendamata + unlisted: Loetlemata unlisted_long: Kõigile näha, kuid ei näidata avalikel ajajoontel statuses_cleanup: enabled: Vanade postituste automaatne kustutamine diff --git a/config/locales/eu.yml b/config/locales/eu.yml index e80207d46f..5720b3cc90 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -21,15 +21,19 @@ eu: one: Bidalketa other: Bidalketa posts_tab_heading: Bidalketa + self_follow_error: Zure kontua bera jarraitzea ez dago onartuta admin: account_actions: action: Burutu ekintza + already_silenced: Kontu hau dagoeneko mugatua izan da. + already_suspended: Kontu hau dagoeneko kanporatua izan da. title: Burutu moderazio ekintza %{acct} kontuan account_moderation_notes: create: Sortu oharra created_msg: Moderazio oharra ongi sortu da! destroyed_msg: Moderazio ohara ongi suntsitu da! accounts: + add_email_domain_block: Blokeatu email domeinua approve: Onartu approved_msg: "%{username} erabiltzailearen erregistratzeko eskaera behar bezala onartu da" are_you_sure: Ziur zaude? @@ -44,6 +48,7 @@ eu: title: Aldatu %{username}(r)en eposta helbidea change_role: changed_msg: Rola ondo aldatu da! + edit_roles: Kudeatu erabiltzaile rolak label: Aldatu rola no_role: Rolik ez title: Aldatu %{username} erabiltzailearen rola @@ -56,6 +61,7 @@ eu: demote: Jaitsi mailaz destroyed_msg: "%{username} erabiltzailearen datuak behin betiko ezabatzeko ilaran daude" disable: Desgaitu + disable_sign_in_token_auth: Desgaitu e-posta token autentifikazioa disable_two_factor_authentication: Desgaitu 2FA disabled: Desgaituta display_name: Pantaila-izena @@ -64,6 +70,7 @@ eu: email: Eposta email_status: Epostaren egoera enable: Gaitu + enable_sign_in_token_auth: Gaitu e-posta token autentifikazioa enabled: Gaituta enabled_msg: "%{username} kontua behar bezala desblokeatu da" followers: Jarraitzaileak @@ -128,6 +135,7 @@ eu: resubscribe: Berriro harpidetu role: Rola search: Bilatu + search_same_email_domain: E-mail domeinu bera duten beste erabiltzaileak search_same_ip: IP bera duten beste erabiltzaileak security: Segurtasuna security_measures: @@ -168,21 +176,26 @@ eu: approve_appeal: Onartu apelazioa approve_user: Onartu erabiltzailea assigned_to_self_report: Esleitu salaketa + change_email_user: Aldatu erabiltzailearen emaila change_role_user: Aldatu erabiltzailearen rola confirm_user: Berretsi erabiltzailea create_account_warning: Sortu abisua create_announcement: Sortu iragarpena + create_canonical_email_block: Sortu email blokeoa create_custom_emoji: Sortu emoji pertsonalizatua create_domain_allow: Sortu domeinu baimena create_domain_block: Sortu domeinu blokeoa + create_email_domain_block: Sortu email domeinu blokeoa create_ip_block: Sortu IP araua create_unavailable_domain: Sortu eskuragarri ez dagoen domeinua create_user_role: Sortu rola demote_user: Jaitsi erabiltzailearen maila destroy_announcement: Ezabatu iragarpena + destroy_canonical_email_block: Ezabatu email blokeoa destroy_custom_emoji: Ezabatu emoji pertsonalizatua destroy_domain_allow: Ezabatu domeinu baimena destroy_domain_block: Ezabatu domeinu blokeoa + destroy_email_domain_block: Ezabatu email domeinu blokeoa destroy_instance: Ezabatu betiko domeinua destroy_ip_block: Ezabatu IP araua destroy_status: Ezabatu bidalketa @@ -190,8 +203,10 @@ eu: destroy_user_role: Ezabatu rola disable_2fa_user: Desgaitu 2FA disable_custom_emoji: Desgaitu emoji pertsonalizatua + disable_sign_in_token_auth_user: Desgaitu email token autentifikazioa erabiltzailearentzat disable_user: Desgaitu erabiltzailea enable_custom_emoji: Gaitu emoji pertsonalizatua + enable_sign_in_token_auth_user: Gaitu email token autentifikazioa erabiltzailearentzat enable_user: Gaitu erabiltzailea memorialize_account: Bihurtu kontua oroigarri promote_user: Igo erabiltzailea mailaz diff --git a/config/locales/fa.yml b/config/locales/fa.yml index e7d932de11..0dbe955a18 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -21,6 +21,7 @@ fa: one: فرسته other: فرسته‌ها posts_tab_heading: فرسته‌ها + self_follow_error: دنبال کردن حساب کاربری شما مجاز نیست admin: account_actions: action: انجامِ کنش @@ -100,7 +101,7 @@ fa: title: مدیریت moderation_notes: یادداشت‌های مدیریتی most_recent_activity: آخرین فعالیت - most_recent_ip: آخرین IP + most_recent_ip: آخرین آی پی no_account_selected: هیچ حسابی تغییر نکرد زیرا حسابی انتخاب نشده بود no_limits_imposed: بدون محدودیت no_role_assigned: هیچ نقشی اعطا نشده @@ -135,7 +136,7 @@ fa: role: نقش search: جست‌وجو search_same_email_domain: دیگر کاربران با دامنهٔ رایانامهٔ یکسان - search_same_ip: دیگر کاربران با IP یکسان + search_same_ip: دیگر کاربران با آی پی یکسان security: امنیت security_measures: only_password: فقط گذرواژه @@ -190,9 +191,11 @@ fa: create_user_role: ایجاد نقش demote_user: تنزل کاربر destroy_announcement: حذف اعلامیه + destroy_canonical_email_block: حذف انسداد رایانامه destroy_custom_emoji: حذف اموجی سفارشی destroy_domain_allow: حذف اجازهٔ دامنه destroy_domain_block: حذف انسداد دامنه + destroy_email_domain_block: حذف انسداد دامنهٔ رایانامه destroy_instance: پاکسازی دامنه destroy_ip_block: حذف قاعدهٔ آی‌پی destroy_status: حذف وضعیت @@ -200,8 +203,10 @@ fa: destroy_user_role: نابودی نقش disable_2fa_user: از کار انداختن ورود دومرحله‌ای disable_custom_emoji: از کار انداختن اموجی سفارشی + disable_sign_in_token_auth_user: از کار انداختن تأیید هویت ژتون رایانامه‌ای برای کاربر disable_user: از کار انداختن کاربر enable_custom_emoji: به کار انداختن اموجی سفارشی + enable_sign_in_token_auth_user: به کار انداختن تأیید هویت ژتون رایانامه‌ای برای کاربر enable_user: به کار انداختن کاربر memorialize_account: یادسپاری حساب promote_user: ترفیع کاربر @@ -231,20 +236,26 @@ fa: approve_appeal_html: "%{name} درخواست تجدیدنظر تصمیم مدیر را از %{target} پذیرفت" approve_user_html: "%{name} ثبت نام %{target} را تایید کرد" assigned_to_self_report_html: "%{name} رسیدگی به گزارش %{target} را به عهده گرفت" + change_email_user_html: "%{name} نشانی رایانامهٔ کاربر %{target} را عوض کرد" change_role_user_html: "%{name} نقش %{target} را تغییر داد" + confirm_user_html: "%{name} نشانی رایانامهٔ کاربر %{target} را تأیید کرد" create_account_warning_html: "%{name} هشداری برای %{target} فرستاد" create_announcement_html: "%{name} اعلامیه‌ای جدید ایجاد کرد %{target}" + create_canonical_email_block_html: "%{name} رایانامه با درهم‌ریزی %{target} را مسدود کرد" create_custom_emoji_html: "%{name} اموجی تازهٔ %{target} را بارگذاشت" create_domain_allow_html: "%{name} دامنهٔ %{target} را مجاز کرد" create_domain_block_html: "%{name} دامنهٔ %{target} را مسدود کرد" + create_email_domain_block_html: "%{name} دامنهٔ رایانامهٔ %{target} را مسدود کرد" create_ip_block_html: "%{name} برای آی‌پی %{target} قانونی ایجاد کرد" create_unavailable_domain_html: "%{name} تحویل محتوا به دامنه %{target} را متوقف کرد" create_user_role_html: "%{name} نقش %{target} را ایجاد کرد" demote_user_html: "%{name} کاربر %{target} را تنزل داد" destroy_announcement_html: "%{name} اعلامیهٔ %{target} را حذف کرد" + destroy_canonical_email_block_html: "%{name} رایانامه با درهم‌ریزی %{target} را نامسدود کرد" destroy_custom_emoji_html: "%{name} شکلک %{target} را حذف کرد" destroy_domain_allow_html: "%{name} دامنهٔ %{target} را از فهرست مجاز برداشت" destroy_domain_block_html: "%{name} انسداد دامنهٔ %{target} را رفع کرد" + destroy_email_domain_block_html: "%{name} انسداد دامنهٔ رایانامهٔ %{target} را برداشت" destroy_instance_html: "%{name} دامنه %{target} را پاکسازی کرد" destroy_ip_block_html: "%{name} قاعدهٔ آی‌پی %{target} را حذف کرد" destroy_status_html: "%{name} وضعیت %{target} را برداشت" @@ -252,8 +263,10 @@ fa: destroy_user_role_html: "%{name} نقش %{target} را حذف کرد" disable_2fa_user_html: "%{name} ضرورت ورود دو مرحله‌ای را برای کاربر %{target} غیر فعال کرد" disable_custom_emoji_html: "%{name} شکلک %{target} را غیرفعال کرد" + disable_sign_in_token_auth_user_html: "%{name}، احراز هویت با توکن رایانامه را برای %{target} غیرفعال کرد" disable_user_html: "%{name} ورود را برای کاربر %{target} غیرفعال کرد" enable_custom_emoji_html: "%{name} شکلک %{target} را فعال کرد" + enable_sign_in_token_auth_user_html: "%{name}، احراز هویت با توکن رایانامه را برای %{target} فعال کرد" enable_user_html: "%{name} ورود را برای کاربر %{target} فعال کرد" memorialize_account_html: "%{name} حساب %{target} را تبدیل به صفحهٔ یادمان کرد" promote_user_html: "%{name} کاربر %{target} را ترفیع داد" @@ -268,7 +281,7 @@ fa: silence_account_html: "%{name} حساب %{target} را محدود کرد" suspend_account_html: "%{name} حساب %{target} را تعلیق کرد" unassigned_report_html: "%{name} گزارش %{target} را از حالت محول شده خارج کرد" - unblock_email_account_html: "%{name} نشانی رایانامهٔ %{target} را رفع مسدودیت کرد" + unblock_email_account_html: "%{name} مسدودی نشانی رایانامهٔ %{target} را رفع کرد" unsensitive_account_html: "%{name} علامت حساس رسانهٔ %{target} را برداشت" unsilence_account_html: "%{name} محدودیت حساب %{target} را برداشت" unsuspend_account_html: "%{name} حساب %{target} را از تعلیق خارج کرد" @@ -365,7 +378,7 @@ fa: website: پایگاه وب disputes: appeals: - empty: هیچ درخواست تجدیدنظری یافت نشد + empty: هیچ درخواست تجدیدنظری یافت نشد. title: درخواست‌های تجدیدنظر domain_allows: add_new: مجاز کردن دامنه @@ -384,10 +397,12 @@ fa: remove_all_data: این کار همهٔ داده‌های نمایه، محتوا و رسانه‌های حساب‌های این دامنه را از کارسازتان برمی‌دارد. stop_communication: کارسازتان دیگر با این کارسازها ارتباط برقرار نخواهد کرد. title: تأیید انسداد دامنه برای %{domain} + undo_relationships: با این کار هر رابطه فالو بین حساب های این سرورها و حساب های شما خنثی می شود. created_msg: مسدودسازی دامنه در حال پردازش است destroyed_msg: انسداد دامنه واگردانده شد domain: دامنه edit: ویرایش مسدودسازی دامنه + existing_domain_block: شما قبلاً محدودیت های سخت تری را برای %{name} اعمال کرده اید. existing_domain_block_html: شما پیش‌تر محدودیت‌های سخت‌تری روی %{name} اعمال کرده‌اید، و باید نخست مسدودسازی را لغو کنید. export: برون‌ریزی import: درون‌ریزی @@ -395,6 +410,7 @@ fa: create: مسدودسازی hint: مسدودسازی دامنه جلوی ایجاد ورودی‌های حساب در پایگاه داده را نمی‌گیرد، بلکه به طور خودکار روش‌های مدیریتی را روی فعالیت‌های فعلی و گذشتهٔ آن حساب‌ها اعمال می‌کند. severity: + desc_html: "محدود کردن باعث می‌شود پست‌های حساب‌های موجود در این دامنه برای افرادی که آن‌ها را دنبال نمی‌کنند نامرئی شوند. تعلیق همه محتوا، رسانه و داده‌های نمایه حساب‌های این دامنه را از سرور شما حذف می‌کند. اگر فقط می‌خواهید فایل‌های رسانه‌ای را رد کنید، از هیچکدام استفاده کنید." noop: هیچ silence: محدود suspend: تعلیق @@ -431,6 +447,8 @@ fa: title: مسدودسازی دامنهٔ رایانامهٔ جدید no_email_domain_block_selected: هیچ انسداد دامنهٔ رایانامه‌ای تغییر نکرد زیرا هیچ‌کدامشان انتخاب نشده بودند not_permitted: مجاز نیست + resolved_dns_records_hint_html: نام دامنه به دامنه‌های MX زیر منتقل می شود که در نهایت مسئولیت پذیرش رایانامه را بر عهده دارند. انسداد دامنهٔ MX، ثبت‌نام از هر نشانی رایانامه‌ای را که از همان دامنهٔ MX استفاده می‌کند را مسدود می‌کند؛ حتا اگر نام دامنهٔ نمایان متفاوت باشد. مراقب باشید ارائه‌دهندگان رایانامهٔ بزرگ را مسدود نکنید. + resolved_through_html: از طریق %{domain} حل شد title: دامنه‌های رایانامهٔ مسدود شده export_domain_allows: new: @@ -438,9 +456,12 @@ fa: no_file: هیچ پرونده‌ای گزیده نشده export_domain_blocks: import: + description_html: شما در حال وارد کردن لیستی از بلوک های دامنه هستید. لطفاً این فهرست را با دقت بررسی کنید، به خصوص اگر خودتان این فهرست را تهیه نکرده اید. existing_relationships_warning: رابطه‌های پی‌گیری موجود + private_comment_description_html: 'برای کمک به ردیابی بلوک‌های وارد شده از کجا آمده‌اند، بلوک‌های وارد شده با نظر خصوصی زیر ایجاد می‌شوند: %{comment}' private_comment_template: درون‌ریخته از %{source} در %{date} title: درون‌ریزی انسدادهای دامنه + invalid_domain_block: 'یک یا چند بلوک دامنه به دلیل خطا(های) زیر نادیده گرفته شد: %{error}' new: title: درون‌ریزی انسدادهای دامنه no_file: هیچ پرونده‌ای گزیده نشده @@ -453,10 +474,20 @@ fa: title: پیشنهادهای پی‌گیری unsuppress: بازگردانی پیشنهادهای پی‌گیری instances: + audit_log: + title: گزارش های حسابرسی اخیر + view_all: مشاهده گزارش های حسابرسی کامل availability: + description_html: + one: اگر تحویل به دامنه %{count} روز بدون موفقیت انجام نشد، هیچ تلاش دیگری برای تحویل انجام نخواهد شد مگر اینکه تحویل از دامنه دریافت شود. + other: اگر تحویل به دامنه در %{count} روزهای مختلف بدون موفقیت انجام نشد، هیچ تلاش دیگری برای تحویل انجام نخواهد شد مگر اینکه تحویل از دامنه دریافت شود. failure_threshold_reached: در %{date} به آستانهٔ شکست رسید. + failures_recorded: + one: تلاش ناموفق در %{count} روز. + other: تلاش ناموفق در %{count} روز مختلف. no_failures_recorded: هیچ شکستی در سابقه نیست. title: موجود بودن + warning: آخرین تلاش برای اتصال به این سرور ناموفق بوده است back_to_all: همه back_to_limited: محدود back_to_warning: هشدار @@ -464,6 +495,8 @@ fa: confirm_purge: آیا مطمئن هستید می‌خواهید داده را از این دامنه برای همیشه پاک کنید؟ content_policies: comment: یادداشت داخلی + description_html: می‌توانید خط‌مشی‌های محتوایی را تعریف کنید که برای همه حساب‌های این دامنه و هر یک از زیر دامنه‌های آن اعمال شود. + limited_federation_mode_description_html: شما می توانید انتخاب کنید که آیا فدراسیون با این دامنه مجاز است یا خیر. policies: reject_media: رد کردن رسانه reject_reports: نپذیرفتن گزارش‌ها @@ -478,6 +511,7 @@ fa: instance_followers_measure: پی‌گیرندگانمان در آن‌جا instance_follows_measure: پی‌گیرندگانشان در این‌جا instance_languages_dimension: زبان‌های برتر + instance_media_attachments_measure: پیوست‌های رسانه‌ای ذخیره شده instance_reports_measure: گزارش‌ها درباره‌شان instance_statuses_measure: فرسته‌های ذخیره شده delivery: @@ -502,12 +536,15 @@ fa: private_comment: یادداشت خصوصی public_comment: یادداشت عمومی purge: پاکسازی + purge_description_html: اگر فکر می‌کنید این دامنه برای همیشه آفلاین است، می‌توانید تمام سوابق حساب و داده‌های مرتبط با این دامنه را از فضای ذخیره‌سازی خود حذف کنید. این ممکن است کمی طول بکشد. title: ارتباط همگانی total_blocked_by_us: مسدودشده از طرف ما total_followed_by_them: ما را پی می‌گیرند total_followed_by_us: ما پیگیرشان هستیم total_reported: گزارش‌ها درباره‌شان total_storage: عکس‌ها و ویدیوها + totals_time_period_hint_html: مجموع نمایش داده شده در زیر شامل داده های تمام زمان است. + unknown_instance: در حال حاضر هیچ سابقه ای از این دامنه در این سرور وجود ندارد. invites: deactivate_all: غیرفعال‌کردن همه filter: @@ -518,7 +555,7 @@ fa: title: دعوت‌ها ip_blocks: add_new: ایجاد قانون - created_msg: قانون IP جدید با موفقیت افزوده شد + created_msg: قانون آی پی جدید با موفقیت افزوده شد delete: پاک کردن expires_in: '1209600': ۲ هفته @@ -528,15 +565,15 @@ fa: '86400': ۱ روز '94670856': ۳ سال new: - title: ایجاد قانون جدید IP + title: ایجاد قانون جدید آی پی no_ip_block_selected: هیچ قاعدهٔ آی‌پی‌ای تغییری نکرد زیرا هیچ‌کدام گزیده نشده بودند - title: قوانین IP + title: قوانین آی پی relationships: title: روابط %{acct} relays: add_new: افزودن رلهٔ تازه delete: حذف - description_html: یک رلهٔ میان‌سروری (federation relay) یک سرور میانجی است که حجم زیادی از فرسته‌های عمومی را بین سرورهای گوناگونی که عضوش می‌شوند جابه‌جا می‌کند. رله‌ها به سرورهای کوچک و متوسط کمک می‌کنند تا مطالب عمومی بیشتری را بیابند. اگر رله نباشد، این مطالب عمومی تنها وقتی پیدا می‌شوند که کاربران محلی خودشان پیگیر کاربران روی سرورهای دیگر شوند. + description_html: "رله فدراسیون یک سرور واسطه است که حجم زیادی از پست‌های عمومی را بین سرورهایی که مشترک و منتشر می‌کنند رد و بدل می‌کند. می‌تواند به سرورهای کوچک و متوسط ​​کمک کند تا محتوایی را از طرف دیگر پیدا کنند، که در غیر این صورت از کاربران محلی می‌خواهد به‌طور دستی افراد دیگر را در سرورهای راه دور دنبال کنند." disable: از کار انداختن disabled: از کار افتاده enable: به کار انداختن @@ -564,19 +601,31 @@ fa: mark_as_sensitive_description_html: رسانهٔ درون فرستهٔ گزارش شده به عنوان حسّاس علامت خورده و شکایتی ضبط خواهد شد تا بتوانید خلاف‌های آینده از همین حساب را بهتر مدیریت کنید. other_description_html: دیدن انتخاب های بیشتر برای کنترل رفتار حساب و سفارشی سازی ارتباط با حساب گزارش شده. resolve_description_html: هیچ کنشی علیه حساب گزارش شده انجام نخواهد شد. هیچ شکایتی ضبط نشده و گزارش بسته خواهد شد. + silence_description_html: این حساب فقط برای کسانی قابل مشاهده خواهد بود که قبلاً آن را دنبال می کنند یا به صورت دستی آن را جستجو می کنند و دسترسی آن را به شدت محدود می کند. همیشه می توان برگرداند. همه گزارش‌های مربوط به این حساب را می‌بندد. + suspend_description_html: اکانت و تمامی محتویات آن غیرقابل دسترسی و در نهایت حذف خواهد شد و تعامل با آن غیر ممکن خواهد بود. قابل برگشت در عرض 30 روز همه گزارش‌های مربوط به این حساب را می‌بندد. + actions_description_html: تصمیم گیری کنش اقدامی برای حل این گزارش. در صورت انجام کنش تنبیهی روی حساب گزارش شده، غیر از زمان یکه دستهٔ هرزنامه گزیده باشد، برایش آگاهی رایانامه‌ای فرستاده خواهد شد. + actions_description_remote_html: تصمیم بگیرید که چه اقدامی برای حل این گزارش انجام دهید. این فقط بر نحوه ارتباط سرور شما با این حساب راه دور و مدیریت محتوای آن تأثیر می گذارد. + actions_no_posts: این گزارش هیچ پست مرتبطی برای حذف ندارد add_to_report: افزودن بیش‌تر به گزارش + already_suspended_badges: + local: از پیش روی این کارساز معلّق شده + remote: از پیش روی کارسازشان معلّق شده are_you_sure: مطمئنید؟ assign_to_self: به عهدهٔ من بگذار assigned: مدیر عهده‌دار by_target_domain: دامنهٔ حساب گزارش‌شده cancel: لغو category: دسته + category_description_html: دلیل گزارش این حساب و/یا محتوا در ارتباط با حساب گزارش شده ذکر خواهد شد comment: none: هیچ + comment_description_html: 'برای ارائه اطلاعات بیشتر، %{name} نوشت:' confirm: تأیید + confirm_action: تأیید کنش مدیریتی برای ‪@%{acct}‬ created_at: گزارش‌شده delete_and_resolve: حذف فرسته‌ها forwarded: هدایت شده + forwarded_replies_explanation: این گزارش از یک کاربر راه دور و در مورد محتوای راه دور است. برای شما ارسال شده است زیرا محتوای گزارش شده در پاسخ به یکی از کاربران شما است. forwarded_to: هدایت شده به %{domain} mark_as_resolved: علامت‌گذاری به عنوان حل‌شده mark_as_sensitive: علامت به حساس @@ -589,18 +638,39 @@ fa: delete: حذف placeholder: کارهایی را که در این باره انجام شده، یا هر به‌روزرسانی دیگری را بنویسید... title: یادداشت‌ها + notes_description_html: مشاهده کنید و یادداشت هایی را برای مدیران دیگر و خود آینده خود بگذارید + processed_msg: 'گزارش #%{id} با موفقیت پردازش شد' + quick_actions_description_html: 'یک اقدام سریع انجام دهید یا به پایین بروید تا محتوای گزارش شده را ببینید:' remote_user_placeholder: کاربر دوردست از %{instance} reopen: دوباره به جریان بیندازید report: 'گزارش #%{id}' reported_account: حساب گزارش‌شده reported_by: گزارش از طرف + reported_with_application: گزارش شده با برنامه resolved: حل‌شده resolved_msg: گزارش با موفقیت حل شد! skip_to_actions: پرش به کنش‌ها status: نوشته statuses: محتوای گزارش شده + statuses_description_html: محتوای توهین آمیز در ارتباط با حساب گزارش شده ذکر می شود summary: + action_preambles: + delete_html: 'شما در حال حذف برخی از پست‌های @%{acct} هستید. این خواهد شد:' + mark_as_sensitive_html: 'شما در حال علامت گذاری برخی از پست های @%{acct} به عنوان حساس هستید. این خواهد شد:' + silence_html: 'شما در شرف محدود کردن @%{acct} هستید. این خواهد شد:' + suspend_html: 'شما در شرف تعلیق کردن @%{acct} هستید. این خواهد شد:' + actions: + delete_html: پست های توهین آمیز را حذف کنید + mark_as_sensitive_html: رسانه پست های توهین آمیز را به عنوان حساس علامت گذاری کنید + silence_html: دسترسی @%{acct} را به شدت محدود کنید و نمایه و محتویات آنها را فقط برای افرادی که قبلاً آنها را دنبال می‌کنند قابل مشاهده کنید یا به صورت دستی نمایه آن را جستجو کنید + suspend_html: تعلیق @%{acct}، غیرقابل دسترس کردن نمایه و محتوای آنها و تعامل با آنها غیر ممکن + close_report: 'علامت گذاری گزارش #%{id} به عنوان حل شده است' + close_reports_html: "همه گزارش‌ها در برابر @%{acct} را به‌عنوان حل‌وفصل علامت‌گذاری کنید" + delete_data_html: نمایه و محتویات @%{acct} را 30 روز بعد حذف کنید، مگر اینکه در این مدت معلق نشوند + preview_preamble_html: "@%{acct} اخطاری با محتوای زیر دریافت خواهد کرد:" record_strike_html: ضبط شکایتی علیه ‪@%{acct}‬ برای کمک به تصمیم‌گیری برای قانون‌شکنی‌های آیندهٔ این حساب + send_email_html: فرستادن رایانامهٔ هشدار به ‪@%{acct}‬ + warning_placeholder: استدلال اضافی اختیاری برای اقدام تعدیل. target_origin: خاستگاه حساب گزارش‌شده title: گزارش‌ها unassign: پس‌گرفتن مسئولیت @@ -620,34 +690,54 @@ fa: moderation: نظارت special: ویژه delete: حذف + description_html: با نقش‌های کاربر، می‌توانید تنظیمات و مناطقی از ماستودون را که کاربران شما می‌توانند به آن دسترسی داشته باشند، سفارشی کنید. edit: ویراش نقش %{name} everyone: اجازه‌های پیش‌گزیده + everyone_full_description_html: این نقش پایه است که بر همه کاربران تأثیر می‌گذارد، حتی آن‌هایی که نقش تعیین‌شده ندارند. همه نقش های دیگر مجوزها را از آن به ارث می برند. permissions_count: one: "%{count} اجازه" other: "%{count} اجازه" privileges: administrator: مدیر + administrator_description: کاربرانی که این مجوز را دارند از هر مجوزی عبور می کنند delete_user_data: حذف داده‌های کاربر + delete_user_data_description: به کاربران این امکان را می دهد که بدون تاخیر داده های سایر کاربران را حذف کنند invite_users: دعوت کاربران + invite_users_description: به کاربران اجازه می دهد افراد جدیدی را به سرور دعوت کنند manage_announcements: مدیریت اعلامیه‌ها + manage_announcements_description: به کاربران اجازه می دهد تا اعلان ها را روی سرور مدیریت کنند manage_appeals: مدیریت درخواست‌های بازنگری + manage_appeals_description: به کاربران امکان می‌دهد درخواست‌های تجدیدنظر علیه اقدامات تعدیل را بررسی کنند manage_blocks: مدیریت مسدودی‌ها + manage_blocks_description: می‌گذارد کاربران فراهم‌کنندگان رایانامه و نشانی‌های آی‌پی را مسدود کنند manage_custom_emojis: مدیریت ایموجی‌های سفارشی + manage_custom_emojis_description: به کاربران اجازه می دهد تا ایموجی های سفارشی را روی سرور مدیریت کنند manage_federation: مدیریت خودگردانی + manage_federation_description: به کاربران اجازه می‌دهد تا اتحاد با دامنه‌های دیگر را مسدود یا اجازه دهند و تحویل‌پذیری را کنترل کنند manage_invites: مدیریت دعوت‌ها + manage_invites_description: به کاربران امکان می دهد پیوندهای دعوت را مرور و غیرفعال کنند manage_reports: مدیریت گزارش‌ها + manage_reports_description: به کاربران امکان می‌دهد گزارش‌ها را بررسی کنند و اقدامات تعدیل را علیه آنها انجام دهند manage_roles: مدیریت نقش‌ها + manage_roles_description: به کاربران امکان می دهد نقش های زیر نقش خود را مدیریت و اختصاص دهند manage_rules: مدیریت قوانین manage_rules_description: اجازه به کاربران برای تغییر قوانین کارساز manage_settings: مدیریت تنظیمات manage_settings_description: اجازه به کاربران برای تغییر تنظیمات پایگاه manage_taxonomies: مدیریت طیقه‌بندی‌ها + manage_taxonomies_description: می‌گذارد کاربران محتوای داغ را بررسی و تنظیمات برچسب را به‌روز کنند manage_user_access: مدیریت دسترسی کاربران + manage_user_access_description: می‌گذارد کاربران هویت‌سنجی دو مرحله‌ای دیگر کاربران را از کار انداخته، نشانی رایانامه‌شان را تغییر داده و گذرواژه‌شان را بازنشانی کنند manage_users: مدیریت کاربران + manage_users_description: به کاربران اجازه می دهد تا جزئیات سایر کاربران را مشاهده کنند و اقدامات تعدیل را علیه آنها انجام دهند manage_webhooks: مدیریت قلّاب‌های وب + manage_webhooks_description: به کاربران اجازه می دهد تا برای رویدادهای اداری، وب هوک ها را راه‌اندازی کنند + view_audit_log: مشاهده گزارش حسابرسی + view_audit_log_description: به کاربران اجازه می دهد تا تاریخچه ای از اقدامات مدیریتی روی سرور را مشاهده کنند view_dashboard: دیدن داشبورد view_dashboard_description: اجازه به کاربران برای دسترسی به داشتبورد و سنجه‌های مختلف view_devops: دواپس + view_devops_description: به کاربران امکان دسترسی به داشبورد Sidekiq و pgHero را می دهد title: نقش‌ها rules: add_new: افزودن قانون @@ -659,16 +749,28 @@ fa: settings: about: manage_rules: مدیریت قانون‌های کارساز + preamble: اطلاعات عمیقی در مورد نحوه کارکرد، تعدیل و تأمین مالی سرور ارائه دهید. + rules_hint: یک منطقه اختصاصی برای قوانینی وجود دارد که انتظار می رود کاربران شما به آن پایبند باشند. title: درباره appearance: preamble: سفارشی‌سازی رابطس وب ماستودون. title: ظاهر branding: + preamble: نام تجاری سرور شما آن را از سایر سرورهای شبکه متمایز می کند. این اطلاعات ممکن است در محیط های مختلفی مانند رابط وب ماستودون، برنامه های کاربردی بومی، در پیش نمایش پیوند در سایر وب سایت ها و در برنامه های پیام رسانی و غیره نمایش داده شود. به همین دلیل، بهتر است این اطلاعات واضح، کوتاه و مختصر باشد. title: ویژندگی + captcha_enabled: + desc_html: این متکی به اسکریپت های خارجی از hCaptcha است که ممکن است یک نگرانی امنیتی و حفظ حریم خصوصی باشد. علاوه بر این، این می‌تواند فرآیند ثبت نام را به میزان قابل توجهی برای برخی از افراد (به ویژه افراد ناتوان) کمتر در دسترس قرار دهد. به این دلایل، لطفاً اقدامات جایگزین مانند ثبت نام مبتنی بر تأیید یا دعوت را در نظر بگیرید. + title: کاربران جدید را ملزم به حل یک کپچا برای تأیید حساب خود کنید + content_retention: + danger_zone: منطقهٔ خطر + preamble: نحوه ذخیره محتوای تولید شده توسط کاربر در ماستودون را کنترل کنید. + title: حفظ محتوا default_noindex: + desc_html: بر همه کاربرانی که خودشان این تنظیم را تغییر نداده اند تأثیر می گذارد title: درخواست خروج از اندیس‌گذاری پیش‌گزیدهٔ موتور جست‌وجو discovery: follow_recommendations: پیروی از پیشنهادها + preamble: ارائه محتوای جالب در جذب کاربران جدیدی که ممکن است کسی ماستودون را نشناسند، مفید است. نحوه عملکرد ویژگی‌های کشف مختلف روی سرور خود را کنترل کنید. profile_directory: شاخهٔ نمایه public_timelines: خط زمانی‌های عمومی publish_discovered_servers: انتشار کارسازهای کشف شده @@ -680,18 +782,27 @@ fa: disabled: برای هیچ‌کدام users: برای کاربران محلی واردشده registrations: + moderation_recommandation: لطفاً قبل از اینکه ثبت نام را برای همه باز کنید، مطمئن شوید که یک تیم نظارتی مناسب و واکنشی دارید! + preamble: کنترل کنید چه کسی می تواند در سرور شما یک حساب ایجاد کند. title: ثبت‌نام‌ها registrations_mode: modes: approved: ثبت نام نیازمند تأیید مدیران است none: کسی نمی‌تواند ثبت نام کند open: همه می‌توانند ثبت نام کنند + warning_hint: توصیه می‌کنیم از ”تأیید لازم برای ثبت‌نام” استفاده کنید، مگر اینکه مطمئن باشید تیم نظارتی شما می‌تواند هرزنامه‌ها و ثبت‌های مخرب را به موقع مدیریت کند. + security: + authorized_fetch: نیاز به احراز هویت از سرورهای فدرال + authorized_fetch_hint: نیاز به احراز هویت از سرورهای فدرال، اجرای دقیق‌تر بلوک‌های سطح کاربر و سرور را ممکن می‌سازد. با این حال، این به قیمت جریمه عملکرد است، دسترسی به پاسخ‌های شما را کاهش می‌دهد و ممکن است مشکلات سازگاری با برخی از سرویس‌های فدرال را ایجاد کند. علاوه بر این، این مانع از دریافت پست‌ها و حساب‌های عمومی شما توسط بازیگران اختصاصی نمی‌شود. + authorized_fetch_overridden_hint: شما در حال حاضر نمی توانید این تنظیم را تغییر دهید زیرا توسط یک متغیر محیطی لغو شده است. + federation_authentication: اجرای احراز هویت فدراسیون title: تنظیمات کارساز site_uploads: delete: پرونده بارگذاری شده را پاک کنید destroyed_msg: بارگذاری پایگاه با موفقیت حذف شد! software_updates: critical_update: بحرانی — لطفاً به سرعت به‌روز کنید + description: توصیه می‌شود نصب ماستودونتان را به‌روز نگه داشته تا از جدیدترین اصلاحات و ویژگی‌ها بهره‌مند شوید. همچنین گاهی به‌روز رسانی به‌موقع ماستودون برای پیشگیری از مشکلات امنیتی ضروریست. برای همین ماستودون هر ۳۰ دقیقه به‌روز رسانی‌ها را بررسی کرده و بنا به ترجیحات آگاهی رایانامه‌ایتان آگاهتان خواهد کرد. documentation_link: بیش‌تر بیاموزید release_notes: یادداشت‌های انتشار title: به‌روز رسانی‌های موجود @@ -699,6 +810,7 @@ fa: types: major: ارائه بزرگ minor: ارائه کوچک + patch: انتشار وصله - رفع اشکال و تغییرات آسان برای اعمال version: نگارش statuses: account: نگارنده @@ -740,10 +852,22 @@ fa: system_checks: database_schema_check: message_html: تعداد مهاجرت پایگاه داده در انتظار انجام هستند. لطفا آن‌ها را اجرا کنید تا اطمینان یابید که برنامه مطابق انتظار رفتار خواهد کرد + elasticsearch_health_red: + message_html: خوشه Elasticsearch ناسالم است (وضعیت قرمز)، ویژگی های جستجو در دسترس نیستند + elasticsearch_health_yellow: + message_html: خوشه Elasticsearch ناسالم است (وضعیت زرد)، ممکن است بخواهید دلیل آن را بررسی کنید + elasticsearch_index_mismatch: + message_html: نگاشت فهرست Elasticsearch منسوخ شده است. لطفاً tootctl search deploy --only=%{value} را اجرا کنید elasticsearch_preset: action: دیدن مستندات + message_html: خوشه Elasticsearch شما بیش از یک گره دارد، اما ماستودون برای استفاده از آنها پیکربندی نشده است. elasticsearch_preset_single_node: action: دیدن مستندات + message_html: خوشه Elasticsearch شما فقط یک گره دارد، ES_PRESET باید روی single_node_cluster تنظیم شود. + elasticsearch_reset_chewy: + message_html: فهرست سیستم Elasticsearch شما به دلیل تغییر تنظیمات قدیمی است. لطفاً برای به روز رسانی tootctl search deploy --reset-chewy را اجرا کنید. + elasticsearch_running_check: + message_html: به Elasticsearch متصل نشد. لطفاً بررسی کنید که در حال اجرا است یا جستجوی متن کامل را غیرفعال کنید elasticsearch_version_check: message_html: 'نگارش الستیک‌سرچ ناسازگار: %{value}' version_comparison: الستیک‌سرچ %{running_version} در حال اجراست، حال که %{required_version} لازم است @@ -752,6 +876,9 @@ fa: message_html: هیچ قانون کارسازی تعریف نکرده‌اید. sidekiq_process_check: message_html: صف(های) %{value} فاقد هیچونه فرایند Sidekiq هستند. لطفا تنظیمات Sidekiq خود را بازبینی کنید + software_version_check: + action: دیدن به‌روز رسانی‌های موجود + message_html: به‌روز رسانی ماستودون موجود است. software_version_critical_check: action: مشاهده به‌روزرسانی‌های موجود message_html: یک به‌روزرسانی حیاتی ماستودون موجود است، لطفا در اسرع وقت به‌روزرسانی کنید. @@ -775,35 +902,64 @@ fa: trendable: قابل داغ شدن unreviewed: بررسی نشده usable: قابل استفاده + name: نام + newest: جدیدترین + oldest: قدیمی‌ترین + open: دیدن عمومی + reset: بازنشانی review: وضعیت بازبینی + search: جست‌وجو + title: برچسب‌ها updated_msg: تنظیمات برچسب‌ها با موفقیت به‌روز شد title: مدیریت trends: allow: اجازه approved: تأیید شده + confirm_allow: مطمئنید که می‌خواهید برچسب‌های گزیده را مجاز کنید؟ + confirm_disallow: مطمئنید که می‌خواهید برچسب‌های گزیده را ممنوع کنید؟ disallow: اجازه ندادن links: allow: اجازه به پیوند allow_provider: اجازه به ناشر + confirm_allow: مطمئنید که می‌خواهید پیوندهای گزیده را مجاز کنید؟ + confirm_allow_provider: مطمئنید که می‌خواهید فراهم‌کننده‌های گزیده را مجاز کنید؟ confirm_disallow: مطمئنید که می خواهید پیوندهای گزیده را ممنوع کنید؟ confirm_disallow_provider: مطمئنید که می خواهید فراهم کننده‌های گزیده را ممنوع کنید؟ + description_html: اینها پیوندهایی هستند که در حال حاضر توسط حساب هایی که سرور شما پست ها را از آنها می بیند به اشتراک گذاشته می شود. این می تواند به کاربران شما کمک کند تا بفهمند در جهان چه می گذرد. تا زمانی که ناشر را تأیید نکنید، هیچ پیوندی به صورت عمومی نمایش داده نمی شود. همچنین می توانید پیوندهای فردی را مجاز یا رد کنید. disallow: اجازه ندادن به پیوند disallow_provider: اجازه ندادن به ناشر no_link_selected: هیچ پیوندی تغییر نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند publishers: no_publisher_selected: هیچ ناشری تغییر نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند + shared_by_over_week: + one: هم‌رسانده به دست یک نفر در هفتهٔ گذشته + other: هم‌رسانده به دست %{count} نفر در هفتهٔ گذشته title: پیوندهای داغ + usage_comparison: امروز %{today} بار هم‌رسانی شده. در مقایسه با %{yesterday} بار دیروز not_allowed_to_trend: اجازهٔ داغ شدن ندارد + only_allowed: فقط مجازها pending_review: بازبینی منتظر preview_card_providers: + allowed: پیوندها از این ناشر می‌توانند داغ شوند + description_html: اینها دامنه هایی هستند که پیوندهای آنها اغلب در سرور شما به اشتراک گذاشته می شود. پیوندها به صورت عمومی ترند نمی شوند مگر اینکه دامنه پیوند تأیید شود. تأیید (یا رد) شما به زیر دامنه ها نیز گسترش می یابد. + rejected: پیوندها از این ناشر داغ نخواهند شد title: ناشران rejected: رد شده statuses: allow: اجازه به فرسته allow_account: اجازه به نگارنده + confirm_allow: مطمئنید که می‌خواهید وضعیت‌های گزیده را مجاز کنید؟ + confirm_allow_account: مطمئنید که می‌خواهید حساب‌های گزیده را مجاز کنید؟ + confirm_disallow: مطمئنید که می‌خواهید وضعیت‌های گزیده را ممنوع کنید؟ + confirm_disallow_account: مطمئنید که می‌خواهید حساب‌های گزیده را ممنوع کنید؟ + description_html: اینها پست هایی هستند که سرور شما در مورد آنها می داند و در حال حاضر در حال به اشتراک گذاری و محبوبیت زیادی هستند. می تواند به کاربران جدید و بازگشتی شما کمک کند تا افراد بیشتری را برای دنبال کردن پیدا کنند. تا زمانی که نویسنده را تأیید نکنید، هیچ پستی به صورت عمومی نمایش داده نمی‌شود و نویسنده اجازه می‌دهد حساب خود را به دیگران پیشنهاد دهد. همچنین می توانید پست های فردی را مجاز یا رد کنید. disallow: ممنوع کردن فرسته disallow_account: ممنوع کردن نگارنده no_status_selected: هیچ فرستهٔ داغی تغییری نکرد زیرا هیچ‌کدام از آن‌ها انتخاب نشده بودند + not_discoverable: نویسنده امکان کشف بودن را انتخاب نکرده است + shared_by: + one: یک بار برگزیده یا هم‌رسانی شده + other: "%{friendly_count} بار برگزیده یا هم‌رسانی شده" title: فرسته‌های داغ tags: current_score: امتیاز کنونی %{score} @@ -812,25 +968,38 @@ fa: tag_languages_dimension: زبان‌های برتر tag_servers_dimension: کارسازهای برتر tag_servers_measure: کارسازهای گوناگون - tag_uses_measure: کل استفاده‌ّا + tag_uses_measure: کل استفاده‌ها + description_html: اینها هشتگ هایی هستند که در حال حاضر در بسیاری از پست هایی که سرور شما می بیند ظاهر می شوند. این می تواند به کاربران شما کمک کند تا بفهمند مردم در حال حاضر بیشتر درباره چه چیزی صحبت می کنند. تا زمانی که شما آن ها را تایید نکنید، هیچ هشتگ به صورت عمومی نمایش داده نمی شود. listable: می‌تواند پیشنهاد شود + no_tag_selected: هیچ برچسبی تغییر نکرد زیرا هیچ‌کدام گزیده نبودند not_listable: پیشنهاد نخواهد شد + not_trendable: تحت روندها ظاهر نمی شود not_usable: غیر قابل استفاده + peaked_on_and_decaying: در %{date} به اوج خود رسید، اکنون در حال زوال است title: برچسب‌های پرطرفدار + trendable: می تواند در زیر روندها ظاهر شود trending_rank: 'پرطرفدار #%{rank}' usable: قابل استفاده + usage_comparison: "%{today} بار امروز در مقایسه با %{yesterday} دیروز استفاده شد" + used_by_over_week: + one: در هفته گذشته توسط یک نفر استفاده شده است + other: در هفته گذشته توسط %{count} نفر استفاده شده است + title: توصیه ها و روندها trending: پرطرفدار warning_presets: add_new: افزودن تازه delete: زدودن edit_preset: ویرایش هشدار پیش‌فرض empty: هنز هیچ پیش‌تنظیم هشداری را تعریف نکرده‌اید. + title: از پیش تنظیم های هشدار webhooks: add_new: افزودن نقطهٔ پایانی delete: حذف + description_html: یک وب هوک ماستودون را قادر می‌سازد تا اعلان‌های هم‌زمان در مورد رویدادهای انتخابی را به برنامه خود ارسال کند، بنابراین برنامه شما می‌تواند به‌طور خودکار واکنش‌ها را تحریک کند. disable: از کار انداختن disabled: از کار افتاده edit: ویرایش نقطهٔ پایانی + empty: شما هنوز هیچ نقطه پایانی وبی هوک را پیکربندی نکرده‌اید. enable: به کار انداختن enabled: فعّال enabled_events: @@ -844,6 +1013,9 @@ fa: title: قلاب‌های وب webhook: قلاب وب admin_mailer: + auto_close_registrations: + body: به دلیل عدم فعالیت اخیر ناظر، ثبت نام در %{instance} به طور خودکار به نیاز به بازبینی دستی تغییر یافته است تا از استفاده %{instance} به عنوان بستری برای بازیگران بد احتمالی جلوگیری شود. در هر زمان می توانید آن را به ثبت نام های باز تغییر دهید. + subject: ثبت نام برای %{instance} به طور خودکار به نیاز به تأیید تغییر یافته است new_appeal: actions: delete_statuses: برای حذف فرسته‌هایشان @@ -853,6 +1025,12 @@ fa: sensitive: برای علامت زدن حسابشان به عنوان حسّاس silence: برای محدود کردن حساب آنها suspend: برای تعلیق حسابشان + body: "%{target} برای یک تصمیم نظارتی توسط %{action_taken_by} از %{date} که %{type} بود، درخواست تجدیدنظر می‌کند. آنها نوشتند:" + next_steps: می‌توانید برای لغو تصمیم تعدیل، درخواست تجدیدنظر را تأیید کنید یا آن را نادیده بگیرید. + subject: "%{username} در حال درخواست تجدیدنظر برای تصمیم نظارت در %{instance}" + new_critical_software_updates: + body: نسخه های انتقادی جدید ماستودون منتشر شده است، ممکن است بخواهید در اسرع وقت به روز رسانی کنید! + subject: به‌روزرسانی‌های ماستودون بحرانی برای %{instance} در دسترس هستند! new_pending_account: body: جزئیات حساب تازه این‌جاست. شما می‌توانید آن را تأیید یا رد کنید. subject: حساب تازه‌ای در %{instance} نیازمند بررسی است (%{username}) @@ -860,7 +1038,11 @@ fa: body: کاربر %{reporter} کاربر %{target} را گزارش داد body_remote: کسی از %{domain} گزارش %{target} را فرستاده subject: گزارش تازه‌ای برای %{instance} (#%{id}) + new_software_updates: + body: نسخه های جدید ماستودون منتشر شده است، ممکن است بخواهید به روز رسانی کنید! + subject: نسخه های جدید ماستودون برای %{instance} در دسترس هستند! new_trends: + body: 'موارد زیر قبل از نمایش عمومی نیاز به بررسی دارند:' new_trending_links: title: پیوندهای داغ new_trending_statuses: @@ -905,11 +1087,19 @@ fa: auth: apply_for_account: درخواست یک حساب captcha_confirmation: + help_html: اگر مشکلی در حل کپچا دارید، می توانید از طریق %{email} با ما در تماس باشید و ما می توانیم به شما کمک کنیم. + hint_html: فقط یک چیز دیگر! ما باید تأیید کنیم که شما یک انسان هستید (این برای جلوگیری از هرزنامه است!). کپچا زیر را حل کنید و روی "ادامه" کلیک کنید. title: بررسی های امنیتی confirmations: + awaiting_review: نشانی رایانامه‌تان تأیید شد! عوامل %{domain} دارند ثبت‌نامتان را بررسی می‌کنند. در صورت تأیید حسابتان رایانامه‌ای خواهید گرفت! awaiting_review_title: ثبت‌نامتان دارد بررسی می‌شود + clicking_this_link: زدن این پیوند login_link: ورود + proceed_to_login_html: می‌توانید به %{login_link} ادامه دهید. + redirect_to_app_html: باید به برنامه %{app_name} هدایت می‌شوید. اگر این اتفاق نیفتاد، %{clicking_this_link} را امتحان کنید یا به صورت دستی به برنامه برگردید. + registration_complete: ثبت نام شما در %{domain} اکنون کامل شده است! welcome_title: خوش آمدید، %{name}! + wrong_email_hint: اگر نشانی رایانامه درست نیست می‌توانید در تنظیمات حساب تغییرش دهید. delete_account: پاک‌کردن حساب delete_account_html: اگر می‌خواهید حساب خود را پاک کنید، از این‌جا پیش بروید. از شما درخواست تأیید خواهد شد. description: @@ -930,6 +1120,7 @@ fa: or_log_in_with: یا ورود به وسیلهٔ privacy_policy_agreement_html: سیاست محرمانگی را خوانده و پذیرفته‌ام progress: + confirm: تأیید رایانامه details: جزئیات شما review: بررسی ما rules: پذیرش قوانین @@ -943,26 +1134,44 @@ fa: rules: accept: پذیرفتن back: بازگشت + invited_by: 'با سپاس از دعوتی از این فرد دریافت کرده‌اید می‌توانید به %{domain} بپیوندید:' + preamble: اینها توسط گردانندگان %{domain} تنظیم و اجرا می شوند. + preamble_invited: قبل از ادامه، لطفاً قوانین اساسی تنظیم شده توسط مدیران %{domain} را در نظر بگیرید. + title: برخی از قوانین اساسی. title_invited: شما دعوت شده اید. security: امنیت set_new_password: تعین گذرواژه جدید setup: + email_below_hint_html: بررسی شاخهٔ هرزنامه یا درخواست رایانامه‌ای دیگر. در صورت اشتباه بودن نشانی رایانامه می‌توانید تصحیحش کنید. email_settings_hint_html: برای تأیید %{email}، روی پیوندی که برای شما ارسال کردیم ضربه بزنید. همین جا منتظر می‌مانیم. link_not_received: پیوندی نگرفتید؟ + new_confirmation_instructions_sent: تا چند دقیقهٔ دیگر رایانامه‌ای جدید با پیوند تأییدیه خواهید گرفت! title: صندوق ورودیتان را بررسی کنید sign_in: + preamble_html: با اطلاعات کاربری %{domain} خود وارد شوید. اگر حساب شما روی سرور دیگری میزبانی شود، نمی توانید در اینجا وارد شوید. title: ورود به %{domain} + sign_up: + manual_review: ثبت‌نام‌ها در %{domain} از طریق بازبینی دستی توسط گردانندگان ما انجام می‌شود. برای کمک به ما در پردازش ثبت نام خود، کمی در مورد خودتان و اینکه چرا می خواهید یک حساب در %{domain} داشته باشید، بنویسید. + preamble: با داشتن یک حساب کاربری در این سرور ماستودون، می‌توانید هر شخص دیگری را در شبکه دنبال کنید، صرف نظر از اینکه حساب او در کجا میزبانی می‌شود. + title: بیایید روی %{domain} برپایتان کنیم. status: account_status: وضعیت حساب + confirming: منتظر کامل شدن تأیید رایانامه. functional: حسابتان کاملاً قابل استفاده است. + pending: درخواستتان منتظر بازبینی مسئولان است. ممکن است کمی طول بکشد. اگر درخواستتان پذیرفته شود رایانامه‌ای خواهید گرفت. redirecting_to: حساب شما غیرفعال است زیرا هم‌اکنون به %{acct} منتقل شده است. + self_destruct: از آنجایی که %{domain} در حال بسته شدن است، شما فقط دسترسی محدودی به حساب خود خواهید داشت. view_strikes: دیدن شکایت‌های گذشته از حسابتان too_fast: فرم با سرعت بسیار زیادی فرستاده شد، دوباره تلاش کنید. use_security_key: استفاده از کلید امنیتی author_attribution: example_title: متن نمونه + hint_html: آیا در خارج از ماستودون اخبار یا مقالات وبلاگ می نویسید؟ نحوه دریافت اعتبار زمانی که آنها در ماستودون به اشتراک گذاشته می شوند را کنترل کنید. + instructions: 'مطمئن شوید این کد در HTML مقاله‌تان وجود دارد:' more_from_html: بیش‌تر از %{name} s_blog: بلاگ %{name} + then_instructions: سپس نام دامنهٔ مقاله را در زمینهٔ زیر بیفزایید. + title: اعتباردهی به نگارنده challenge: confirm: ادامه hint_html: "نکته: ما در یک ساعت آینده گذرواژه‌تان را از شما نخواهیم پرسید." @@ -999,6 +1208,9 @@ fa: before: 'پیش از ادامه،‌ لطفاً نکته‌های زیر را به دقت بخوانید:' caches: ممکن است محتواهایی که دیگر کارسازها ذخیره کرده‌اند، همچنان باقی بماند data_removal: نوشته‌ها و داده‌های شما برای همیشه پاک خواهند شد + email_change_html: می‌توانید بدون حذف حسابتان نشانی رایانامه‌تان را تغییر دهید + email_contact_html: اگر هنوز نرسیده، می‌توانید برای راهنمایی به %{email} رایانامه دهید + email_reconfirmation_html: اگر رایانامهٔ تأیید را نگرفته‌اید، می‌توانید دوباره درخواستش دهید irreversible: شما نخواهید توانست حساب خود را بازیابی یا فعال‌سازی کنید more_details_html: برای اطلاعات بیشتر سیاست رازداری را ببینید. username_available: نام کاربری شما دوباره در دسترس خواهد بود @@ -1086,13 +1298,16 @@ fa: add_keyword: افزودن کلیدواژه keywords: کلیدواژه‌ها statuses: فرسته‌های جدا + statuses_hint_html: این فیلتر برای انتخاب هر پست صرف نظر از مطابقت با کلمات کلیدی زیر اعمال می شود. پست‌ها را از فیلتر بازبینی یا حذف کنید. title: ویرایش پالایه errors: deprecated_api_multiple_keywords: این پارامترها نمی‌توانند از این برنامه تغییر یابند؛ چرا که به بیش از یک کلیدواژهٔ پالایه اعمال می‌شود. از برنامه‌ای جدیدتر یا میانای وب استفاده کنید. invalid_context: زمینه‌ای موجود نیست یا نامعتبر است index: + contexts: پالایه‌ها در %{contexts} delete: پاک‌کردن empty: هیچ پالایه‌ای ندارید. + expires_in: در %{distance} منقضی می شود expires_on: در %{date} منقضی می شود keywords: one: "%{count} کلیدواژه" @@ -1112,9 +1327,13 @@ fa: batch: remove: برداشتن از پالایه index: + hint: این فیلتر برای انتخاب پست های فردی بدون توجه به معیارهای دیگر اعمال می شود. می توانید پست های بیشتری را از رابط وب به این فیلتر اضافه کنید. title: فرسته‌های پالوده generic: all: همه + all_items_on_page_selected_html: + one: "%{count} مورد در این صفحه گزیده شده." + other: همهٔ %{count} مورد این صفحه گزیده شده‌اند. all_matching_items_selected_html: one: "%{count} مورد مطابق با جست‌وجویتان گزیده شده." other: "%{count} مورد مطابق با جست‌وجویتان گزیده شدند." @@ -1136,15 +1355,33 @@ fa: other: یک چیزی هنوز درست نیست! لطفاً %{count} خطای زیر را ببینید imports: errors: + empty: پروندهٔ خالی CSV + incompatible_type: ناسازگار با گونهٔ درون‌ریزی گزیده + invalid_csv_file: 'پروندهٔ CSV نامعتبر. خطا: %{error}' over_rows_processing_limit: دارای بیش از %{count} ردیف too_large: حجم فایل خیلی بزرگ است failures: شکست‌ها imported: وارد شد + mismatched_types_warning: به نظر می رسد ممکن است نوع اشتباهی را برای این درون ریزی انتخاب کرده باشید، لطفاً دوباره بررسی کنید. modes: merge: ادغام merge_long: داده‌های فعلی را داشته باشید و داده‌های تازه‌ای بیفزایید overwrite: بازنویسی overwrite_long: داده‌های فعلی را پاک کنید و داده‌های تازه‌ای بیفزایید + overwrite_preambles: + blocking_html: شما می‌خواهید فهرست مسدود خود را با حداکثر %{total_items} حساب از %{filename} جایگزین کنید. + bookmarks_html: شما می‌خواهید نشانک‌های خود را با حداکثر %{total_items} پست از %{filename} جایگزین کنید. + domain_blocking_html: شما می‌خواهید لیست مسدودی دامنه خود را با حداکثر %{total_items} دامنه از %{filename} جایگزین کنید. + following_html: شما در شرف دنبال کردن حداکثر %{total_items} حساب از %{filename} هستید و دنبال کردن افراد دیگری را متوقف می‌کنید. + lists_html: شما می خواهید لیست های خود را با محتوای %{filename} جایگزین کنید. حداکثر %{total_items} حساب به لیست‌های جدید اضافه می‌شود. + muting_html: شما می‌خواهید لیست حساب‌های بی‌صدا را جایگزین کنید با حداکثر %{total_items} حساب از %{filename}. + preambles: + blocking_html: شما در شرف مسدود کردن حداکثر %{total_items} حساب از %{filename} هستید. + bookmarks_html: شما می‌خواهید تا %{total_items} پست از %{filename} را به نشانک‌ها خود اضافه کنید. + domain_blocking_html: شما در شرف مسدود کردن تا %{total_items} دامنه از %{filename} هستید. + following_html: شما در شرف دنبال کردن حداکثر %{total_items} حساب از %{filename} هستید. + lists_html: شما می‌خواهید تا %{total_items} حساب از %{filename} را به فهرست‌های خود اضافه کنید. اگر لیستی برای افزودن وجود نداشته باشد، لیست های جدیدی ایجاد می شود. + muting_html: شما در شرف بی صدا کردن تا %{total_items} حساب از %{filename} هستید. preface: می‌توانید داده‌هایی را که از کارسازی دیگر برون‌ریخته‌اید، چون سیاهه‌ای از افرادی که پی گرفته یا مسدود می‌کنید را درون‌ریزی کنید. recent_imports: واردشده‌های اخیر states: @@ -1213,11 +1450,23 @@ fa: title: تاریخچهٔ تأیید هویت mail_subscriptions: unsubscribe: + action: بله. لغو اشتراک complete: لغو اشتراک شد + confirmation_html: مطمئنید که می‌خواهید اشتراک %{type} را از ماستودون روی %{domain} برای رایانامهٔ %{email} لغو کنید؟ همواره می‌توانید از تنظیمات آگاهی رایانامه‌ای دوباره مشترک شوید. + emails: + notification_emails: + favourite: رایانامه‌های آگاهی برگزیدن + follow: رایانامه‌های آگاهی پی‌گیری + follow_request: رایانامه‌های درخواست پی‌گیری + mention: رایانامه‌های آگاهی اشاره + reblog: رایانامه‌های آگاهی تقویت + resubscribe_html: اگر اشتراک را اشتباهی لغو کردید می‌توانید از تنظیمات آگاهی رایانامه‌ای دوباره مشترک شوید. + success_html: دیگر %{type} را از ماستودون روی %{domain} برای رایانامهٔ %{email} نخواهید گرفت. title: لغو اشتراک media_attachments: validations: images_and_video: نمی‌توان برای نوشته‌ای که تصویر دارد ویدیو بارگذاری کرد + not_found: رسانه %{ids} یافت نشد یا قبلاً به پست دیگری پیوست شده است not_ready: پرونده‌هایی که پردازش را تمام نکرده‌اند نمی‌توانند پیوست شوند. یکبار دیگر امتحان کنید! too_many: نمی‌توان بیشتر از ۴ تصویر بارگذاری کرد migrations: @@ -1294,6 +1543,8 @@ fa: update: subject: "%{name} فرسته‌ای را ویرایست" notifications: + administration_emails: آگاهی‌های رایانامه‌ای مدیر + email_events: رویدادها برای آگاهی‌های رایانامه‌ای email_events_hint: 'گزینش رویدادهایی که می‌خواهید برایشان آگاهی دریافت کنید:' number: human: @@ -1307,7 +1558,7 @@ fa: trillion: ت otp_authentication: code_hint: برای تأیید، کدی را که برنامهٔ تأییدکننده ساخته است وارد کنید - description_html: اگر ورود دومرحله‌ای را با استفاده از از یک کارهٔ تأییدکننده به کار بیندازید، لازم است برای ورود، به تلفن خود که برایتان یک ژتون خواهد ساخت دسترسی داشته باشید. + description_html: اگر تأیید هویت دو مرحله‌ای را با استفاده از برنامه احراز هویت فعال کنید، برای ورود به سیستم باید تلفن خود را در اختیار داشته باشید، که توکن‌هایی را برای ورود شما ایجاد می‌کند. enable: به کار انداختن instructions_html: "این کد QR را با برنامهٔ Google Authenticator یا برنامه‌های TOTP مشابه اسکن کنید. از این به بعد، آن برنامه کدهایی موقتی خواهد ساخت که برای ورود باید آن‌ها را وارد کنید." manual_instructions: 'اگر نمی‌توانید رمز QR را بپویید و باید دستی وارد کنید، متن رمز این‌جاست:' @@ -1318,7 +1569,7 @@ fa: next: بعدی older: قدیمی‌تر prev: قبلی - truncate: "…" + truncate: "…" polls: errors: already_voted: شما قبلاً در این نظرسنجی رأی داده‌اید @@ -1338,6 +1589,7 @@ fa: privacy: hint_html: "شخصی‌سازی چگونگی پیدا شدن فرسته‌ها و نمایه‌تان. ویژگی‌های متعدّدی در ماستودون می‌توانند هنگام به کار افتادن در رسیدن به مخاطبینی گسترده‌تر یاریتان کنند. کمی وقت برای بازبینی این تنظیمات گذاشته تا مطمئن شوید برایتان مناسبند." privacy: محرمانگی + privacy_hint_html: واپایش میزان باز شدن به نفع دیگران. افراد نمایه‌های جالب و کاره‌های باحال را با مرور پی‌گرفتگان دیگران و دیدن کاره‌هایی که از آن‌ها می‌فرستند پیدا می‌کنند. با این حال شاید بخواهید پنهان نگهشان دارید. reach: دسترسی reach_hint_html: واپایش این که می‌خواهید به دست افراد جدید قابل کشف و پی‌گیری باشید یا نه. می‌خواهید فرسته‌هایتان روی صفحهٔ کشف ظاهر شوند؟ می‌خواهید دیگر افراد در پیشنهادهای پی‌گیریشان ببینندتان؟ می‌خواهید پی‌گیران جدید را به طور خودکار بپذیرید یا روی هرکدامشان واپایش داشته باشید؟ search: جست‌وجو @@ -1349,12 +1601,16 @@ fa: errors: limit_reached: تجاوز از کران واکنش‌های مختلف unrecognized_emoji: شکلک شناخته‌شده‌ای نیست + redirects: + prompt: اگر به این پویند اطمینان دارید برای ادامه بزنید. + title: دارید %{instance} را ترک می‌کنید. relationships: activity: فعالیت حساب confirm_follow_selected_followers: آیا مطمئنید که می خواهید دنبال کننده های انتخابی را دنبال کنید؟ confirm_remove_selected_followers: آیا شما واقعا می خواهید دنبال کننده های انتخابی را حذف کنید؟ confirm_remove_selected_follows: آیا شما واقعا می خواهید دنبال شده های انتخابی را حذف کنید؟ dormant: غیرفعال + follow_failure: نتوانست برخی از حساب‌های گزیده را پی بگیرد. follow_selected_followers: پیگیری پیگیران انتخاب شده followers: پی‌گیران following: پی می‌گیرد @@ -1371,6 +1627,9 @@ fa: status: وضعیت حساب remote_follow: missing_resource: نشانی اینترنتی برای رسیدن به حساب شما پیدا نشد + reports: + errors: + invalid_rules: به قوانین معتبر اشاره نمی کند rss: content_warning: 'هشدا محتوا:' descriptions: @@ -1381,6 +1640,7 @@ fa: over_total_limit: شما از حد مجاز %{limit} فرسته زمان‌بندی‌شده فراتر رفته‌اید too_soon: زمان تعیین‌شده باید در آینده باشد self_destruct: + lead_html: متأسفانه، %{domain} برای همیشه در حال بسته شدن است. اگر حسابی در آنجا داشتید، نمی‌توانید به استفاده از آن ادامه دهید، اما همچنان می‌توانید از داده‌های خود نسخه پشتیبان درخواست کنید. title: این کارساز دارد بسته می‌شود sessions: activity: آخرین فعالیت @@ -1438,6 +1698,7 @@ fa: delete: پاک‌کردن حساب development: فرابری edit_profile: ویرایش نمایه + export: برون‌ریزی featured_tags: برچسب‌های برگزیده import: درون‌ریزی import_and_export: درون‌ریزی و برون‌بری @@ -1446,12 +1707,21 @@ fa: preferences: ترجیحات profile: نمایه relationships: پیگیری‌ها و پیگیران + severed_relationships: ارتباط‌های قطع شده statuses_cleanup: حذف فرستهٔ خودکار strikes: شکایت‌های مدیریتی two_factor_authentication: ورود دومرحله‌ای webauthn_authentication: کلیدهای امنیتی severed_relationships: download: بارگیری (%{count}) + event_type: + account_suspension: تعلیق حساب (%{target_name}) + domain_block: تعلیق کارساز (%{target_name}) + user_domain_block: "%{target_name} را مسدود کردید" + lost_followers: پی‌گیرندگان از دست رفته + lost_follows: پی‌گرفته‌های از دست رفته + preamble: وقتی دامنه‌ای را مسدود کرده یا ناظرانتان تصمیم به تعلیق کارسازی دوردست می‌گیرند، ممکن است پی‌گیران و پی‌گرفته‌هایتان را از دست بدهید. با این حال قادرید سیاهه‌هایی از ارتباط‌های قطع شده را برای بررسی و درون‌ریزی احتمالی روی کارسازی دیگر بار بگیرید. + purged: اطّلاعات دربارهٔ این کارساز به دست مدیران کارسازتان پاک سازی شده. type: رویداد statuses: attached: @@ -1535,11 +1805,17 @@ fa: contrast: ماستودون (سایه‌روشن بالا) default: ماستودون (تیره) mastodon-light: ماستودون (روشن) + system: خودکار (استفاده از زمینهٔ سامانه) time: formats: default: "%d %b %Y, %H:%M" month: "%b %Y" - time: "%OH:%OM" + time: "%H:%M" + with_time_zone: "%b %d, %Y, %H:%M %Z" + translation: + errors: + quota_exceeded: از سهمیه استفاده در سراسر سرور برای خدمات ترجمه فراتر رفته است. + too_many_requests: اخیراً درخواست های زیادی به خدمات ترجمه شده است. two_factor_authentication: add: افزودن disable: غیرفعال‌کردن @@ -1557,31 +1833,57 @@ fa: webauthn: کلیدهای امنیتی user_mailer: appeal_approved: + action: تنظیمات حساب explanation: درخواست تجدیدنظر اخطار علیه حساب شما در %{strike_date} که در %{appeal_date} ارسال کرده‌اید، پذیرفته شده است. حساب شما بار دیگر در وضعیت خوبی قرار دارد. subject: درخواست تجدیدنظر شما در %{date} پذیرفته شد + subtitle: حسابتان دوباره در وضعیت مناسب است. title: درخواست تجدیدنظر پذیرفته شد appeal_rejected: explanation: درخواست تجدیدنظر اخطار علیه حساب شما در %{strike_date} که در %{appeal_date} ارسال کرده‌اید، رد شده است. subject: درخواست تجدیدنظر شما در %{date} رد شده است + subtitle: درخواست تجدیدنظرتان رد شد. title: درخواست تجدیدنظر رد شد backup_ready: + explanation: درخواست پشتیبانی کامل از حساب ماستودونتان کردید. + extra: اکنون آمادهٔ بارگیری است! subject: بایگانی شما آمادهٔ دریافت است title: گرفتن بایگانی + failed_2fa: + details: 'جزییات تلاش‌ها برای ورد:' + explanation: شخصی سعی کرده است به حساب شما وارد شود اما یک عامل احراز هویت دوم نامعتبر ارائه کرده است. + further_actions_html: اگر این شما نبودید، توصیه می کنیم فورا %{action} را انجام دهید زیرا ممکن است به خطر بیفتد. + subject: عدم موفقیت در تأیید هویت عامل دوم + title: احراز هویت عامل دوم ناموفق بود suspicious_sign_in: change_password: تغییر گذرواژه‌تان details: 'جزییات ورود:' + explanation: ما ورود به حساب شما را از یک آدرس آی پی جدید شناسایی کرده ایم. + further_actions_html: اگر این شما نبودید، توصیه می کنیم فورا %{action} را فعال کنید و برای ایمن نگه داشتن حساب خود، احراز هویت دو مرحله ای را فعال کنید. + subject: حساب شما از یک آدرس آی پی جدید قابل دسترسی است title: یک ورود جدید warning: appeal: فرستادن یک درخواست تجدیدنظر appeal_description: اگر فکر می‌کنید این یک خطا است، می‌توانید یک درخواست تجدیدنظر به کارکنان %{instance} ارسال کنید. categories: spam: هرزنامه + violation: محتوا دستورالعمل‌های انجمن زیر را نقض می‌کند + explanation: + delete_statuses: برخی از پست‌های شما یک یا چند دستورالعمل انجمن را نقض می‌کنند و متعاقباً توسط گردانندگان %{instance} حذف شده‌اند. + disable: دیگر نمی توانید از حساب خود استفاده کنید، اما نمایه و سایر داده های شما دست نخورده باقی می مانند. می توانید از داده های خود نسخه پشتیبان درخواست کنید، تنظیمات حساب را تغییر دهید یا حساب خود را حذف کنید. + mark_statuses_as_sensitive: برخی از پست‌های شما توسط گردانندگان %{instance} به عنوان حساس علامت‌گذاری شده‌اند. این بدان معناست که افراد باید قبل از نمایش پیش‌نمایش، روی رسانه پست‌ها ضربه بزنند. می‌توانید هنگام ارسال پست در آینده، رسانه‌ها را به‌عنوان حساس علامت‌گذاری کنید. + sensitive: از این پس، تمام فایل های رسانه ای آپلود شده شما به عنوان حساس علامت گذاری می شوند و در پشت هشدار کلیک پنهان می شوند. + silence: همچنان می‌توانید از حساب خود استفاده کنید، اما فقط افرادی که از قبل شما را دنبال می‌کنند، پست‌های شما را در این سرور می‌بینند و ممکن است از ویژگی‌های مختلف کشف مستثنی شوید. با این حال، دیگران ممکن است همچنان به صورت دستی شما را دنبال کنند. + suspend: دیگر نمی توانید از حساب خود استفاده کنید و نمایه و سایر داده های شما دیگر در دسترس نیستند. هنوز هم می‌توانید برای درخواست پشتیبان‌گیری از داده‌های خود وارد شوید تا زمانی که داده‌ها در حدود 30 روز به طور کامل حذف شوند، اما ما برخی از داده‌های اولیه را حفظ می‌کنیم تا از تعلیق فرار نکنید. reason: 'دلیل:' + statuses: 'پست های ذکر شده:' subject: + delete_statuses: فرسته‌هایتان روی %{acct} برداشته شده‌اند disable: حساب %{acct} شما متوقف شده است + mark_statuses_as_sensitive: فرسته‌هایتان روی %{acct} به عنوان حسّاس علامت خورده‌اند none: هشدار برای %{acct} + sensitive: فرسته‌هایتان روی %{acct} از اکنون به عنوان حسّاس علامت خواهند خورد silence: حساب %{acct} شما محدود شده است - suspend: حساب %{acct} شما معلق شده است + suspend: حساب %{acct} شما معلق شده است title: delete_statuses: فرسته‌ها برداشته شدند disable: حساب متوقف شده است @@ -1595,11 +1897,39 @@ fa: apps_ios_action: بارگیری روی فروشگاه کاره apps_step: بارگیری کارهٔ رسمیمان. apps_title: کاره‌های ماستودون + checklist_subtitle: 'بیایید روی این مرز اجتماعی جدید راهتان بیندازیم:' + checklist_title: سیاههٔ بررسی خوش‌آمد edit_profile_action: شخصی سازی + edit_profile_step: تقویت تعامل‌هایتان با داشتن نمایه‌ای جامع. + edit_profile_title: شخصی سازی نمایه‌تان explanation: نکته‌هایی که برای آغاز کار به شما کمک می‌کنند + feature_action: دانشتن بیش‌تر + feature_audience: ماستودون بدون حضور فرد میانی، فرصتی منحصربه‌فرد برای مدیریت مخاطبان ارائه می‌کند. ماستودونی که روی زیرساخت خودتان استقرار یافته باشد، می‌گذارد بدون بودن زیر واپایش کسی غیر از خودتان، دیگر کارسازهای برخط ماستودون را دنبال کرده و به دست آن‌ها دنبال شوید. + feature_audience_title: مخاطبان‌تان را با اطمینان بسازید + feature_control: شما بهتر از هر کسی دیگری می‌دونید که چه می‌خواهید ببینید. هیچ الگوریتم یا تبلیغی وقت شما را تلف نمی‌کند. تنها با یک حساب، هر کسی را روی هر کارساز ماستودون دیگری دنبال کرده و فرسته‌هایشان را به ترتیب زمانی دریافت کنید. گوشهٔ دنج اینترنتی خودتان را بیشتر شبیه خودتان کنید. + feature_control_title: کنترل خط زمانی‌تان را به دست بگیرید + feature_creativity: ماستودون از فرسته‌های تصویری، ویدئویی و شنیداری، توضیحات دسترس‌پذیری، نظرسنجی، هشدار محتوا، تصاویر نمایهٔ پویا، شکلک‌های سفارشی، کنترل برش تصاویر بندانگشتی و بسیاری موارد دیگر پشتیبانی می‌کند تا به شما برای ابزار کردن خود در فضای برخط کمک کند. چه بخواهید یک اثر هنری، موسیقی یا پادکست منتشر کنید، ماستودون در خدمت شماست. + feature_creativity_title: خلاقیت بی‌همتا + feature_moderation: ماستودن، تصمیم‌گیری را به شما باز می‌گرداند. هر کارساز قوانین و شرایط استفاده خاص خودش را وضع می‌کند که فقط به صورت محلی اعمال می‌شود و نه به صورت از بالا به پایین در سکوهای اجتماعی شرکتی. این موضوع باعث افزایش انعطاف در پاسخ‌گویی به نیازهای گروه‌های مختلف می‌شود. به کارسازی با قوانین مورد پسندتان بپیوندید، و یا نمونه خود را میزبانی کنید. + feature_moderation_title: نظارت به شکلی که باید باشد follow_action: پی‌گیری + follow_step: You curate your own feed. Lets fill it with interesting people. + follow_title: شخصی سازی خوراک خانگیتان + follows_subtitle: پی گرفتن حساب‌های شناخته شده + follows_title: افرادی برای پی‌گیری + follows_view_more: دیدن افرادی بیش‌تر برای پی‌گیری + hashtags_recent_count: + one: "%{people} نفر در ۲ روز اخیر" + other: "%{people} نفر در ۲ روز اخیر" + hashtags_subtitle: کشف گرایه‌ها در ۲ روز گذشته + hashtags_title: برچسب‌های داغ + hashtags_view_more: دیدن برچسب‌های داغ بیش‌تر post_action: ایجاد + post_step: سلام کردن به جهان با متن، عکس، ویدیو یا نظرسنجی. + post_title: ساخت نخستین نظرسنجیتان share_action: هم‌رسانی + share_step: بگذارید دوستانتان بدانند چگونه روی ماستودون بیابندتان. + share_title: هم‌رسانی نمایهٔ ماستودونتان sign_in_action: ورود subject: به ماستودون خوش آمدید title: خوش آمدید، کاربر %{name}! @@ -1607,7 +1937,9 @@ fa: follow_limit_reached: شما نمی‌توانید بیش از %{limit} نفر را پی بگیرید go_to_sso_account_settings: به تنظیمات حساب فراهمگر هوبتتان بروید invalid_otp_token: کد ورود دومرحله‌ای نامعتبر است - otp_lost_help_html: اگر شما دسترسی به هیچ‌کدامشان ندارید، باید با ایمیل %{email} تماس بگیرید + otp_lost_help_html: اگر به هیچ‌کدامشان دسترسی ندارید با %{email} تماس بگیرید + rate_limited: تلاش ّای هویت‌سنجی بیش از حد. لطفاً بعداً دوباره تلاش کنید. + seamless_external_login: با خدمتی خارجی وارد شده‌اید، برای همین تنظیمات رایانامه و گذرواژه در دسترس نیستند. signed_in_as: 'واردشده به نام:' verification: extra_instructions_html: نکته: پیوند روی پایگاه وبتان می‌تواند نامرئی باشد. بخش مهم rel="me" است که از جعل هویت روی پایگاه‌هایی با محتوای تولید شده به دست کاربر جلوگیری می‌کند. حتا می‌توانید به جای برچسب a از برچسب link در سرایند صفحه استفاده کنید؛ ولی HTML باید بدون اجرای جاوااسکریپت در دسترس باشد. @@ -1616,6 +1948,7 @@ fa: instructions_html: کد زیر را رونوشت کرده و در HTML پایگاه وبتان جایگذاری کنید. سپس نشانی پایگاه وبتان را از زبانهٔ «ویرایش نمایه» در یکی از زمینه‌های اضافی روی نمایه‌تان افزوده و تغییرات را ذخیره کنید. verification: تأیید verified_links: "‏پیوندهای تأییدشده‌ شما" + website_verification: تأیید پایگاه وب webauthn_credentials: add: افزودن کلید امنیتی create: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 22ccc71161..cc9ee0bd86 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -10,7 +10,7 @@ fi: followers: one: seuraaja other: seuraajaa - following: seurattu(a) + following: Seurattavat instance_actor_flash: Tämä tili on virtuaalinen toimija, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään federointitarkoituksiin, eikä sitä tule jäädyttää. last_active: viimeksi aktiivinen link_verified_on: Tämän linkin omistus on tarkastettu %{date} @@ -21,6 +21,7 @@ fi: one: Julkaisu other: viestiä posts_tab_heading: Julkaisut + self_follow_error: Oman tilisi seuraaminen ei ole sallittua admin: account_actions: action: Suorita toimi @@ -73,7 +74,7 @@ fi: enabled: Käytössä enabled_msg: Käyttäjän %{username} tilin jäädytys kumottiin onnistuneesti followers: Seuraajat - follows: Seuratut + follows: Seurattavat header: Otsakekuva inbox_url: Postilaatikon osoite invite_request_text: Syitä liittymiseen @@ -215,7 +216,7 @@ fi: reopen_report: Avaa raportti uudelleen resend_user: Lähetä vahvistusviesti uudelleen reset_password_user: Palauta salasana - resolve_report: Selvitä raportti + resolve_report: Ratkaise raportti sensitive_account: Pakota arkaluonteiseksi tiliksi silence_account: Rajoita tiliä suspend_account: Jäädytä tili @@ -272,7 +273,7 @@ fi: reject_appeal_html: "%{name} hylkäsi käyttäjän %{target} valituksen moderointipäätöksestä" reject_user_html: "%{name} hylkäsi käyttäjän %{target} rekisteröitymisen" remove_avatar_user_html: "%{name} poisti käyttäjän %{target} profiilikuvan" - reopen_report_html: "%{name} avasi uudelleen raportin %{target}" + reopen_report_html: "%{name} avasi raportin %{target} uudelleen" 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}" @@ -333,8 +334,8 @@ fi: enabled: Käytössä enabled_msg: Emoji otettiin käyttöön onnistuneesti image_hint: PNG tai GIF, enintään %{size} - list: Lisää listalle - listed: Listalla + list: Lisää listaan + listed: Listassa new: title: Lisää uusi mukautettu emoji no_emoji_selected: Emojeita ei muutettu, koska yhtään ei ollut valittuna @@ -344,8 +345,8 @@ fi: shortcode_hint: Vähintään 2 merkkiä, vain kirjaimia, numeroita ja alaviivoja title: Mukautetut emojit uncategorized: Luokittelematon - unlist: Poista listalta - unlisted: Ei listalla + unlist: Poista listasta + unlisted: Ei listassa update_failed_msg: Emojin päivitys epäonnistui updated_msg: Emojin päivitys onnistui! upload: Lähetä @@ -818,7 +819,7 @@ fi: back_to_report: Takaisin raporttisivulle batch: remove_from_report: Poista raportista - report: Raportti + report: Raportoi deleted: Poistettu favourites: Suosikit history: Versiohistoria @@ -832,7 +833,7 @@ fi: original_status: Alkuperäinen julkaisu reblogs: Edelleen jako status_changed: Julkaisua muutettu - title: Tilin tilat + title: Tilin julkaisut trending: Suosituttua visibility: Näkyvyys with_media: Sisältää mediaa @@ -1165,10 +1166,12 @@ fi: use_security_key: Käytä suojausavainta author_attribution: example_title: Esimerkkiteksti - hint_html: Määrää, kuinka tulet tunnustetuksi, kun Mastodonissa jaetaan linkkejä. + hint_html: Kirjoitatko uutisia tai blogitekstejä Mastodonin ulkopuolella? Määrää, kuinka tulet tunnustetuksi, kun niitä jaetaan Mastodonissa. + instructions: 'Varmista, että artikkelisi HTML:ssä on tämä koodi:' more_from_html: Lisää tekijältä %{name} s_blog: Käyttäjän %{name} blogi - title: Tekijän tunnustus + then_instructions: Lisää sitten julkaisun verkkotunnus seuraavaan tekstikenttään. + title: Tekijän nimeäminen challenge: confirm: Jatka hint_html: "Vihje: Emme pyydä sinulta salasanaa uudelleen seuraavan tunnin aikana." @@ -1257,7 +1260,7 @@ fi: title: Turvallisuusvahvistus epäonnistui '429': Rajoitettu '500': - content: Valitettavasti jokin meni pieleen meidän päässämme. + content: Valitettavasti jotain 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 Mastodonin verkkosovellusta, ota JavaScript käyttöön. Vaihtoehtoisesti voit kokeilla käyttämällesi alustalle kehitettyjä Mastodonin natiivisovelluksia. @@ -1393,18 +1396,18 @@ fi: blocking: Tuodaan estettyjä tilejä bookmarks: Tuodaan kirjanmerkkejä domain_blocking: Tuodaan estettyjä verkkotunnuksia - following: Tuodaan seurattuja tilejä + following: Tuodaan seurattavia tilejä lists: Tuodaan listoja muting: Tuodaan mykistettyjä tilejä type: Tuontityyppi type_groups: - constructive: Seuratut ja kirjanmerkit + constructive: Seurattavat ja kirjanmerkit destructive: Estot ja mykistykset types: blocking: Estoluettelo bookmarks: Kirjanmerkit domain_blocking: Verkkotunnusten estoluettelo - following: Seurattujen luettelo + following: Seurattavien luettelo lists: Listat muting: Mykistysluettelo upload: Lähetä @@ -1610,7 +1613,7 @@ fi: follow_failure: Joitain valittuja tilejä ei voitu seurata. follow_selected_followers: Seuraa valittuja seuraajia followers: Seuraajat - following: Seuratut + following: Seurattavat invited: Kutsutut last_active: Viimeksi aktiivinen most_recent: Tuorein @@ -1703,7 +1706,7 @@ fi: notifications: Sähköposti-ilmoitukset preferences: Asetukset profile: Julkinen profiili - relationships: Seuratut ja seuraajat + relationships: Seurattavat ja seuraajat severed_relationships: Katkenneet suhteet statuses_cleanup: Julkaisujen automaattipoisto strikes: Moderointivaroitukset @@ -1716,8 +1719,8 @@ fi: domain_block: Palvelimen jäädytys (%{target_name}) user_domain_block: Estit käyttäjän %{target_name} lost_followers: Menetetyt seuraajat - lost_follows: Menetetyt seuratut - preamble: Voit menettää seurattusi ja seuraajasi, kun estät verkkotunnuksen tai kun moderaattorisi päättävät jäädyttää etäpalvelimen. Kun näin tapahtuu, voit ladata luetteloita katkenneista seurantasuhteista, jotta voit tarkastella niitä ja mahdollisesti viedä ne toiselle palvelimelle. + lost_follows: Menetetyt seurattavat + preamble: Voit menettää seurattavasi ja seuraajasi, kun estät verkkotunnuksen tai kun moderaattorisi päättävät jäädyttää etäpalvelimen. Kun näin tapahtuu, voit ladata luetteloita katkenneista seurantasuhteista, jotta voit tarkastella niitä ja mahdollisesti viedä ne toiselle palvelimelle. purged: Palvelimesi ylläpitäjät ovat tyhjentäneet tämän palvelimen tiedot. type: Tapahtuma statuses: @@ -1940,7 +1943,7 @@ fi: signed_in_as: 'Kirjautunut tilillä:' verification: 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 + here_is_how: Näin se onnistuu 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ä seuraava koodi verkkosivustosi HTML-lähdekoodiin. Lisää sitten verkkosivustosi osoite johonkin profiilisi lisäkentistä ”Muokkaa profiilia” -välilehdellä ja tallenna muutokset. verification: Vahvistus diff --git a/config/locales/fil.yml b/config/locales/fil.yml index 4084bf2f90..fc19d9fd31 100644 --- a/config/locales/fil.yml +++ b/config/locales/fil.yml @@ -1 +1,26 @@ +--- fil: + about: + about_mastodon_html: 'Ang social network ng hinaharap: Walang mga ad, walang corporate na pagmamanman, etikal na disenyo, at desentralisasyon! Sa iyo ang data mo sa Mastodon!' + contact_missing: Hindi naka-set + contact_unavailable: N/A + hosted_on: Mastodon hosted sa %{domain} + title: About + accounts: + following: Following + instance_actor_flash: Ang account na ito ay virtual actor na ginagamit para i-represent ang mismong server at hindi anumang indibidwal na user. Ginagamit ito para sa mga layunin ng pederasyon at hindi dapat i-suspend. + last_active: huling aktibo + link_verified_on: Ang pagmamay-ari ng link na ito ay huling na-check sa %{date} + nothing_here: Walang makikita rito! + pin_errors: + following: Dapat ay fina-follow mo na ang taong gusto mong i-endorse + posts_tab_heading: Mga Post + self_follow_error: Hindi puwede ang pag-follow sa sariling account + admin: + account_actions: + action: Gawin ang aksiyon + already_silenced: Nalimitahan na ang account na ito. + already_suspended: Nasuspinde na ang account na ito. + title: Gawin ang moderation na aksiyon sa %{acct} + account_moderation_notes: + create: Mag-iwan ng note diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 31eb67b3b0..638c2da9d3 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -21,6 +21,7 @@ fo: one: Uppslag other: Uppsløg posts_tab_heading: Uppsløg + self_follow_error: Tað er ikki loyvt at fylgja tíni egnu kontu admin: account_actions: action: Frem atgerð @@ -1165,9 +1166,11 @@ fo: use_security_key: Brúka trygdarlykil author_attribution: example_title: Tekstadømi - hint_html: Kanna, hvussu tú verður viðurkend/ur, tá ið onnur deila slóðir á Mastodon. + hint_html: Skrivar tú tíðindi ella greinar til bloggin uttanfyri Mastodon? Her kanst tú stýra, hvussu tú verður tilsipað/ur, tá ið títt tilfar verður deilt á Mastodon. + instructions: 'Tryggja tær, at henda kota er í HTML''inum á tíni grein:' more_from_html: Meiri frá %{name} s_blog: Bloggurin hjá %{name} + then_instructions: Skriva síðani økisnavnið, har tað verður lagt út, í teigin niðanfyri. title: Ískoyti høvundans challenge: confirm: Hald á diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 16cdb79317..5093e5d733 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -21,6 +21,7 @@ fr-CA: one: Message other: Messages posts_tab_heading: Messages + self_follow_error: Il n'est pas possible de suivre votre propre compte admin: account_actions: action: Effectuer l'action @@ -1168,9 +1169,11 @@ fr-CA: use_security_key: Utiliser la clé de sécurité author_attribution: example_title: Exemple de texte - hint_html: Déterminez la façon dont vous êtes crédité lorsque des liens sont partagés sur Mastodon. + hint_html: Vous écrivez des nouvelles ou des articles de blog en dehors de Mastodon ? Contrôlez la façon dont vous êtes crédité lorsqu'ils sont partagés sur Mastodon. + instructions: 'Assurez-vous que ce code se trouve dans le code HTML de votre article :' more_from_html: Plus via %{name} s_blog: Blog de %{name} + then_instructions: Ensuite, ajoutez le nom de domaine de la publication dans le champ ci-dessous. title: Attribution de l'auteur·e challenge: confirm: Continuer @@ -1906,7 +1909,7 @@ fr-CA: feature_action: En savoir plus feature_audience: Mastodon vous offre une possibilité unique de gérer votre audience sans intermédiaires. Mastodon peut être déployé sur votre propre infrastructure, ce qui vous permet de suivre et d'être suivi depuis n'importe quel autre serveur Mastodon et de n'être contrôlé par personne d'autre que vous. feature_audience_title: Construisez votre audience en toute confiance - feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Personne ne veut d'un algorithme qui décide à vote place ou de publicité qui vous fera perdre votre temps. Suivez n'importe qui, sur n'importe quel serveur Mastodon, depuis votre compte. Recevez les publications du monde entier dans l'ordre chronologique et créez-vous votre chez-vous numérique qui vous ressemble. + feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Pas d’algorithme ou de publicité qui vous fait perdre votre temps. Suivez n'importe qui sur n'importe quel serveur Mastodon depuis votre compte, recevez leurs messages dans l'ordre chronologique, et créez-vous un coin d’internet qui vous ressemble. feature_control_title: Gardez le contrôle de votre fil feature_creativity: Mastodon prend en charge les messages audio, vidéo et photo, les descriptions d'accessibilité, les sondages, les avertissements de contenu, les avatars animés, les émojis personnalisés, le contrôle des vignettes et bien plus encore pour vous aider à vous exprimer en ligne. Que vous publiiez votre art, votre musique ou votre podcast, Mastodon est là pour vous. feature_creativity_title: Créativité inégalée diff --git a/config/locales/fr.yml b/config/locales/fr.yml index bc57d00e65..c348dc5f02 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -21,6 +21,7 @@ fr: one: Message other: Messages posts_tab_heading: Messages + self_follow_error: Il n'est pas possible de suivre votre propre compte admin: account_actions: action: Effectuer l'action @@ -834,7 +835,7 @@ fr: open: Ouvrir le message original_status: Message original reblogs: Partages - status_changed: Publication modifiée + status_changed: Message modifié title: Messages du compte trending: Tendances visibility: Visibilité @@ -1168,9 +1169,11 @@ fr: use_security_key: Utiliser la clé de sécurité author_attribution: example_title: Exemple de texte - hint_html: Déterminez la façon dont vous êtes crédité lorsque des liens sont partagés sur Mastodon. + hint_html: Vous écrivez des nouvelles ou des articles de blog en dehors de Mastodon ? Contrôlez la façon dont vous êtes crédité lorsqu'ils sont partagés sur Mastodon. + instructions: 'Assurez-vous que ce code se trouve dans le code HTML de votre article :' more_from_html: Plus via %{name} s_blog: Blog de %{name} + then_instructions: Ensuite, ajoutez le nom de domaine de la publication dans le champ ci-dessous. title: Attribution de l'auteur·e challenge: confirm: Continuer @@ -1286,7 +1289,7 @@ fr: add_new: Ajouter un nouveau hashtag errors: limit: Vous avez déjà mis en avant le nombre maximum de hashtags - hint_html: "Mettez en évidence vos hashtags les plus importants sur votre profil. Un outil idéal pour suivre vos travaux créatifs et vos projets à long terme, les hashtags mis en avant sont affichés bien en évidence sur votre profil et permettent un accès rapide à vos propres publications." + hint_html: "Mettez en évidence vos hashtags les plus importants sur votre profil. Un outil idéal pour suivre vos travaux créatifs et vos projets à long terme, les hashtags mis en avant sont affichés bien en évidence sur votre profil et permettent un accès rapide à vos propres messages." filters: contexts: account: Profils @@ -1297,7 +1300,7 @@ fr: edit: add_keyword: Ajouter un mot-clé keywords: Mots-clés - statuses: Publications individuelles + statuses: Messages individuels statuses_hint_html: Ce filtre s'applique à la sélection de messages individuels, qu'ils correspondent ou non aux mots-clés ci-dessous. Revoir ou supprimer des messages du filtre. title: Modifier le filtre errors: @@ -1316,8 +1319,8 @@ fr: one: "%{count} message" other: "%{count} messages" statuses_long: - one: "%{count} publication individuelle cachée" - other: "%{count} publications individuelles cachées" + one: "%{count} message individuel caché" + other: "%{count} messages individuels cachés" title: Filtres new: save: Enregistrer le nouveau filtre @@ -1736,7 +1739,7 @@ fr: one: "%{count} vidéo" other: "%{count} vidéos" boosted_from_html: Partagé depuis %{acct_link} - content_warning: 'Avertissement sur le contenu : %{warning}' + content_warning: 'Avertissement de contenu : %{warning}' default_language: Même langue que celle de l’interface disallowed_hashtags: one: 'contient un hashtag désactivé : %{tags}' @@ -1906,7 +1909,7 @@ fr: feature_action: En savoir plus feature_audience: Mastodon vous offre une possibilité unique de gérer votre audience sans intermédiaires. Mastodon peut être déployé sur votre propre infrastructure, ce qui vous permet de suivre et d'être suivi depuis n'importe quel autre serveur Mastodon et de n'être contrôlé par personne d'autre que vous. feature_audience_title: Construisez votre audience en toute confiance - feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Personne ne veut d'un algorithme qui décide à vote place ou de publicité qui vous fera perdre votre temps. Suivez n'importe qui, sur n'importe quel serveur Mastodon, depuis votre compte. Recevez les publications du monde entier dans l'ordre chronologique et créez-vous votre chez-vous numérique qui vous ressemble. + feature_control: Vous savez mieux que quiconque ce que vous voulez voir sur votre fil principal. Pas d’algorithme ou de publicité qui vous fait perdre votre temps. Suivez n'importe qui sur n'importe quel serveur Mastodon depuis votre compte, recevez leurs messages dans l'ordre chronologique, et créez-vous un coin d’internet qui vous ressemble. feature_control_title: Gardez le contrôle de votre fil feature_creativity: Mastodon prend en charge les messages audio, vidéo et photo, les descriptions d'accessibilité, les sondages, les avertissements de contenu, les avatars animés, les émojis personnalisés, le contrôle des vignettes et bien plus encore pour vous aider à vous exprimer en ligne. Que vous publiiez votre art, votre musique ou votre podcast, Mastodon est là pour vous. feature_creativity_title: Créativité inégalée diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 0379af34e9..a3c5aef606 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -21,9 +21,12 @@ fy: one: Toot other: Berjochten posts_tab_heading: Berjochten + self_follow_error: It folgjen fan dyn eigen account is net tastien admin: account_actions: action: Aksje útfiere + already_silenced: Dizze account is al beheind. + already_suspended: Dizze account is al opskort. title: Moderaasjemaatregelen tsjin %{acct} nimme account_moderation_notes: create: Lit in opmerking efter @@ -45,6 +48,7 @@ fy: title: E-mailadres foar %{username} wizigje change_role: changed_msg: Rol mei sukses wizige! + edit_roles: Brûkersrollen beheare label: Rol wizigje no_role: Gjin rol title: Rol fan %{username} wizigje @@ -601,6 +605,7 @@ fy: suspend_description_html: De account en alle ynhâld sil net tagonklik wêze en úteinlik fuortsmiten wurde, en ynteraksje hjirmei sil net mooglik wêze. Binnen 30 dagen werom te draaien. Dit slút alle rapportaazjes oer dizze account. actions_description_html: Beslis hokker maatregel nommen wurde moat om dizze rapportaazje op te lossen. Wannear’t jo in (straf)maatregel tsjin it rapportearre account nimme, kriget de account in e-mailmelding, behalve wannear’t de spam-kategory keazen is. actions_description_remote_html: Beslút hokker aksje nommen wurde moat om dizze rapportaazje ôf te hanneljen. Dit hat allinnich ynfloed op hoe’t jo server kommunisearret mei dizze eksterne account en omgiet mei de ynhâld. + actions_no_posts: Dit rapport hat gjin byhearrende berjochten om fuort te smiten add_to_report: Mear oan de rapportaazje tafoegje already_suspended_badges: local: Al opskoarte op dizze server @@ -871,6 +876,9 @@ fy: message_html: Jo hawwe foar dizze server gjin regels opsteld. sidekiq_process_check: message_html: Der draait gjin Sidekiq-proses foar de wachtrige(n) %{value}. Kontrolearje jo Sidekiq-konfiguraasje + software_version_check: + action: Beskikbere fernijingen besjen + message_html: Der is in Mastodon-fernijing beskikber. software_version_critical_check: action: Beskikbere fernijingen besjen message_html: Der is in kritike fernijing foar Mastodon beskikber. Wurkje sa gau as mooglik by. @@ -1156,6 +1164,14 @@ fy: view_strikes: Besjoch de earder troch moderatoaren fêststelde skeiningen dy’t jo makke hawwe too_fast: Formulier is te fluch yntsjinne. Probearje it nochris. use_security_key: Befeiligingskaai brûke + author_attribution: + example_title: Faorbyldtekst + hint_html: Skriuwe jo nijs- of blogartikelen bûten Mastodon? Bepaal hoe’t jo oahelle wurde as dizze dield wurde op Mastodon. + instructions: 'Soargj derfoar dat dizze koade yn de HTML fan jo artikel sit:' + more_from_html: Mear fan %{name} + s_blog: Weblog fan %{name} + then_instructions: Foegje dernei de domeinnamme fan de publikaasje yn it ûndersteande fjild ta. + title: Auteur-attribúsje challenge: confirm: Trochgean hint_html: "Tip: Wy freegje jo it kommende oere net mear nei jo wachtwurd." @@ -1682,6 +1698,7 @@ fy: delete: Account fuortsmite development: Untwikkelers edit_profile: Profyl bewurkje + export: Eksportearje featured_tags: Utljochte hashtags import: Ymportearje import_and_export: Ymportearje en eksportearje @@ -1931,6 +1948,7 @@ fy: instructions_html: Kopiearje en plak de ûndersteande koade yn de HTML fan jo website. Foegje dernei it adres fan jo website ta oan ien fan de ekstra fjilden op jo profyl op it ljepblêd ‘Profyl bewurkje’ en bewarje de wizigingen. verification: Ferifikaasje verified_links: Jo ferifiearre keppelingen + website_verification: Website-ferifikaasje webauthn_credentials: add: Nije befeiligingskaai tafoegje create: diff --git a/config/locales/ga.yml b/config/locales/ga.yml index e25865903e..b9ff79a85b 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -27,6 +27,7 @@ ga: other: Postálacha two: Postálacha posts_tab_heading: Postálacha + self_follow_error: Ní cheadaítear do chuntas féin a leanúint admin: account_actions: action: Déan gníomh @@ -1219,9 +1220,11 @@ ga: use_security_key: Úsáid eochair shlándála author_attribution: example_title: Téacs samplach - hint_html: Rialú conas a chuirtear chun sochair tú nuair a roinntear naisc ar Mastodon. + hint_html: An bhfuil tú ag scríobh altanna nuachta nó blag lasmuigh de Mastodon? Rialú conas a gheobhaidh tú creidmheas nuair a roinntear iad ar Mastodon. + instructions: 'Cinntigh go bhfuil an cód seo i HTML d''alt:' more_from_html: Tuilleadh ó %{name} s_blog: Blag %{name} + then_instructions: Ansin, cuir ainm fearainn an fhoilseacháin sa réimse thíos. title: Leithdháil an údair challenge: confirm: Lean ar aghaidh diff --git a/config/locales/gd.yml b/config/locales/gd.yml index 90d03c74e1..15cc5dbe27 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -25,6 +25,7 @@ gd: other: Postaichean two: Postaichean posts_tab_heading: Postaichean + self_follow_error: Chan fhaod thu an cunntas agad fhèn a leantainn admin: account_actions: action: Gabh an gnìomh @@ -261,7 +262,7 @@ gd: destroy_domain_allow_html: Dì-cheadaich %{name} co-nasgadh leis an àrainn %{target} destroy_domain_block_html: Dì-bhac %{name} an àrainn %{target} destroy_email_domain_block_html: Dì-bhac %{name} an àrainn puist-d %{target} - destroy_instance_html: Purgaidich %{name} an àrainn %{target} + destroy_instance_html: Phurgaidich %{name} an àrainn %{target} destroy_ip_block_html: Sguab %{name} às riaghailt dhan IP %{target} destroy_status_html: Thug %{name} post aig %{target} air falbh destroy_unavailable_domain_html: Lean %{name} air adhart leis an lìbhrigeadh dhan àrainn %{target} @@ -903,6 +904,9 @@ gd: message_html: Cha do mhìnich thu riaghailtean an fhrithealaiche fhathast. sidekiq_process_check: message_html: Chan eil pròiseas Sidekiq sam bith a ruith dhan chiutha/dha na ciuthan %{value}. Thoir sùil air an rèiteachadh Sidekiq agad + software_version_check: + action: Faic na h-ùrachaidhean a tha ri fhaighinn + message_html: Tha ùrachadh Mastodon ri fhaighinn. software_version_critical_check: action: Faic na h-ùrachaidhean a tha ri fhaighinn message_html: Tha ùrachadh èiginneach air Mastodon ri fhaighinn, ùraich cho luath ’s a ghabhas. @@ -1021,7 +1025,7 @@ gd: delete: Sguab às edit_preset: Deasaich rabhadh ro-shuidhichte empty: Cha do mhìnich thu ro-sheataichean rabhaidhean fhathast. - title: Ro-sheataichean rabhaidhean + title: Rabhaidhean ro-shocraichte webhooks: add_new: Cuir puing-dheiridh ris delete: Sguab às @@ -1198,9 +1202,11 @@ gd: use_security_key: Cleachd iuchair tèarainteachd author_attribution: example_title: Ball-sampaill teacsa - hint_html: Stùirich mar a thèid iomradh a thoirt ort nuair a thèid ceangal a cho-roinneadh air Mastodon. + hint_html: An sgrìobh thu naidheachdan no bloga taobh a-muigh Mhastodon? Stiùirich mar a thèid iomradh a thoirt ort nuair a bhios na h-artaigilean agad ’gan co-roinneadh air Mastodon. + instructions: 'Dèan cinnteach gu bheil an còd seo am broinn HTML an artaigil agad:' more_from_html: Barrachd o %{name} s_blog: Bloga aig %{name} + then_instructions: An uair sin, cuir ainm àrainn an fhoillseachaidh ris an raon gu h-ìosal. title: Aithris air an ùghdar challenge: confirm: Lean air adhart @@ -1744,6 +1750,7 @@ gd: delete: Sguabadh às cunntais development: Leasachadh edit_profile: Deasaich a’ phròifil + export: Às-phortadh featured_tags: Tagaichean hais brosnaichte import: Ion-phortadh import_and_export: Ion-phortadh ⁊ às-phortadh @@ -1765,7 +1772,7 @@ gd: user_domain_block: Bhac thu %{target_name} lost_followers: An luchd-leantainn a chaill thu lost_follows: Daoine nach lean thu tuilleadh - preamble: Dh’fhaoidte gun chaill thu dàimhean leantainn nuair a bhacas tu àrainn no nuair a chuireas na maoir romhpa gun cuir iad frithealaiche cèin à rèim. Nuair a thachras sin, ’s urrainn dhut liosta de na dàimhean dealaichte a luchdadh a-nuas airson sùil a thoirt orra agus an ion-phortadh gu frithealaiche eile ’s dòcha. + preamble: Dh’fhaoidte gun caill thu dàimhean leantainn nuair a bhacas tu àrainn no nuair a chuireas na maoir romhpa gun cuir iad frithealaiche cèin à rèim. Nuair a thachras sin, ’s urrainn dhut liosta de na dàimhean dealaichte a luchdadh a-nuas airson sùil a thoirt orra agus an ion-phortadh gu frithealaiche eile ’s dòcha. purged: Chaidh am fiosrachadh mun fhrithealaiche seo a phurgaideachadh le rianairean an fhrithealaiche agad. type: Tachartas statuses: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index e396761f7e..a2480370ef 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -21,6 +21,7 @@ gl: one: Publicación other: Publicacións posts_tab_heading: Publicacións + self_follow_error: Non está permitido seguir a túa propia conta admin: account_actions: action: Executar acción @@ -175,7 +176,7 @@ gl: approve_appeal: Aprobar apelación approve_user: Aprobar Usuaria assigned_to_self_report: Asignar denuncia - change_email_user: Cambiar o correo da Usuaria + change_email_user: Cambiar o correo da usuaria change_role_user: Cambiar Rol da Usuaria confirm_user: Confirmar usuaria create_account_warning: Crear aviso @@ -262,10 +263,10 @@ gl: destroy_user_role_html: "%{name} eliminou o rol %{target}" disable_2fa_user_html: "%{name} desactivou o requerimento do segundo factor para a usuaria %{target}" disable_custom_emoji_html: "%{name} desactivou o emoji %{target}" - disable_sign_in_token_auth_user_html: "%{name} desactivou a autenticación por token no email para %{target}" + disable_sign_in_token_auth_user_html: "%{name} desactivou a autenticación por token no correo para %{target}" disable_user_html: "%{name} desactivou as credenciais para a usuaria %{target}" enable_custom_emoji_html: "%{name} activou o emoji %{target}" - enable_sign_in_token_auth_user_html: "%{name} activou a autenticación con token no email para %{target}" + enable_sign_in_token_auth_user_html: "%{name} activou a autenticación con token no correo para %{target}" enable_user_html: "%{name} activou as credenciais para a usuaria %{target}" memorialize_account_html: "%{name} convertiu a conta de %{target} nunha páxina para o recordo" promote_user_html: "%{name} promocionou a usuaria %{target}" @@ -1165,9 +1166,11 @@ gl: use_security_key: Usa chave de seguridade author_attribution: example_title: Texto de mostra - hint_html: Controla o xeito en que te acreditan cando se comparten ligazóns en Mastodon. + hint_html: Escribes novas ou artigos nun blog alleos a Mastodon? Xestiona o xeito en que podes dar crédito da túa autoría cando os compartes en Mastodon. + instructions: 'Pon coidado en que este código apareza no HTML do teu artigo:' more_from_html: Máis de %{name} s_blog: Blog de %{name} + then_instructions: Despois engade o nome de dominio da publicación no campo inferior. title: Atribución da autoría challenge: confirm: Continuar @@ -1249,7 +1252,7 @@ gl: errors: '400': A solicitude que enviou non é válida ou ten formato incorrecto. '403': Non ten permiso para ver esta páxina. - '404': A páxina que está a buscar non está aquí. + '404': A páxina que buscas non está aquí. '406': Esta páxina non está dispoñible no formato solicitado. '410': A páxina que estaba a buscar xa non existe. '422': @@ -1430,7 +1433,7 @@ gl: table: expires_at: Caduca uses: Usos - title: Convidar xente + title: Convidar a persoas lists: errors: limit: Xa acadaches o número máximo de listas @@ -1760,11 +1763,11 @@ gl: enabled: Borrar automáticamente publicacións antigas enabled_hint: Borra automáticamente as túas publicacións unha vez acadan certa lonxevidade, a menos que cumpran algunha destas excepcións exceptions: Excepcións - explanation: Como o borrado de publicacións consume moitos recursos, esta faise aos poucos cando o servidor non ten moita carga de traballo. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por idade. + explanation: O borrado de publicacións vaise facendo aos poucos cando o servidor non ten moito traballo, é unha tarefa que consume moitos recursos. Así, a eliminación das túas publicacións podería ser lixeiramente posterior a cando lle correspondería por antigüidade. ignore_favs: Ignorar favoritas ignore_reblogs: Ignorar promocións interaction_exceptions: Excepcións baseadas en interaccións - interaction_exceptions_explanation: Ten en conta que non hai garantía de que se eliminen as túas publicacións se baixan do límite de promocións e favorecementos se nalgún momento o superaron. + interaction_exceptions_explanation: Ten en conta que non hai garantía de que se eliminen as túas publicacións se baixan do límite de promocións ou favorecementos se nalgún momento o tivesen superado. keep_direct: Manter mensaxes directas keep_direct_hint: Non borrar ningunha das túas mensaxes directas keep_media: Manter publicacións que conteñen multimedia @@ -1787,9 +1790,9 @@ gl: '63113904': 2 anos '7889238': 3 meses min_age_label: Límite temporal - min_favs: Manter as publicacións favorecidas polo menos + min_favs: Manter publicacións favorecidas polo menos min_favs_hint: Non elimina ningunha das túas publicacións que recibiron alomenos esta cantidade de favorecementos. Deixa en branco para eliminar publicacións independentemente do número de favorecementos - min_reblogs: Manter publicacións promovidas máis de + min_reblogs: Manter publicacións promovidas polo menos min_reblogs_hint: Non elimina ningunha das túas publicacións se foron promovidas máis deste número de veces. Deixa en branco para eliminar publicacións independentemente do seu número de promocións stream_entries: sensitive_content: Contido sensible diff --git a/config/locales/he.yml b/config/locales/he.yml index c7af22660f..e27339cdee 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -25,6 +25,7 @@ he: other: הודעות two: הודעותיים posts_tab_heading: הודעות + self_follow_error: בלתי אפשרי לך לעקוב אחרי חשבונך admin: account_actions: action: בצע/י פעולה @@ -101,8 +102,8 @@ he: pending: בהמתנה silenced: מוגבלים suspended: מושהים - title: ניהול קהילה - moderation_notes: הודעות מנחה + title: ניהול דיון + moderation_notes: הודעות מנחה דיונים most_recent_activity: פעילות עדכנית most_recent_ip: כתובות אחרונות no_account_selected: לא בוצעו שינויים בחשבונות ל שכן לא נבחרו חשבונות @@ -553,7 +554,7 @@ he: moderation: all: הכל limited: מוגבלים - title: ניהול קהילה + title: ניהול דיון private_comment: הערה פרטית public_comment: תגובה פומבית purge: טיהור @@ -661,7 +662,7 @@ he: delete: מחיקה placeholder: תאר/י אילו פעולות ננקטו, או עדכונים קשורים אחרים... title: הערות - notes_description_html: צפייה והשארת הערות למנחים אחרים או לעצמך העתידי + notes_description_html: צפייה והשארת הערות למנחים אחרים או לעצמך לעתיד processed_msg: דיווח %{id} עוּבָּד בהצלחה quick_actions_description_html: 'נקוט/י פעולה מהירה או גלול/י למטה לצפייה בתוכן המדווח:' remote_user_placeholder: המשתמש המרוחק מ-%{instance} @@ -712,7 +713,7 @@ he: administration: ניהול מערכת devops: DevOps invites: הזמנות - moderation: פיקוח + moderation: ניהול דיון special: מיוחדים delete: מחיקה description_html: באמצעות תפקידי משתמש, תוכלו להתאים אישית לאילו פונקציות ואזורים של מסטודון המשתמשים יוכלו לגשת @@ -734,7 +735,7 @@ he: manage_announcements: ניהול הכרזות manage_announcements_description: מאפשר למשתמשים לנהל הכרזות של השרת manage_appeals: ניהול ערעורים - manage_appeals_description: מאפשר למשתמשים לסקור ערעורים כנגד פעולות מודרציה + manage_appeals_description: מאפשר למשתמשים לסקור ערעורים כנגד פעולות ניהול דיון manage_blocks: ניהול חסימות manage_blocks_description: מאפשר למשתמשים לחסום ספקי דוא"ל וכתובות IP manage_custom_emojis: ניהול סמלונים בהתאמה אישית @@ -744,7 +745,7 @@ he: manage_invites: ניהול הזמנות manage_invites_description: מאפשר למשתמשים לעלעל ב ולבטל קישורי הזמנה manage_reports: ניהול דו"חות - manage_reports_description: מאפשר למשתמשים לסקור דו"חות ולבצע פעולות מודרציה בהתבסס עליהם + manage_reports_description: מאפשר למשתמשים לסקור דו"חות ולבצע פעולות ניהול דיון בהתבסס עליהם manage_roles: ניהול תפקידים manage_roles_description: מאפשר למשתמשים לנהל ולמנות אחרים לתפקידים נמוכים יותר משלהם. manage_rules: ניהול כללים @@ -756,7 +757,7 @@ he: manage_user_access: ניהול גישת משתמשים manage_user_access_description: מאפשר למשתמשים לבטל אימות דו-שלבי של משתמשים אחרים, לשנות את כתובות הדוא"ל שלהם, ולאפס את סיסמתם manage_users: ניהול משתמשים - manage_users_description: מאפשר למשתמשים לצפות בפרטים של משתמשים אחרים ולבצע פעולות מודרציה לפיהם + manage_users_description: מאפשר למשתמשים לצפות בפרטים של משתמשים אחרים ולבצע פעולות ניהול דיון לפיהם manage_webhooks: ניהול Webhooks manage_webhooks_description: מאפשר למשתמשים להגדיר Webhooks לאירועים מנהלתיים view_audit_log: צפייה בלוג ביקורת @@ -903,6 +904,9 @@ he: message_html: לא הוגדרו שום כללי שרת. sidekiq_process_check: message_html: שום הליכי Sidekiq לא רצים עבור %{value} תור(ות). בחנו בבקשה את הגדרות Sidekiq + software_version_check: + action: ראו עדכונים זמינים + message_html: עדכון מסטודון זמין כעת. software_version_critical_check: action: ראו עדכונים זמינים message_html: יצא עדכון קריטי למסטודון, נא לעדכן את תוכנת מסטודון בהקדם האפשרי. @@ -1198,9 +1202,11 @@ he: use_security_key: שימוש במפתח אבטחה author_attribution: example_title: טקסט לדוגמה - hint_html: בחירה איך תקבלו קרדיטציה כאשר קישורים משותפים דרך מסטודון. + hint_html: האם יש לך בלוג או טור חדשות שמתפרסם מחוץ למסטודון? ניתן לשלוט איך יוצג הקרדיט שלך כשמשתפים את הלינק במסטודון. + instructions: 'ודאו כי הקוד הזה נכלל בקוד ה־HTML של המאמרים שלכם:' more_from_html: עוד מאת %{name} s_blog: הבלוג של %{name} + then_instructions: לאחר מכן, הוסיפו את שם המתחם של האתר המפרסם בשדה למטה. title: ייחוס למפרסם challenge: confirm: המשך @@ -1744,6 +1750,7 @@ he: delete: מחיקת חשבון development: פיתוח edit_profile: עריכת פרופיל + export: ייצוא featured_tags: תגיות נבחרות import: יבוא import_and_export: יבוא ויצוא diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 5a00db9548..84fcc55354 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -21,6 +21,7 @@ hu: one: Bejegyzés other: Bejegyzés posts_tab_heading: Bejegyzés + self_follow_error: A saját fiók nem követhető admin: account_actions: action: Művelet végrehajtása @@ -570,21 +571,21 @@ hu: relationships: title: "%{acct} kapcsolatai" relays: - add_new: Új relé hozzáadása + add_new: Új továbbító hozzáadása delete: Törlés - description_html: A föderációs relé egy olyan köztes szerver, mely nagy mennyiségű nyilvános bejegyzést cserél az erre feliratkozó vagy erre publikáló szerverek között. Ezzel segíthetsz kis és közepes szervereknek tartalmat megtalálni a föderációban, mely egyébként csak akkor válna lehetővé, ha a saját felhasználóik más szervereken lévő fiókokat követnének. + description_html: A föderációs továbbító egy olyan köztes kiszolgáló, mely nagy mennyiségű nyilvános bejegyzést cserél az erre feliratkozó vagy erre publikáló kiszolgálók között. Ezzel segíthetsz kis és közepes kiszolgálóknak megtalálni a tartalmakat a föderációban, melyek egyébként csak akkor válnának lehetővé, ha a saját felhasználóik más kiszolgálókon lévő fiókokat követnének. disable: Kikapcsolás disabled: Kikapcsolva enable: Bekapcsolás - enable_hint: Ha bekapcsolod, a szerver minden nyilvános bejegyzésre feliratkozik ezen a relén, valamint az összes nyilvános bejegyzést elküldi ennek. + enable_hint: Ha bekapcsolod, a kiszolgáló minden nyilvános bejegyzésre feliratkozik ezen a továbbítón, valamint az összes nyilvános bejegyzést elküldi ennek. enabled: Bekapcsolva - inbox_url: Relé URL - pending: Várakozás a relé jóváhagyására + inbox_url: Továbbító URL + pending: Várakozás a továbbító jóváhagyására save_and_enable: Mentés és engedélyezés - setup: Relé kapcsolat felállítása - signatures_not_enabled: A relék nem fognak megfelelően működni, amíg a biztonságos mód vagy a korlátozott föderációs mód engedélyezett + setup: Továbbító kapcsolat felállítása + signatures_not_enabled: A továbbítók nem fognak megfelelően működni, amíg a biztonságos mód vagy a korlátozott föderációs mód engedélyezett status: Állapot - title: Relék + title: Továbbítók report_notes: created_msg: Bejelentési feljegyzés létrehozva! destroyed_msg: Bejelentési feljegyzés törölve! @@ -1165,9 +1166,11 @@ hu: use_security_key: Biztonsági kulcs használata author_attribution: example_title: Mintaszöveg - hint_html: Szabályozd, hogyan hivatkoznak rád, amikor linket osztanak meg Mastodonon. + hint_html: Mastodonon kívül írsz híreket vagy blogbejegyzéseket? Szabályozd, hogyan tüntethetnek fel szerzőként, amikor Mastodonon osztják meg őket. + instructions: 'Győződj meg róla, hogy ez a kód a cikked HTML-jében van:' more_from_html: 'Több tőle: %{name}' s_blog: "%{name} blogja" + then_instructions: Aztán add meg a publikáció domain-nevét az alábbi mezőben. title: Szerző forrásmegjelölése challenge: confirm: Folytatás @@ -1911,7 +1914,7 @@ hu: feature_moderation_title: Moderálás, ahogy annak lennie kell follow_action: Követés follow_step: A Mastodon az érdekes emberek követéséről szól. - follow_title: Saját hírfolyam testreszabása + follow_title: Kezdőlapi hírfolyam testreszabása follows_subtitle: Jól ismert fiókok követése follows_title: Kit érdemes követni follows_view_more: További követendő személyek megtekintése diff --git a/config/locales/ia.yml b/config/locales/ia.yml index a8bc48b306..f631d318a8 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -21,6 +21,7 @@ ia: one: Message other: Messages posts_tab_heading: Messages + self_follow_error: Sequer tu proprie conto non es permittite admin: account_actions: action: Exequer action @@ -163,7 +164,7 @@ ia: undo_silenced: Disfacer le limite undo_suspension: Disfacer le suspension unsilenced_msg: Le limite del conto de %{username} ha essite cancellate - unsubscribe: Desubscriber + unsubscribe: Cancellar subscription unsuspended_msg: Le suspension del conto %{username} ha essite annullate username: Nomine de usator view_domain: Vider summario de dominio @@ -473,6 +474,9 @@ ia: title: Recommendationes de contos a sequer unsuppress: Restaurar recommendation de sequimento instances: + audit_log: + title: Registros de controlo recente + view_all: Vider registros de controlo integre availability: description_html: one: Si le livration al dominio falle %{count} die sin succeder, necun tentativa ulterior de livration essera facite, excepte si es recipite un livration ab le dominio. @@ -599,7 +603,9 @@ ia: resolve_description_html: Necun mesura essera prendite contra le conto denunciate, necun sanction registrate, e le reporto essera claudite. silence_description_html: Iste conto essera visibile solmente a qui ja lo seque o manualmente lo cerca, limitante gravemente su portata. Pote sempre esser revertite. Claude tote le reportos contra iste conto. suspend_description_html: Le conto e tote su contento essera inaccessibile e finalmente delite, e interager con illo essera impossibile. Reversibile intra 30 dies. Claude tote le reportos contra iste conto. + actions_description_html: Decider que mesuras prender pro resolver iste reporto. Si tu prende un mesura punitive contra le conto reportate, un aviso email les sera inviate, salvo quando le categoria Spam es seligite. actions_description_remote_html: Decide qual mesura prender pro resolver iste reporto. Isto affectara solmente le maniera in que tu servitor communica con iste conto remote e gere su contento. + actions_no_posts: Iste reporto non ha alcun message associate a deler add_to_report: Adder plus al reporto already_suspended_badges: local: Ja suspendite sur iste servitor @@ -870,6 +876,9 @@ ia: message_html: Tu non ha definite alcun regula de servitor. sidekiq_process_check: message_html: Necun processo Sidekiq es active pro le cauda(s) %{value}. Per favor verifica tu configuration de Sidekiq + software_version_check: + action: Vider le actualisationes disponibile + message_html: Un actualisation de Mastodon es disponibile. software_version_critical_check: action: Vider le actualisationes disponibile message_html: Un actualisation critic de Mastodon es disponibile. Per favor actualisa lo le plus tosto possibile. @@ -885,11 +894,18 @@ ia: tags: moderation: not_trendable: Non pro tendentia + not_usable: Non usabile pending_review: Attende revision + review_requested: Revision demandate + reviewed: Revidite title: Stato + trendable: De tendentia + unreviewed: Non revidite + usable: Usabile name: Nomine newest: Le plus nove oldest: Le plus ancian + open: Vider publicamente reset: Reinitialisar review: Revide le stato search: Cercar @@ -932,7 +948,9 @@ ia: statuses: allow: Permitter message allow_account: Permitter autor + confirm_allow: Desira tu vermente permitter le statos seligite? confirm_allow_account: Es tu secur que tu vole permitter le contos seligite? + confirm_disallow: Desira tu vermente impedir le statos seligite? confirm_disallow_account: Es tu secur que tu vole cessar de permitter le contos seligite? description_html: Istes es le messages cognoscite sur tu servitor que al momento es multo compartite e marcate como favorite. Illos pote adjutar tu usatores nove e reveniente a trovar plus personas a sequer. Necun message es monstrate publicamente usque tu approba le autor, a condition que le autor permitte que su conto es suggerite a alteres. Tu pote tamben permitter o rejectar messages singule. disallow: Non permitter message @@ -1054,7 +1072,7 @@ ia: notification_preferences: Cambiar preferentias de e-mail salutation: "%{name}," settings: 'Cambiar preferentias de e-mail: %{link}' - unsubscribe: Desubscriber + unsubscribe: Cancellar subscription view: 'Visita:' view_profile: Vider profilo view_status: Vider message @@ -1100,7 +1118,7 @@ ia: migrate_account: Migrar a un altere conto migrate_account_html: Si tu vole rediriger iste conto a un altere, tu pote configurar lo hic. or_log_in_with: O aperi session con - privacy_policy_agreement_html: Io ha legite e accepta le politica de confidentialitate + privacy_policy_agreement_html: Io ha legite e accepta le politica de confidentialitate progress: confirm: Confirmar e-mail details: Tu detalios @@ -1148,8 +1166,12 @@ ia: use_security_key: Usar clave de securitate author_attribution: example_title: Texto de exemplo + hint_html: Scribe tu articulos de novas o de blog foras de Mastodon? Controla le maniera in que tu recipe attribution quando on los condivide sur Mastodon. + instructions: 'Assecura te que iste codice appare in le HTML de tu articulo:' more_from_html: Plus de %{name} s_blog: Blog de %{name} + then_instructions: Postea, adde le nomine de dominio del publication in le campo sequente. + title: Attribution de autor challenge: confirm: Continuar hint_html: "Consilio: Nos non te demandara tu contrasigno de novo in le proxime hora." @@ -1428,7 +1450,7 @@ ia: title: Historia de authentication mail_subscriptions: unsubscribe: - action: Si, desubscriber + action: Si, cancellar subscription complete: Desubscribite confirmation_html: Es tu secur de voler cancellar le subscription al %{type} de Mastodon sur %{domain} pro tu adresse de e-mail %{email}? Tu pote sempre resubscriber te a partir del parametros de notification in e-mail. emails: @@ -1444,6 +1466,7 @@ ia: media_attachments: validations: images_and_video: Impossibile annexar un video a un message que jam contine imagines + not_found: Medios %{ids} non trovate o jam attachate a un altere message not_ready: Impossibile annexar files que non ha ancora essite processate. Retenta post un momento! too_many: Impossibile annexar plus de 4 files migrations: @@ -1564,7 +1587,7 @@ ia: posting_defaults: Parametros de publication predefinite public_timelines: Chronologias public privacy: - hint_html: "Personalisa como tu vole que tu profilo e tu messages es trovate. Un varietate de functiones in Mastodon pote adjutar te a attinger un plus grande publico quando activate. Prende un momento pro revider iste parametros pro assecurar te que illos se adapta a tu besonios." + hint_html: "Personalisa como tu vole que le gente trova tu profilo e tu messages. Un varietate de functiones in Mastodon pote adjutar te a attinger un plus grande publico si tu los activa. Prende un momento pro revider iste parametros pro assecurar te que illos se adapta a tu besonios." privacy: Confidentialitate privacy_hint_html: Controla quanto tu vole divulgar pro le beneficio de alteres. Le gente discoperi profilos e applicationes interessante percurrente le profilos sequite per altere personas e vidente a partir de qual applicationes illos publica lor messages, ma tu pote preferer de mantener tal information private. reach: Portata @@ -1675,6 +1698,7 @@ ia: delete: Deletion de conto development: Disveloppamento edit_profile: Modificar profilo + export: Exportar featured_tags: Hashtags in evidentia import: Importar import_and_export: Importar e exportar diff --git a/config/locales/ig.yml b/config/locales/ig.yml index 9db771fdcf..81d425916c 100644 --- a/config/locales/ig.yml +++ b/config/locales/ig.yml @@ -1,5 +1,28 @@ --- ig: + admin: + settings: + discovery: + profile_directory: Ndekọ profaịlụ + admin_mailer: + new_trends: + new_trending_statuses: + title: Edemede na-ewu ewu + application_mailer: + view_profile: Lelee profaịlụ filters: contexts: + account: Profaịlụ home: Ụlọ na ndepụta + edit: + title: Dezie myọ + index: + delete: Hichapụ + empty: Ị nweghi myọ ọbụla. + title: Myọ + settings: + edit_profile: Dezie profaịlụ gị + profile: Profaịlụ ọha + user_mailer: + welcome: + share_title: Kekọrịta profaịlụ Mastọdọnụ gị diff --git a/config/locales/io.yml b/config/locales/io.yml index dfb583450a..1ccbb7d602 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -21,15 +21,19 @@ io: one: Posto other: Posti posts_tab_heading: Posti + self_follow_error: Sequar vua sua konto es ne permisita admin: account_actions: action: Agez + already_silenced: Ca konto ja limitigesis. + already_suspended: Ca konto ja blokusesis. title: Agez jero a %{acct} account_moderation_notes: create: Pozez noto created_msg: Jernoto sucesoze kreesis! destroyed_msg: Jernoto sucesoze efacesis! accounts: + add_email_domain_block: Blokusar retpostodomeno approve: Aprobez approved_msg: Sucesoze aprobis registroapliko di %{username} are_you_sure: Ka tu esas certa? @@ -44,6 +48,7 @@ io: title: Chanjez retposto por %{username} change_role: changed_msg: Rolo sucesoze chanjesis! + edit_roles: Administrar uzantoroli label: Chanjez rolo no_role: Nula rolo title: Chanjez rolo por %{username} @@ -56,31 +61,33 @@ io: demote: Despromocez destroyed_msg: Informi di %{username} nun aranjesis por efacesar aparante disable: Frostigez - disable_two_factor_authentication: Desaktivigez 2FA + disable_sign_in_token_auth: Desebligar retpostofichyurizo + disable_two_factor_authentication: Desebligar 2FA disabled: Desinterdiktita display_name: Profilnomo domain: Domeno - edit: Modifikez + edit: Redaktar email: E-mail email_status: Retpostostando enable: Defrostigez - enabled: Aktivigita + enable_sign_in_token_auth: Ebligar retpostofichyurizo + enabled: Ebligita enabled_msg: Sucesoze desfrostigas konto di %{username} followers: Uzanti follows: Uzati - header: Kapimajo + header: Fundimajo inbox_url: URL di mesajbuxo - invite_request_text: Juntomotivo + invite_request_text: Adeskmotivi invited_by: Invitesis da ip: IP - joined: Juntita + joined: Adeskis location: all: Omna local: Lokala remote: Nelokala title: Loko login_status: Enirstando - media_attachments: Mediiatachaji + media_attachments: Audvidajaddonaji memorialize: Memorializez memorialized: Memorializita memorialized_msg: Sucesoze chanjesis %{username} a memorialkonto @@ -110,15 +117,15 @@ io: public: Publika push_subscription_expires: Abono PuSH expiras redownload: Rifreshigez profilo - redownloaded_msg: Sucesoze rifreshis profilo di %{username} de origino + redownloaded_msg: Sucese rifreshigis profilo di %{username} de origino reject: Refuzez rejected_msg: Sucesoze refuzis registroapliko di %{username} remote_suspension_irreversible: La datumi di ca konto esas nerenversebla efacita. remote_suspension_reversible_hint_html: Ca konto restriktesis che lua servilo, e la datumi tota efacesos ye %{date}. Ante ta tempo, la fora servilo povos restaurar ca konto sen irga mala efecti. Se vu volas efacar omna datumi dil konto quik, vu povas facar lo sube. remove_avatar: Efacez profilimajo - remove_header: Efacez kapimajo + remove_header: Forigar fundimajo removed_avatar_msg: Sucesoze efacis profilimajo di %{username} - removed_header_msg: Sucesoze efacis kapimajo di %{username} + removed_header_msg: Sucese forigis fundimajo di %{username} resend_confirmation: already_confirmed: Ca uzanto ja konfirmesis send: Risendez konfirmligilo @@ -128,6 +135,7 @@ io: resubscribe: Riabonez role: Rolo search: Trovez + search_same_email_domain: Altra uzanti kun la sama retpostodomeno search_same_ip: Altra uzanti kun sama IP security: Sekureso security_measures: @@ -147,7 +155,7 @@ io: suspend: Restriktez suspended: Restriktita suspension_irreversible: Ca informi di ca konto neinversigeble efacesis. Vu povas derestriktar konto por uzebligar lu ma ol ne riganos irga dati quon ol antee havis. - suspension_reversible_hint_html: Ca konto restriktesis, e ca informi tota efacesos en %{date}. Ante ta tempo, konto povas riganesar sen irga mala efekti. Se vu volas efacar omna informi di konto quik, vu povas agar lu sube. + suspension_reversible_hint_html: Ca konto blokusesis, e ca informi tota forigesos ye %{date}. Se vu volas forigar omna informi di konto quik, vu povas agar lu dessupre. title: Konti unblock_email: Deobstruktez retpostoadreso unblocked_email_msg: Sucesoze deobstruktis retpostoadreso di %{username} @@ -168,30 +176,37 @@ io: approve_appeal: Aprobez apelo approve_user: Aprobez uzanto assigned_to_self_report: Taskigez raporto + change_email_user: Chanjar retpostoadreso por Uzanto change_role_user: Chanjez rolo di uzanto confirm_user: Konfirmez uzanto create_account_warning: Kreez averto create_announcement: Kreez anunco + create_canonical_email_block: Krear retpostoblokuso create_custom_emoji: Kreez kustumizita emocimajo create_domain_allow: Kreez domenpermiso create_domain_block: Kreez domenobstrukto + create_email_domain_block: Krear retpostodomenblokuso create_ip_block: Kreez IP-regulo create_unavailable_domain: Kreez nedisponebla domeno create_user_role: Kreez rolo demote_user: Despromocez uzanto destroy_announcement: Efacez anunco + destroy_canonical_email_block: Forigar retpostoblokuso destroy_custom_emoji: Efacez kustumizita emocimajo destroy_domain_allow: Efacez domenpermiso destroy_domain_block: Efacez domenobstrukto + destroy_email_domain_block: Forigar retpostodomenblokuso destroy_instance: Efacez domeno destroy_ip_block: Efacez IP-regulo destroy_status: Efacez posto destroy_unavailable_domain: Efacez nedisponebla domeno destroy_user_role: Destruktez rolo - disable_2fa_user: Desaktivigez 2FA - disable_custom_emoji: Desaktivigez kustumizita emocimajo - disable_user: Desaktivigez uzanto - enable_custom_emoji: Aktivigez kustumizita emocimajo + disable_2fa_user: Desebligar 2FA + disable_custom_emoji: Desebligar personesigita emocimajo + disable_sign_in_token_auth_user: Desebligar retpostofichyurizo por uzanto + disable_user: Desaktivigar uzanto + enable_custom_emoji: Ebligar personesigita emocimajo + enable_sign_in_token_auth_user: Ebligar retpostofichyurizo por uzanto enable_user: Aktivigez uzanto memorialize_account: Memorializez konto promote_user: Promocez uzanto @@ -214,56 +229,67 @@ io: update_custom_emoji: Novigez kustumizita emocimajo update_domain_block: Novigez domenobstrukto update_ip_block: Kreez IP-regulo + update_report: Tildatigar raporto update_status: Novigez posto update_user_role: Novigez rolo actions: approve_appeal_html: "%{name} aprobis jerdecidapelo de %{target}" approve_user_html: "%{name} aprobis registro de %{target}" assigned_to_self_report_html: "%{name} taskigis raporto %{target} a su" + change_email_user_html: "%{name} chanjis la retpostoadreso di uzanto %{target}" change_role_user_html: "%{name} chanjis rolo di %{target}" + confirm_user_html: "%{name} konfirmis retpostoadreso di uzanto %{target}" create_account_warning_html: "%{name} sendis averto a %{target}" create_announcement_html: "%{name} kreis nova anunco %{target}" - create_custom_emoji_html: "%{name} adchargis nova emocimajo %{target}" + create_canonical_email_block_html: "%{name} blokusis retposto kun la greto %{target}" + create_custom_emoji_html: "%{name} adkargis nova emocimajo %{target}" create_domain_allow_html: "%{name} permisis federato kun domeno %{target}" create_domain_block_html: "%{name} obstruktis domeno %{target}" + create_email_domain_block_html: "%{name} blokusis retpostodomeno %{target}" create_ip_block_html: "%{name} kreis regulo por IP %{target}" create_unavailable_domain_html: "%{name} cesis sendo a domeno %{target}" create_user_role_html: "%{name} kreis rolo di %{target}" demote_user_html: "%{name} despromocis uzanto %{target}" destroy_announcement_html: "%{name} efacis anunco %{target}" + destroy_canonical_email_block_html: "%{name} desblokusis retposto kun greto %{target}" destroy_custom_emoji_html: "%{name} efacis emocimajo %{target}" destroy_domain_allow_html: "%{name} despermisis federato kun domeno %{target}" destroy_domain_block_html: "%{name} deobstruktis domeno %{target}" + destroy_email_domain_block_html: "%{name} desblokusis retpostodomeno %{target}" destroy_instance_html: "%{name} efacis domeno %{target}" destroy_ip_block_html: "%{name} efacis regulo por IP %{target}" destroy_status_html: "%{name} efacis posto da %{target}" destroy_unavailable_domain_html: "%{name} durigis sendo a domeno %{target}" destroy_user_role_html: "%{name} efacis rolo di %{target}" - disable_2fa_user_html: "%{name} desaktivigis 2-faktorbezono por uzanto %{target}" - disable_custom_emoji_html: "%{name} desaktivigis emocimajo %{target}" - disable_user_html: "%{name} desaktivigis eniro por uzanto %{target}" - enable_custom_emoji_html: "%{name} aktivigis emocimajo %{target}" - enable_user_html: "%{name} aktivigis eniro por uzanto %{target}" + disable_2fa_user_html: "%{name} desebligis dufaktora bezono por uzanto %{target}" + disable_custom_emoji_html: "%{name} desebligis emocimajo %{target}" + disable_sign_in_token_auth_user_html: "%{name} desebligis retpostofichyurizo por %{target}" + disable_user_html: "%{name} desebligis eniro por uzanto %{target}" + enable_custom_emoji_html: "%{name} ebligis emocimajo %{target}" + enable_sign_in_token_auth_user_html: "%{name} ebligis retpostofishyurizo por %{target}" + enable_user_html: "%{name} ebligis eniro por uzanto %{target}" memorialize_account_html: "%{name} kauzigis konto di %{target} divenar memorialpagino" promote_user_html: "%{name} promocis uzanto %{target}" reject_appeal_html: "%{name} refuzis jerdecidapelo de %{target}" reject_user_html: "%{name} refuzis registro de %{target}" remove_avatar_user_html: "%{name} efacis profilimajo de %{target}" reopen_report_html: "%{name} riapertis raporto %{target}" + resend_user_html: "%{name} risendis konfirmretposto por %{target}" reset_password_user_html: "%{name} richanjis pasvorto de uzanto %{target}" resolve_report_html: "%{name} rezolvis raporto %{target}" - sensitive_account_html: "%{name} markizis medii di %{target} quale sentoza" + sensitive_account_html: "%{name} markis audvidaji di %{target} quale trublema" silence_account_html: "%{name} limitizis konto di %{target}" suspend_account_html: "%{name} restriktis konto di %{target}" unassigned_report_html: "%{name} detaskigis raporto %{target}" unblock_email_account_html: "%{name} deobstruktis retpostoadreso di %{target}" - unsensitive_account_html: "%{name} demarkizis medii di %{target} quale sentoza" + unsensitive_account_html: "%{name} desmarkizis audvidaji di %{target} quale trublema" unsilence_account_html: "%{name} efacis limito di konto di %{target}" unsuspend_account_html: "%{name} derestriktis konto di %{target}" update_announcement_html: "%{name} novigis anunco %{target}" update_custom_emoji_html: "%{name} novigis emocimajo %{target}" update_domain_block_html: "%{name} novigis domenobstrukto por %{target}" update_ip_block_html: "%{name} kreis regulo por IP %{target}" + update_report_html: "%{name} tildatigis raporto %{target}" update_status_html: "%{name} novigis posto da %{target}" update_user_role_html: "%{name} chanjis rolo di %{target}" deleted_account: konto efacita @@ -271,10 +297,11 @@ io: filter_by_action: Filtrez segun ago filter_by_user: Filtrez segun uzanto title: Kontrollogo + unavailable_instance: "(domennomo nedisponebla)" announcements: destroyed_msg: Anunco sucesoze efacesas! edit: - title: Modifikez anunco + title: Redaktar anunco empty: Nula anunci. live: Samtempe new: @@ -290,7 +317,7 @@ io: updated_msg: Anunco sucesoza novigesas! critical_update_pending: Urjanta aktualigo vartesas custom_emojis: - assign_category: Insertez kategorio + assign_category: Juntar kategorio by_domain: Domeno copied_msg: Sucesoze kreis lokala kopiuro di emocimajo copy: Kopiez @@ -299,18 +326,18 @@ io: created_msg: Emocimajo sucesoze kreesas! delete: Efacez destroyed_msg: Kustumizita emocimajo sucesoza destruktesas! - disable: Desaktivigez - disabled: Desaktivigita - disabled_msg: Sucesoze desaktivigis ta emocimajo + disable: Desebligar + disabled: Desebligita + disabled_msg: Sucese desebligis ta emocimajo emoji: Emocimajo - enable: Aktivigez - enabled: Aktivigita - enabled_msg: Sucesoze aktivigis ta emocimajo + enable: Ebligar + enabled: Ebligita + enabled_msg: Sucese ebligis ta emocimajo image_hint: Maximo grandeso di PNG o GIF esas %{size} list: Listo listed: Listita new: - title: Insertez nova kustumizita emocimajo + title: Adjuntar nova personesigita emocimajo no_emoji_selected: Nula emocimaji chanjesis pro ke nulo selektesis not_permitted: Vu ne permisesis agar co overwrite: Remplasez @@ -322,11 +349,11 @@ io: unlisted: Delistigita update_failed_msg: Ne povas novigar ta emocimajo updated_msg: Emocimajo sucesoze novigesis! - upload: Adchargez + upload: Adkargar dashboard: active_users: aktiva uzanti interactions: interagi - media_storage: Mediireteneso + media_storage: Audvidajkonservo new_users: nova uzanti opened_reports: raporti apertesis pending_appeals_html: @@ -374,7 +401,7 @@ io: created_msg: Domenobstrukto nun procedesas destroyed_msg: Domenobstrukto desagesis domain: Domeno - edit: Modifikez domenobstrukto + edit: Redaktar domenblokuso existing_domain_block: Vu ja exekutis plu rigoroza limiti a %{name}. existing_domain_block_html: Vu ja povis plu rigoroza limiti a %{name}, vu bezonas deobstruktar unesme. export: Exportez @@ -391,33 +418,41 @@ io: no_domain_block_selected: Nula domenobstrukti ne chanjesis por ke nulo selektesis not_permitted: Vu ne permisesis agar co obfuscate: Nedicernebligez domennomo - obfuscate_hint: Partala nedicernebligez domennomo en listo se reklamo di listo di domenlimito aktivigesas + obfuscate_hint: Parte celegez domennomo en la listo se reklamago di listo di domenlimito es ebligita private_comment: Privata komento private_comment_hint: Komento pri ca domenlimito esas por interna uzo da jereri. public_comment: Publika komento - public_comment_hint: Komentez pri ca domenlimito por la publiko, se reklamar listo di domenlimito aktivigesis. - reject_media: Refusez mediifaili - reject_media_hint: Efacas lokale retenita mediifaili e refuzas deschargar irgo en futuro. Nerelatata por restrikti + public_comment_hint: Komentez pri ca domenlimito por la publiko, se reklamago di listo di domenlimito es ebligita. + reject_media: Desaceptar audvidajdosieri + reject_media_hint: Forigas lokale konservita audvidajdosieri e desvolas deskargar irgo en la estonteso reject_reports: Refuzez raporti reject_reports_hint: Ignorez omna raporti quo venas de ca domeno. Nerelatata por restrikti undo: Undo view: Videz domenobstrukto email_domain_blocks: - add_new: Insertez novo + add_new: Adjuntar novo + allow_registrations_with_approval: Permisar registri kun aprobo attempts_over_week: one: "%{count} probo de pos 1 week" other: "%{count} registroprobi de pos 1 week" + created_msg: Sucese blokusis retpostodomeno delete: Efacez dns: types: mx: Rekordo MX domain: Domeno new: - create: Insertez domeno + create: Adjuntar domeno resolve: Rezolvez domeno + title: Blokusar nova retpostodomeno + no_email_domain_block_selected: Nula retpostodomenblokusi chanjesis pro ke nulo selektesis not_permitted: Ne permisata + resolved_dns_records_hint_html: La domennomo indikas ad la desantea MX-domeni kua chefe aceptas retposto. Zorgemez e ne blokusez ega retpostoprovizanti. resolved_through_html: Rezolvesis tra %{domain} + title: Blokusita retpostodomeni export_domain_allows: + new: + title: Importacar domenpermisi no_file: Nula dosiero selektesas export_domain_blocks: import: @@ -439,6 +474,9 @@ io: title: Sequez rekomendi unsuppress: Riganez sequorekomendo instances: + audit_log: + title: Lastatempa kontrolnoti + view_all: Vidar plena kontrolnoti availability: description_html: one: Se sendar a domeno falias %{count} dio sen sucesar, plusa sendoprobi ne agesos se sendo de la domeno ne ganesas. @@ -460,7 +498,7 @@ io: description_html: Vu povas fixar kontenajguidili quo aplikesos a omna konti de ca domeno e irga oli subdomeni. limited_federation_mode_description_html: Vu povas selektar ka vu permisos federar kun ca domeno. policies: - reject_media: Refusez medii + reject_media: Desaceptar audvidaji reject_reports: Refusez raporti silence: Limito suspend: Restriktez @@ -473,7 +511,7 @@ io: instance_followers_measure: nia sequanti ibe instance_follows_measure: olia sequanti hike instance_languages_dimension: Maxim uzata lingui - instance_media_attachments_measure: retenata mediiatachaji + instance_media_attachments_measure: konservita audvidajaddonaji instance_reports_measure: raporti pri oli instance_statuses_measure: retenata posti delivery: @@ -504,11 +542,11 @@ io: total_followed_by_them: Sequesis da oli total_followed_by_us: Sequesis da ni total_reported: Raporti pri oli - total_storage: Mediiatachaji + total_storage: Audvidajaddonaji totals_time_period_hint_html: Sumi quo montresas sube inkluzas informi de pos la komenco. unknown_instance: Prezente ne esas registrago pri ta domeno che ca servilo. invites: - deactivate_all: Deaktivigez omno + deactivate_all: Desebligar omno filter: all: Omna available: Disponebla @@ -517,7 +555,7 @@ io: title: Inviti ip_blocks: add_new: Kreez regulo - created_msg: Sucesoze insertis nova regulo di IP + created_msg: Sucese adjuntis nova IP-regulo delete: Efacez expires_in: '1209600': 2 semani @@ -533,19 +571,19 @@ io: relationships: title: "%{acct} relatesi" relays: - add_new: Insertez nova relayo + add_new: Adjuntar nova relayo delete: Efacez - description_html: "Federatrelayo esas mediatajservilo quo interchanjas multa publika posti inter servili quo abonas e publikigas ibe. Ol povas helpar mikra e mezgranda servili deskovrar kontenajo de fediverso, quale ne bezonas lokala uzanti manuale sequar altra personi en nelokala servili." - disable: Desaktivigez - disabled: Desaktivigita - enable: Aktivigez - enable_hint: Pos aktivigesar, vua servilo abonos omna publika posti de ca relayo, e komencos sendar publika posti di ca servilo a ol. - enabled: Aktivigita + description_html: "Fratarrelayo es intermedia servilo qua interchanjas multa publika afishi inter servili qua abonas e publikigas ibe." + disable: Desebligar + disabled: Desebligita + enable: Ebligar + enable_hint: Pos ebligita, vua servilo abonos omna publika afishi de ca relayo, e komencos sendar publika afishi di ca servilo ad ol. + enabled: Ebligita inbox_url: URL di relayo pending: Vartas aprobo di relayo - save_and_enable: Sparez e aktivigez + save_and_enable: Konservar e ebligar setup: Facez relayokonekto - signatures_not_enabled: Relayi ne korekta funcionos dum ke sekurmodo o limigita federatmodo aktivigesis + signatures_not_enabled: Relayi eble ne korekta funcionos dum ke sekurmodo o limigita fratarmodo es ebligita status: Stando title: Relayi report_notes: @@ -560,13 +598,18 @@ io: action_taken_by: Agesis da actions: delete_description_html: Raportizita posti efacesos e streko rekordigesos por helpar vu intensigar en nexta malagi da la sama konto. - mark_as_sensitive_description_html: Medii en raportizita posti markizesos quale sentoza e streko rekordigesos por helpar vu intensigar en nexta malagi da la sama konto. - other_description_html: Videz plu multa opcioni por dominacar konduto di konto e kustumizar komuniko a raportizita konto. + mark_as_sensitive_description_html: Audvidaji en raportita afishi markesos quale trublema e streko rekordesos por helpar vu intensigar en posa malagi da la sama konto. + other_description_html: Videz plu multa preferaji por regularar konduto di konto e personesigar komuniko ad raportita konto. resolve_description_html: Nulo agesos kontre raportizita konto, streko ne rekordizesos e raporto klozesos. silence_description_html: Konto esos videbla nur por personi qui ja sequas lo o manuale serchas lo, severe limitizante lua atingo. On sempre povas desfacar co. Klozas omna raporti kontra ca konto. suspend_description_html: Ca konto e omna kontenaji esos neacesebla e efacota, e interagar kun ol esos neposibla. Desfacebla dum 30 dii. Klozas omna raporti kontra ca konto. + actions_description_html: Decidez quala ago por traktar ca raporto. actions_description_remote_html: Selektez quo vu agos por solvar ca raporto. Co nur efektigos quale vua servilo komunikas kun ca fora konto e traktas lua kontenaji. - add_to_report: Insertez pluse a raporto + actions_no_posts: Ca raporto ne havas irga relatita afishi por forigar + add_to_report: Adjuntar plu ad raporto + already_suspended_badges: + local: Ja blokusita sur ca servilo + remote: Ja blokusita sur lua servilo are_you_sure: Ka vu esas certa? assign_to_self: Taskigez me assigned: Taskigita jerero @@ -589,7 +632,7 @@ io: mark_as_unresolved: Markizez quale nerezolvita no_one_assigned: Nulu notes: - create: Insertez noto + create: Adjuntar noto create_and_resolve: Rezolvez per noto create_and_unresolve: Riapertez per noto delete: Efacez @@ -603,6 +646,7 @@ io: report: 'Raporto #%{id}' reported_account: Raportizita konto reported_by: Raportizesis da + reported_with_application: Raportesis per apliko resolved: Rezolvesis resolved_msg: Raporto sucesoze rezolvesis! skip_to_actions: Saltez a agi @@ -625,6 +669,7 @@ io: delete_data_html: Efacor la profilo e kontenaji di @%{acct} ye 30 dii de nun ecepte ke lu esus desrestrikita ante ta tempe preview_preamble_html: "@%{acct} recevos averto kun la sequanta kontenajo:" record_strike_html: Registrar punto kontra @%{acct} por helpar vu traktar futura reguloviolaci di ca konto + send_email_html: Sendar ad @%{acct} avertretposton warning_placeholder: Neobligata plusa expliko por la jero-ago. target_origin: Fonto di raportizita konto title: Raporti @@ -634,18 +679,19 @@ io: updated_at: Novigesis view_profile: Videz profilo roles: - add_new: Insertez rolo + add_new: Adjuntar rolo assigned_users: one: "%{count} uzanto" other: "%{count} uzanti" categories: administration: Administro + devops: Developisto invites: Inviti moderation: Jero special: Specala delete: Efacez description_html: Per uzantoroli, vu povas kustumizar funciono e siti di Mastodon quon vua uzanti povas uzar. - edit: Modifikez rolo di '%{name}' + edit: Redaktar rolo di '%{name}' everyone: Originala permisi everyone_full_description_html: Co esas bazrolo quo efektigas omna uzanti, mem personi sen rolo. Omna altra roli ganas sama permisi de ol. permissions_count: @@ -663,23 +709,25 @@ io: manage_appeals: Jerez apeli manage_appeals_description: Permisez uzanti kontrolar apeli kontra jero manage_blocks: Jerez obstrukti + manage_blocks_description: Permisar uzanti blokusar retpostoservili e IP-adresi manage_custom_emojis: Jerez kustumizita emocimaji manage_custom_emojis_description: Permisez uzanti jerar kustumizita emocimaji en la servilo manage_federation: Jerez federo manage_federation_description: Permisez uzanti obstruktar o permisez federo kun altra domeni, e dominacar sendebleso manage_invites: Jerez inviti - manage_invites_description: Permisez uzanti vidar e desaktivigar invitligili + manage_invites_description: Permisez uzanti vidar e desebligar invitligili manage_reports: Jerez raporti manage_reports_description: Permisez uzanti kontrolar raporti e jerez kontra oli manage_roles: Jerez roli manage_roles_description: Permisez uzanti jerar e ajustar plu basa roli di olia manage_rules: Jerez reguli manage_rules_description: Permisez uzanti chanjar servilreguli - manage_settings: Jerez opcioni - manage_settings_description: Permisez uzanti chanjar sitopcioni + manage_settings: Administrar preferaji + manage_settings_description: Permisez uzanti chanjar reteypreferaji manage_taxonomies: Jerez nomkategorii - manage_taxonomies_description: Permisez uzanti kontrolar tendencoza kontenajo e novigar hashtagopcioni + manage_taxonomies_description: Permisez uzanti kontrolar populareska enhavajo e tildatigar gretvortpreferaji manage_user_access: Jerez uzantoeniro + manage_user_access_description: Permisar uzanti desebligar dufaktoryurizo di altra uzanti, chanjar retpostoadresi e richanjar pasvorto manage_users: Jerez uzanti manage_users_description: Permisez uzanti vidar detali di altra uzanti e jerar kontra oli manage_webhooks: Jerez interrethoki @@ -687,14 +735,15 @@ io: view_audit_log: Videz kontrollogo view_audit_log_description: Permisez uzanti vidar historio di administrala agi en la servilo view_dashboard: Videz chefpanelo - view_dashboard_description: Permisez uzanti uzar chefpanelo e diversa opcioni + view_dashboard_description: Permisez uzanti uzar chefpanelo e diversa mezuri + view_devops: Developisto view_devops_description: Permisez uzanti uzar chefpaneli Sidekiq e pgHero title: Roli rules: - add_new: Insertez regulo + add_new: Adjuntar regulo delete: Efacez description_html: Quankam maxim multa personi asertar ke lu ja lektis e konsentis serveskondicioni, frequente personi ne komplete lektas til problemo eventas. Faciligez on vidar vua reguli di servilo kurte per pozar puntostrukturlisto. Lasez singla reguli esar kurta e simpla, ma ne fendez a multa separata kozi anke. - edit: Modifikez regulo + edit: Redaktar regulo empty: Nula servilreguli fixesis til nun. title: Servilreguli settings: @@ -710,9 +759,11 @@ io: preamble: Fabrikmarko di ca servilo diferentigas lu de altra servili en la reto. Ca informi forsan montresas che diversa loki. Do, ca informi debas esar klara. title: Fabrikmarkeso captcha_enabled: + desc_html: Co dependas externa skripti de hCaptcha kua eble es sekureso e privatesdesquieto. Do, uzez alternativa metodi tala aprobala o invitala registro. title: Postular ke nova uzanti solvos CAPTCHA por konfirmar lia konti content_retention: - preamble: Dominacez quale uzantigita kontenajo retenesar en Mastodon. + danger_zone: Danjerzono + preamble: Selektar quale uzantigita kontenajo retenesar en Mastodon. title: Kontenajreteneso default_noindex: desc_html: Efektigas omna uzanti qui ne personale chanjis ca opciono @@ -720,17 +771,18 @@ io: discovery: follow_recommendations: Sequez rekomendaji preamble: Montrar interesanta kontenajo esas importanta ye voligar nova uzanti quo forsan ne savas irgu. Dominacez quale ca deskovrotraiti funcionar en ca servilo. - profile_directory: Profilcheflisto + profile_directory: Profiluyo public_timelines: Publika tempolinei publish_discovered_servers: Publikar deskovrita servili publish_statistics: Publikar statistiki title: Deskovro - trends: Tendenci + trends: Populari domain_blocks: all: A omnu disabled: A nulu users: A enirinta lokala uzanti registrations: + moderation_recommandation: Certez ke vu havas sata e reaktiva jergrupo ante vu desklozar registri ad omnu! preamble: Dominacez qua povas krear konto en ca servilo. title: Registragi registrations_mode: @@ -738,6 +790,7 @@ io: approved: Aprobo bezonesas por registro none: Nulu povas registrar open: Irgu povas registrar + warning_hint: Ni rekomendas uzar "Aprobo bezonita por registro" se vu ne kunfidas ke vua jergrupo povas traktar spamo e mala registri bontempe. security: authorized_fetch: Postular autentikigo de federata servili authorized_fetch_hint: Postular autentikigo de federata servili kapabligar plu strikta enforcigo dil blokusi di uzanti e dil servilo. Tamen, co enduktos exekutado-lentigo, diminutos la atingebleso di via respondi, e forsan enduktos koncilieblesoproblemi kun kelka softwari federata. Pluse, co ne preventos aganti dedikita de acesar vua publika posti e konti. @@ -745,10 +798,11 @@ io: federation_authentication: Enforcigo di federado-autentikigo title: Servilopcioni site_uploads: - delete: Efacez adchargita failo - destroyed_msg: Sitadchargito sucesoze efacesis! + delete: Forigar adkargita dosiero + destroyed_msg: Reteyadkargo sucese forigesis! software_updates: critical_update: Urjanta — voluntez aktualigar rapide + description: On rekomendesis lasar Mastodon-instalo esar tildatigita por bone ganar maxim nova repari e traiti. Do, Mastodon kontrolas tildatigi ye singla 30 minuti, e savigos vu segun vua retpostosavigpreferi. documentation_link: Lernez pluse release_notes: Emiso-noti title: Aktualigi disponebla @@ -772,7 +826,7 @@ io: in_reply_to: Respondante a language: Linguo media: - title: Medii + title: Audvidaji metadata: Metadatumi no_status_selected: Nula posti chanjesis pro ke nulo selektesis open: Apertez posto @@ -782,7 +836,7 @@ io: title: Kontoposti trending: Populara visibility: Videbleso - with_media: Kun medii + with_media: Kun audvidaji strikes: actions: delete_statuses: "%{name} efacis posti di %{target}" @@ -798,12 +852,20 @@ io: system_checks: database_schema_check: message_html: Existas vartanta datamaturmigri. Startez por certigar ke la softwaro kondutar quale expektita + elasticsearch_health_red: + message_html: Elastiksercharo es nekapabla, serchtraiti es nedisponebla + elasticsearch_health_yellow: + message_html: Elastiksercharo es nekapabla, vu darfas volar inquestar la motivo elasticsearch_preset: action: Videz la dokumentajo + message_html: Vua elastiksercharo havas plu kam un nodo, ma Mastodon ne povas uzar ili. elasticsearch_preset_single_node: action: Videz la dokumentajo + message_html: Vua elastiksercharo havas nur un nodo, ES_PRESET devas fixesesar ad single_node_cluster. + elasticsearch_reset_chewy: + message_html: Vua elastikserchsistemindexo esas destildatigita pro preferajchanjo. elasticsearch_running_check: - message_html: Ne povas konektas a Elasticsearch. Kontrolez ke ol functionas o desaktivigez textokompleta trovo + message_html: Ne povas konektas ad Elasticsearch. elasticsearch_version_check: message_html: 'Nekonciliebla versiono di Elasticsearch: %{value}' version_comparison: Elasticsearch %{running_version} funcionas ma %{required_version} bezonesas @@ -811,7 +873,10 @@ io: action: Jerez servilreguli message_html: Vu ne fixis irga servilreguli. sidekiq_process_check: - message_html: Sidekiq procedo ne funcionas ye %{value} fask(o). Kontrolez vua opciono di Sidekiq + message_html: Sidekiq procedo ne funcionas ye %{value} fask(o) + software_version_check: + action: Vidar disponebla tildatigi + message_html: Mastodon-tildatigo es disponebla. software_version_critical_check: action: Videz la aktualigi disponebla message_html: Urjanta Mastodon-aktualigo es disponebla, voluntez aktualigar la servilo tam rapide kam es posibla. @@ -825,16 +890,39 @@ io: action: Konsultez hike por plu multa informo message_html: "Vua dosierokonservo es misfigurizita. La privateso di vua uzanti es domajebla." tags: + moderation: + not_trendable: Ne popularebla + not_usable: Ne uzebla + pending_review: Vartas kontrolo + review_requested: Kontrolo demandesis + reviewed: Kontrolesis + title: Stando + trendable: Popularebla + unreviewed: Nekontrolesis + usable: Neuzebla + name: Nomo + newest: Maxim nova + oldest: Maxim desnova + open: Vidar publike + reset: Richanjar review: Kontrolez stando - updated_msg: Hashtagopcioni novigesis sucesoze + search: Serchar + title: Gretvorti + updated_msg: Gretvortpreferaji tildatigesis sucese title: Administro trends: allow: Permisez approved: Aprobesis + confirm_allow: Ka vu es certa ke vu volas permisar selektita etiketi? + confirm_disallow: Ka vu es certa ke vu volas despermisar selektita etiketi? disallow: Despermisez links: allow: Permisez ligilo allow_provider: Permisez publikiganto + confirm_allow: Ka vu es certa ke vu volas permisar selektita ligili? + confirm_allow_provider: Ka vu es certa ke vu volas permisar selektita provizanti? + confirm_disallow: Ka vu es certa ke vu volas despermisar selektita ligili? + confirm_disallow_provider: Ka vu es certa ke vu volas despermisar selektita provizanti? description_html: Co esas ligili quo nun multe partigesas da konti kun posti quon vua servilo vidas. Ol povas helpar vua uzanti lernar quo eventas en mondo. Ligili ne publike montresas til vu aprobar publikiganto. Vu povas anke permisar o refuzar individuala ligili. disallow: Despermisez ligilo disallow_provider: Despermisez publikiganto @@ -844,29 +932,33 @@ io: shared_by_over_week: one: Partigesis da 1 persono de pos antea semano other: Partigesis da %{count} personi de pos antea semano - title: Tendencoza ligili + title: Populara ligili usage_comparison: Partigesis %{today} foyi hodie, la nombro esas %{yesterday} hiere not_allowed_to_trend: Ne permisita quale popularo only_allowed: Nur permisato pending_review: Vartas kontrolo preview_card_providers: - allowed: Ligili de ca publikiganto povas divenar tendenco - description_html: Co esas domen quo havas ligili quo frequente partigesas en vua servilo. Ligili ne divenas tendenco publike se domeno di ligilo ne aprobesas. Vua aprobo (o refuzo) anke esas por subdomeni. - rejected: Ligili de ca publikiganto ne divenos tendenco + allowed: Ligili de ca publikiganto povas populareskar + description_html: Co esas domeni quo havas ligili qua ofte kunhavigesis che vua servilo. Vua aprobo anke esas por domeneti. + rejected: Ligili de ca publikiganto ne populareskos title: Publikiganti rejected: Refuzesis statuses: allow: Permisez posto allow_account: Permisez skribanto - description_html: Co esas posti quon vua servilo savas quale nun partigesas e favorizesas multe nun. Ol povas helpar vua nova e retrovenanta uzanti trovar plu multa personi por sequar. Posti ne publike montresas til vu aprobar la skribanto, e la skribanto permisas sua konto sugestesas a altra personi. Vu povas anke permisar o refuzar individuala posti. + confirm_allow: Ka vu es certa ke vu volas permisar selektita standi? + confirm_allow_account: Ka vu es certa ke vu volas permisar selektita konti? + confirm_disallow: Ka vu es certa ke vu volas despermisar selektita standi? + confirm_disallow_account: Ka vu es certa ke vu volas despermisar selektita konti? + description_html: Co esas afishi quan vua servilo savas e nun partigesis e stelumesis multe nun. Afishi ne publike montresas til vu aprobar la verkanto, e la verkanto permisas lua konto sugestesas ad altra personi. disallow: Despermisez posto disallow_account: Despermisez skribanto - no_status_selected: Nula tendencoza posti chanjesis pro ke nulo selektesis + no_status_selected: Nula populara afishi chanjesis pro ke nulo selektesis not_discoverable: Skribanto ne konsentis pri esar deskovrebla shared_by: - one: Partigesis o favorizesis 1 foye - other: Partigesis o favorizesis %{friendly_count} foye - title: Tendencoza posti + one: Partigesis o stelumesis unfoye + other: Partigesis o stelumesis %{friendly_count} foye + title: Populara afishi tags: current_score: Nuna punto esas %{score} dashboard: @@ -879,36 +971,38 @@ io: listable: Povas sugestesar no_tag_selected: Nula tagi chanjesis pro ke nulo selektesis not_listable: Ne sugestesar - not_trendable: Ne aparas che tendenci + not_trendable: Ne aparos en populari not_usable: Ne povas uzesar peaked_on_and_decaying: Maxim uzita ye %{date}, nun diminutesas - title: Tendencoza hashtagi - trendable: Povas aparar che tendenci - trending_rank: 'Tendencorango #%{rank}' + title: Populara gretvorti + trendable: Povas aparar en populari + trending_rank: 'Popularo #%{rank}' usable: Povas uzesar usage_comparison: Uzesis %{today} foyi hodie, la nombro esas %{yesterday} hiere used_by_over_week: one: Uzesis da 1 persono de pos 1 semano other: Uzesis da %{count} personi de pos 1 semano - trending: Tendenco + title: Rekomenditi & populari + trending: Populara warning_presets: - add_new: Insertez novo + add_new: Adjuntar novo delete: Efacez - edit_preset: Modifikez avertfixito + edit_preset: Redaktar avertdecido empty: Vu ne fixis irga avertfixito til nun. + title: Avertpreferaji webhooks: - add_new: Insertez finpunto + add_new: Adjuntar finpunto delete: Efacez description_html: "Rethoko povigas Mastodon sendar samtempoavizi pri selektita eventi a vua sua apliko, por ke vua apliko povas automate kauzigar reakti." - disable: Desaktivigez - disabled: Desaktivigita - edit: Modifikez finpunto + disable: Desebligar + disabled: Desebligita + edit: Redaktar finpunto empty: Vu ne havas irga ajustita finpunti ankore. - enable: Aktivigez + enable: Ebligar enabled: Aktiva enabled_events: - one: 1 aktivigita evento - other: "%{count} aktivigita eventi" + one: 1 ebligita evento + other: "%{count} ebligita eventi" events: Eventi new: Nova rethoko rotate_secret: Rotacigez sekreto @@ -917,6 +1011,8 @@ io: title: Rethoki webhook: Rethok admin_mailer: + auto_close_registrations: + subject: Registri di %{instance} automate chanjesis ad bezonar aprobo new_appeal: actions: delete_statuses: efacos ola posti @@ -945,12 +1041,12 @@ io: new_trends: body: 'Ca kozi bezonas kontrol ante ol povas montresar publike:' new_trending_links: - title: Tendencoza ligili + title: Populara ligili new_trending_statuses: - title: Tendencoza posti + title: Populara afishi new_trending_tags: - title: Tendencoza hashtagi - subject: Nova tendenci bezonas kontrolesar che %{instance} + title: Populara gretvorti + subject: Nova populari bezonas kontrolo sur %{instance} aliases: add_new: Kreez alternativa nomo created_msg: Sucesoze kreis nova alternativa nomo. Vu povas nun komencar transfero de la olda konto. @@ -959,9 +1055,9 @@ io: hint_html: Se vu volas transferesar de altra konto a co, hike vu povas krear alternativnomo, quo bezonesas ante vu povas durigar transferar sequanti de la olda konto a co. Ca ago esas nedanjeroza e inversigebla. Kontomigro komencesas de la olda konto. remove: Deligez alternative nomo appearance: - advanced_web_interface: Avancata retintervizajo - advanced_web_interface_hint: 'Se vu volas uzar tota skrenlongeso, avancata retintervizajo povigas vu modifikar multa diferanta kolumni por vida multa informi en sama tempo quon vu volas: Hemo, avizi, federatata tempolineo, multa listi e hashtagi.' - animations_and_accessibility: Animacii e aceseso + advanced_web_interface: Altnivela retintervizajo + advanced_web_interface_hint: 'Se vu volas uzar tota skrenlongeso, altnivela retintervizajo povigas vu modifikar multa dessama kolumni por vida multa informi en sama tempo quale vu volas: Hemo, savigi, fratara tempolineo, multa listi e gretvorti.' + animations_and_accessibility: Animi e adirebleso confirmation_dialogs: Konfirmdialogi discovery: Deskovro localization: @@ -970,7 +1066,9 @@ io: guide_link_text: Omnu povas kontributar. sensitive_content: Sentoza kontenajo application_mailer: + notification_preferences: Chanjar retpostopreferaji salutation: "%{name}," + settings: 'Chanjar retpostopreferaji: %{link}' unsubscribe: Desabonez view: 'Vidar:' view_profile: Videz profilo @@ -997,17 +1095,18 @@ io: redirect_to_app_html: Vu devas sendesir al apliko %{app_name}. Se to ne evenis, probez %{clicking_this_link} o retroirez manuale al apliko. registration_complete: Vua registrago che %{domain} nun es kompleta! welcome_title: Bonvenez, %{name}! + wrong_email_hint: Se ta retpostoadreso ne es korekta, vu povas chanjar lu en la kontopreferaji. delete_account: Efacez konto delete_account_html: Se vu volas efacar vua konto, vu povas irar hike. Vu demandesos konfirmar. description: - prefix_invited_by_user: "@%{name} invitas vu juntar ca servilo di Mastodon!" + prefix_invited_by_user: "@%{name} invitas vu adeskar ca servilo di Mastodon!" prefix_sign_up: Registrez che Mastodon hodie! - suffix: Per konto, vu povos sequar personi, postigar novaji e interchanjar mesaji kun uzanti de irga servilo di Mastodon e pluse! + suffix: Per konto, vu povos sequar personi, postigar novaji e interchanjar mesaji kun uzanti de irga servilo di Mastodon e plu multo! didnt_get_confirmation: Ka vu ne recevis konfirmoligilo? dont_have_your_security_key: Ka vu ne havas sekuresklefo? forgot_password: Pasvorto obliviita? invalid_reset_password_token: Pasvorto richanjoficho esas nevalida o expirita. Demandez novo. - link_to_otp: Insertez 2-faktorkodexo de vua fono o rigankodexo + link_to_otp: Insertez dufaktora kodexo de vua telefonilo o rigankodexo link_to_webauth: Uzez vua sekuresklefaparato log_in_with: Enirez per login: Enirar @@ -1017,6 +1116,7 @@ io: or_log_in_with: O eniras per privacy_policy_agreement_html: Me lektis e konsentis privatesguidilo progress: + confirm: Konfirmar retpostoadreso details: Vua detali review: Nia revuo rules: Aceptar reguli @@ -1038,8 +1138,10 @@ io: security: Chanjar pasvorto set_new_password: Selektar nova pasvorto setup: + email_below_hint_html: Kontrolez vua spamdosieruyo, o demandez altra ligilo. email_settings_hint_html: Uzez la ligilo quan ni sendis a vu por verifikar %{email}. Ni vartos hike. link_not_received: Ka vu ne recevis ligilo? + new_confirmation_instructions_sent: Vu recevos nova retposto kun la konfirmligilo pos kelka minuti! title: Kontrolez vua retposti sign_in: preamble_html: Enirez per vua %{domain} detali. Se vua konto esas che altra servilo, vu ne povos enirar hike. @@ -1050,12 +1152,22 @@ io: title: Ni komencigez vu en %{domain}. status: account_status: Kontostando + confirming: Vartas retpostokonfirmo esar kompleta. functional: Vua konto esas tote funcionoza. + pending: Vua apliko bezonas kontrolo da nia laborero. Vu ganos retposto se vua apliko aprobesis. redirecting_to: Vua konto esas neaktiva pro ke ol nun ridirektesos a %{acct}. self_destruct: Pro ke %{domain} balde klozos, vu havas nur aceso limitizata a vua konto. view_strikes: Videz antea streki kontre vua konto too_fast: Formulario sendesis tro rapide, probez itere. use_security_key: Uzes sekuresklefo + author_attribution: + example_title: Exemplotexto + hint_html: Ka vu skribas novaji o blogartikli ne en Mastodon? + instructions: 'Certigez ke ca kodexo es en HTML di vua artiklo:' + more_from_html: Plu de %{name} + s_blog: Blogo di %{name} + then_instructions: Pose, adjuntez la domennomo di publikigo en la dessupra spaco. + title: Verkantoagnosko challenge: confirm: Avancez hint_html: "Guidilo: Ni ne demandos vua pasvorto itere til 1 horo." @@ -1083,7 +1195,7 @@ io: x_months: "%{count}mo" x_seconds: "%{count}s" deletes: - challenge_not_passed: Informo quon vu insertis ne esas korekta + challenge_not_passed: Informo quan vu insertis es nekorekta confirm_password: Insertez nuna pasvorto por verifikar vua identeso confirm_username: Insertez vua uzantonomo por konfirmar procedo proceed: Efacez konto @@ -1128,6 +1240,7 @@ io: your_appeal_rejected: Vua apelo refuzesis edit_profile: basic_information: Fundamentala informo + hint_html: "Personesigez quon personi vidas sur vua publika profilo e apud vua afishi.." other: Altra errors: '400': Demando quon vu sendis esas nevalida o malstrukturala. @@ -1143,27 +1256,26 @@ io: content: Regreto, ma evas nefuncionas che nia latero. title: Ca pagino ne esas korekta '503': La pagino ne povas montresas pro tempala servilfalio. - noscript_html: Por uzar retsoftwaro di Mastodon, aktivigez JavaScript. Alternative, probez 1 de konciliebla softwari por Mastodon por vua platformo. existing_username_validator: not_found: ne povas trovar lokala uzanti kun ta uzantonomo not_found_multiple: ne povas trovar %{usernames} exports: archive_takeout: date: Dato - download: Deschargez vua arkivo - hint_html: Vu povas demandar arkivo di vua posti e adchargita medii. Exportacita informi esos kun ActivityPub format, e lektebla da irga konciliebla softwaro. Vu povas demandar arkivo pos singla 7 dii. + download: Deskargar vua arkivo + hint_html: Vu povas demandar arkivo di vua afishi e adkargita audvidaji. Vu povas demandar arkivo pos singla 7 dii. in_progress: Kompilar vua arkivo... request: Demandez vua arkivo size: Grandeso blocks: Tu blokusas - bookmarks: Libromarki + bookmarks: Lektosigni csv: CSV domain_blocks: Domenobstrukti lists: Listi mutes: Vu silencigesas - storage: Konservado di kontenajo + storage: Audvidajkonservo featured_tags: - add_new: Insertez novo + add_new: Adjuntar novo errors: limit: Vu ja pinglizis la maxima nombro de hastagi hint_html: "Quo esas estelita hashtagi? Ol montresas eminente che vua publika profilo e povigas personi vidar vua publika posti partikulare kun ta hashtagi. Oli esas bona utensilo por jeretar kreiva agaji e longa projetaji." @@ -1175,11 +1287,11 @@ io: public: Publika tempolinei thread: Konversi edit: - add_keyword: Insertez klefvorto + add_keyword: Adjuntar klefvorto keywords: Klefvorti statuses: Individuala posti statuses_hint_html: Ca filtrilo aplikesas a selektita posti ne segun kad oli parigesas kun basa klefvorti. Kontrolez o efacez posti de la filtrilo. - title: Modifikez filtrilo + title: Redaktar filtrilo errors: deprecated_api_multiple_keywords: Ca parametri ne povas chanjesar per ca softwaro pro quo oli efektigas plu kam 1 filtrilklefvorto. Uzez plu recenta softwaro o interretintervizajo. invalid_context: Nula o nevalida kuntexto donesis @@ -1201,7 +1313,7 @@ io: title: Filtrili new: save: Salvez nova filtrilo - title: Insertez nova filtrilo + title: Adjuntar nova filtrilo statuses: back_to_filter: Retrovenez a filtrilo batch: @@ -1244,7 +1356,7 @@ io: mismatched_types_warning: Semblas ke vu forsan selektis la nekorekta tipo por ca importaco, voluntez kontrolar itere. modes: merge: Kombinez - merge_long: Retenez displonebla rekordi e insertez novi + merge_long: Konservar existanta rekordi e adjuntar novi overwrite: Remplasez overwrite_long: Remplasez nuna rekordi per novi overwrite_preambles: @@ -1269,7 +1381,7 @@ io: scheduled: Projetita unconfirmed: Nekonfirmata status: Stando - success: Tua datumi esis senprobleme importacita ed esos traktita quale projetita + success: Vua datumi es senprobleme adkargita e esos traktita balde time_started: Komencita ye titles: blocking: Importacante konti blokusata @@ -1284,14 +1396,14 @@ io: destructive: Blokusati e silencigati types: blocking: Listo de blokusiti - bookmarks: Libromarki + bookmarks: Lektosigni domain_blocking: Domenobstruktolisto following: Listo de sequati lists: Listi muting: Silenciglisto - upload: Kargar + upload: Adkargar invites: - delete: Deaktivigez + delete: Desebligar expired: Expiris expires_in: '1800': 30 minuti @@ -1333,13 +1445,14 @@ io: title: Desabonez media_attachments: validations: - images_and_video: Ne povas atachar video a posto quo ja kontenar imaji - not_ready: Ne povas faili quo ankore procedigesas. Probez itere pose! - too_many: Ne povas atachar plu kam 4 faili + images_and_video: Ne povas addonar video ad afisho qua ja enhavas imaji + not_found: Audvidaji %{ids} es ne trovesis o ja addonesis ad altra afisho + not_ready: Ne povas addonar dosieri qua ankore ne finigas procedar. + too_many: Ne povas addonar plu kam 4 dosieri migrations: acct: Transferesis a cancel: Anulez ridirekto - cancel_explanation: Anular ridirekto riaktivigos vua nuna konto, ma ne riganos sequanti quo transferesis a ta konto. + cancel_explanation: Nuligar ridirekto riaktivigos vua nuna konto, ma ne riganos sequanti qua movigesis ad ta konto. cancelled_msg: Sucesoze anulis ridirekto. errors: already_moved: esas sama transferkonto @@ -1362,7 +1475,7 @@ io: backreference_required: Nova konto mustas unesme ajustesar por dopreferar co before: 'Ante durar, lektez ca noti sorgeme:' cooldown: Pos transferesar, existas varttempo kande vu ne povas transferesar itere - disabled_account: Vua nuna konto ne divenos tote uzebla pose. Tamen, vu povas acesar informexportaco e anke riaktivigo. + disabled_account: Vua nuna konto ne esos tote uzebla pose. followers: Ca ago transferos omna sequanti de nuna konto a nova konto only_redirect_html: Alternative, vu povas nur pozar ridirekto che vua profilo. other_data: Altra informi ne transferesos automate @@ -1400,7 +1513,7 @@ io: subject: "%{name} mencionis tu" title: Nova menciono poll: - subject: Votposto di %{name} finis + subject: Votinquesto da %{name} fineskis reblog: body: "%{name} repetis vua posto:" subject: "%{name} repetis vua posto" @@ -1408,7 +1521,7 @@ io: status: subject: "%{name} nove postigis" update: - subject: "%{name} modifikis posto" + subject: "%{name} redaktis afisho" notifications: email_events_hint: 'Selektez eventi quon vu volas ganar avizi:' number: @@ -1422,13 +1535,13 @@ io: thousand: K trillion: T otp_authentication: - code_hint: Insertez kodexo quo facesis da vua yurizsoftwaro por konfirmar - description_html: Se vu aktivigas 2-faktoryurizo per yurizsoftwaro, eniro bezonos vu havar vua smartfono, quale facas fichi por vu por enirar. - enable: Aktivigez - instructions_html: "Skanez ca QR-kodexo a Google Authenticator o simila TOTP-softwaro en vua smartfono. Pos co, ta softwaro facos fichi quon vu bezonos insertar kande enirar." + code_hint: Insertez kodexo qua igesis da vua yurizaplikajo por konfirmar + description_html: Se vu ebligas dufaktora yurizo per yurizaplikajo, eniro bezonos vu havar vua telefonilo, quo igos fichi por vu enirar. + enable: Ebligar + instructions_html: "Skanez ca QR-kodexo ad Google Authenticator o simila TOTP-aplikajo per vua telefonilo." manual_instructions: 'Se vu ne povas skanar QR-kodexo e bezonas insertar manuala, subo esas textosekreto:' setup: Facez - wrong_code: Insertita kodexo esas nevalida! Ka serviltempo e aparattempo esas korekta? + wrong_code: Insertita kodexo es nevalida! pagination: newer: Nova next: Sequanta @@ -1437,24 +1550,28 @@ io: truncate: "…" polls: errors: - already_voted: Vu ja votis che ca votposto - duplicate_options: havas duplikatkozi - duration_too_long: esas tro distanta en futuro + already_voted: Vu ja votis sur ca votinquesto + duplicate_options: enhavas duopliga aji + duration_too_long: esas tro desproxima en la estonteso duration_too_short: es tro balde - expired: Votposto ja finis + expired: La votinquesto ja fineskis invalid_choice: Selektita votselektajo ne existas - over_character_limit: ne povas esar plu longa kam %{max} literi por sing + over_character_limit: ne povas esar plu longa kam %{max} literi por singlo self_vote: On ne povas votar en sua propra inquesti - too_few_options: mustas havar kozi - too_many_options: ne povas havar plu kam %{max} kozi + too_few_options: mustas havar plu kam un ajo + too_many_options: ne povas enhavar plu kam %{max} aji preferences: other: Altra - posting_defaults: Originala postoopcioni + posting_defaults: Originala afishago public_timelines: Publika tempolinei privacy: + hint_html: "Personesigez quale vu volas vua profilo e vua afishi trovesis. Instante kontrolez ca preferaji por certigar ke ili aptas segun vu." privacy: Privateso + privacy_hint_html: Selektar quale vu volas montrar por altra personi. reach: Atingo + reach_hint_html: Selektar ka vu volas deskovresar e sequesar da nova personi. Ka vu volas altra personi vidar vu en ilia sequrekomendi? search: Sercho + search_hint_html: Selektar quale vu volas trovesar. Ka vu volas personi ne ek Mastodon trovar vua profilo kande serchar la interreto? title: Privateso e atingo privacy_policy: title: Privatesguidilo @@ -1547,7 +1664,7 @@ io: view_authentication_history: Videz yurizeshistorio di vua konto settings: account: Konto - account_settings: Kontoopcioni + account_settings: Kontopreferaji aliases: Kontoaltnomi appearance: Aspekto authorized_apps: Yurizita apliki @@ -1566,12 +1683,15 @@ io: strikes: Jerstreki two_factor_authentication: Dufaktora autentikigo webauthn_authentication: Sekuresklefi + severed_relationships: + download: Deskargo (%{count}) + preamble: On eble desganas sequati e sequanti kande on blokusas domeno o kande ona administranti decidas blokusar deslokala servilo. statuses: attached: audio: - one: "%{count} audio" - other: "%{count} audii" - description: 'Atachajo: %{attached}' + one: "%{count} sono" + other: "%{count} soni" + description: 'Addonajita: %{attached}' image: one: "%{count} imajo" other: "%{count} imaji" @@ -1584,14 +1704,14 @@ io: disallowed_hashtags: one: 'kontenas nepermisita hashtago: %{tags}' other: 'kontenas nepermisita hashtagi: %{tags}' - edited_at_html: Modifikesis ye %{date} + edited_at_html: Redaktesis ye %{date} errors: in_reply_not_found: Posto quon vu probas respondar semblas ne existas. over_character_limit: limito de %{max} signi ecesita pin_errors: - direct: Posti quo povas videsar nur mencionita uzanti ne povas pinglagesar - limit: Vu ja pinglagis maxima posti - ownership: Posto di altra persono ne povas pinglagesar + direct: Afishi qua nur videsebla ad mencionita uzanti ne povas adpinglesar + limit: Vu ja adpinglis la maxima afishquanto + ownership: Afisho di altra persono ne povas adpinglesar reblog: Repeto ne povas pinglizesar title: '%{name}: "%{quote}"' visibilities: @@ -1613,16 +1733,16 @@ io: interaction_exceptions_explanation: Notale, ne existas garantio ke posti efacesos se oli iras sub la favoratala o repetala solii pos iras super oli. keep_direct: Retenez direta mesaji keep_direct_hint: Ne efacas irga vua direta mesaji - keep_media: Retenez posti kun mediiatachaji - keep_media_hint: Ne efacas irga vua posti quo havas mediiatachaji - keep_pinned: Retenez pinglagita posti - keep_pinned_hint: Ne efacas irga vua pinglagita posti - keep_polls: Retenez votposti - keep_polls_hint: Ne efacas irga vua votposti - keep_self_bookmark: Retenez posti quon vu libromarkizis - keep_self_bookmark_hint: Ne efacas vua sua posti se vu libromarkizis li - keep_self_fav: Retenez posti quon vu favorizis - keep_self_fav_hint: Ne efacas vua sua posti se vu favorizis li + keep_media: Konservar afishi kun audvidajaddonaji + keep_media_hint: Ne forigas irga vua afishi qua havas audvidajaddonaji + keep_pinned: Konservar adpinglita afishi + keep_pinned_hint: Ne forigas irga vua adpinglita afishi + keep_polls: Konservar votinquesti + keep_polls_hint: Ne forigas irga vua votinquesti + keep_self_bookmark: Konservar afishi quan vu lektosignis + keep_self_bookmark_hint: Ne forigas vua sua afishi se vu lektosignis ili + keep_self_fav: Konservar afishi quan vu stelumis + keep_self_fav_hint: Ne forigas vua sua afishi se vu stelumis ili min_age: '1209600': 2 semani '15778476': 6 monati @@ -1633,7 +1753,7 @@ io: '63113904': 2 yari '7889238': 3 monati min_age_label: Oldeslimito - min_favs: Retenez favorizita posti mine + min_favs: Konservar stelumita afishi mine min_favs_hint: Ne efacas irgo ek vua posti qua havas adminime ca quanto de favoriziti. Restez vakua por efacar posti senegarde la nombro de favoriziti min_reblogs: Retenez posti repetita adminime min_reblogs_hint: Ne efacas irgo ek vua posti qua havas adminime ca quanto de repeti. Restez vakua por efacar posti senegarde la nombro de repeti @@ -1654,12 +1774,12 @@ io: month: "%b %Y" time: "%H:%M" two_factor_authentication: - add: Insertez + add: Adjuntar disable: Extingar - disabled_success: 2-faktoryurizeso sucesoze desaktivigesas - edit: Modifikez - enabled: 2-faktoryurizeso aktivigesas - enabled_success: 2-faktoryurizeso sucesoze aktivigesas + disabled_success: Dufaktora yurizo sucese desebligesis + edit: Redaktar + enabled: Dufaktora yurizo es ebligita + enabled_success: Dufaktora yurizo sucese ebligesis generate_recovery_codes: Generate Recovery Codes lost_recovery_codes: Rigankodexi povigas vu riganas aceso a vua konto se vu perdas vua smartfono. Se vu perdas vua rigankodexi, vu povas rifacar hike. Vua olda rigankodexi nevalidigesos. methods: 2-faktormetodi @@ -1678,13 +1798,16 @@ io: subject: Vua apelo de %{date} refuzesis title: Apelo refuzesis backup_ready: - subject: Vua arkivo pronte deschargebla + extra: Ol es pronta por deskargo! + subject: Vua arkivo es pronta por deskargo title: Arkivekpreno + failed_2fa: + further_actions_html: Se ol ne es vu, ni rekomendas ke vu %{action} quik pro ke ol eble maligita. suspicious_sign_in: change_password: chanjez vua pasvorto details: 'Co esas detali di eniro:' explanation: Ni deskovris eniro a vua konto de nova adreso IP. - further_actions_html: Se co ne agesis da vu, ni rekomendas ke vu %{action} quik e aktivigas 2-faktoryurizo por sekurigar vua konto. + further_actions_html: Se ol ne es vu, ni rekomendas ke vu %{action} quik e ebligas dufaktoryurizo por sekurigar vua konto. subject: Vua konto acesesis de nova adreso IP title: Nova eniro warning: @@ -1695,11 +1818,11 @@ io: violation: Kontenajo nesequas ca komunitatguidili explanation: delete_statuses: Ol trovesis ke kelka vua posti nesequas komunitatguidilo e do efacesis da jereri di %{instance}. - disable: Vu ne povas uzar vua konto pluse, ma vua profilo e altra informi restas bone. Vu povas demandar kopiur di vua informi, chanjar kontoopcioni e efacar vua konto. - mark_statuses_as_sensitive: Kelka vua posti markizesis quale sentoza da jereri di %{instance}. Do, personi bezonos kliktar medii en posti ante prevido montresas. Vu povas markizar medii quale sentoza per su kande postar en futuro. - sensitive: Pos co, omna vua adchargita mediifaili markizesos quale sentoza e celesos dop kliktoaverto. + disable: Vu ne povas uzar vua konto plue, ma vua profilo e altra informi restas kune. + mark_statuses_as_sensitive: Kelka vua afishi markesis quale trublema da administranti di %{instance}. Vu povas markar audvidaji quale sentema per su kande afishar en la estonteso. + sensitive: Pos co, omna vua adkargita audvidajdosieri markesos quale trublema e celesos dop klikaverto. silence: Vu povas ankore uzar vua konto ma nur personi quo ja sequis vu vidos vua posti en ca servilo, e vu forsan neinkluzesas de diversa deskovrotraiti. Tamen, altra personi povas ankore manuala sequar vu. - suspend: Vu ne povas uzar vua konto pluse, e vua profilo e altra informi ne esas acesebla pluse. Vu povas ankore enirar por demandar kopiur di vua informi til informi komplete efacesas pos cirkum 30 dii, ma ni retenos kelka bazala informi por preventar vu evitar restrikto. + suspend: Vu ne povas uzar vua konto plue, e vua profilo e altra informi ne es adirebla plue. reason: 'Motivo:' statuses: 'Citita posti:' subject: @@ -1719,7 +1842,12 @@ io: silence: Konto limitizesis suspend: Konto restriktigesis welcome: + apps_ios_action: Deskargez sur la aplikajbutiko + apps_step: Deskargez nia oficala aplikaji. explanation: Subo esas guidilo por helpar vu komencar + feature_creativity: Mastodon subtenas sono, video e imajafishi, adirpriskribi, votinquesti, enhavajaverti, anima imaji, personesigita emocimaji, imajettranchregulado e plu multo por helpar on expresar su enrete. + feature_moderation: Mastodon adportas decidebleso ad on. Adeskez servilo kun reguli quan vu akordas o gastigas vua sua kozo. + post_step: Salutez per texto, fotografi, videi o votinquesti. subject: Bonveno a Mastodon title: Bonveno, %{name}! users: @@ -1733,19 +1861,19 @@ io: verification: Verifikeso verified_links: Vua ligili verifikata webauthn_credentials: - add: Insertez nova sekuresklefo + add: Adjuntar nova sekuresklefo create: - error: Existas problemo kande insertar vua sekuresklefo. Probez itere. - success: Vua sekuresklefo sucesoze insertesas. + error: Esas problemo kande adjuntar vua sekuresklefo. + success: Vua sekuresklefo sucese adjuntesis. delete: Efacez delete_confirmation: Ka vu certe volas efacar ca sekuresklefo? - description_html: Se vu aktivigas sekuresklefyurizo, eniro bezonos vu uzar 1 de vua sekuresklefi. + description_html: Se vu ebligas sekuresklefyurizo, eniro bezonos vu uzar un ek vua sekuresklefi. destroy: error: Existas problemo kande efacar vua sekuresklefo. Probez itere. success: Vua sekuresklefo sucesoze efacesis. invalid_credential: Nevalida sekuresklefo nickname_hint: Insertez nometo di vua nova sekuresklefo - not_enabled: Vu ne aktivigesas WebAuthn til nun + not_enabled: Vu ne ebligis WebAuthn til nun not_supported: Ca vidilo ne suportas sekuresklefi - otp_required: Por uzar sekuresklefi, aktivigez 2-faktoryurizeso unesme. + otp_required: Por uzar sekuresklefi, ebligez dufaktora yurizo unesme. registered_on: Registris ye %{date} diff --git a/config/locales/is.yml b/config/locales/is.yml index 4af26eea0b..be0d8277e3 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -21,6 +21,7 @@ is: one: Færsla other: Færslur posts_tab_heading: Færslur + self_follow_error: Ekki er leyft að fylgjast með eigin aðgangi admin: account_actions: action: Framkvæma aðgerð @@ -877,6 +878,9 @@ is: message_html: Þú hefur ekki skilgreint neinar reglur fyrir netþjón. sidekiq_process_check: message_html: Ekkert Sidekiq-ferli er í gangi fyrir %{value} biðröð/biðraðir. Endilega athugaðu Sidekiq-uppsetninguna þína + software_version_check: + action: Skoða tiltækar uppfærslur + message_html: Uppfærsla er tiltæk fyrir Mastodon. software_version_critical_check: action: Skoða tiltækar uppfærslur message_html: Áríðandi uppfærsla Mastodon er tiltæk, uppfærðu eins fljótt og auðið er. @@ -1166,9 +1170,11 @@ is: use_security_key: Nota öryggislykil author_attribution: example_title: Sýnitexti - hint_html: Stýrðu hvernig framlög þín birtast þegar tenglum er deilt á Mastodon. + hint_html: Ertu að skrifa fréttir eða bloggfærslur utan Mastodon? Stýrðu því hvernig vitnað er í þig þegar þeim er deilt á Mastodon. + instructions: 'Gakktu úr skugga um að þessi kóði sé í HTML greinarinnar þinnar:' more_from_html: Meira frá %{name} s_blog: Bloggsvæði hjá %{name} + then_instructions: Síðan skaltu bæta lénsheiti útgefandans í reitinn hér fyrir neðan. title: Framlag höfundar challenge: confirm: Halda áfram @@ -1696,6 +1702,7 @@ is: delete: Eyðing notandaaðgangs development: Þróun edit_profile: Breyta notandasniði + export: Flytja út featured_tags: Myllumerki með aukið vægi import: Flytja inn import_and_export: Inn- og útflutningur @@ -1962,4 +1969,4 @@ is: not_enabled: Þú hefur ennþá ekki virkjað WebAuthn not_supported: Þessi vafri styður ekki öryggislykla otp_required: Til að nota öryggislykla skaltu fyrst virkja tveggja-þátta auðkenningu. - registered_on: Nýskráður %{date} + registered_on: Skráði sig %{date} diff --git a/config/locales/it.yml b/config/locales/it.yml index a89fa0a53e..554888abea 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1,7 +1,7 @@ --- it: about: - about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza azienale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodon!' + about_mastodon_html: 'Il social network del futuro: Nessuna pubblicità, zero sorveglianza aziendale, design etico e decentralizzazione! Sii il proprietario dei tuoi dati, con Mastodonte!' contact_missing: Non impostato contact_unavailable: N/D hosted_on: Mastodon ospitato su %{domain} @@ -21,6 +21,7 @@ it: one: Toot other: Toot posts_tab_heading: Toot + self_follow_error: Seguire il tuo stesso profilo non è consentito admin: account_actions: action: Esegui azione @@ -1167,9 +1168,11 @@ it: use_security_key: Usa la chiave di sicurezza author_attribution: example_title: Testo di esempio - hint_html: Controlla come sei viene accreditato quando i link sono condivisi su Mastodon. + hint_html: Stai scrivendo notizie o articoli di blog al di fuori di Mastodon? Controlla come vieni accreditato quando vengono condivisi su Mastodon. + instructions: 'Assicurati che questo codice sia presente nell''HTML del tuo articolo:' more_from_html: Altro da %{name} s_blog: Blog di %{name} + then_instructions: Quindi, aggiungi il nome di dominio della pubblicazione nel campo sottostante. title: Attribuzione autore challenge: confirm: Continua diff --git a/config/locales/ja.yml b/config/locales/ja.yml index c488505d32..dc7612d404 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -19,6 +19,7 @@ ja: posts: other: 投稿 posts_tab_heading: 投稿 + self_follow_error: 自分のアカウントをフォローすることはできません admin: account_actions: action: アクションを実行 @@ -47,6 +48,7 @@ ja: title: "%{username}さんのメールアドレスを変更" change_role: changed_msg: ロールを変更しました! + edit_roles: ユーザーのロールを管理 label: ロールを変更 no_role: ロールがありません title: "%{username}さんのロールを変更" @@ -241,26 +243,26 @@ ja: approve_remote_account_html: "%{name}さんが%{target}さんの参加を承認しました" approve_user_html: "%{name}さんが%{target}さんからの登録を承認しました" assigned_to_self_report_html: "%{name}さんが通報 %{target}を自身の担当に割り当てました" - change_email_user_html: "%{name}さんが%{target}さんのメールアドレスを変更しました" + change_email_user_html: "%{name} さんが %{target} さんのメールアドレスを変更しました" change_role_user_html: "%{name}さんが%{target}さんのロールを変更しました" - confirm_user_html: "%{name}さんが%{target}さんのメールアドレスを確認済みにしました" + confirm_user_html: "%{name} さんが %{target} さんのメールアドレスを確認済みにしました" create_account_warning_html: "%{name}さんが%{target}さんに警告メールを送信しました" create_announcement_html: "%{name}さんが新しいお知らせ %{target}を作成しました" - create_canonical_email_block_html: "%{name}さんがメールアドレス (ハッシュ値: %{target}) をブロックしました" + create_canonical_email_block_html: "%{name} さんがメールアドレスのハッシュ値 %{target} をブロックしました" create_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を追加しました" create_domain_allow_html: "%{name}さんが%{target}の連合を許可しました" create_domain_block_html: "%{name}さんがドメイン %{target}をブロックしました" - create_email_domain_block_html: "%{name}さんがメールドメイン %{target} をブロックしました" + create_email_domain_block_html: "%{name} さんがメールドメイン %{target} をブロックしました" create_ip_block_html: "%{name}さんがIP %{target}のルールを作成しました" create_unavailable_domain_html: "%{name}がドメイン %{target}への配送を停止しました" create_user_role_html: "%{name}さんがロール『%{target}』を作成しました" demote_user_html: "%{name}さんが%{target}さんを降格しました" destroy_announcement_html: "%{name}さんがお知らせ %{target}を削除しました" - destroy_canonical_email_block_html: "%{name}さんがメールアドレス (ハッシュ値: %{target}) のブロックを外しました" + destroy_canonical_email_block_html: "%{name} さんがメールアドレスのハッシュ値 %{target} のブロックを外しました" destroy_custom_emoji_html: "%{name}さんがカスタム絵文字『%{target}』を削除しました" destroy_domain_allow_html: "%{name}さんが%{target}の連合許可を外しました" destroy_domain_block_html: "%{name}さんがドメイン %{target}のブロックを外しました" - destroy_email_domain_block_html: "%{name} がメールドメイン %{target} のブロックを外しました" + destroy_email_domain_block_html: "%{name} さんがメールドメイン %{target} のブロックを外しました" destroy_instance_html: "%{name}さんがドメイン %{target}をブロックしました" destroy_ip_block_html: "%{name}さんが IP %{target}のルールを削除しました" destroy_status_html: "%{name}さんが%{target}さんの投稿を削除しました" @@ -285,7 +287,7 @@ ja: remove_media_status_html: "%{name}さんが%{target}さんの投稿のメディアを削除しました" remove_status_status_html: "%{name}さんが%{target}さんの投稿を削除しました" reopen_report_html: "%{name}さんが通報 %{target}を未解決に戻しました" - resend_user_html: "%{name}さんが %{target} の確認メールを再送信しました" + resend_user_html: "%{name} さんが %{target} の確認メールを再送信しました" reset_password_user_html: "%{name}さんが%{target}さんのパスワードをリセットしました" resolve_report_html: "%{name}さんが通報 %{target}を解決済みにしました" sensitive_account_html: "%{name}さんが%{target}さんのメディアを閲覧注意にマークしました" @@ -300,7 +302,7 @@ ja: update_custom_emoji_html: "%{name}さんがカスタム絵文字 %{target}を更新しました" update_domain_block_html: "%{name}さんが%{target}のドメインブロックを更新しました" update_ip_block_html: "%{name} さんがIP %{target} のルールを更新しました" - update_report_html: "%{name}さんが通報 %{target} を更新しました" + update_report_html: "%{name} さんが通報 %{target} を更新しました" update_status_html: "%{name}さんが%{target}さんの投稿を更新しました" update_user_role_html: "%{name}さんがロール『%{target}』を変更しました" deleted_account: 削除されたアカウント @@ -585,7 +587,7 @@ ja: instance_accounts_dimension: 最もフォローされているアカウント instance_accounts_measure: 保存されたアカウント instance_followers_measure: そこでの我々のフォロワー - instance_follows_measure: リモートフォローしているアカウント + instance_follows_measure: こちらからのフォロー数 instance_languages_dimension: 人気の言語 instance_media_attachments_measure: 保存されたメディア instance_reports_measure: 通報 @@ -1122,6 +1124,9 @@ ja: message_html: サーバーのルールを定義していません。 sidekiq_process_check: message_html: "%{value}キューに対応するSidekiqプロセスがありません。Sidekiqの設定を確認してください。" + software_version_check: + action: 利用可能な更新を確認 + message_html: Mastodonの更新が利用可能です。 software_version_critical_check: action: 利用可能な更新を見る message_html: 緊急のMastodonアップデートがあります。速やかに適用してください。 @@ -1458,6 +1463,14 @@ ja: too_fast: フォームの送信が速すぎます。もう一度やり直してください。 use_security_key: セキュリティキーを使用 with_login_options: カスタムCSSを無効化しますか? + author_attribution: + example_title: サンプルテキスト + hint_html: Mastodonの外でニュースやブログなどを執筆しているユーザーは、Mastodonで自分の記事が共有されたときに著者情報を表示させることができます。 + instructions: 以下のコードを自分の記事のHTMLに貼り付けます。 + more_from_html: "%{name} のその他の情報" + s_blog: "%{name} のブログ" + then_instructions: その後、記事の公開に使用しているドメイン名を以下の入力欄に追加してください。 + title: 著者の帰属 challenge: confirm: 続ける hint_html: 以後1時間はパスワードの再入力を求めません @@ -2005,6 +2018,7 @@ ja: delete: アカウントの削除 development: 開発 edit_profile: プロフィールを編集 + export: エクスポート featured_tags: 注目のハッシュタグ import: データのインポート import_and_export: インポート・エクスポート @@ -2288,6 +2302,7 @@ ja: instructions_html: 以下のコードをコピーしてwebサイトのHTMLに貼り付けます。次に「プロフィールを編集」タブから、「プロフィール補足情報」のいずれかの欄にwebサイトのURLを記入し、「変更を保存」をクリックしてください。 verification: 認証 verified_links: 確認済みリンク + website_verification: ウェブサイトの認証 webauthn_credentials: add: セキュリティキーを追加 create: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 12bda84d46..e1abf2ac00 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -71,7 +71,7 @@ kab: active: Yermed all: Akk pending: Yettraǧu - suspended: Yeḥbes + suspended: Yettwaḥbes title: Aseɣyed moderation_notes: Tamawin n useɣyed most_recent_activity: Armud aneggaru @@ -109,7 +109,7 @@ kab: silenced: Yettwasgugem statuses: Tisuffaɣ subscribe: Jerred - suspended: Yeḥbes + suspended: Yettwaḥbes title: Imiḍanen unconfirmed_email: Imayl ur yettwasentem ara undo_silenced: Kkes asgugem @@ -264,6 +264,8 @@ kab: domain: Taɣult new: create: Rnu taɣult + export_domain_allows: + no_file: Ula d yiwen ufaylu ma yettwafran export_domain_blocks: no_file: Ulac afaylu yettwafernen follow_recommendations: @@ -484,7 +486,7 @@ kab: delete_account: Kkes amiḍan description: prefix_invited_by_user: "@%{name} inced-ik·ikem ad ternuḍ ɣer uqeddac-a n Mastodon!" - prefix_sign_up: Zeddi di Maṣṭudun assa! + prefix_sign_up: Zeddi di Maṣṭudun ass-a! suffix: S umiḍan, tzemreḍ ad tḍefreḍ imdanen, ad d-tessufɣeḍ tisuffaɣ d wembadal n yiznan akked yiseqdacen n yal aqeddac Mastodon d wayen-nniḍen! didnt_get_confirmation: Ur d-teṭṭifeḍ ara aseɣwen n usentem ? dont_have_your_security_key: Ulac ɣur-k·m tasarut-ik·im n tɣellist? @@ -529,6 +531,10 @@ kab: account_status: Addad n umiḍan functional: Amiḍan-inek·inem yetteddu s lekmal-is. use_security_key: Seqdec tasarut n teɣlist + author_attribution: + example_title: Amedya n weḍris + more_from_html: Ugar s ɣur %{name} + s_blog: Ablug n %{name} challenge: confirm: Kemmel invalid_password: Yir awal uffir @@ -685,6 +691,9 @@ kab: subject: Yuder-ik·ikem-id %{name} reblog: subject: "%{name} yesselha addad-ik·im" + title: Azuzer amaynut + status: + subject: "%{name} akken i d-y·t·essufeɣ" number: human: decimal_units: @@ -737,6 +746,7 @@ kab: electron: Electron firefox: Firefox generic: Iminig arusin + huawei_browser: Iminig n Huawei ie: Internet Explorer micro_messenger: MicroMessenger nokia: Iminig Nokia S40 Ovi @@ -745,6 +755,7 @@ kab: phantom_js: PhantomJS qq: Iminig QQ safari: Safari + uc_browser: UC Browser unknown_browser: Iminig arussin weibo: Weibo current_session: Tiɣimit tamirant @@ -776,6 +787,7 @@ kab: delete: Tukksa n umiḍan development: Taneflit edit_profile: Ẓreg amaɣnu + export: Sifeḍ import: Kter import_and_export: Taktert d usifeḍ migrate: Tunigin n umiḍan diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 3f6c4b39b8..d9a8406e51 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -19,6 +19,7 @@ ko: posts: other: 게시물 posts_tab_heading: 게시물 + self_follow_error: 본인의 계정을 팔로우할 수는 없습니다 admin: account_actions: action: 조치 취하기 @@ -192,7 +193,7 @@ ko: destroy_domain_allow: 도메인 허용 삭제 destroy_domain_block: 도메인 차단 삭제 destroy_email_domain_block: 이메일 도메인 차단 삭제 - destroy_instance: 도메인 제거 + destroy_instance: 도메인 퍼지 destroy_ip_block: IP 규칙 삭제 destroy_status: 게시물 삭제 destroy_unavailable_domain: 사용 불가능한 도메인 제거 @@ -290,8 +291,8 @@ ko: update_user_role_html: "%{name} 님이 %{target} 역할을 수정했습니다" deleted_account: 계정을 삭제했습니다 empty: 로그를 찾을 수 없습니다 - filter_by_action: 행동으로 거르기 - filter_by_user: 사용자로 거르기 + filter_by_action: 동작 별 필터 + filter_by_user: 사용자 기준으로 필터 title: 감사 로그 unavailable_instance: "(도메인네임 사용불가)" announcements: @@ -525,7 +526,7 @@ ko: title: 중재 private_comment: 비공개 주석 public_comment: 공개 주석 - purge: 제거 + purge: 퍼지 purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다. title: 연합 total_blocked_by_us: 우리에게 차단 됨 @@ -1149,9 +1150,11 @@ ko: use_security_key: 보안 키 사용 author_attribution: example_title: 예시 텍스트 - hint_html: 링크가 마스토돈에 공유될 때 내가 어떻게 표시될 지를 제어합니다. + hint_html: 마스토돈 밖에서 뉴스나 블로그 글을 쓰시나요? 마스토돈에 공유되었을 때 어떻게 표시될지를 제어하세요. + instructions: '이 코드가 글의 HTML 안에 포함되는지 확인하세요:' more_from_html: "%{name}의 게시물 더 보기" s_blog: "%{name}의 블로그" + then_instructions: 그리고 발행처의 도메인 네임을 아래 입력란에 추가하세요. title: 작성자 기여 challenge: confirm: 계속 @@ -1613,7 +1616,7 @@ ko: over_total_limit: 예약 게시물 제한 %{limit}을 초과합니다 too_soon: 예약 날짜는 미래여야 합니다 self_destruct: - lead_html: 안타깝게도, %{domain} 도메인을 영구히 폐쇄합니다. 이곳의 계정을 가졌다면, 이제 이용할 수 없으며, 당분간 백업 데이터를 요청할 수 있습니다. + lead_html: 안타깝게도, %{domain}은 영구적으로 폐쇄됩니다. 이곳의 계정을 가지고 있었다면, 이제 이용할 수 없지만 백업 데이터는 요청할 수 있습니다. title: 이 서버는 폐쇄중입니다 sessions: activity: 최근 활동 @@ -1694,7 +1697,7 @@ ko: lost_followers: 잃은 팔로워 lost_follows: 잃은 팔로우 preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다. - purged: 이 서버에 대한 정보는 관리자에 의해 삭제되었습니다. + purged: 이 서버에 대한 정보는 관리자에 의해 제거되었습니다. type: 이벤트 statuses: attached: diff --git a/config/locales/la.yml b/config/locales/la.yml index cc92bf6d28..edd99ac23d 100644 --- a/config/locales/la.yml +++ b/config/locales/la.yml @@ -31,3 +31,28 @@ la: destroyed_msg: Nota moderationis feliciter deleta est! accounts: are_you_sure: Esne certus? + statuses: + title: Ratiōnis publicātiōnēs + auth: + privacy_policy_agreement_html: Lēgī et cōnsēnsī ad pōlīticam prīvātī tūtelam + setup: + email_settings_hint_html: Premī nexum quem tibi mīsimus ut %{email} comprobēs. Hīc manēbimus. + sign_up: + preamble: Cum ratiōne in hāc servēnce Mastodonī, quemlibet alium hominem in rēte sequī poteris, ubicumque ratiō eius administrētur. + imports: + overwrite_preambles: + blocking_html: Mox līstam blōcātiōnis tuam substituēbis cum usque ad %{total_items} ratiōnēs e %{filename}. + bookmarks_html: Mox signa tua substituēbis cum usque ad %{total_items} prōnūntiātiōnēs e %{filename}. + domain_blocking_html: Mox līstam blōcātiōnis dominī tuī substituēbis cum usque ad %{total_items} dominī e %{filename}. + following_html: Mox sequēris usque ad %{total_items} ratiōnēs e %{filename} et desinēs sequī quemquam alium. + lists_html: Mox līstās tuās substituēbis cum contentīs %{filename}. Usque ad %{total_items} ratiōnēs ad novās līstās addentur. + muting_html: Mox līstam ratiōnum sīlentiōrum tuārum substituēbis cum usque ad %{total_items} ratiōnēs e %{filename}. + preambles: + blocking_html: Mox blōcābis usque ad %{total_items} ratiōnēs e %{filename}. + bookmarks_html: '"Mox usque ad %{total_items} nūmēra e %{filename} adde in līstās tuās."' + domain_blocking_html: Mox blōcābis usque ad %{total_items} dōmina e %{filename}. + following_html: Mox sequēris usque ad %{total_items} ratiōnēs e %{filename}. + lists_html: Mox usque ad %{total_items} ratiōnēs e %{filename} adde in līstās tuās. Novae līstās creābuntur, sī līstā ad quam addere nōn est. + muting_html: Mox tacēbis usque ad %{total_items} ratiōnēs e %{filename}. + scheduled_statuses: + too_soon: Dāta dēfīnīta in futurō esse dēbēbit. diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 275bdab861..10871b826b 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -24,6 +24,7 @@ lad: admin: account_actions: action: Realiza aksion + already_silenced: Este kuento ya tiene sido limitado. already_suspended: Este kuento ya tiene sido suspendido. title: Modera %{acct} account_moderation_notes: @@ -46,6 +47,7 @@ lad: title: Troka la posta elektronika de %{username} change_role: changed_msg: Rolo trokado kon sukseso! + edit_roles: Administra reglas de utilizadores label: Troka rolo no_role: Sin rolo title: Troka rolo para %{username} @@ -595,6 +597,7 @@ lad: resolve_description_html: No se tomaran aksyones kontra el kuento denunsiado, no se enrejistrara el amonestamiento, i se serrara el raporto. silence_description_html: El profil sera vizivle solo para akeyos ke ya lo sigan o lo bushken manualmente, limitando seriamente su alkanse. Siempre puede ser revertido. suspend_description_html: El profil i todos sus kontenidos seran inaksesivles asta ke sean enfin supremidos. La enteraksion kon el kuento sera emposivle. Reversivle durante un tiempo de 30 diyas. + actions_description_html: Dechide kualas mizuras tomar para rezolver esta denunsia. Si tomas una aksion punitiva kontra el kuento denunsiada, se le embiara a dicho kuento un avizo por posta elektronika, ekseptado kuando se eskoja la kategoria Spam. actions_description_remote_html: Dechide ke fazer para rezolver este raporto. Esto solo va afektar komo tu sirvidor komunike kon este kuento remoto i ke faze kon su kontenido. add_to_report: Adjusta mas al raporto already_suspended_badges: @@ -636,6 +639,7 @@ lad: report: 'Raporta #%{id}' reported_account: Kuento raportado reported_by: Raportado por + reported_with_application: Raportado kon aplikasyon resolved: Rezolvido resolved_msg: Tienes rezolvido la denunsia djustamente! skip_to_actions: Va direktamente a las aksyones @@ -697,6 +701,7 @@ lad: manage_appeals: Administra apelasiones manage_appeals_description: Permete a los utilizadores revizar apelasiones kontra aksyones de moderasyon manage_blocks: Administra blokos + manage_blocks_description: Permete a los utilizadores blokar los prokuradores de posta elektronika i los adresos IP manage_custom_emojis: Administra emojis personalizados manage_custom_emojis_description: Permete a los utilizadores editar emojis personalizados en el sirvidor manage_federation: Administra federasyon @@ -714,6 +719,7 @@ lad: manage_taxonomies: Administra etiketas manage_taxonomies_description: Permete a los utilizadores revizar el kontenido en trend i aktualizar la konfigurasyon de las etiketas manage_user_access: Administra akseso de utilizadores + manage_user_access_description: Permete a los utilizadores dezaktivar la autentifikasyon en dos pasos de otros utilizadores, trokar sus adreso de posta elektronika i restableser sus kod manage_users: Administra utilizadores manage_users_description: Permete a los utilizadores ver los peratim de otros utilizadores i realizar aksyones de moderasyon kontra eyos manage_webhooks: Administrar webhooks @@ -748,6 +754,7 @@ lad: desc_html: Esto se baza en eskriptos eksternos de hCaptcha, ke pueden ser una influensya negra a la sigurita i privasita. Ademas, esto puede rezultar en un proseso de enrejistrasyon signifikativamente manko aksesivle para algunas personas (espesyalmente diskapasitadas). Por estas razones, por favor, konsidera otras alternativas komo rejistrasyon por aprovasyon manuala o kon envitasyon. title: Solisita ke los muevos utilizadores rezolven un CAPTCHA para konfirmar su konto content_retention: + danger_zone: Zona de perikolo preamble: Kontrola komo el kontenido jenerado por el utilizador se magazina en Mastodon. title: Retensyon de kontenido default_noindex: @@ -787,6 +794,7 @@ lad: destroyed_msg: Dosya supremida kon sukseso! software_updates: critical_update: Kritiko – por favor aktualiza pishin + description: Rekomendamos ke mantengas aktualizada tu enstalasyon de Mastodon para benefisyar de las muevas koreksyones y funksyones. Ademas, a vezes es kritiko aktualizar Mastodon punktualmente para evitar problemas de sigurita. Por estas razones, Mastodon komprova si ay aktualizasyones kada 30 minutos, i te avizara de akodro a tus preferensyas de avizos por posta elektronika. documentation_link: Ambezate mas release_notes: Notas sovre la versyon title: Aktualizasyones desponivles @@ -860,6 +868,9 @@ lad: message_html: No tienes definido dinguna regla del sirvidor. sidekiq_process_check: message_html: No ay dingun prosedura Sidekiq en egzekusion para la(s) kola(s) %{value}. Por favor, reviza tu konfigurasyon de Sidekiq + software_version_check: + action: Amostra aktualizasyones desponivles + message_html: Una aktualizasyon de Mastodon esta desponivle. software_version_critical_check: action: Amostra aktualizasyones desponivles message_html: Una aktualizasyon kritika de Mastodon esta desponivle. Por favor aktualiza pishin. @@ -874,12 +885,18 @@ lad: message_html: "Tu magazinaje de objektos es mal konfigurado. La privasita de tus utilizadores esta en riziko." tags: moderation: + not_trendable: No trendavle + not_usable: No uzavle pending_review: Revizion esta asperando + reviewed: Revizado title: Estado + trendable: Trendavle + unreviewed: No revizado usable: Uzavle name: Nombre newest: Mas muevos oldest: Mas viejos + open: Ve puvlikamente reset: Reinisya review: Estado de revizion search: Bushka @@ -948,6 +965,7 @@ lad: used_by_over_week: one: Uzada por una persona durante la ultima semana other: Uzada por %{count} personas durante la ultima semana + title: Rekomendasyones i trendes trending: En trend warning_presets: add_new: Adjusta muevo @@ -1118,6 +1136,7 @@ lad: title: Kriya kuento de Mastodon en %{domain}. status: account_status: Estado del kuento + confirming: Bekleando konfirmasyon de posta elektronika. functional: Tu kuento esta kompletamente funksyonal. pending: Tu solisitasyon esta asperando la revizion por muestros administradores. Esto puede tadrar algun tiempo. Arisiviras una posta elektronika si la solisitasyon sea achetada. redirecting_to: Tu kuento se topa inaktivo porke esta siendo readresado a %{acct}. @@ -1126,7 +1145,9 @@ lad: too_fast: Formulario enviado demaziado rapido, aprovalo de muevo. use_security_key: Uza la yave de sigurita author_attribution: + example_title: Teksto de enshemplo more_from_html: Mas de %{name} + s_blog: Blog de %{name} challenge: confirm: Kontinua hint_html: "Konsejo: No retornaremos a demandarte por el kod durante la sigiente ora." @@ -1652,6 +1673,7 @@ lad: delete: Efasa kuento development: Dezvelopamiento edit_profile: Edita profil + export: Eksporto featured_tags: Etiketas avaliadas import: Importo import_and_export: Importo i eksporto @@ -1890,6 +1912,7 @@ lad: instructions_html: Kopia i apega este kodiche en el HTML de tu sitio web. Estonses, adjusta el adreso de tu sitio web en uno de los kutis adisyonales de tu profil dizde la seksyon "Edita profil" i guadra los trokamyentos. verification: Verifikasyon verified_links: Tus atadijos verifikados + website_verification: Verifikasyon de sityo web webauthn_credentials: add: Adjusta mueva yave de sigurita create: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 3b63ba6dcf..3f7c8d067b 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -4,7 +4,7 @@ lt: about_mastodon_html: 'Ateities socialinis tinklas: jokių reklamų, jokių įmonių sekimo, etiškas dizainas ir decentralizacija! Turėk savo duomenis su Mastodon.' contact_missing: Nenustatyta contact_unavailable: Nėra - hosted_on: Mastodon talpinamas %{domain} + hosted_on: "„Mastodon“ talpinamas domene %{domain}" title: Apie accounts: followers: @@ -343,7 +343,7 @@ lt: opened_reports: atidaryti ataskaitos pending_appeals_html: few: "%{count} laukiantys apeliacijos" - many: "%{count} laukiama apeliacija" + many: "%{count} laukiamos apeliacijos" one: "%{count} laukiama apeliacija" other: "%{count} laukiančių apeliacijų" pending_reports_html: @@ -446,8 +446,8 @@ lt: availability: title: Prieinamumas warning: Paskutinis bandymas prisijungti prie šio serverio buvo nesėkmingas - back_to_all: Visi - back_to_limited: Apribotas + back_to_all: Viskas + back_to_limited: Apribota back_to_warning: Įspėjimas by_domain: Domenas content_policies: @@ -593,7 +593,7 @@ lt: no_status_selected: Jokie įrašai nebuvo pakeisti, nes nė vienas buvo pasirinktas open: Atidaryti įrašą original_status: Originalus įrašas - title: Paskyros statusai + title: Paskyros įrašai trending: Tendencinga with_media: Su medija system_checks: @@ -804,12 +804,14 @@ lt: security: Apsauga set_new_password: Nustatyti naują slaptažodį setup: - email_settings_hint_html: Spustelėk mūsų atsiųstą nuorodą, kad patikrintum %{email}. Mes lauksime čia. + email_settings_hint_html: Spustelėkite mūsų atsiųstą nuorodą, kad patvirtintumėte %{email}. Mes lauksime čia. link_not_received: Negavai nuorodos? title: Patikrinti pašto dėžutę sign_in: preamble_html: Prisijunk su savo %{domain} kredencialais. Jei tavo yra kitame serveryje, čia prisijungti negalėsi. title: Prisijungti prie %{domain} + sign_up: + preamble: Su paskyra šiame „Mastodon“ serveryje galėsite sekti bet kurį kitą tinkle esantį asmenį, nepriklausomai nuo to, kur yra jų paskyra. status: account_status: Paskyros būsena redirecting_to: Tavo paskyra yra neaktyvi, nes šiuo metu ji nukreipiama į %{acct}. @@ -817,9 +819,11 @@ lt: view_strikes: Peržiūrėti ankstesnius savo paskyros pažeidimus author_attribution: example_title: Teksto pavyzdys - hint_html: Valdyk, kaip esi nurodomas (-a), kai nuorodos bendrinamos platformoje „Mastodon“. + hint_html: Ar rašote naujienas ar tinklaraščio straipsnius už „Mastodon“ ribų? Valdykite, kaip būsite nurodomi, kai jais bus bendrinama platformoje „Mastodon“. + instructions: 'Įsitikinkite, kad šis kodas yra jūsų straipsnio HTML:' more_from_html: Daugiau iš %{name} s_blog: "%{name} tinklaraštis" + then_instructions: Tada toliau esančiame lauke įrašykite leidinio domeno vardą. title: Autoriaus (-ės) atribucija challenge: hint_html: "Patarimas: artimiausią valandą daugiau neprašysime tavo slaptažodžio." @@ -919,6 +923,16 @@ lt: merge_long: Išsaugoti esančius įrašus ir pridėti naujus overwrite: Perrašyti overwrite_long: Pakeisti senus įrašus naujais + overwrite_preambles: + blocking_html: Ketinate pakeisti savo blokavimo sąrašą iki %{total_items} paskyrų%{filename}. + bookmarks_html: Ketinate pakeisti savo žymes iki %{total_items} įrašų%{filename}. + domain_blocking_html: Ketinate pakeisti savo domeno blokavimo sąrašą iki %{total_items} domenų%{filename}. + following_html: Ketinate sekti iki %{total_items} paskyrų%{filename} ir nustoti sekti kitus. + preambles: + domain_blocking_html: Ketinate užblokuoti iki %{total_items} domenų%{filename}. + following_html: Ketinate sekti iki %{total_items} paskyrų%{filename}. + lists_html: Ketinate įtraukti iki %{total_items} paskyrų%{filename} į savo sąrašus. Nauji sąrašai bus sukurti, jei nėra sąrašo, į kurį būtų galima įtraukti. + muting_html: Ketinate nutildyti iki %{total_items} paskyrų%{filename}. preface: Gali importuoti duomenis, kuriuos eksportavai iš kito serverio, pavyzdžiui, sekamų arba blokuojamų žmonių sąrašą. success: Jūsų informacija sėkmingai įkelta ir bus apdorota kaip įmanoma greičiau types: @@ -1054,7 +1068,7 @@ lt: scheduled_statuses: over_daily_limit: Jūs pasieketė limitą (%{limit}) galimų toot'ų per dieną over_total_limit: Jūs pasieketė %{limit} limitą galimų toot'ų - too_soon: Planuota data privalo būti ateityje + too_soon: Suplanuota data turi būti ateityje. sessions: activity: Paskutinė veikla browser: Naršyklė diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 16844a95c2..6123cc0618 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -23,31 +23,33 @@ lv: other: Ziņas zero: Ziņu posts_tab_heading: Ziņas + self_follow_error: Nav ļauts sekot savam kontam admin: account_actions: action: Veikt darbību already_silenced: Šis konts jau ir ierobežots. already_suspended: Šis konts jau ir aizturēts. - title: Veikt moderācijas darbību %{acct} + title: Veikt satura pārraudzības darbību %{acct} account_moderation_notes: create: Atstāt piezīmi - created_msg: Moderācijas piezīme ir veiksmīgi izveidota! - destroyed_msg: Moderācijas piezīme ir veiksmīgi iznīcināta! + created_msg: Satura pārraudzības piezīme ir sekmīgi izveidota. + destroyed_msg: Satura pārraudzības piezīme ir sekmīgi iznīcināta. accounts: + add_email_domain_block: Liegt e-pasta domēnu approve: Apstiprināt - approved_msg: Veiksmīgi apstiprināts %{username} reģistrēšanās pieteikums + approved_msg: "%{username} reģistrēšanās pieteikums sekmīgi apstiprināts" are_you_sure: Vai esi pārliecināts? avatar: Profila attēls by_domain: Domēns change_email: - changed_msg: E-pasts veiksmīgi nomainīts! + changed_msg: E-pasta adrese sekmīgi nomainīta. current_email: Pašreizējais e-pasts label: Mainīt e-pastu new_email: Jaunā e-pasta adrese submit: Mainīt e-pastu title: Mainīt e-pastu %{username} change_role: - changed_msg: Loma veiksmīgi nomainīta! + changed_msg: Loma sekmīgi nomainīta. edit_roles: Pārvaldīt lietotāju lomas label: Mainīt lomu no_role: Nav lomas @@ -61,6 +63,7 @@ lv: demote: Pazemināt destroyed_msg: Lietotāja %{username} dati tagad ievietoti rindā, lai tos nekavējoties izdzēstu disable: Iesaldēt + disable_sign_in_token_auth: Atspējot autentificēšanos ar e-pasta pilnvaru disable_two_factor_authentication: Atspējot 2FA disabled: Iesaldēts display_name: Parādāmais vārds @@ -69,8 +72,9 @@ lv: email: E-pasts email_status: E-pasta statuss enable: Atsaldēt + enable_sign_in_token_auth: Iespējot autentificēšanos ar e-pasta pilnvaru enabled: Iespējots - enabled_msg: Veiksmīgi atsaldēts %{username} konts + enabled_msg: "%{username} konts sekmīgi atsaldēts" followers: Sekotāji follows: Seko header: Galvene @@ -88,16 +92,16 @@ lv: media_attachments: Multivides pielikumi memorialize: Pārvērst atmiņās memorialized: Piemiņa saglabāta - memorialized_msg: "%{username} veiksmīgi pārvērsts par piemiņas kontu" + memorialized_msg: "%{username} sekmīgi pārveidots par piemiņas kontu" moderation: active: Aktīvie all: Visi - disabled: Atspējots + disabled: Atspējota pending: Gaida - silenced: Ierobežotie - suspended: Apturētie - title: Moderācija - moderation_notes: Moderācijas piezīmes + silenced: Ierobežoti + suspended: Apturēti + title: Satura pārraudzība + moderation_notes: Satura pārraudzības piezīmes most_recent_activity: Pati pēdējā darbība most_recent_ip: Pati pēdējā IP no_account_selected: Neviens konts netika mainīts, jo neviens netika atlasīts @@ -116,19 +120,19 @@ lv: public: Publisks push_subscription_expires: PuSH abonements beidzas redownload: Atsvaidzināt profilu - redownloaded_msg: Veiksmīgi atsvaidzināts %{username} profils no izcelsmes + redownloaded_msg: "%{username} profils sekmīgi atsvaidzināts no izcelsmes" reject: Noraidīt - rejected_msg: Veiksmīgi noraidīts %{username} reģistrēšanās pieteikums + rejected_msg: "%{username} reģistrēšanās pieteikums sekmīgi noraidīts" remote_suspension_irreversible: Šī konta dati ir neatgriezeniski dzēsti. remote_suspension_reversible_hint_html: Konts ir apturēts viņu serverī, un dati tiks pilnībā noņemti %{date}. Līdz tam attālais serveris var atjaunot šo kontu bez jebkādām negatīvām sekām. Ja vēlaties nekavējoties noņemt visus konta datus, varat to izdarīt tālāk. remove_avatar: Noņemt profila attēlu remove_header: Noņemt galveni - removed_avatar_msg: Veiksmīgi noņemts %{username} profila attēls - removed_header_msg: Veiksmīgi noņemts %{username} galvenes attēls + removed_avatar_msg: "%{username} profila attēls sekmīgi noņemts" + removed_header_msg: "%{username} galvenes attēls sekmīgi noņemts" resend_confirmation: already_confirmed: Šis lietotājs jau ir apstiprināts send: Atkārtoti nosūtīt apstiprinājuma saiti - success: Apstiprinājuma saite veiksmīgi nosūtīta! + success: Apstiprinājuma saite sekmīgi nosūtīta. reset: Atiestatīt reset_password: Atiestatīt paroli resubscribe: Pieteikties vēlreiz @@ -140,8 +144,8 @@ lv: security_measures: only_password: Tikai parole password_and_2fa: Parole un 2FA - sensitive: Sensitīvs - sensitized: Atzīmēts kā sensitīvs + sensitive: Uzspiest atzīmēšanu kā jūtīgu + sensitized: Atzīmēts kā jūtīgs shared_inbox_url: Koplietotās iesūtnes URL show: created_reports: Sastādītie ziņojumi @@ -157,14 +161,14 @@ lv: suspension_reversible_hint_html: Konta darbība ir apturēta, un dati tiks pilnībā noņemti %{date}. Līdz tam kontu var atjaunot bez jebkādām nelabvēlīgām sekām. Ja vēlies nekavējoties noņemt visus konta datus, to vari izdarīt zemāk. title: Konti unblock_email: Atbloķēt e-pasta adresi - unblocked_email_msg: Veiksmīgi atbloķēta %{username} e-pasta adrese + unblocked_email_msg: "%{username} e-pasta adreses liegšana sekmīgi atcelta" unconfirmed_email: Neapstiprināts e-pasts - undo_sensitized: Atcelt sensitivizēšanu + undo_sensitized: Atcelt uzspiestu atzīmēšanu kā jūtīgu undo_silenced: Atsaukt ierobežojumu undo_suspension: Atsaukt apturēšanu - unsilenced_msg: Veiksmīgi atsaukts %{username} konta ierobežojums + unsilenced_msg: "%{username} konta ierobežojums sekmīgi atsaukts" unsubscribe: Anulēt abonementu - unsuspended_msg: Veiksmīgi neapturēts %{username} konts + unsuspended_msg: "%{username} konts apturēšana sekmīgi atcelta" username: Lietotājvārds view_domain: Skatīt domēna kopsavilkumu warn: Brīdināt @@ -180,17 +184,21 @@ lv: confirm_user: Apstiprināt lietotāju create_account_warning: Izveidot Brīdinājumu create_announcement: Izveidot Paziņojumu + create_canonical_email_block: Izveidot e-pasta liegumu create_custom_emoji: Izveidot pielāgotu emocijzīmi create_domain_allow: Izveidot Domēna Atļauju create_domain_block: Izveidot Domēna Bloku + create_email_domain_block: Izveidot e-pasta domēna liegumu create_ip_block: Izveidot IP noteikumu create_unavailable_domain: Izveidot Nepieejamu Domēnu create_user_role: Izveidot lomu demote_user: Pazemināt Lietotāju destroy_announcement: Dzēst Paziņojumu + destroy_canonical_email_block: Izdzēst e-pasta liegumu destroy_custom_emoji: Dzēst pielāgoto emocijzīmi destroy_domain_allow: Dzēst Domēna Atļauju destroy_domain_block: Dzēst Domēna Bloku + destroy_email_domain_block: Izdzēst e-pasta domēna liegumu destroy_instance: Attīrīt domēnu destroy_ip_block: Dzēst IP noteikumu destroy_status: Izdzēst Rakstu @@ -198,8 +206,10 @@ lv: destroy_user_role: Iznīcināt lomu disable_2fa_user: Atspējot 2FA disable_custom_emoji: Atspējot pielāgotu emocijzīmi + disable_sign_in_token_auth_user: Atspējot autentificēšanos ar e-pasta pilnvaru lietotājam disable_user: Atspējot Lietotāju enable_custom_emoji: Iespējot pielāgotu emocijzīmi + enable_sign_in_token_auth_user: Iespējot autentificēšanos ar e-pasta pilnvaru lietotājam enable_user: Ieslēgt Lietotāju memorialize_account: Saglabāt Kontu Piemiņai promote_user: Izceltt Lietotāju @@ -210,12 +220,12 @@ lv: resend_user: Atkārtoti nosūtīt Apstiprinājuma Pastu reset_password_user: Atiestatīt Paroli resolve_report: Atrisināt Ziņojumu - sensitive_account: Piespiedu sensitīvizēt kontu + sensitive_account: Uzspiesti atzimēt kontu kā jūtīgu silence_account: Ierobežot Kontu suspend_account: Apturēt Kontu unassigned_report: Atcelt Pārskata Piešķiršanu unblock_email_account: Atbloķēt e-pasta adresi - unsensitive_account: Atsaukt Konta Piespiedu Sensitivizēšanu + unsensitive_account: Atsaukt uzspiestu konta atzīmēšanu kā jūtīgu unsilence_account: Atcelt Konta Ierobežošanu unsuspend_account: Atcelt konta apturēšanu update_announcement: Atjaunināt Paziņojumu @@ -226,7 +236,7 @@ lv: update_status: Atjaunināt ziņu update_user_role: Atjaunināt lomu actions: - approve_appeal_html: "%{name} apstiprināja moderācijas lēmuma apelāciju no %{target}" + approve_appeal_html: "%{name} apstiprināja satura pārraudzības lēmuma iebildumu no %{target}" approve_user_html: "%{name} apstiprināja reģistrēšanos no %{target}" assigned_to_self_report_html: "%{name} piešķīra pārskatu %{target} sev" change_email_user_html: "%{name} nomainīja lietotāja %{target} e-pasta adresi" @@ -234,9 +244,11 @@ lv: confirm_user_html: "%{name} apstiprināja lietotāja %{target} e-pasta adresi" create_account_warning_html: "%{name} nosūtīja brīdinājumu %{target}" create_announcement_html: "%{name} izveidoja jaunu paziņojumu %{target}" + create_canonical_email_block_html: "%{name} liedza e-pasta adresi ar jaucējkodu %{target}" create_custom_emoji_html: "%{name} augšupielādēja jaunu emocijzīmi %{target}" create_domain_allow_html: "%{name} atļāva federāciju ar domēnu %{target}" create_domain_block_html: "%{name} bloķēja domēnu %{target}" + create_email_domain_block_html: "%{name} liedza e-pasta domēnu %{target}" create_ip_block_html: "%{name} izveidoja nosacījumu priekš IP %{target}" create_unavailable_domain_html: "%{name} apturēja piegādi uz domēnu %{target}" create_user_role_html: "%{name} nomainīja %{target} lomu" @@ -257,19 +269,19 @@ lv: enable_user_html: "%{name} iespējoja pieteikšanos lietotājam %{target}" memorialize_account_html: "%{name} pārvērta %{target} kontu par atmiņas lapu" promote_user_html: "%{name} paaugstināja lietotāju %{target}" - reject_appeal_html: "%{name} noraidīja moderācijas lēmuma apelāciju no %{target}" + reject_appeal_html: "%{name} noraidīja satura pārraudzības lēmuma iebildumu no %{target}" reject_user_html: "%{name} noraidīja reģistrēšanos no %{target}" remove_avatar_user_html: "%{name} noņēma %{target} profila attēlu" reopen_report_html: "%{name} atkārtoti atvēra ziņojumu %{target}" resend_user_html: "%{name} atkārtoti nosūtīja %{target} apstiprinājuma e-pasta ziņojumu" reset_password_user_html: "%{name} atiestatīja paroli lietotājam %{target}" resolve_report_html: "%{name} atrisināja ziņojumu %{target}" - sensitive_account_html: "%{name} atzīmēja %{target} multividi kā sensitīvu" + sensitive_account_html: "%{name} atzīmēja %{target} informācijas nesēju kā jūtīgu" silence_account_html: "%{name} ierobežoja %{target} kontu" suspend_account_html: "%{name} apturēja %{target} kontu" unassigned_report_html: "%{name} nepiešķīra ziņojumu %{target}" unblock_email_account_html: "%{name} atbloķēja %{target} e-pasta adresi" - unsensitive_account_html: "%{name} atmarķēja %{target} multividi kā sensitīvu" + unsensitive_account_html: "%{name} atcēla %{target} informācijas nesēja atzīmēšanu kā jūtīgu" unsilence_account_html: "%{name} atcēla ierobežojumu %{target} kontam" unsuspend_account_html: "%{name} neapturēja %{target} kontu" update_announcement_html: "%{name} atjaunināja paziņojumu %{target}" @@ -283,10 +295,10 @@ lv: empty: Žurnāli nav atrasti. filter_by_action: Filtrēt pēc darbības filter_by_user: Filtrēt pēc lietotāja - title: Auditācijas pieraksti + title: Audita žurnāls unavailable_instance: "(domēna vārds nav pieejams)" announcements: - destroyed_msg: Paziņojums ir veiksmīgi izdzēsts! + destroyed_msg: Paziņojums sekmīgi izdzēsts. edit: title: Labot paziņojumu empty: Neviens paziņojums netika atrasts. @@ -295,31 +307,31 @@ lv: create: Izveidot paziņojumu title: Jauns paziņojums publish: Publicēt - published_msg: Paziņojums ir veiksmīgi publicēts! + published_msg: Paziņojums sekmīgi publicēts. scheduled_for: Plānots uz %{time} scheduled_msg: Paziņojums ieplānots publicēšanai! title: Paziņojumi unpublish: Atcelt publicēšanu - unpublished_msg: Paziņojuma publicēšana veiksmīgi atcelta! - updated_msg: Paziņojums ir veiksmīgi atjaunināts! + unpublished_msg: Paziņojuma publicēšana sekmīgi atcelta! + updated_msg: Paziņojums sekmīgi atjaunināts! critical_update_pending: Gaida kritisko atjauninājumu custom_emojis: assign_category: Piešķirt kategoriju by_domain: Domēns - copied_msg: Emocijas vietējā kopija ir veiksmīgi izveidota + copied_msg: Emocijzīmes vietējā kopija ir sekmīgi izveidota copy: Kopēt copy_failed_msg: Nevarēja izveidot šīs emocijzīmes vietējo kopiju create_new_category: Izveidot jaunu kategoriju - created_msg: Emocijzīme veiksmīgi izveidota! + created_msg: Emocijzīme sekmīgi izveidota. delete: Dzēst - destroyed_msg: Emocijzīme ir veiksmīgi iznīcināta! + destroyed_msg: Emocijzīme sekmīgi iznīcināta! disable: Atspējot disabled: Atspējots - disabled_msg: Šī emocijzīme ir veiksmīgi atspējota + disabled_msg: Šī emocijzīme sekmīgi atspējota emoji: Emocijzīmes enable: Iespējot enabled: Iespējots - enabled_msg: Šī emocijzīme ir veiksmīgi iespējota + enabled_msg: Šī emocijzīme ir sekmīgi iespējota image_hint: PNG vai GIF līdz %{size} list: Saraksts listed: Uzrakstītas @@ -335,7 +347,7 @@ lv: unlist: Izslēgt unlisted: Neminētie update_failed_msg: Nevarēja atjaunināt šo emocijzīmi - updated_msg: Emocijzīme veiksmīgi atjaunināta! + updated_msg: Emocijzīme sekmīgi atjaunināta. upload: Augšupielādēt dashboard: active_users: aktīvie lietotāji @@ -352,9 +364,9 @@ lv: other: "%{count}ziņojumi gaida" zero: "%{count}ziņojumi gaida" pending_tags_html: - one: "%{count}tēmturis gaida" - other: "%{count}tēmturi gaida" - zero: "%{count}tēmturi gaida" + one: "%{count} tēmturis rindā" + other: "%{count} tēmturi rindā" + zero: "%{count} tēmturu rindā" pending_users_html: one: "%{count}lietotājs gaida" other: "%{count}lietotāji gaida" @@ -373,7 +385,7 @@ lv: title: Apelācijas domain_allows: add_new: Atļaut federāciju ar domēnu - created_msg: Domēns ir veiksmīgi atļauts federācijai + created_msg: Domēns tika sekmīgi atļauts federācijai destroyed_msg: Domēns ir aizliegts federācijai export: Eksportēt import: Importēt @@ -399,7 +411,7 @@ lv: import: Importēt new: create: Izveodot bloku - hint: Domēna bloķēšana netraucēs izveidot kontu ierakstus datu bāzē, bet ar atpakaļejošu datumu un automātiski tiks piemērotas noteiktas moderēšanas metodes šajos kontos. + hint: Domēna aizturēšana netraucēs izveidot kontu ierakstus datubāzē, bet šajos kontos ar atpakaļejošu datumu un automātiski tiks piemērotas noteikti satura pārraudzības veidi. severity: desc_html: "Ierobežojums padarīs ziņas no šī domēna kontiem neredzamas ikvienam, kas tiem neseko. Apturēšana no tava servera noņems visu šī domēna kontu saturu, multividi un profila datus. Izmanto Nav, ja vēlies vienkārši noraidīt multivides failus." noop: Neviens @@ -411,9 +423,9 @@ lv: obfuscate: Apslēpt domēna vārdu obfuscate_hint: Daļēji apslēpt domēna nosaukumu sarakstā, ja ir iespējota domēna ierobežojumu saraksta reklamēšana private_comment: Privāts komentārs - private_comment_hint: Atstāj komentāru par šo domēna ierobežojumu moderatoru iekšējai lietošanai. + private_comment_hint: Atstāt piebildi par šo domēna ierobežojumu satura pārraudzītāju iekšējai lietošanai. public_comment: Publisks komentārs - public_comment_hint: Atstāj komentāru par šo domēna ierobežojumu plašai sabiedrībai, ja ir iespējota domēnu ierobežojumu saraksta reklamēšana. + public_comment_hint: Piebilde par šo domēna ierobežojumu vispārējai sabiedrībai, ja ir iespējota domēnu ierobežojumu saraksta reklamēšana. reject_media: Noraidīt multivides failus reject_media_hint: Noņem lokāli saglabātos multivides failus un atsaka tos lejupielādēt nākotnē. Nav nozīmes apturēšanai reject_reports: Noraidīt ziņojumus @@ -427,6 +439,7 @@ lv: one: "%{count} mēģinājums pagājušajā nedēļā" other: "%{count} reģistrēšanās mēģinājumi pagājušajā nedēļā" zero: "%{count} mēģinājumu pagājušajā nedēļā" + created_msg: Sekmīgi liegts e-pasta domēns delete: Dzēst dns: types: @@ -435,8 +448,10 @@ lv: new: create: Pievienot domēnu resolve: Atrisināt domēnu + title: Liegt jaunu e-pasta domēnu not_permitted: Nav atļauta resolved_through_html: Atrisināts, izmantojot %{domain} + title: Bloķētie e-pasta domēni export_domain_allows: new: title: Importēt domēnu atļaujas @@ -476,7 +491,7 @@ lv: zero: Neizdevušies mēģinājumi %{count} dienās. no_failures_recorded: Nav reģistrētu kļūdu. title: Pieejamība - warning: Pēdējais mēģinājums izveidot savienojumu ar šo serveri ir bijis neveiksmīgs + warning: Pēdējais mēģinājums izveidot savienojumu ar šo serveri ir bijis nesekmīgs back_to_all: Visas back_to_limited: Ierobežotās back_to_warning: Brīdinājums @@ -522,7 +537,7 @@ lv: moderation: all: Visas limited: Ierobežotās - title: Moderācija + title: Satura pārraudzība private_comment: Privāts komentārs public_comment: Publisks komentārs purge: Iztīrīt @@ -545,7 +560,7 @@ lv: title: Uzaicinājumi ip_blocks: add_new: Izveidot noteikumu - created_msg: Veiksmīgi pievienots jauns IP noteikums + created_msg: Sekmīgi pievienota jauna IP kārtula delete: Dzēst expires_in: '1209600': 2 nedēļas @@ -577,19 +592,19 @@ lv: status: Statuss title: Releji report_notes: - created_msg: Ziņojuma piezīme ir veiksmīgi izveidota! - destroyed_msg: Ziņojuma piezīme ir veiksmīgi izdzēsta! + created_msg: Ziņojuma piezīme sekmīgi izveidota. + destroyed_msg: Ziņojuma piezīme sekmīgi izdzēsta. reports: account: notes: one: "%{count} piezīme" other: "%{count} piezīmes" zero: "%{count} piezīmju" - action_log: Auditācijas pieraksti + action_log: Audita žurnāls action_taken_by: Veiktā darbība actions: delete_description_html: Raksti, par kurām ziņots, tiks dzēsti, un tiks reģistrēts brīdinājums, lai palīdzētu tev izvērst turpmākos pārkāpumus saistībā ar to pašu kontu. - mark_as_sensitive_description_html: Multividesu faili ziņojumos, par kuriem ziņots, tiks atzīmēti kā sensitīvi, un tiks reģistrēts brīdinājums, lai palīdzētu tev izvērst turpmākus pārkāpumus saistībā ar to pašu kontu. + mark_as_sensitive_description_html: Informācijas nesēji ierakstos, par kuriem ziņots, tiks atzīmēti kā jūtīgi, un tiks iegrāmatots brīdinājums, lai palīdzētu ziņot par turpmākiem tā paša konta pārkāpumiem. other_description_html: Skatīt vairāk iespēju kontrolēt konta uzvedību un pielāgot saziņu ar paziņoto kontu. resolve_description_html: Pret norādīto kontu netiks veiktas nekādas darbības, netiks reģistrēts brīdinājums, un ziņojums tiks slēgts. silence_description_html: Konts būs redzams tikai tiem, kas tam jau seko vai meklē to manuāli, ievērojami ierobežojot tā sasniedzamību. To vienmēr var atgriezt. Tiek aizvērti visi šī konta pārskati. @@ -600,7 +615,7 @@ lv: add_to_report: Pievienot varāk paziņošanai are_you_sure: Vai esi pārliecināts? assign_to_self: Piešķirt man - assigned: Piešķirtais moderators + assigned: Piešķirtais satura pārraudzītājs by_target_domain: Ziņotā konta domēns cancel: Atcelt category: Kategorija @@ -609,14 +624,14 @@ lv: none: Neviens comment_description_html: 'Lai sniegtu vairāk informācijas, %{name} rakstīja:' confirm: Apstiprināt - confirm_action: Apstipriniet regulēšanas darbību pret @%{acct} + confirm_action: Apstiprināt satura pārraudzības darbību pret @%{acct} created_at: Ziņoti delete_and_resolve: Izdzēst rakstus forwarded: Pārsūtīti forwarded_replies_explanation: Šis ziņojums ir no attāla lietotāja un par attālu saturu. Tas tika pārvirzīts šeit, jo saturs, par kuru tika ziņots, ir atbilde vienam no šī servera lietotājiem. forwarded_to: Pārsūtīti %{domain} mark_as_resolved: Atzīmēt kā atrisinātu - mark_as_sensitive: Atzīmēt kā sensitīvu + mark_as_sensitive: Atzīmēt kā jūtīgu mark_as_unresolved: Atzīmēt kā neatrisinātu no_one_assigned: Neviena notes: @@ -624,10 +639,10 @@ lv: create_and_resolve: Atrisināt ar piezīmi create_and_unresolve: Atvērt atkārtoti ar piezīmi delete: Dzēst - placeholder: Apraksti veiktās darbības vai citus saistītus atjauninājumus... + placeholder: Jāapraksta veiktās darbības vai jebkuri citi saistītie atjauninājumi... title: Piezīmes - notes_description_html: Skati un atstāj piezīmes citiem moderatoriem un sev nākotnei - processed_msg: 'Pārskats #%{id} veiksmīgi apstrādāts' + notes_description_html: Apskatīt un atstāt piezīmes citiem satura pārraudzītājiem un sev nākotnei + processed_msg: 'Ziņojums #%{id} sekmīgi apstrādāts' quick_actions_description_html: 'Veic ātro darbību vai ritini uz leju, lai skatītu saturu, par kuru ziņots:' remote_user_placeholder: attālais lietotājs no %{instance} reopen: Atkārtoti atvērt ziņojumu @@ -636,7 +651,7 @@ lv: reported_by: Ziņoja reported_with_application: Ziņots no lietotnes resolved: Atrisināts - resolved_msg: Ziņojums veiksmīgi atrisināts! + resolved_msg: Ziņojums sekmīgi atrisināts. skip_to_actions: Pāriet uz darbībām status: Statuss statuses: Ziņotais saturs @@ -644,12 +659,12 @@ lv: summary: action_preambles: delete_html: 'Jūs gatavojaties noņemt dažas no lietotāja @%{acct} ziņām. Tas:' - mark_as_sensitive_html: 'Jūs gatavojaties atzīmēt dažas no lietotāja @%{acct} ziņām kā sensitīvas. Tas:' + mark_as_sensitive_html: 'Tu gatavojies atzīmēt dažus no lietotāja @%{acct} ierakstiem kā jūtīgus. Tas:' silence_html: 'Jūs gatavojaties ierobežot @%{acct} kontu. Tas:' suspend_html: 'Jūs gatavojaties apturēt @%{acct} kontu. Tas:' actions: delete_html: Noņemt aizskarošās ziņas - mark_as_sensitive_html: Atzīmēt aizskarošo ziņu multivides saturu kā sensitīvu + mark_as_sensitive_html: Atzīmēt aizskarošo ierakstu informācijas nesējus kā jūtīgus silence_html: Ievērojami ierobežo @%{acct} sasniedzamību, padarot viņa profilu un saturu redzamu tikai cilvēkiem, kas jau seko tam vai pašrocīgi uzmeklē profilu suspend_html: Apturēt @%{acct}, padarot viņu profilu un saturu nepieejamu un neiespējamu mijiedarbību ar close_report: 'Atzīmēt ziņojumu #%{id} kā atrisinātu' @@ -657,7 +672,7 @@ lv: delete_data_html: Dzēsiet lietotāja @%{acct} profilu un saturu pēc 30 dienām, ja vien to darbība pa šo laiku netiks atcelta preview_preamble_html: "@%{acct} saņems brīdinājumu ar šādu saturu:" record_strike_html: Ierakstiet brīdinājumu pret @%{acct}, lai palīdzētu jums izvērst turpmākus pārkāpumus no šī konta - warning_placeholder: Izvēles papildu pamatojums regulēšanas darbībai. + warning_placeholder: Izvēles papildu pamatojums satura pārraudzības darbībai. target_origin: Ziņotā konta izcelsme title: Ziņojumi unassign: Atsaukt @@ -672,10 +687,10 @@ lv: other: "%{count} lietotāji" zero: "%{count} lietotāju" categories: - administration: Administrēšana + administration: Pārvaldība devops: DevOps invites: Uzaicinājumi - moderation: Moderācija + moderation: Satura pārraudzība special: Īpašās delete: Dzēst description_html: Izmantojot lietotāju lomas, vari pielāgot, kurām Mastodon funkcijām un apgabaliem var piekļūt tavi lietotāji. @@ -696,7 +711,7 @@ lv: manage_announcements: Pārvaldīt Paziņojumus manage_announcements_description: Ļauj lietotājiem pārvaldīt paziņojumus serverī manage_appeals: Pārvaldīt Pārsūdzības - manage_appeals_description: Ļauj lietotājiem izskatīt apelācijas pret regulēšanas darbībām + manage_appeals_description: Ļauj lietotājiem pārskatīt iebildumus pret satura pārraudzības darbībām manage_blocks: Pārvaldīt Bloķus manage_custom_emojis: Pārvaldīt Pielāgotās Emocijzīmes manage_custom_emojis_description: Ļauj lietotājiem pārvaldīt pielāgotās emocijzīmes serverī @@ -705,7 +720,7 @@ lv: manage_invites: Pārvaldīt Uzaicinājumus manage_invites_description: Ļauj lietotājiem pārlūkot un deaktivizēt uzaicinājuma saites manage_reports: Pārvaldīt Pārskatus - manage_reports_description: Ļauj lietotājiem pārskatīt pārskatus un veikt pret tiem regulēšanas darbības + manage_reports_description: Ļauj lietotājiem pārskatīt ziņojumus un veikt pret tiem satura pārraudzības darbības manage_roles: Pārvaldīt Lomas manage_roles_description: Ļauj lietotājiem pārvaldīt un piešķirt lomas, kas ir zemākas par viņu lomu manage_rules: Pārvaldīt Noteikumus @@ -713,10 +728,10 @@ lv: manage_settings: Pārvaldīt Iestatījumus manage_settings_description: Ļauj lietotājiem mainīt vietnes iestatījumus manage_taxonomies: Pārvaldīt Taksonomijas - manage_taxonomies_description: Ļauj lietotājiem pārskatīt aktuālāko saturu un atjaunināt atsauces iestatījumus + manage_taxonomies_description: Ļauj lietotājiem pārskatīt aktuālāko saturu un atjaunināt tēmturu iestatījumus manage_user_access: Pārvaldīt Lietotāju Piekļuves manage_users: Pārvaldīt Lietotājus - manage_users_description: Ļauj lietotājiem skatīt citu lietotāju informāciju un veikt pret viņiem regulēšanas darbības + manage_users_description: Ļauj lietotājiem skatīt citu lietotāju informāciju un veikt pret viņiem satura pārraudzības darbības manage_webhooks: Pārvaldīt Tīmekļa Aizķeres manage_webhooks_description: Ļauj lietotājiem iestatīt tīmekļa aizķeres administratīviem pasākumiem view_audit_log: Skatīt Audita Žurnālu @@ -729,13 +744,13 @@ lv: rules: add_new: Pievienot noteikumu delete: Dzēst - description_html: Lai gan lielākā daļa apgalvo, ka ir izlasījuši pakalpojumu sniegšanas noteikumus un piekrīt tiem, parasti cilvēki to izlasa tikai pēc problēmas rašanās. Padariet vienkāršāku sava servera noteikumu uztveršanu, veidojot tos vienkāršā sarakstā pa punktiem. Centieties, lai atsevišķi noteikumi būtu īsi un vienkārši, taču arī nesadaliet tos daudzos atsevišķos vienumos. + description_html: Kaut arī lielākā daļa apgalvo, ka ir lasījuši un piekrīt pakalpojuma izmantošanas noteikumiem, parasti cilvēki tos neizlasa, līdz rodas sarežģījumi. Padari vienkāršāku sava servera noteikumu pārskatīšanu, sniedzot tos vienkāršā uzsvēruma punktu sarakstā! Jāmēģina atsevišķus noteikumus veidot īsus un vienkāršus, bet jāmēģina arī tos nesadalīt daudzos atsevišķos vienumos. edit: Labot nosacījumu - empty: Servera noteikumi vēl nav definēti. + empty: Vēl nav pievienots neviens servera noteikums. title: Servera noteikumi settings: about: - manage_rules: Pārvaldīt servera nosacījumus + manage_rules: Pārvaldīt servera noteikumus preamble: Sniedz padziļinātu informāciju par to, kā serveris tiek darbināts, moderēts un finansēts. rules_hint: Noteikumiem, kas taviem lietotājiem ir jāievēro, ir īpaša sadaļa. title: Par @@ -750,7 +765,7 @@ lv: title: Pieprasīt jaunajiem lietotājiem atrisināt CAPTCHA, lai apstiprinātu savu kontu content_retention: danger_zone: Bīstama sadaļa - preamble: Kontrolē, kā Mastodon tiek glabāts lietotāju ģenerēts saturs. + preamble: Pārraugi, kā Mastodon tiek glabāts lietotāju izveidots saturs! title: Satura saglabāšana default_noindex: desc_html: Ietekmē visus lietotājus, kuri paši nav mainījuši šo iestatījumu @@ -769,6 +784,7 @@ lv: disabled: Nevienam users: Vietējiem reģistrētiem lietotājiem registrations: + moderation_recommandation: Lūgums nodrošināt, ka Tev ir pieņemama un atsaucīga satura pārraudzības komanda, pirms padari reģistrēšanos visiem pieejamu. preamble: Kontrolē, kurš var izveidot kontu tavā serverī. title: Reģistrācijas registrations_mode: @@ -776,6 +792,7 @@ lv: approved: Reģistrācijai nepieciešams apstiprinājums none: Neviens nevar reģistrēties open: Jebkurš var reģistrēties + warning_hint: Mēs iesakām izmantot "Nepieciešams reģistrēšanās apstiprinājums", izņemot, ja esi pārliecināts, ka Tava satura pārraudzības komanda var laicīgi apstrādāt mēstules un ļaunprātīgas reģistrācijas. security: authorized_fetch: Pieprasīt autentifikāciju no federētajiem serveriem authorized_fetch_hint: Pieprasot autentifikāciju no federētajiem serveriem, tiek nodrošināta stingrāka gan lietotāja līmeņa, gan servera līmeņa bloku izpilde. Tomēr tas ir saistīts ar izpildes sodu, samazina tavu atbilžu sasniedzamību un var radīt saderības problēmas ar dažiem federētajiem pakalpojumiem. Turklāt tas netraucēs īpašiem dalībniekiem ienest tavas publiskās ziņas un kontus. @@ -784,7 +801,7 @@ lv: title: Servera iestatījumi site_uploads: delete: Dzēst augšupielādēto failu - destroyed_msg: Vietnes augšupielāde ir veiksmīgi izdzēsta! + destroyed_msg: Vietnes augšupielāde sekmīgi izdzēsta. software_updates: critical_update: Kritiski - lūdzu, ātri atjaunini documentation_link: Uzzināt vairāk @@ -817,7 +834,7 @@ lv: original_status: Oriģinālā ziņa reblogs: Reblogi status_changed: Ziņa mainīta - title: Konta ziņas + title: Konta ieraksti trending: Aktuāli visibility: Redzamība with_media: Ar multividi @@ -825,9 +842,9 @@ lv: actions: delete_statuses: "%{name} izdzēsa %{target} publikācijas" disable: "%{name} iesaldēja %{target} kontu" - mark_statuses_as_sensitive: "%{name} atzīmēja %{target} ziņu kā sensitīvu" + mark_statuses_as_sensitive: "%{name} atzīmēja %{target} ierakstu kā jūtīgu" none: "%{name} nosūtīja brīdinājumu %{target}" - sensitive: "%{name} atzīmēja %{target} kontu kā sensitīvu" + sensitive: "%{name} atzīmēja %{target} kontu kā jūtīgu" silence: "%{name} ierobežoja %{target} kontu" suspend: "%{name} apturēja %{target} kontu" appeal_approved: Pārsūdzēts @@ -835,7 +852,7 @@ lv: appeal_rejected: Apelācija noraidīta system_checks: database_schema_check: - message_html: Notiek datubāzu migrācijas. Lūdzu, palaid tās, lai nodrošinātu, ka lietojumprogramma darbojas, kā paredzēts + message_html: Ir nepabeigtas datubāzes migrācijas. Lūgums palaist tās, lai nodrošinātu, ka lietotne darbojas, kā paredzēts elasticsearch_health_red: message_html: Elasticsearch klasteris ir neveselīgs (sarkans statuss), meklēšanas līdzekļi nav pieejami elasticsearch_health_yellow: @@ -856,10 +873,13 @@ lv: message_html: 'Nesaderīga Elasticsearch versija: %{value}' version_comparison: Darbojas Elasticsearch %{running_version}, tomēr ir nepieciešama %{required_version} rules_check: - action: Pārvaldīt servera nosacījumus - message_html: Tu neesi definējis nevienu servera nosacījumu. + action: Pārvaldīt servera noteikumus + message_html: Nav pievienots neviens servera noteikums. sidekiq_process_check: message_html: Rindā(s) %{value} nedarbojas neviens Sidekiq process. Lūdzu, pārskati savu Sidekiq konfigurāciju + software_version_check: + action: Skatīt pieejamos atjauninājumus + message_html: Pieejams Mastodon atjauninājums. software_version_critical_check: action: Skatīt pieejamos atjauninājumus message_html: Ir pieejams kritisks Mastodon atjauninājums. Lūdzu, atjaunini to pēc iespējas ātrāk. @@ -879,22 +899,31 @@ lv: review_requested: Pieprasīta pārskatīšana reviewed: Pārskatīts title: Stāvoklis + unreviewed: Nepārskatīts + usable: Izmantojams name: Nosaukums newest: Jaunākie oldest: Vecākie + open: Apskatīt publiski reset: Atiestatīt review: Pārskatīt stāvokli search: Meklēt title: Tēmturi updated_msg: Tēmtura iestatījumi ir veiksmīgi atjaunināti - title: Administrēšana + title: Pārvaldība trends: allow: Atļaut approved: Apstiprināts + confirm_allow: Vai tiešām atļaut atlasītos tēmturus? + confirm_disallow: Vai tiešām neatļaut atlasītās birkas? disallow: Neatļaut links: allow: Atļaut saiti allow_provider: Atļaut publicētāju + confirm_allow: Vai tiešām atļaut atlasītās saites? + confirm_allow_provider: Vai tiešām atļaut atlasītos nodrošinātājus? + confirm_disallow: Vai tiešām neatļaut atlasītās saites? + confirm_disallow_provider: Vai tiešām neatļaut atlasītos nodrošinātājus? description_html: Šīs ir saites, kuras pašlaik bieži koplieto konti, no kuriem Tavs serveris redz ziņas. Tas var palīdzēt Taviem lietotājiem uzzināt, kas notiek pasaulē. Neviena saite netiek publiski rādīta, līdz tu apstiprini izdevēju. Tu vari arī atļaut vai noraidīt atsevišķas saites. disallow: Neatļaut saiti disallow_provider: Neatļaut publicētāju @@ -919,6 +948,10 @@ lv: statuses: allow: Ļaut veikt ierakstus allow_account: Atļaut autoru + confirm_allow: Vai tiešām atļaut atlasītos stāvokļus? + confirm_allow_account: Vai tiešām atļaut atlasītos kontus? + confirm_disallow: Vai tiešām neatļaut atlasītos stāvokļus? + confirm_disallow_account: Vai tiešām neatļaut atlasītos kontus? description_html: Šie ir ieraksti, par kuriem zina Tavs serveris un kuri pašlaik tiek daudz kopīgoti un pievienoti izlasēm. Tas var palīdzēt jaunajiem lietotājiem un tiem, kuri atgriežas, atrast vairāk cilvēku, kam sekot. Neviens ieraksts netiek publiski rādīts, līdz apstiprināsi autoru un ja autors ļauj savu kontu ieteikt citiem. Tu vari arī atļaut vai noraidīt atsevišķus ierakstus. disallow: Neļaut veikt ierakstus disallow_account: Neatļaut autoru @@ -953,6 +986,7 @@ lv: one: Pēdējās nedēļas laikā izmantoja viens cilvēks other: Pēdējās nedēļas laikā izmantoja %{count} cilvēki zero: Pēdējās nedēļas laikā izmantoja %{count} cilvēku + title: Ieteikumi un pašlaik populāri trending: Populārākie warning_presets: add_new: Pievienot jaunu @@ -963,7 +997,7 @@ lv: webhooks: add_new: Pievienot galapunktu delete: Dzēst - description_html: Izmantojot tīmekļa aizķeri, Mastodon var nosūtīt jūsu lietojumprogrammai reāllaika paziņojumus par izvēlētajiem notikumiem, lai tava lietojumprogramma varētu automātiski izraisīt reakcijas. + description_html: "Tīmekļa aizķere ļauj Mastodon nosūtīt reāllaika paziņojumus Tavai lietotnei par izvēlētajiem notikumiem, lai Tava lietotne varētu automātiski izraisīt atbildes darbības." disable: Atspējot disabled: Atspējots edit: Labot galapunktu @@ -982,18 +1016,20 @@ lv: title: Tīmekļa āķi webhook: Tīmekļa āķis admin_mailer: + auto_close_registrations: + body: Nesenu satura pārraudzības darbību trūkuma dēļ reģistrācija %{instance} ir automātiski pārslēgta nepieciešamība pēc pašrocīgas izskatīšanas, lai novērstu %{instance} izmantošana kā platformu iespējami sliktiem dalībniekiem. Jebkurā brīdī var ieslēgt atpakaļ atvērtu reģistrēšanos. new_appeal: actions: delete_statuses: lai izdzēstu viņu ierakstus disable: lai iesaldētu viņu kontu - mark_statuses_as_sensitive: lai atzīmētu viņu ziņas kā sensitīvas + mark_statuses_as_sensitive: lai atzīmētu viņu ierakstus kā jūtīgus none: brīdinājums - sensitive: lai atzīmētu viņu kontu kā sensitīvu + sensitive: lai atzīmētu viņu kontu kā jūtīgu silence: lai ierobežotu viņu kontu suspend: lai apturētu viņu kontu - body: "%{target} pārsūdzēja %{action_taken_by} moderēšanas lēmumu no %{date}, kas bija %{type}. Viņi rakstīja:" - next_steps: Varat apstiprināt apelāciju, lai atsauktu regulēšanas lēmumu, vai ignorēt to. - subject: "%{username} pārsūdz moderēšanas lēmumu par %{instance}" + body: "%{target} iebilst %{action_taken_by} satura pārraudzības lēmumam no %{date}, kas bija %{type}. Viņi rakstīja:" + next_steps: Vari apstiprināt iebildumu, lai atsauktu satura pārraudzības lēmumu, vai neņemt to vērā. + subject: "%{username} iebilst satura pārraudzības lēmumam par %{instance}" new_critical_software_updates: body: Ir izlaistas jaunas Mastodon svarīgās versijas, iespējams, vēlēsies to atjaunināt pēc iespējas ātrāk! subject: "%{instance} ir pieejami svarīgi Mastodon atjauninājumi!" @@ -1018,8 +1054,8 @@ lv: subject: Tiek pārskatītas jaunas tendences %{instance} aliases: add_new: Izveidot aizstājvārdu - created_msg: Veiksmīgi izveidots jauns aizstājvārds. Tagad vari sākt pārvietošanu no vecā konta. - deleted_msg: Aizstājvārds tika veiksmīgi noņemts. Pāreja no šī konta uz šo vairs nebūs iespējama. + created_msg: Sekmīgi izveidots jauns aizstājvārds. Tagad vari uzsākt pārvietošanu no vecā konta. + deleted_msg: Aizstājvārds tika sekmīgi noņemts. Pāreja no tā konta uz šo vairs nebūs iespējama. empty: Tev nav aizstājvārdu. hint_html: Ja vēlies pāriet no cita konta uz šo, šeit vari izveidot aizstājvārdu, kas ir nepieciešams, lai varētu turpināt sekotāju pārvietošanu no vecā konta uz šo. Šī darbība pati par sevi ir nekaitīga un atgriezeniska. Konta migrācija tiek sākta no vecā konta. remove: Atsaistīt aizstājvārdu @@ -1033,7 +1069,7 @@ lv: body: Mastodon ir tulkojuši brīvprātīgie. guide_link: https://crowdin.com/project/mastodon guide_link_text: Ikviens var piedalīties. - sensitive_content: Sensitīvs saturs + sensitive_content: Jūtīgs saturs application_mailer: notification_preferences: Mainīt e-pasta uztādījumus salutation: "%{name}," @@ -1043,11 +1079,11 @@ lv: view_profile: Skatīt profilu view_status: Skatīt ziņu applications: - created: Lietojumprogramma ir veiksmīgi izveidota - destroyed: Lietojumprogramma ir veiksmīgi dzēsta + created: Lietotne sekmīgi izveidota + destroyed: Lietotnes sekmīgi izdzēsta logout: Iziet - regenerate_token: Atjaunot piekļuves marķieri - token_regenerated: Piekļuves marķieris veiksmīgi atjaunots + regenerate_token: Atkārtoti izveidot piekļuves pilnvaru + token_regenerated: Piekļuves pilnvara sekmīgi izveidota no jauna warning: Esi ļoti uzmanīgs ar šiem datiem. Nekad nedalies ne ar vienu ar tiem! your_token: Tavs piekļuves marķieris auth: @@ -1076,7 +1112,7 @@ lv: dont_have_your_security_key: Vai tev nav drošības atslēgas? forgot_password: Aizmirsi paroli? invalid_reset_password_token: Paroles atiestatīšanas pilnvara nav derīga, vai tai ir beidzies derīgums. Lūdzu, pieprasi jaunu. - link_to_otp: Jāievada divpakāpju kods no tālruņa vai atkopšanas kods + link_to_otp: Jāievada divpakāpju kods no tālruņa vai atkpes kods link_to_webauth: Lieto savu drošības atslēgas iekārtu log_in_with: Pieslēgties ar login: Pieteikties @@ -1101,24 +1137,24 @@ lv: accept: Pieņemt back: Atpakaļ invited_by: 'Tu vari pievienoties %{domain}, pateicoties uzaicinājumam, ko saņēmi no:' - preamble: Tos iestata un ievieš %{domain} moderatori. - preamble_invited: Pirms turpināt, lūdzu, apsver galvenos noteikumus, ko noteikuši %{domain} moderatori. + preamble: Tos iestata un ievieš %{domain} satura pārraudzītāji. + preamble_invited: Pirms turpināt, lūgums apsvērt pamatnoteikumus, kurus norādījuši %{domain} satura pārraudzītāji. title: Daži pamatnoteikumi. title_invited: Tu esi uzaicināts. security: Drošība set_new_password: Iestatīt jaunu paroli setup: email_below_hint_html: Jāpārbauda sava surogātpasta mape vai jāpieprasa vēl vienu! Savu e-pasta adresi var labot, ja tā ir nepareiza. - email_settings_hint_html: Noklikšķini uz saites, kuru mēs tev nosūtījām, lai apstiprinātu %{email}. Mēs tepat pagaidīsim. + email_settings_hint_html: Jāatver saite, kuru mēs nosūtījām, lai apliecinātu %{email}. Mēs pagaidīsim tepat. link_not_received: Vai nesaņēmi sati? new_confirmation_instructions_sent: Pēc dažām minūtēm saņemsi jaunu e-pasta ziņojumu ar apstiprinājuma saiti. title: Pārbaudi savu iesūtni sign_in: preamble_html: Jāpiesakās ar saviem %{domain} piekļuves datiem. Ja konts tiek mitināts citā serverī, šeit nevarēs pieteikties. - title: Pierakstīties %{domain} + title: Pieteikties %{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}. - preamble: Ar kontu šajā Mastodon serverī varēsi sekot jebkuram citam tīklā esošam cilvēkam neatkarīgi no tā, kur tiek mitināts viņa konts. + manual_review: Reģistrāciju %{domain} pašrocīgi izskata mūsu satura pārraudzītāji. 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}! + preamble: Ar kontu šajā Mastodon serverī varēsi sekot jebkuram citam tīklā esošam cilvēkam neatkarīgi no tā, kur tiek mitināts tā konts. title: Atļauj tevi iestatīt %{domain}. status: account_status: Konta statuss @@ -1165,7 +1201,7 @@ lv: confirm_password: Ievadi savu pašreizējo paroli, lai pārbaudītu savu identitāti confirm_username: Ievadi savu lietotājvārdu, lai apstiprinātu procedūru proceed: Dzēst kontu - success_msg: Tavs konts tika veiksmīgi dzēsts + success_msg: Tavs konts tika sekmīgi izdzēsts warning: before: 'Pirms turpināšanas lūgums uzmanīgi izlasīt šīs piezīmes:' caches: Citu serveru kešatmiņā saglabātais saturs var saglabāties @@ -1181,7 +1217,7 @@ lv: strikes: action_taken: Veiktā darbība appeal: Apelācija - appeal_approved: Šis brīdinājums ir veiksmīgi pārsūdzēts un vairs nav spēkā + appeal_approved: Šis brīdinājums tika sekmīgi pārsūdzēts un vairs nav spēkā appeal_rejected: Apelācija ir noraidīta appeal_submitted_at: Apelācija iesniegta appealed_msg: Jūsu apelācija ir iesniegta. Ja tā tiks apstiprināta, jums tiks paziņots. @@ -1199,9 +1235,9 @@ lv: title_actions: delete_statuses: Ziņas noņemšana disable: Konta iesaldēšana - mark_statuses_as_sensitive: Ziņu atzīmēšana kā sensitīvas + mark_statuses_as_sensitive: Ierakstu atzīmēšana kā jūtīgus none: Brīdinājums - sensitive: Konta atzīmēšana kā sensitīvs + sensitive: Konta atzīmēšana kā jūtīgu silence: Konta ierobežošana suspend: Konta apturēšana your_appeal_approved: Jūsu apelācija ir apstiprināta @@ -1305,7 +1341,7 @@ lv: other: Atlasīti visi %{count} vienumi, kas atbilst tavam meklēšanas vaicājumam. zero: Atlasīts %{count} vienumu, kas atbilst tavam meklēšanas vaicājumam. cancel: Atcelt - changes_saved_msg: Izmaiņas veiksmīgi saglabātas! + changes_saved_msg: Izmaiņas sekmīgi saglabātas. confirm: Apstiprināt copy: Kopēt delete: Dzēst @@ -1338,19 +1374,19 @@ lv: overwrite: Pārrakstīt overwrite_long: Nomainīt pašreizējos ierakstus ar jauniem overwrite_preambles: - blocking_html: Tu gatavojies aizstāt savu bloķēto sarakstu ar līdz pat %{total_items} kontiem no %{filename}. - bookmarks_html: Tu gatavojies aizstāt savas bloķētās izlases ar līdz pat %{total_items} ziņām no %{filename}. - domain_blocking_html: Tu gatavojies aizstāt savu bloķēto domēnu sarakstu ar līdz pat %{total_items} domēniem no %{filename}. + blocking_html: Tu gatavojies aizstāt savu lieguma sarakstu ar līdz pat %{total_items} kontiem no %{filename}. + bookmarks_html: Tu gatavojies aizstāt savas grāmatzīmes ar līdz pat %{total_items} ierakstiem no %{filename}. + domain_blocking_html: Tu gatavojies aizstāt savu liegto domēnu sarakstu ar līdz pat %{total_items} domēniem no %{filename}. following_html: Tu gatavojies sekot līdz pat %{total_items} kontiem no %{filename} un pārtrauksi sekot citiem. - lists_html: Tu gatavojies aizstāt savus sarakstus ar %{filename} saturu. Līdz %{total_items} kontiem tiks pievienoti jauni saraksti. - muting_html: Tu gatavojies aizstāt savu noklusināto kontu sarakstu ar līdz pat %{total_items} kontiem no %{filename}. + lists_html: Tu gatavojies aizstāt savus sarakstus ar %{filename} saturu. Līdz %{total_items} konti tiks pievienoti jaunajos sarakstos. + muting_html: Tu gatavojies aizstāt savu apklusināto kontu sarakstu ar līdz pat %{total_items} kontiem no %{filename}. preambles: - blocking_html: Tu gatavojies bloķēt līdz pat %{total_items} kontiem no %{filename}. - bookmarks_html: Tu gatavojies pievienot līdz pat %{total_items} ziņām no %{filename} savām grāmatzīmēm. - domain_blocking_html: Tu gatavojies bloķēt līdz pat %{total_items} domēniem no %{filename}. + blocking_html: Tu gatavojies liegt līdz pat %{total_items} kontus no %{filename}. + bookmarks_html: Tu gatavojies pievienot līdz pat %{total_items} ierakstus no %{filename} savām grāmatzīmēm. + domain_blocking_html: Tu gatavojies liegt līdz pat %{total_items} domēnus no %{filename}. following_html: Tu gatavojies sekot līdz pat %{total_items} kontiem no %{filename}. - lists_html: Tu gatavojies pievienot līdz pat %{total_items} kontiem no %{filename} saviem sarakstiem. Jauni saraksti tiks izveidoti, ja nav saraksta, ko pievienot. - muting_html: Tu gatavojies noklusināt līdz pat %{total_items} kontiem no %{filename}. + lists_html: Tu gatavojies pievienot līdz pat %{total_items} kontus no %{filename} saviem sarakstiem. Jauni saraksti tiks izveidoti, ja nav saraksta, kurā pievienot. + muting_html: Tu gatavojies apklusināt līdz pat %{total_items} kontus no %{filename}. preface: Tu vari ievietot datus, kurus esi izguvis no cita servera, kā, piemēram, cilvēku sarakstu, kuriem Tu seko vai kurus bloķē. recent_imports: Nesen importēts states: @@ -1359,7 +1395,7 @@ lv: scheduled: Ieplānots unconfirmed: Neapstiprināti status: Statuss - success: Tavi dati tika veiksmīgi augšupielādēti un tiks apstrādāti noteiktajā laikā + success: Tavi dati tika sekmīgi augšupielādēti un tiks apstrādāti noteiktajā laikā time_started: Sākuma laiks titles: blocking: Importē bloķētos kontus @@ -1391,7 +1427,7 @@ lv: '604800': 1 nedēļa '86400': 1 diena expires_in_prompt: Nekad - generate: Ģenerēt uzaicinājuma saiti + generate: Izveidot uzaicinājuma saiti invalid: Šis uzaicinājums nav derīgs invited_by: 'Tevi uzaicināja:' max_uses: @@ -1399,7 +1435,7 @@ lv: other: "%{count} lietojumi" zero: "%{count} lietojumu" max_uses_prompt: Nav ierobežojuma - prompt: Izveido un kopīgo saites ar citiem, lai piešķirtu piekļuvi šim serverim + prompt: Jāizveido un jākopīgo saites ar citiem, lai nodrošinātu piekļuvi šim serverim table: expires_at: Beidzas uses: Lieto @@ -1415,13 +1451,20 @@ lv: webauthn: drošības atslēgas description_html: Ja pamani darbības, kuras neatpazīsti, jāapsver iespēja nomainīt savu paroli un iespējot divpakāpju autentifikāciju. empty: Nav pieejama autentifikācijas vēsture - failed_sign_in_html: Neizdevies pierakstīšanās mēģinājums ar %{method} no %{ip} (%{browser}) - successful_sign_in_html: Veiksmīga pierakstīšanās ar %{method} no %{ip} (%{browser}) + failed_sign_in_html: Neizdevies pieteikšanās mēģinājums ar %{method} no %{ip} (%{browser}) + successful_sign_in_html: Sekmīga pieteikšanās ar %{method} no %{ip} (%{browser}) title: Autentifikācijas vēsture mail_subscriptions: unsubscribe: action: Jā, atcelt abonēšanu complete: Anulēts + emails: + notification_emails: + favourite: izlases paziņojumu e-pasta ziņojumi + follow: sekošanas paziņojumu e-pasta ziņojumi + follow_request: sekošanas pieprasījumu e-pasta ziņojumi + mention: pieminēšanas paziņojumu e-pasta ziņojumi + reblog: pastiprinājumu paziņojumu e-pasta ziņojumi title: Atcelt abonēšanu media_attachments: validations: @@ -1460,7 +1503,7 @@ lv: other_data: Nekādi citi dati netiks automātiski pārvietoti redirect: Tava pašreizējā konta profils tiks atjaunināts ar novirzīšanas paziņojumu un tiks izslēgts no meklēšanas moderation: - title: Moderācija + title: Satura pārraudzība move_handler: carry_blocks_over_text: Šis lietotājs pārcēlās no %{acct}, kuru tu biji bloķējis. carry_mutes_over_text: Šis lietotājs pārcēlās no %{acct}, kuru tu biji apklusinājis. @@ -1502,6 +1545,7 @@ lv: update: subject: "%{name} laboja ierakstu" notifications: + administration_emails: Pārvaldītāju e-pasta paziņojumi email_events_hint: 'Atlasi notikumus, par kuriem vēlies saņemt paziņojumus:' number: human: @@ -1514,10 +1558,10 @@ lv: thousand: K trillion: T otp_authentication: - code_hint: Lai apstiprinātu, ievadi autentifikācijas lietotnes ģenerēto kodu - description_html: Jā iespējo divpakāpju autentifikāciju ar autentificēšanas lietotni, pieteikšanās laikā būs nepieciešams tālrunis, kurā tiks izveidoti ievadāmie kodi. + code_hint: Jāievada autentificētājlietotnes izveidotais kods, lai apstiprinātu + description_html: Jā iespējo divpakāpju autentifikāciju ar autentificētājlietotni, pieteikšanās laikā būs nepieciešams tālrunis, kurā tiks izveidoti ievadāmie kodi. enable: Iespējot - instructions_html: "Skenē šo QR kodu Google Authenticator vai līdzīgā TOTP lietotnē savā tālrunī. No šī brīža šī lietotne ģenerēs marķierus, kas tev būs jāievada, piesakoties." + instructions_html: "Šis kvadrātods savā tālrunī jānolasa ar Google Authenticator vai līdzīgu TOTP lietotni. No šī brīža šī lietotne veidos ciparvienības, kas būs jāievada piesakoties." manual_instructions: 'Ja nevari noskenēt QR kodu un tas ir jāievada manuāli, šeit ir noslēpums vienkāršā tekstā:' setup: Iestatīt wrong_code: Ievadītais kods bija nederīgs. Vai servera un ierīces laiks ir pareizs? @@ -1550,7 +1594,7 @@ lv: reach: Sasniedzamība reach_hint_html: Kontrolē, vai vēlies, lai tevi atklātu un sekotu jauni cilvēki. Vai vēlies, lai tavas ziņas tiktu parādītas ekrānā Izpēte? Vai vēlies, lai citi cilvēki tevi redzētu savos ieteikumos? Vai vēlies automātiski pieņemt visus jaunos sekotājus vai arī tev ir pilnīga kontrole pār katru? search: Meklēt - search_hint_html: Kontrolē, kā vēlies tikt atrasts. Vai vēlies, lai cilvēki tevi atrod pēc tā, ko esi publiski publicējis? Vai vēlies, lai cilvēki ārpus Mastodon atrastu tavu profilu, meklējot tīmeklī? Lūdzu, ņem vērā, ka nevar garantēt publiskas informācijas pilnīgu izslēgšanu no visām meklētājprogrammām. + search_hint_html: Nosaki, kā vēlies tikt atrasts! Vai vēlies, lai cilvēki Tevi atrod pēc tā, par ko esi veicis visiem redzamus ierakstus? Vai vēlies, lai cilvēki ārpus Mastodon atrastu Tavu profilu, meklējot tīmeklī? Lūdzu, ņem vērā, ka nevar nodrošināt visiem redzamas informācijas pilnīgu izslēgšanu no visām meklētājiem! title: Privātums un sasniedzamība privacy_policy: title: Privātuma Politika @@ -1587,8 +1631,8 @@ lv: rss: content_warning: 'Satura brīdinājums:' descriptions: - account: Publiskas ziņas no @%{acct} - tag: 'Publiskas ziņas ar atzīmi #%{hashtag}' + account: Visiem redzami ieraksti no @%{acct} + tag: 'Visiem redzami ieraksti ar tēmturi #%{hashtag}' scheduled_statuses: over_daily_limit: Tu esi pārsniedzis šodien ieplānoto %{limit} ziņu ierobežojumu over_total_limit: Tu esi pārsniedzis ieplānoto %{limit} ziņu ierobežojumu @@ -1639,7 +1683,7 @@ lv: windows_mobile: Windows Mobile windows_phone: Windows Phone revoke: Atsaukt - revoke_success: Sesija veiksmīgi atsaukta + revoke_success: Sesija sekmīgi atsaukta title: Sesijas view_authentication_history: Skatīt sava konta autentifikācijas vēsturi settings: @@ -1652,6 +1696,7 @@ lv: delete: Konta dzēšana development: Izstrāde edit_profile: Labot profilu + export: Izgūt featured_tags: Piedāvātie tēmturi import: Imports import_and_export: Imports un eksports @@ -1662,13 +1707,16 @@ lv: relationships: Sekojamie un sekotāji severed_relationships: Pārtrauktās attiecības statuses_cleanup: Automātiska ziņu dzēšana - strikes: Moderācijas aizrādījumi + strikes: Satura pārraudzības aizrādījumi two_factor_authentication: Divpakāpju autentifikācija webauthn_authentication: Drošības atslēgas severed_relationships: download: Lejupielādēt (%{count}) + event_type: + user_domain_block: Jūs bloķējāt %{target_name} lost_followers: Zaudētie sekotāji lost_follows: Zaudētie sekojumi + preamble: Tu vari zaudēt sekojamos un sekotājus, kad liedz domēnu vai kad satura pārraudzītāji izlemj apturēt attālu serveri. Kad t as notiek, būs iespējams lejupielādēt sarakstus ar pārtrauktajām saiknēm, kurus tad var izpētīt un, iespējams, ievietot citā serverī. type: Notikums statuses: attached: @@ -1691,16 +1739,16 @@ lv: disallowed_hashtags: one: 'saturēja neatļautu tēmturi: %{tags}' other: 'saturēja neatļautus tēmturus: %{tags}' - zero: 'neatļauti tēmturi: %{tags}' + zero: 'saturēja neatļautus tēmturus: %{tags}' edited_at_html: Labots %{date} errors: in_reply_not_found: Šķiet, ka ziņa, uz kuru tu mēģini atbildēt, nepastāv. over_character_limit: pārsniegts %{max} rakstzīmju ierobežojums pin_errors: - direct: Ziņojumus, kas ir redzami tikai minētajiem lietotājiem, nevar piespraust - limit: Tu jau esi piespraudis maksimālo ziņu skaitu + direct: Ierakstus, kas ir redzami tikai pieminētajiem lietotājiem, nevar piespraust + limit: Jau ir piesprausts lielākais iespējamais ierakstu skaits ownership: Kāda cita ierakstu nevar piespraust - reblog: Izceltu ierakstu nevar piespraust + reblog: Pastiprinātu ierakstu nevar piespraust title: "%{name}: “%{quote}”" visibilities: direct: Tiešs @@ -1709,7 +1757,7 @@ lv: public: Publisks public_long: Visi var redzēt unlisted: Nerindota - unlisted_long: Redzama visiem, bet nav iekļauta publiskajās ziņu lentās + unlisted_long: Redzams visiem, bet nav uzskaitīts visiem pieejamās laika joslās statuses_cleanup: enabled: Automātiski dzēst vecās ziņas enabled_hint: Automātiski izdzēš tavas ziņas, tiklīdz tās sasniedz noteiktu vecuma slieksni, ja vien tās neatbilst kādam no tālāk norādītajiem izņēmumiem @@ -1723,8 +1771,8 @@ lv: keep_direct_hint: Nedzēš nevienu tavu tiešo ziņojumu keep_media: Saglabāt ziņas ar multivides pielikumiem keep_media_hint: Neizdzēš nevienu no tavām ziņām, kurām ir multivides pielikumi - keep_pinned: Saglabāt piespraustās ziņas - keep_pinned_hint: Nedzēš nevienu tavis piesprausto ziņu + keep_pinned: Paturēt piespraustos ierakstus + keep_pinned_hint: Neizdzēš nevienu no Tevis piespraustajiem ierakstiem keep_polls: Saglabāt aptaujas keep_polls_hint: Nedzēš nevienu tavu aptauju keep_self_bookmark: Saglabāt ziņas, kuras esi pievienojis grāmatzīmēm @@ -1746,7 +1794,7 @@ lv: min_reblogs: Saglabāt ziņas izceltas vismaz min_reblogs_hint: Neizdzēš nevienu no tavām ziņām, kas ir izceltas vismaz tik reižu. Atstāj tukšu, lai dzēstu ziņas neatkarīgi no to izcēlumu skaita stream_entries: - sensitive_content: Sensitīvs saturs + sensitive_content: Jūtīgs saturs strikes: errors: too_late: Brīdinājuma apstrīdēšanas laiks ir nokavēts @@ -1769,17 +1817,17 @@ lv: two_factor_authentication: add: Pievienot disable: Atspējot 2FA - disabled_success: Divpakāpju autentifikācija veiksmīgi atspējota + disabled_success: Divpakāpju autentificēšanās sekmīgi atspējota edit: Labot enabled: Divpakāpju autentifikācija ir iespējota - enabled_success: Divpakāpju autentifikācija veiksmīgi iespējota - generate_recovery_codes: Ģenerēt atkopšanas kodus - lost_recovery_codes: Atkopšanas kodi ļauj atgūt piekļuvi tavam kontam, ja pazaudē tālruni. Ja esi pazaudējis atkopšanas kodus, tu vari tos ģenerēt šeit. Tavi vecie atkopšanas kodi tiks anulēti. + enabled_success: Divpakāpju autentificēšanās sekmīgi iespējota + generate_recovery_codes: Izveidot atkopes kodus + lost_recovery_codes: Atkopes kodi ļauj atgūt piekļuvi savam kontam, ja ir pazaudēts tālrunis. Ja ir pazaudēti atkopes kodi, tos var izveidot šeit. Iepriekšējie atkopšanas kodi kļūs nederīgi. methods: Divpakāpju veidi otp: Autentifikātora lietotne - recovery_codes: Veidot atkopšanas kodu rezerves kopijas - recovery_codes_regenerated: Atkopšanas kodi veiksmīgi atjaunoti - recovery_instructions_html: Ja kādreiz zaudēsi piekļuvi savam tālrunim, vari izmantot kādu no tālāk norādītajiem atkopšanas kodiem, lai atgūtu piekļuvi savam kontam. Glabā atkopšanas kodus drošībā. Piemēram, tu vari tos izdrukāt un uzglabāt kopā ar citiem svarīgiem dokumentiem. + recovery_codes: Veidot atkopes kodu rezerves kopijas + recovery_codes_regenerated: Atkopes kodi sekmīgi izveidoti no jauna + recovery_instructions_html: Ja kādreiz zaudēsi piekļuvi savam tālrunim, vari izmantot kādu no zemāk norādītajiem atkopes kodiem, lai atgūtu piekļuvi savam kontam. Atkpes kodi jātur drošībā. Piemēram, tos var izdrukāt un glabāt kopā ar citiem svarīgiem dokumentiem. webauthn: Drošības atslēgas user_mailer: appeal_approved: @@ -1796,11 +1844,11 @@ lv: title: Arhīva līdzņemšana suspicious_sign_in: change_password: mainīt paroli - details: 'Šeit ir detalizēta informācija par pierakstīšanos:' - explanation: Esam konstatējuši pierakstīšanos tavā kontā no jaunas IP adreses. + details: 'Šeit ir pieteikšanās izvērsums:' + explanation: Esam noteikuši pieteikšanos Tavā kontā no jaunas IP adreses. further_actions_html: Ja tas nebiji tu, iesakām nekavējoties %{action} un iespējot divu faktoru autentifikāciju, lai tavs konts būtu drošībā. subject: Tavam kontam ir piekļūts no jaunas IP adreses - title: Jauna pierakstīšanās + title: Jauna pieteikšanās warning: appeal: Iesniegt apelāciju appeal_description: Ja uzskatāt, ka tā ir kļūda, varat iesniegt apelāciju %{instance} darbiniekiem. @@ -1808,10 +1856,10 @@ lv: spam: Spams violation: Saturs pārkāpj šādas kopienas pamatnostādnes explanation: - delete_statuses: Tika konstatēts, ka dažas no tavām ziņām pārkāpj vienu vai vairākas kopienas vadlīnijas, un rezultātā %{instance} moderatori tās noņēma. + delete_statuses: Tika noteikts, ka daži no Taviem ierakstiem pārkāpj vienu vai vairākas kopienas vadlīnijas, tādējādi tos noņēma %{instance} satura pārraudzītāji. disable: Tu vairs nevari izmantot savu kontu, taču tavs profils un citi dati paliek neskarti. Tu vari pieprasīt savu datu dublējumu, mainīt konta iestatījumus vai dzēst kontu. - mark_statuses_as_sensitive: "%{instance} moderatori dažus no Taviem ierakstiem ir atzīmējuši kā jutīgus. Tas nozīmē, ka cilvēkiem būs jāpiesit ierakstos esošajiem informāijas nesējiem, pirms tiek attēlots priekšskatījums. Tu arī pats vari atzīmēt informācijas nesēju kā jutīgu, kad nākotnē tādu ievietosi." - sensitive: No šī brīža visi augšupielādētie multivides faili tiks atzīmēti kā sensitīvi un paslēpti aiz klikšķa brīdinājuma. + mark_statuses_as_sensitive: "%{instance} satura pārraudzītāji dažus no Taviem ierakstiem ir atzīmējuši kā jūtīgus. Tas nozīmē, ka cilvēkiem būs jāpiesit ierakstos esošajiem informāijas nesējiem, pirms tiek attēlots to priekšskatījums. Tu pats vari atzīmēt informācijas nesēju kā jūtīgu, kad nākotnē tādu ievietosi." + sensitive: Turpmāk visi augšupielādētās informācijas nesēju datnes tiks atzīmētas kā jūtīgas un paslēptas aiz klikšķināma brīdinājuma. silence: Tu joprojām vari izmantot savu kontu, taču tikai tie cilvēki, kuri jau tev seko, redzēs tavas ziņas šajā serverī, un tev var tikt liegtas dažādas atklāšanas funkcijas. Tomēr citi joprojām var tev manuāli sekot. suspend: Tu vairs nevari izmantot savu kontu, un tavs profils un citi dati vairs nav pieejami. Tu joprojām vari pieteikties, lai pieprasītu savu datu dublēšanu, līdz dati tiks pilnībā noņemti aptuveni 30 dienu laikā, taču mēs saglabāsim dažus pamata datus, lai neļautu tev izvairīties no apturēšanas. reason: 'Iemesls:' @@ -1819,17 +1867,17 @@ lv: subject: delete_statuses: Tavas ziņas %{acct} tika noņemtas disable: Tavs konts %{acct} tika iesaldēts - mark_statuses_as_sensitive: Tavas ziņas vietnē %{acct} ir atzīmētas kā sensitīvas + mark_statuses_as_sensitive: Tavi ieraksti %{acct} ir atzīmēti kā jūtīgi none: Brīdinājums par %{acct} - sensitive: Tavas ziņas vietnē %{acct} turpmāk tiks atzīmētas kā sensitīvas + sensitive: Tavi ieraksti %{acct} turpmāk tiks atzīmēti kā jūtīgi silence: Tavs konts %{acct} tika ierobežots suspend: Tava konta %{acct} darbība ir apturēta title: delete_statuses: Izdzēstās ziņas disable: Konts iesaldēts - mark_statuses_as_sensitive: Ziņas ir atzīmēts kā sensitīvas + mark_statuses_as_sensitive: Ieraksti atzīmēti kā jūtīgi none: Brīdinājums - sensitive: Konts ir atzīmēts kā sensitīvs + sensitive: Konts ir atzīmēts kā jūtīgs silence: Konts ierobežots suspend: Konts apturēts welcome: @@ -1842,7 +1890,8 @@ lv: explanation: Šeit ir daži padomi, kā sākt darbu feature_action: Uzzināt vairāk feature_creativity: Mastodon nodrošina skaņas, video un attēlu ierakstus, pieejamības aprakstus, aptaujas, satura brīdinājumus, animētus profila attēlus, pielāgotas emocijzīmes, sīktēlu apgriešanas vadīklas un vēl, lai palīdzētu Tev sevi izpaust tiešsaistē. Vai Tu izplati savu mākslu, mūziku vai aplādes, Mastodon ir šeit ar Tevi. - feature_moderation_title: Moderēšana, kādai tai būtu jābūt + feature_moderation: Mastodon nodod lēmumu pieņemšanu atpakaļ Tavās rokās. Katrs serveris izveido savus noteikumus un nosacījumus, kas tiek nodrošināti vietēji, ne kā lieliem uzņēmumiem piederošos sabiedriskajos medijiem, padarot katru serveri par vispielāgojamāko un visatsaucīgāko dažādu cilvēku kopu vajadzībām. Pievienojies serverim, kura noteikumiem Tu piekrīti, vai izvieto savu! + feature_moderation_title: Satura pārraudzība, kādai tai būtu jābūt follow_action: Sekot follow_step: Sekošana aizraujošiem cilvēkiem ir viss, par ko ir Mastodon. follow_title: Pielāgo savu mājas barotni @@ -1853,7 +1902,7 @@ lv: one: "%{people} cilvēks pēdējās 2 dienās" other: "%{people} cilvēki pēdējās 2 dienās" zero: "%{people} cilvēku pēdējās divās dienās" - hashtags_subtitle: Izpēti, kas pēdējās divās dienāš ir piesasitījis cilvēku uzmanību + hashtags_subtitle: Izpēti, kas pēdējās divās dienās ir piesasitījis cilvēku uzmanību hashtags_title: Izplatīti tēmturi hashtags_view_more: Skatīt vairāk izplatītu tēmturu post_action: Rakstīt @@ -1885,13 +1934,13 @@ lv: add: Pievienot jaunu drošības atslēgu create: error: Pievienojot drošības atslēgu, radās problēma. Lūdzu mēģini vēlreiz. - success: Tava drošības atslēga tika veiksmīgi pievienota. + success: Tava drošības atslēga tika sekmīgi pievienota. delete: Dzēst delete_confirmation: Vai tiešām vēlies dzēst šo drošības atslēgu? description_html: Ja iespējosi drošības atslēgas autentifikāciju, piesakoties būs jāizmanto viena no tavām drošības atslēgām. destroy: error: Dzēšot tavu drošības atslēgu, radās problēma. Lūdzu mēģini vēlreiz. - success: Tava drošības atslēga tika veiksmīgi izdēsta. + success: Tava drošības atslēga tika sekmīgi izdēsta. invalid_credential: Nederīga drošības atslēga nickname_hint: Ievadi savas jaunās drošības atslēgas segvārdu not_enabled: Tu vel neesi iespējojis WebAuthn diff --git a/config/locales/ml.yml b/config/locales/ml.yml index bdc0475a6f..c27e5e5467 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -4,18 +4,25 @@ ml: contact_missing: സജ്ജമാക്കിയിട്ടില്ല contact_unavailable: ലഭ്യമല്ല accounts: + followers: + one: പിന്തുടരാളി + other: പിന്തുടരുന്നവർ following: പിന്തുടരുന്നു last_active: അവസാനം സജീവമായിരുന്നത് link_verified_on: സന്ധിയുടെ ഉടമസ്ഥാവസ്‌കാശം %{date} ൽ പരിശോധിക്കപ്പെട്ടു nothing_here: ഇവിടെ ഒന്നുമില്ല! posts_tab_heading: ടൂട്ടുകൾ admin: + account_moderation_notes: + create: ഒരു കുറിപ്പു് വിടുക accounts: + add_email_domain_block: ഈ ഇ-തപാൽ മേഖല തടസ്സപെടുത്തുക approve: അംഗീകരിക്കുക are_you_sure: നിങ്ങൾക്ക് ഉറപ്പാണോ? avatar: അവതാർ by_domain: മേഖല change_email: + changed_msg: ഇ-തപാൽ ശരിയായിട്ടു് മാറ്റീ! current_email: ഇപ്പോഴത്തെ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം label: മാറിയ ഇലക്ട്രോണിക് കത്തിന്റെ മേൽവിലാസം new_email: പുതിയ ഇലക്ട്രോണിക് കത്ത് @@ -24,6 +31,7 @@ ml: confirm: നിജപ്പെടുത്തുക confirmed: നിജപ്പെടുത്തി confirming: സ്ഥിരീകരിക്കുന്നു + custom: സ്വന്തമായ ഭേദഗതി delete: ഡാറ്റ ഇല്ലാതാക്കുക deleted: മായിച്ചു demote: തരം താഴ്ത്തുക @@ -34,7 +42,9 @@ ml: domain: മേഖല edit: തിരുത്തുക email: ഇമെയിൽ + email_status: ഇ-തപാൽ അവസ്ഥ header: തലക്കെട്ട് + inbox_url: ഇ-തപാല്പെട്ടി വിലാസം joined: ജോയിൻ ചെയ്‌തിരിക്കുന്നു location: all: എല്ലാം @@ -46,9 +56,18 @@ ml: all: എല്ലാം suspended: താൽക്കാലികമായി നിർത്തി title: മധ്യസ്ഥന്‍ + protocol: പെരുമാറ്റച്ചട്ടം + public: പൊതുവു് + remove_header: തലക്കെട്ടു് മാറ്റുക + resend_confirmation: + send: ഉറപ്പിക്കൽ-വിലാസം വീണ്ടും അയക്കുക reset: പുനഃക്രമീകരിക്കുക reset_password: പാസ്‌വേഡ് പുനഃക്രമീകരിക്കുക search: തിരയുക + security: സുരക്ഷ + security_measures: + only_password: രഹസ്യവാക്ക് മാത്രം + silence: അതിർ title: അക്കൗണ്ടുകൾ unconfirmed_email: സ്ഥിരീകരിക്കാത്ത ഇമെയിൽ username: ഉപയോക്തൃനാമം diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 9994a34bb5..e0ebc2b175 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -756,7 +756,7 @@ ms: remove_from_report: Alih keluar daripada laporan report: Laporan deleted: Dipadamkan - favourites: Gemaran + favourites: Sukaan history: Sejarah versi in_reply_to: Membalas kepada language: Bahasa @@ -862,7 +862,7 @@ ms: no_status_selected: Tiada pos sohor kini ditukar kerana tiada yang dipilih not_discoverable: Pengarang tidak mengikut serta untuk dapat ditemui shared_by: - other: Dikongsi dan digemari %{friendly_count} kali + other: Dikongsi atau disukai %{friendly_count} kali title: Hantaran hangat tags: current_score: Markah semasa %{score} @@ -1301,6 +1301,9 @@ ms: unsubscribe: action: Ya, nyahlanggan complete: Menyahlanggan + emails: + notification_emails: + favourite: emel pemberitahuan sukaan title: Hentikan langganan media_attachments: validations: @@ -1352,9 +1355,9 @@ ms: sign_up: subject: "%{name} telah mendaftar" favourite: - body: 'Pos anda telah digemari oleh %{name}:' - subject: "%{name} menggemari siaran anda" - title: Kegemaran baru + body: 'Hantaran anda disukai oleh %{name}:' + subject: "%{name} menyukai hantaran anda" + title: Sukaan baharu follow: body: "%{name} kini mengikuti anda!" subject: "%{name} kini mengikuti anda" @@ -1577,7 +1580,7 @@ ms: enabled_hint: Memadamkan pos anda secara automatik setelah mereka mencapai ambang umur yang ditentukan, melainkan ia sepadan dengan salah satu pengecualian di bawah exceptions: Pengecualian explanation: Oleh kerana pemadaman pos adalah operasi yang mahal, ini dilakukan perlahan-lahan dari semasa ke semasa apabila server tidak sibuk. Atas sebab ini, pos anda mungkin dipadamkan seketika selepas ia mencapai ambang umur. - ignore_favs: Abaikan kegemaran + ignore_favs: Abaikan sukaan ignore_reblogs: Abaikan rangsangan interaction_exceptions: Pengecualian berdasarkan interaksi interaction_exceptions_explanation: Sila ambil perhatian bahawa tiada jaminan untuk pos dipadamkan jika ia berada di bawah ambang kegemaran atau tingkatkan selepas sekali melepasinya. diff --git a/config/locales/nan.yml b/config/locales/nan.yml new file mode 100644 index 0000000000..452824b984 --- /dev/null +++ b/config/locales/nan.yml @@ -0,0 +1,69 @@ +--- +nan: + about: + about_mastodon_html: 社交網路ê未來:Bô廣告、bô企業監控、設計有道德,兼非中心化!加入Mastodon,保有lí ê資料! + contact_missing: Iáu bē設定 + contact_unavailable: 無開放 + hosted_on: 佇 %{domain} 運作 ê Mastodon站 + title: 關係本站 + accounts: + followers: + other: 跟tuè ê + following: Leh跟tuè + last_active: 頂kái活動ê時間 + link_verified_on: Tsit ê連結ê所有權佇 %{date} 受檢查 + posts: + other: PO文 + posts_tab_heading: PO文 + admin: + account_moderation_notes: + create: 留記錄 + created_msg: 管理記錄成功建立! + destroyed_msg: 管理記錄成功thâi掉! + accounts: + deleted: Thâi掉ah + demote: 降級 + destroyed_msg: Teh-beh thâi掉 %{username} ê資料 + disable: 冷凍 + disable_sign_in_token_auth: 停止用電子phue ê token認證 + disable_two_factor_authentication: 停止用2FA + disabled: 冷凍起來ah + display_name: 顯示ê名 + domain: 域名 + edit: 編輯 + email: 電子phue箱 + email_status: 電子phue ê狀態 + enable: 取消冷凍 + location: + all: Kui ê + local: 本地 + remote: 別ê站 + title: 位置 + instances: + dashboard: + instance_languages_dimension: Tsia̍p用ê語言 + statuses: + language: 語言 + title: 口座ê PO文 + trends: + tags: + dashboard: + tag_languages_dimension: Tsia̍p用ê語言 + auth: + privacy_policy_agreement_html: 我有讀,同意隱私權政策 + setup: + email_settings_hint_html: 請點gún所送ê連結來驗證 %{email}。Gún tī tsia等lí。 + sign_up: + preamble: 用tī tsit臺Mastodon服侍器ê口座,lí thang跟tuè其他佇tsit ê網路ê lâng,無論in ê口座khǹg tī tueh。 + imports: + overwrite_preambles: + blocking_html: Lí teh-beh用%{filename} 內底ê %{total_items} ê口座,替換lí ê封鎖列單。 + preambles: + muting_html: Lí teh-beh kā %{filename}內底ê%{total_items} ê口座消音。 + scheduled_statuses: + too_soon: 預定PO文ê時間kan-ta tī未來 + statuses: + default_language: Kap界面ê語言sio kâng + user_mailer: + welcome: + sign_in_action: 登入 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 7681a04eae..f1de8265bf 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -21,6 +21,7 @@ nl: one: Toot other: Berichten posts_tab_heading: Berichten + self_follow_error: Het volgen van je eigen account is niet toegestaan admin: account_actions: action: Actie uitvoeren @@ -1165,9 +1166,11 @@ nl: use_security_key: Beveiligingssleutel gebruiken author_attribution: example_title: Voorbeeldtekst - hint_html: Bepaal hoe we je vermelden, wanneer jouw links op Mastodon worden gedeeld. + hint_html: Schrijf je nieuws- of blogartikelen buiten Mastodon? Bepaal hoe je geattribueerd wordt als deze gedeeld worden op Mastodon. + instructions: 'Zorg ervoor dat deze code in de HTML van je artikel zit:' more_from_html: Meer van %{name} s_blog: De weblog van %{name} + then_instructions: Voeg vervolgens de domeinnaam van de publicatie toe in het onderstaande veld. title: Auteur-attributie challenge: confirm: Doorgaan @@ -1526,8 +1529,8 @@ nl: title: Nieuw volgverzoek mention: action: Reageren - body: 'Jij bent door %{name} vermeld in:' - subject: Jij bent vermeld door %{name} + body: 'Je bent door %{name} vermeld in:' + subject: Je bent vermeld door %{name} title: Nieuwe vermelding poll: subject: Een peiling van %{name} is beëindigd @@ -1903,9 +1906,9 @@ nl: feature_action: Meer informatie feature_audience: Mastodon biedt je een unieke mogelijkheid om je publiek te beheren zonder tussenpersonen. Mastodon, geïmplementeerd in jouw eigen infrastructuur, stelt je in staat om elke andere Mastodon-server online te volgen en door hen gevolgd te worden, en staat onder controle van niemand, behalve die van jou. feature_audience_title: Bouw jouw publiek in vertrouwen op - feature_control: Je weet zelf het beste wat je op jouw tijdlijn wilt zien. Geen algoritmen of advertenties om je tijd te verspillen. Volg iedereen op elke Mastodon-server vanaf één account en ontvang hun berichten in chronologische volgorde, en maak jouw hoekje op het internet een beetje meer zoals jezelf. + feature_control: Je weet zelf het beste wat je op jouw starttijdlijn wilt zien. Geen algoritmen of advertenties om je tijd te verspillen. Volg iedereen op elke Mastodon-server vanaf één account en ontvang hun berichten in chronologische volgorde, en maak jouw hoekje op het internet een beetje meer zoals jezelf. feature_control_title: Houd controle over je eigen tijdlijn - feature_creativity: Mastodon ondersteunt audio-, video- en fotoberichten, toegankelijkheidsbeschrijvingen, peilingen, inhoudswaarschuwingen, geanimeerde profielfoto's, aangepaste lokale emoji's, controle over het bijwerken van thumbnails en meer, om je te helpen jezelf online uit te drukken. Of je nu jouw kunst, jouw muziek of jouw podcast publiceert, Mastodon staat voor je klaar. + feature_creativity: Mastodon ondersteunt audio-, video- en fotoberichten, toegankelijkheidsbeschrijvingen, peilingen, inhoudswaarschuwingen, geanimeerde profielfoto's, aangepaste lokale emoji's, controle over het bijwerken van miniaturen en meer, om je te helpen jezelf online uit te drukken. Of je nu jouw kunst, jouw muziek of jouw podcast publiceert, Mastodon staat voor je klaar. feature_creativity_title: Ongeëvenaarde creativiteit feature_moderation: Mastodon legt de besluitvorming weer in jouw handen. Elke server creëert diens eigen regels en voorschriften, die lokaal worden gehandhaafd en niet van bovenaf zoals sociale media van bedrijven, waardoor het het meest flexibel is in het reageren op de behoeften van verschillende groepen mensen. Word lid van een server met de regels waarmee je akkoord gaat, of host jouw eigen. feature_moderation_title: Moderatie zoals het hoort diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 8f6afc2426..f316628f6d 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1,7 +1,7 @@ --- nn: about: - about_mastodon_html: 'Framtidas sosiale nettverk: Ingen annonsar, ingen verksemder som overvaker deg, etisk design og desentralisering! Eig idéane dine med Mastodon!' + about_mastodon_html: 'Framtidas sosiale nettverk: Ingen annonsar, ingen verksemder som overvaker deg, etisk design og desentralisering! Eig dataene dine med Mastodon!' contact_missing: Ikkje sett contact_unavailable: I/T hosted_on: "%{domain} er vert for Mastodon" @@ -21,6 +21,7 @@ nn: one: Tut other: Tut posts_tab_heading: Tut + self_follow_error: Det er ikkje tillate å følgje din eigen konto admin: account_actions: action: Utfør @@ -39,7 +40,7 @@ nn: avatar: Bilete by_domain: Domene change_email: - changed_msg: Konto-e-posten er endra! + changed_msg: E-post for konto er endra! current_email: Noverande e-post label: Byt e-post new_email: Ny e-post @@ -62,7 +63,7 @@ nn: disable: Slå av disable_sign_in_token_auth: Slå av e-post-token-autentisering disable_two_factor_authentication: Slå av 2FA - disabled: Slege av + disabled: Inaktiv display_name: Synleg namn domain: Domene edit: Rediger @@ -689,10 +690,10 @@ nn: moderation: Moderering special: Særskild delete: Slett - description_html: Med brukarrollar kan du kontrollera kva funksjonar og område av Mastodon brukarane dine har tilgong til. + description_html: Med brukarroller kan du kontrollera kva funksjonar og område av Mastodon brukarane dine har tilgang til. edit: Endr rollen '%{name}' everyone: Standard-tillatelser - everyone_full_description_html: Dette er grunnrollen som påverkar alle brukarar, jamvel dei utan ei tilsett rolle. Alle andre rollar arvar tillatingar frå denne. + everyone_full_description_html: Dette er grunnrolla som påverkar alle brukarar, jamvel dei utan ei tildelt rolle. Alle andre rollar arvar tilgangsløve frå denne. permissions_count: one: "%{count} tillatelse" other: "%{count} tillatelser" @@ -718,7 +719,7 @@ nn: manage_reports: Handtere rapporteringar manage_reports_description: Let brukarar gjennomgå rapportar og utføre modereringshandlingar i samsvar med desse manage_roles: Handsam roller - manage_roles_description: Tillet at brukarar handsamar og tilset rollar under deira eiga + manage_roles_description: Tillet at brukarar handsamar og tildeler roller som er lågare enn dera eiga manage_rules: Handtere reglar manage_rules_description: Let brukarar endre reglane for tenaren manage_settings: Handtere innstillingar @@ -737,7 +738,7 @@ nn: view_dashboard_description: Gir brukere tilgang til dashbordet og ulike metrikker view_devops: DevOps view_devops_description: Gir brukere tilgang til Sidekiq og pgHero-dashbord - title: Rollar + title: Roller rules: add_new: Legg til regel delete: Slett @@ -1165,9 +1166,11 @@ nn: use_security_key: Bruk sikkerhetsnøkkel author_attribution: example_title: Eksempeltekst - hint_html: Kontroller korleis du blir kreditert når nokon deler lenker på Mastodon. + hint_html: Skriv du nyhende eller blogginnlegg utanfor Mastodon? Her kan du kontrollera korleis du blir kreditert når artiklane dine blir delte på Mastodon. + instructions: 'Sjå til at denne koden er i HTML-koden i artikkelen din:' more_from_html: Meir frå %{name} s_blog: Bloggen til %{name} + then_instructions: Så legg du til domenenamnet for publikasjonen i feltet under. title: Forfattarkreditering challenge: confirm: Hald fram @@ -1426,7 +1429,7 @@ nn: one: 1 bruk other: "%{count} bruk" max_uses_prompt: Inga grense - prompt: Generer og del lenkjer med andre for å gje tilgong til denne tenaren + prompt: Generer og del lenkjer med andre for å gje tilgang til denne tenaren table: expires_at: Vert ugyldig uses: Bruk diff --git a/config/locales/no.yml b/config/locales/no.yml index ec0b14d5a3..567775998a 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -842,7 +842,17 @@ action: Sjekk her for mer informasjon message_html: "Objektlagringen din er feilkonfigurert. Personvernet til brukerne dine er i fare." tags: + moderation: + pending_review: Avventer gjennomgang + reviewed: Gjennomgått + title: Status + name: Navn + newest: Nyeste + oldest: Eldst + reset: Tilbakestill review: Gjennomgangsstatus + search: Søk + title: Emneknagger updated_msg: Emneknagg innstillinger vellykket oppdatert title: Administrasjon trends: @@ -1036,6 +1046,7 @@ or_log_in_with: Eller logg inn med privacy_policy_agreement_html: Jeg har lest og godtar retningslinjer for personvern progress: + confirm: Bekreft E-postadressen details: Dine opplysninger review: Vår gjennomgang rules: Godta regler @@ -1588,6 +1599,7 @@ import: Importér import_and_export: Importer og eksporter migrate: Kontomigrering + notifications: E-postbeskjeder preferences: Innstillinger profile: Profil relationships: Følginger og følgere @@ -1595,6 +1607,8 @@ strikes: Modereringsadvarsler two_factor_authentication: Tofaktorautentisering webauthn_authentication: Sikkerhetsnøkler + severed_relationships: + type: Hendelse statuses: attached: audio: @@ -1781,6 +1795,7 @@ follows_view_more: Vis flere personer å følge hashtags_title: Populære emneknagger hashtags_view_more: Vis flere populære emneknagger + post_action: Sett sammen post_step: Si hallo til verdenen med tekst, bilder, videoer, eller meningsmålinger. post_title: Lag ditt første innlegg share_action: Del diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 3aaf7a5a57..0187ed68be 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -25,6 +25,7 @@ pl: one: wpis other: Wpisów posts_tab_heading: Wpisy + self_follow_error: Nie możesz obserwować swojego konta admin: account_actions: action: Wykonaj działanie @@ -1201,9 +1202,11 @@ pl: use_security_key: Użyj klucza bezpieczeństwa author_attribution: example_title: Przykładowy tekst - hint_html: Kontroluj przypisy do twoich wpisów widoczne na Mastodonie. + hint_html: Piszesz wiadomości albo bloga poza Mastodonem? Kontroluj jak będą ci przypisywane podczas dizielenia się nimi na Mastodonie. + instructions: 'Upewnij się, że ten kod jest w HTMLu twojego artykułu:' more_from_html: Więcej od %{name} s_blog: Blog %{name} + then_instructions: Potem, dodaj domenę publikacji do pola poniżej. title: Przypis do autora challenge: confirm: Kontynuuj diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 5e7317c5fb..d3880142cd 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -21,6 +21,7 @@ pt-BR: one: Publicação other: Publicações posts_tab_heading: Publicações + self_follow_error: Seguir sua conta não é permitido admin: account_actions: action: Tomar uma atitude @@ -34,12 +35,12 @@ pt-BR: accounts: add_email_domain_block: Bloquear domínio de email approve: Aprovar - approved_msg: O registro de %{username} foi aprovado + approved_msg: Aprovado com sucesso o pedido de registro de %{username} are_you_sure: Você tem certeza? avatar: Imagem de perfil by_domain: Domínio change_email: - changed_msg: E-mail alterado! + changed_msg: E-mail alterado com sucesso! current_email: E-mail atual label: Alterar e-mail new_email: Novo e-mail @@ -141,7 +142,7 @@ pt-BR: only_password: Apenas senha password_and_2fa: Senha e autenticação de dois fatores sensitive: Sensíveis - sensitized: marcadas como sensíveis + sensitized: Marcadas como sensíveis shared_inbox_url: Link da caixa de entrada compartilhada show: created_reports: Denúncias criadas @@ -1165,9 +1166,11 @@ pt-BR: use_security_key: Usar chave de segurança author_attribution: example_title: Texto de amostra - hint_html: Controle como você é creditado quando links são compartilhados no Mastodon. + hint_html: Você está escrevendo notícias ou artigos de blogs fora do Mastodon? Controle como você é credenciado quando eles forem compartilhados no Mastodon. + instructions: 'Certifique-se que este código esteja no HTML do artigo:' more_from_html: Mais de %{name} s_blog: Blog do %{name} + then_instructions: Então, adicione o nome de domínio da publicação no campo abaixo. title: Atribuição de autoria challenge: confirm: Continuar @@ -1888,7 +1891,7 @@ pt-BR: none: Aviso sensitive: Conta marcada como sensível silence: Conta silenciada - suspend: Conta banida + suspend: Conta suspensa welcome: apps_android_action: Disponível no Google Play apps_ios_action: Disponível na App Store diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 6b48e8de26..2f8bd2da8f 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1,7 +1,7 @@ --- pt-PT: about: - about_mastodon_html: 'A rede social do futuro: sem publicidade, e sem vigilância empresarial; desenho ético, e descentralizado! Tome posse dos seus dados com o Mastodon!' + about_mastodon_html: 'A rede social do futuro: sem publicidade e sem vigilância empresarial; desenho ético e descentralizado! Toma posse dos teus dados com o Mastodon!' contact_missing: Por definir contact_unavailable: n.d. hosted_on: Mastodon alojado em %{domain} @@ -10,20 +10,21 @@ pt-PT: followers: one: Seguidor other: Seguidores - following: A seguir + following: Seguindo instance_actor_flash: Esta conta é um ator virtual utilizado para representar o servidor em si e não um utilizador individual. É utilizada para efeitos de federação e não deve ser suspensa. last_active: última atividade link_verified_on: A posse desta hiperligação foi verificada em %{date} nothing_here: Não há nada aqui! pin_errors: - following: Tem de estar a seguir a pessoa que pretende apoiar + following: Tens de estar a seguir a pessoa que pretendes apoiar posts: one: Publicação other: Publicações posts_tab_heading: Publicações + self_follow_error: Não é permitido seguir a tua própria conta admin: account_actions: - action: Executar acção + action: Executar ação already_silenced: Esta conta já foi limitada. already_suspended: Esta conta já foi suspensa. title: Executar ação de moderação em %{acct} @@ -35,7 +36,7 @@ pt-PT: add_email_domain_block: Bloquear domínio de e-mail approve: Aprovar approved_msg: Inscrição de %{username} aprovada com sucesso - are_you_sure: Tem a certeza? + are_you_sure: Tens a certeza? avatar: Imagem de perfil by_domain: Domínio change_email: @@ -76,7 +77,7 @@ pt-PT: follows: A seguir header: Cabeçalho inbox_url: URL da caixa de entrada - invite_request_text: Razões para se juntar a nós + invite_request_text: Razões para te juntares a nós invited_by: Convidado(a) por ip: IP joined: Aderiu @@ -86,7 +87,7 @@ pt-PT: remote: Remoto title: Local login_status: Estado de início de sessão - media_attachments: Anexos de media + media_attachments: Anexos multimédia memorialize: Converter num memorial memorialized: Em memória memorialized_msg: Conta %{username} transformada com sucesso em memorial @@ -120,7 +121,7 @@ pt-PT: reject: Rejeitar rejected_msg: Inscrição de %{username} rejeitada com sucesso remote_suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente. - remote_suspension_reversible_hint_html: A conta foi suspensa no servidor de origem e os seus dados serão totalmente eliminados em %{date}. Até lá, o servidor de origem poderá recuperar esta conta sem quaisquer efeitos negativos. Se desejar eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo. + remote_suspension_reversible_hint_html: A conta foi suspensa no servidor de origem e os seus dados serão totalmente eliminados em %{date}. Até lá, o servidor de origem poderá recuperar esta conta sem quaisquer efeitos negativos. Se desejares eliminar todos os dados desta conta imediatamente, podes fazê-lo em baixo. remove_avatar: Remover a imagem de perfil remove_header: Remover o cabeçalho removed_avatar_msg: Imagem de perfil de %{username} removida @@ -140,31 +141,31 @@ pt-PT: security_measures: only_password: Apenas palavra-passe password_and_2fa: Palavra-passe e 2FA - sensitive: Marcar como problemático - sensitized: Marcada como problemática + sensitive: Marcar como sensível + sensitized: Marcada como sensível shared_inbox_url: URL da caixa de entrada partilhada show: created_reports: Denúncias realizadas targeted_reports: Denunciada por outros silence: Limitar - silenced: Limitado + silenced: Limitada statuses: Publicações strikes: Reprimendas anteriores - subscribe: Inscrever-se + subscribe: Inscrever-me suspend: Suspender suspended: Suspensa - suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente. Pode cancelar a suspensão da conta para torná-la utilizável, mas não irá recuperar os dados que possuía anteriormente. - suspension_reversible_hint_html: A conta foi suspensa e os dados serão totalmente eliminados em %{date}. Até lá, a conta poderá ser recuperada sem quaisquer efeitos negativos. Se deseja eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo. + suspension_irreversible: Os dados desta conta foram eliminados irreversivelmente. Podes cancelar a suspensão da conta para torná-la utilizável, mas não irás recuperar os dados que possuías anteriormente. + suspension_reversible_hint_html: A conta foi suspensa e os dados serão totalmente eliminados em %{date}. Até lá, a conta poderá ser recuperada sem quaisquer efeitos negativos. Se desejas eliminar todos os dados desta conta imediatamente, podes fazê-lo em baixo. title: Contas unblock_email: Desbloquear endereço de e-mail unblocked_email_msg: Endereço de e-mail de %{username} desbloqueado com sucesso unconfirmed_email: E-mail por confirmar - undo_sensitized: Desmarcar como problemático - undo_silenced: Desfazer silenciar + undo_sensitized: Desmarcar como sensível + undo_silenced: Desfazer limitação undo_suspension: Desfazer supensão unsilenced_msg: Limitações da conta %{username} removidas com sucesso unsubscribe: Cancelar inscrição - unsuspended_msg: Removeu a suspensão da conta %{username} + unsuspended_msg: Foi cancelada a suspensão da conta %{username} username: Nome de utilizador view_domain: Ver resumo do domínio warn: Advertir @@ -172,14 +173,14 @@ pt-PT: whitelisted: Permitido para a federação action_logs: action_types: - approve_appeal: Aprovar recurso + approve_appeal: Aprovar contestação approve_user: Aprovar utilizador assigned_to_self_report: Atribuir denúncia change_email_user: Alterar e-mail do utilizador change_role_user: Alterar função do utilizador confirm_user: Confirmar utilizador create_account_warning: Criar aviso - create_announcement: Criar comunicado + create_announcement: Criar mensagem de manutenção create_canonical_email_block: Criar bloqueio de e-mail create_custom_emoji: Criar emoji personalizado create_domain_allow: Criar permissão de domínio @@ -189,7 +190,7 @@ pt-PT: create_unavailable_domain: Criar domínio indisponível create_user_role: Criar função demote_user: Despromover utilizador - destroy_announcement: Eliminar comunicado + destroy_announcement: Eliminar mensagem de manutenção destroy_canonical_email_block: Eliminar bloqueio de e-mail destroy_custom_emoji: Eliminar emoji personalizado destroy_domain_allow: Eliminar permissão de domínio @@ -209,22 +210,22 @@ pt-PT: enable_user: Ativar utilizador memorialize_account: Transformar conta num memorial promote_user: Promover utilizador - reject_appeal: Rejeitar recurso + reject_appeal: Rejeitar contestação reject_user: Rejeitar utilizador remove_avatar_user: Remover imagem de perfil reopen_report: Reabrir denúncia resend_user: Reenviar e-mail de confirmação reset_password_user: Repor palavra-passe resolve_report: Resolver denúncia - sensitive_account: Marcar a media na sua conta como problemática + sensitive_account: Marcar conta com conteúdo sensível silence_account: Limitar conta suspend_account: Suspender conta unassigned_report: Anular atribuição desta denúncia unblock_email_account: Desbloquear endereço de e-mail - unsensitive_account: Desmarcar a conta como problemática - unsilence_account: Deixar de silenciar conta + unsensitive_account: Desmarcar conta com conteúdo sensível + unsilence_account: Deixar de limitar a conta unsuspend_account: Retirar suspensão da conta - update_announcement: Atualizar comunicado + update_announcement: Atualizar mensagem de manutenção update_custom_emoji: Atualizar emoji personalizado update_domain_block: Atualizar bloqueio de domínio update_ip_block: Atualizar regra de IP @@ -232,14 +233,14 @@ pt-PT: update_status: Atualizar publicação update_user_role: Atualizar função actions: - approve_appeal_html: "%{name} aprovou recurso da decisão de moderação de %{target}" + approve_appeal_html: "%{name} aprovou a contestação da decisão de moderação de %{target}" approve_user_html: "%{name} aprovou a inscrição de %{target}" assigned_to_self_report_html: "%{name} atribuiu a denúncia %{target} a si próprio" change_email_user_html: "%{name} alterou o endereço de e-mail do utilizador %{target}" change_role_user_html: "%{name} alterou a função de %{target}" confirm_user_html: "%{name} confirmou o endereço de e-mail do utilizador %{target}" create_account_warning_html: "%{name} enviou um aviso para %{target}" - create_announcement_html: "%{name} criou o novo anúncio %{target}" + create_announcement_html: "%{name} criou a nova mensagem de manutenção %{target}" create_canonical_email_block_html: "%{name} bloqueou o e-mail com a hash %{target}" create_custom_emoji_html: "%{name} enviou o novo emoji %{target}" create_domain_allow_html: "%{name} permitiu a federação com o domínio %{target}" @@ -249,7 +250,7 @@ pt-PT: create_unavailable_domain_html: "%{name} parou as entregas ao domínio %{target}" create_user_role_html: "%{name} criou a função %{target}" demote_user_html: "%{name} despromoveu o utilizador %{target}" - destroy_announcement_html: "%{name} eliminou o anúncio %{target}" + destroy_announcement_html: "%{name} eliminou a mensagem de manutenção %{target}" destroy_canonical_email_block_html: "%{name} desbloqueou o e-mail com a hash %{target}" destroy_custom_emoji_html: "%{name} eliminou o emoji %{target}" destroy_domain_allow_html: "%{name} bloqueou a federação com o domínio %{target}" @@ -267,53 +268,53 @@ pt-PT: enable_custom_emoji_html: "%{name} ativou o emoji %{target}" enable_sign_in_token_auth_user_html: "%{name} ativou o token de autenticação por e-mail para %{target}" enable_user_html: "%{name} ativou o início de sessão para o utilizador %{target}" - memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial" + memorialize_account_html: "%{name} transformou a conta de %{target} num memorial" promote_user_html: "%{name} promoveu o utilizador %{target}" - reject_appeal_html: "%{name} rejeitou recurso da decisão de moderação de %{target}" + reject_appeal_html: "%{name} rejeitou a contestação da decisão de moderação de %{target}" reject_user_html: "%{name} rejeitou a inscrição de %{target}" remove_avatar_user_html: "%{name} removeu a imagem de perfil de %{target}" reopen_report_html: "%{name} reabriu a denúncia %{target}" - resend_user_html: "%{name} reenviou e-mail de confirmação para %{target}" + resend_user_html: "%{name} reenviou o e-mail de confirmação para %{target}" reset_password_user_html: "%{name} restabeleceu a palavra-passe do utilizador %{target}" resolve_report_html: "%{name} resolveu a denúncia %{target}" - sensitive_account_html: "%{name} marcou a media de %{target} como sensível" - silence_account_html: "%{name} silenciou a conta de %{target}" + sensitive_account_html: "%{name} marcou a multimédia de %{target} como sensível" + silence_account_html: "%{name} limitou a conta de %{target}" suspend_account_html: "%{name} suspendeu a conta de %{target}" - unassigned_report_html: "%{name} desatribuiu a denúncia %{target}" + unassigned_report_html: "%{name} deixou de atribuir a denúncia %{target}" unblock_email_account_html: "%{name} desbloqueou o endereço de e-mail de %{target}" - unsensitive_account_html: "%{name} desmarcou a media de %{target} como sensível" - unsilence_account_html: "%{name} desativou o silêncio de %{target}" + unsensitive_account_html: "%{name} desmarcou a multimédia de %{target} como sensível" + unsilence_account_html: "%{name} deixou de limitar a conta de %{target}" unsuspend_account_html: "%{name} desativou a suspensão de %{target}" - update_announcement_html: "%{name} atualizou o anúncio %{target}" + update_announcement_html: "%{name} atualizou a mensagem de manutenção %{target}" update_custom_emoji_html: "%{name} atualizou o emoji %{target}" update_domain_block_html: "%{name} atualizou o bloqueio de domínio para %{target}" - update_ip_block_html: "%{name} alterou regra para IP %{target}" + update_ip_block_html: "%{name} alterou regra para o IP %{target}" update_report_html: "%{name} atualizou a denúncia %{target}" - update_status_html: "%{name} atualizou o estado de %{target}" + update_status_html: "%{name} atualizou a publicação de %{target}" update_user_role_html: "%{name} alterou a função %{target}" - deleted_account: conta apagada + deleted_account: conta eliminada empty: Não foram encontrados registos. filter_by_action: Filtrar por ação filter_by_user: Filtrar por utilizador title: Registo de auditoria unavailable_instance: "(nome de domínio indisponível)" announcements: - destroyed_msg: Comunicado eliminado com sucesso! + destroyed_msg: Mensagem de manutenção eliminada com sucesso! edit: - title: Editar comunicado - empty: Nenhum comunicado encontrado. - live: Em direto + title: Editar mensagem de manutenção + empty: Nenhuma mensagem de manutenção encontrada. + live: Em tempo real new: - create: Criar comunicado - title: Novo comunicado + create: Criar mensagem de manutenção + title: Nova mensagem de manutenção publish: Publicar - published_msg: Comunicado publicado com sucesso! + published_msg: Mensagem de manutenção publicada com sucesso! scheduled_for: Agendado para %{time} - scheduled_msg: Comunicado agendado para publicação! - title: Comunicados + scheduled_msg: Mensagem de manutenção agendada para publicação! + title: Mensagens de manutenção unpublish: Anular publicação - unpublished_msg: Comunicado corretamente retirado de publicação! - updated_msg: Comunicado atualizado com sucesso! + unpublished_msg: Mensagem de manutenção corretamente retirada de publicação! + updated_msg: Mensagem de manutenção atualizada com sucesso! critical_update_pending: Atualização crítica pendente custom_emojis: assign_category: Atribuir categoria @@ -327,39 +328,39 @@ pt-PT: destroyed_msg: Emoji destruído com sucesso! disable: Desativar disabled: Desativado - disabled_msg: Desativado com sucesso este emoji + disabled_msg: Emoji desativado com sucesso emoji: Emoji enable: Ativar enabled: Ativado - enabled_msg: Ativado com sucesso este emoji + enabled_msg: Emoji ativado com sucesso image_hint: PNG ou GIF até %{size} list: Lista - listed: Inventariado + listed: Na lista new: title: Adicionar novo emoji personalizado - no_emoji_selected: Nenhum emojis foi alterado, pois nenhum foi selecionado - not_permitted: Não está autorizado a executar esta ação - overwrite: Escrever por cima + no_emoji_selected: Nenhum emoji foi alterado, pois nenhum foi selecionado + not_permitted: Não estás autorizado a executar esta ação + overwrite: Substituir shortcode: Código de atalho - shortcode_hint: Pelo menos 2 caracteres, apenas caracteres alfanuméricos e traços inferiores + shortcode_hint: Pelo menos 2 caracteres, apenas caracteres alfanuméricos e traços inferiores (_) title: Emojis personalizados uncategorized: Não categorizados unlist: Não listar - unlisted: Não inventariado + unlisted: Não listado update_failed_msg: Não foi possível atualizar esse emoji updated_msg: Emoji atualizado com sucesso! upload: Enviar dashboard: active_users: utilizadores ativos interactions: interações - media_storage: Armazenamento de media + media_storage: Armazenamento de multimédia new_users: novos utilizadores opened_reports: denúncias abertas pending_appeals_html: - one: "%{count} recurso pendente" - other: "%{count} recursos pendentes" + one: "%{count} contestação pendente" + other: "%{count} contestações pendentes" pending_reports_html: - one: "%{count} denuncia pendente" + one: "%{count} denúncia pendente" other: "%{count} denuncias pendentes" pending_tags_html: one: "%{count} etiqueta pendente" @@ -369,7 +370,7 @@ pt-PT: other: "%{count} utilizadores pendentes" resolved_reports: denúncias resolvidas software: Software - sources: Origem de inscrições + sources: Origem das inscrições space: Utilização do espaço title: Painel de controlo top_languages: Principais idiomas ativos @@ -377,12 +378,12 @@ pt-PT: website: Website disputes: appeals: - empty: Nenhum recurso encontrado. - title: Recursos + empty: Nenhuma contestação encontrada. + title: Contestação domain_allows: add_new: Permitir federação com o domínio created_msg: O domínio foi autorizado com êxito para a federação - destroyed_msg: Revogada a permissão de federação para o domínio + destroyed_msg: Foi revogada a permissão de federação para o domínio export: Exportar import: Importar undo: Revogar federação com o domínio @@ -392,38 +393,38 @@ pt-PT: cancel: Cancelar confirm: Suspender permanent_action: Desfazer a suspensão não restaurará nenhum dado ou relacionamento. - preamble_html: Está prestes a suspender %{domain} e seus subdomínios. - remove_all_data: Isto irá remover todo o conteúdo, media e dados de perfil para este domínio do seu servidor. - stop_communication: O seu servidor irá parar de comunicar com esses servidores. + preamble_html: Estás prestes a suspender %{domain} e os seus subdomínios. + remove_all_data: Isto irá remover todo o conteúdo, multimédias e dados de perfil para este domínio do teu servidor. + stop_communication: O teu servidor irá parar de comunicar com estes servidores. title: Confirmar o bloqueio de domínio para %{domain} - undo_relationships: Isto irá desfazer qualquer relação entre as contas desses servidores e as suas. - created_msg: Bloqueio do domínio está a ser processado - destroyed_msg: Retirado o bloqueio de domínio + undo_relationships: Isto irá desfazer qualquer relação entre as contas desses servidores e as tuas. + created_msg: O bloqueio do domínio está a ser processado + destroyed_msg: Foi retirado o bloqueio de domínio domain: Domínio edit: Editar bloqueio de domínio - existing_domain_block: Já tinha imposto limites mais rigorosos a %{name}. - existing_domain_block_html: Já tinha imposto limites mais restritivos a %{name}. Primeiro, precisa de o desbloquear. + existing_domain_block: Já tinhas imposto limites mais restritivos a %{name}. + existing_domain_block_html: Já tinhas imposto limites mais restritivos a %{name}. Primeiro, precisas de o desbloquear. export: Exportar import: Importar new: create: Criar bloqueio hint: O bloqueio do domínio não impedirá a criação de registos de contas na base de dados, mas aplicará retroativamente e automaticamente métodos de moderação específicos a essas contas. severity: - desc_html: "Limitar tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. Suspender removerá do seu servidor todo o conteúdo, media, e dados de perfil das contas deste domínio. Utilize Nenhum se apenas quiser rejeitar ficheiros media." + desc_html: "Limitar tornará as mensagens das contas neste domínio invisíveis a qualquer pessoa que não as esteja a seguir. Suspender removerá do teu servidor todo o conteúdo, multimédias e dados de perfil das contas deste domínio. Utiliza Nenhum se apenas quiseres rejeitar ficheiros multimédia." noop: Nenhum silence: Limitar suspend: Suspender title: Novo bloqueio de domínio no_domain_block_selected: Nenhum bloqueio de domínio foi alterado pois nenhum foi selecionado - not_permitted: Não está autorizado a executar esta ação + not_permitted: Não estás autorizado a executar esta ação obfuscate: Ofuscar nome de domínio obfuscate_hint: Ofuscar parcialmente o nome de domínio na lista, caso estejam definidas limitações na publicação da lista de domínios private_comment: Comentário privado private_comment_hint: Comentário sobre essa limitação de domínio para uso interno pelos moderadores. public_comment: Comentário público - public_comment_hint: Comentário sobre essa limitação de domínio para o público geral, se ativada a divulgação da lista de limitações de domínio. - reject_media: Rejeitar ficheiros de media - reject_media_hint: Remove ficheiros de media armazenados localmente, e rejeita a descarga de novos ficheiros no futuro. Sem pertinência para suspensões + public_comment_hint: Comentário sobre esta limitação de domínio para o público geral, se estiver ativada a divulgação da lista de limitações de domínio. + reject_media: Rejeitar ficheiros multimédia + reject_media_hint: Remove ficheiros multimédia armazenados localmente e rejeita a descarga de novos ficheiros no futuro. Sem pertinência para suspensões reject_reports: Rejeitar denúncias reject_reports_hint: Ignorar todas as denúncias provenientes deste domínio. Sem pertinência para suspensões undo: Anular o bloqueio por domínio @@ -446,7 +447,7 @@ pt-PT: title: Bloquear novo domínio de e-mail no_email_domain_block_selected: Não foram alterados quaisquer bloqueios de domínios de e-mail, uma vez que nenhum foi selecionado not_permitted: Não permitido - resolved_dns_records_hint_html: O nome de domínio resolve para os seguintes domínios MX, que são, em última análise, responsáveis por aceitar o e-mail. Bloquear um domínio MX irá bloquear as inscrições de qualquer endereço de e-mail que use o mesmo domínio MX, mesmo quando o nome de domínio visível é diferente. Cuidado para não bloquear os principais provedores de e-mail. + resolved_dns_records_hint_html: O nome de domínio resolve para os seguintes domínios MX, que são, em última análise, responsáveis por aceitar o e-mail. Bloquear um domínio MX irá bloquear as inscrições de qualquer endereço de e-mail que use o mesmo domínio MX, mesmo quando o nome de domínio visível é diferente. Cuidado para não bloquear os principais fornecedores de e-mail. resolved_through_html: Resolvido através de %{domain} title: Domínios de e-mail bloqueados export_domain_allows: @@ -455,12 +456,12 @@ pt-PT: no_file: Nenhum ficheiro selecionado export_domain_blocks: import: - description_html: Está prestes a importar uma lista de bloqueios de domínio. Por favor, reveja esta lista com muito cuidado, especialmente se não tiver sido o autor desta lista. + description_html: Estás prestes a importar uma lista de bloqueios de domínio. Por favor, revê esta lista com muito cuidado, especialmente se não tiveres sido o autor desta lista. existing_relationships_warning: Relações de seguimento existentes - private_comment_description_html: 'Para o ajudar a rastrear a origem dos bloqueios importados, estes serão criados com o seguinte comentário privado: %{comment}' + private_comment_description_html: 'Para te ajudar a rastrear a origem dos bloqueios importados, estes serão criados com o seguinte comentário privado: %{comment}' private_comment_template: Importado de %{source} em %{date} title: Importar bloqueios de domínio - invalid_domain_block: 'Um ou mais blocos de domínio foram ignorados devido o(s) seguinte(s) erro(s): %{error}' + invalid_domain_block: 'Um ou mais blocos de domínio foram ignorados devido ao(s) seguinte(s) erro(s): %{error}' new: title: Importar bloqueios de domínio no_file: Nenhum ficheiro selecionado @@ -478,12 +479,12 @@ pt-PT: view_all: Ver registos de auditoria completos availability: description_html: - one: Se a transmissão ao domínio falhar ao final de %{count} dia(s), não será feita mais nenhuma tentativa de transmissão a menos que seja recebida uma transmissão proveniente desse domínio. - other: Se a transmissão ao domínio falhar em %{count} dias diferentes sem sucesso, nenhuma tentativa de transmissão será feita a menos que uma transmissão proveniente do domínio seja recebida. + one: Se a entrega ao domínio falhar %{count} dia sem sucesso, não serão efetuadas mais tentativas de entrega, a não ser que seja recebida uma entrega do domínio. + other: Se a entrega ao domínio falhar %{count} dias diferentes sem sucesso, não serão efetuadas mais tentativas de entrega, a não ser que seja recebida uma entrega do domínio. failure_threshold_reached: Limite de falhas atingido em %{date}. failures_recorded: one: Tentativa falhada em %{count} dia. - other: Tentativas em %{count} dias diferentes. + other: Tentativas falhadas em %{count} dias diferentes. no_failures_recorded: Sem falhas registadas. title: Disponibilidade warning: A última tentativa de conectar a este servidor não foi bem sucedida @@ -497,7 +498,7 @@ pt-PT: description_html: Pode definir políticas de conteúdo que serão aplicadas a todas as contas deste domínio e a qualquer um dos seus subdomínios. limited_federation_mode_description_html: Pode escolher se deseja permitir a federação com este domínio. policies: - reject_media: Rejeitar media + reject_media: Rejeitar multimédia reject_reports: Rejeitar denúncias silence: Limitar suspend: Suspender @@ -508,9 +509,9 @@ pt-PT: instance_accounts_dimension: Contas mais seguidas instance_accounts_measure: contas armazenadas instance_followers_measure: nossos seguidores lá - instance_follows_measure: os seus seguidores aqui + instance_follows_measure: os seguidores deles aqui instance_languages_dimension: Idiomas mais populares - instance_media_attachments_measure: anexos de media armazenados + instance_media_attachments_measure: anexos multimédia armazenados instance_reports_measure: denúncias sobre eles instance_statuses_measure: publicações armazenadas delivery: @@ -523,7 +524,7 @@ pt-PT: delivery_available: Entrega disponível delivery_error_days: Dias de erro de entrega delivery_error_hint: Se a entrega não for possível durante %{count} dias, será automaticamente marcada como não realizável. - destroyed_msg: Dados de %{domain} estão agora na fila para iminente eliminação. + destroyed_msg: Os dados de %{domain} estão agora na fila para iminente eliminação. empty: Não foram encontrados domínios. known_accounts: one: "%{count} conta conhecida" @@ -532,17 +533,17 @@ pt-PT: all: Todas limited: Limitadas title: Moderação - private_comment: Comentários privados - public_comment: Comentários públicos + private_comment: Comentário privado + public_comment: Comentário público purge: Purgar - purge_description_html: Se crê que este domínio está definitivamente fora de linha, pode apagar todos os seus registos de contas e dados associados do seu armazenamento. Isso pode demorar algum tempo. + purge_description_html: Se crês que este domínio está definitivamente desativado, podes eliminar todos os seus registos de contas e dados associados do seu armazenamento. Isso pode demorar algum tempo. title: Federação total_blocked_by_us: Bloqueado(s) por nós total_followed_by_them: Seguido(s) por eles total_followed_by_us: Seguido(s) por nós total_reported: Denúncias sobre eles - total_storage: Anexos de media - totals_time_period_hint_html: Os totais exibidos abaixo incluem dados referentes ao tempo total. + total_storage: Anexos multimédia + totals_time_period_hint_html: Os totais mostrados abaixo incluem dados referentes ao tempo total. unknown_instance: Atualmente não há registo deste domínio neste servidor. invites: deactivate_all: Desativar todos @@ -581,7 +582,7 @@ pt-PT: inbox_url: URL do repetidor pending: À espera da aprovação do repetidor save_and_enable: Guardar e ativar - setup: Configurar uma ligação ao repetidor + setup: Configurar uma conexão ao repetidor signatures_not_enabled: Os repetidores não funcionarão corretamente enquanto o modo seguro ou o modo de lista branca estiverem ativados status: Estado title: Retransmissores @@ -596,15 +597,15 @@ pt-PT: action_log: Registo de auditoria action_taken_by: Ação tomada por actions: - delete_description_html: As publicações denunciadas serão eliminadas, e será registada uma reprimenda para ajudá-lo a tomar medidas em futuras infrações pela mesma conta. - mark_as_sensitive_description_html: A media nas publicações denunciadas será marcada como problemática, e uma reprimenda será registada para ajudá-lo a tomar medidas em futuras infrações pela mesma conta. - other_description_html: Ver mais opções para controlar o comportamento da conta e personalizar a comunicação para a conta denunciada. - resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, não será registada nenhuma reprimenda, e a denúncia será fechada. - silence_description_html: O perfil será visível apenas para aqueles que já o seguem ou o procurem manualmente, limitando fortemente o seu alcance. Pode sempre ser revertido. Encerrar todas as denúncias contra esta conta. + delete_description_html: As publicações denunciadas serão eliminadas e será registada uma reprimenda para ajudar-te a tomar medidas em futuras infrações pela mesma conta. + mark_as_sensitive_description_html: A multimédia nas publicações denunciadas será marcada como sensível e será registada uma reprimenda para ajudar-te a tomar medidas em futuras infrações pela mesma conta. + other_description_html: Veja mais opções para controlar o comportamento da conta e personalizar a comunicação para a conta denunciada. + resolve_description_html: Nenhuma ação será tomada contra a conta denunciada, não será registada nenhuma reprimenda e a denúncia será fechada. + silence_description_html: O perfil será visível apenas para aqueles que já o seguem ou o procurem manualmente, limitando fortemente o seu alcance. Pode sempre ser revertido. Encerra todas as denúncias contra esta conta. suspend_description_html: A conta e todo o seu conteúdo ficará inacessível e, eventualmente apagado, pelo que interagir com ela será impossível. Reversível durante 30 dias. Encerra todas as denúncias contra esta conta. actions_description_html: Decida a ação a tomar para resolver esta denúncia. Se decidir por uma ação punitiva contra a conta denunciada, um e-mail de notificação será enviado, excetuando quando selecionada a categoria Spam. actions_description_remote_html: Decida quais as medidas a tomar para resolver esta denúncia. Isso apenas afetará como o seu servido comunica com esta conta remota e gere o seu conteúdo. - actions_no_posts: Este relatório não tem nenhuma publicação associada para eliminar + actions_no_posts: Esta denúncia não tem nenhuma publicação associada para ser eliminada add_to_report: Adicionar mais à denúncia already_suspended_badges: local: Já suspenso neste servidor @@ -614,7 +615,7 @@ pt-PT: assigned: Atribuída ao moderador by_target_domain: Domínio da conta denunciada cancel: Cancelar - category: Categorização + category: Categoria category_description_html: A razão pela qual esta conta e/ou conteúdo foi denunciado será citada na comunicação com a conta denunciada comment: none: Nenhum @@ -627,8 +628,8 @@ pt-PT: forwarded_replies_explanation: Esta denúncia é de um utilizador remoto e sobre conteúdo remoto. Foi encaminhada para si porque o conteúdo denunciado é em resposta a um dos seus utilizadores. forwarded_to: Encaminhado para %{domain} mark_as_resolved: Marcar como resolvido - mark_as_sensitive: Marcar como problemático - mark_as_unresolved: Marcar como por resolver + mark_as_sensitive: Marcar como sensível + mark_as_unresolved: Marcar como não resolvido no_one_assigned: Ninguém notes: create: Adicionar nota @@ -637,15 +638,15 @@ pt-PT: delete: Eliminar placeholder: Descreve as ações que foram tomadas ou quaisquer outras atualizações relacionadas... title: Notas - notes_description_html: Visualize e deixe anotações para outros moderadores e para si próprio no futuro - processed_msg: 'Relatório #%{id} processado com sucesso' - quick_actions_description_html: 'Tome uma ação rápida ou deslize para baixo para ver o conteúdo denunciado:' + notes_description_html: Visualiza e deixa anotações para outros moderadores e para ti próprio no futuro + processed_msg: 'Denúncia #%{id} processada com sucesso' + quick_actions_description_html: 'Toma uma ação rápida ou desliza para baixo para ver o conteúdo denunciado:' remote_user_placeholder: o utilizador remoto de %{instance} reopen: Reabrir denúncia report: 'Denúncia #%{id}' reported_account: Conta denunciada reported_by: Denunciado por - reported_with_application: Reportado com a aplicação + reported_with_application: Denunciado com a aplicação resolved: Resolvido resolved_msg: Denúncia resolvida com sucesso! skip_to_actions: Passar para as ações @@ -654,22 +655,22 @@ pt-PT: statuses_description_html: O conteúdo ofensivo será citado na comunicação com a conta denunciada summary: action_preambles: - delete_html: 'Está prestes a remover algumas das publicações de @%{acct}. Isto irá:' - mark_as_sensitive_html: 'Está prestes a marcar algumas das publicações de @%{acct}como sensível. Isto irá:' - silence_html: 'Está prestes a limitar a conta de @%{acct}. Isto irá:' - suspend_html: 'Está prestes a suspender a conta de @%{acct}. Isto irá:' + delete_html: 'Estás prestes a remover algumas das publicações de @%{acct}. Isto irá:' + mark_as_sensitive_html: 'Estás prestes a marcar algumas das publicações de @%{acct}como sensíveis. Isto irá:' + silence_html: 'Estás prestes a limitar a conta de @%{acct}. Isto irá:' + suspend_html: 'Estás prestes a suspender a conta de @%{acct}. Isto irá:' actions: - delete_html: Excluir as publicações ofensivas - mark_as_sensitive_html: Marcar a mídia dos posts ofensivos como sensível - silence_html: Limitar firmemente o alcance de @%{acct}, tornando seus perfis e conteúdos apenas visíveis para pessoas que já os estão seguindo ou olhando manualmente no perfil - suspend_html: Suspender @%{acct}, tornando seu perfil e conteúdo inacessíveis e impossível de interagir - close_report: 'Marcar relatório #%{id} como resolvido' + delete_html: Eliminar as publicações ofensivas + mark_as_sensitive_html: Marcar a multimédia das publicações ofensivas como sensível + silence_html: Limita fortemente o alcance de @%{acct}, tornando o seu perfil e conteúdo apenas visíveis para pessoas que já o está a seguir ou a procurar manualmente o perfil + suspend_html: Suspender @%{acct}, tornando o seu perfil e conteúdo inacessíveis e impossível de interagir + close_report: 'Marcar denúncia #%{id} como resolvida' close_reports_html: Marcar todas as denúncias contra @%{acct} como resolvidas - delete_data_html: Eliminar o perfil de @%{acct} e conteúdos daqui a 30 dias, a menos que entretanto sejam suspensos + delete_data_html: Eliminar o perfil de @%{acct} e conteúdos daqui a 30 dias, a não ser que entretanto seja suspenso preview_preamble_html: "@%{acct} receberá um aviso com o seguinte conteúdo:" - record_strike_html: Registar um ataque contra @%{acct} para ajudar a escalar futuras violações desta conta + record_strike_html: Registar uma reprimenda a @%{acct} para te ajudar a agravar futuras violações desta conta send_email_html: Enviar um e-mail de aviso a @%{acct} - warning_placeholder: Argumentos adicionais opcionais para a acção de moderação. + warning_placeholder: Argumentos adicionais opcionais para a ação de moderação. target_origin: Origem da conta denunciada title: Denúncias unassign: Não atribuir @@ -689,7 +690,7 @@ pt-PT: moderation: Moderação special: Especiais delete: Eliminar - description_html: Com as funções de utilizador, pode personalizar quais as funções e áreas do Mastodon a que os seus utilizadores podem aceder. + description_html: Com as funções de utilizador, podes personalizar quais as funções e áreas do Mastodon a que os teus utilizadores podem aceder. edit: Editar função '%{name}' everyone: Permissões padrão everyone_full_description_html: Esta é a função base que afeta todos os utilizadores, mesmo aqueles sem uma função atribuída. Todas as outras funções herdam as permissões desta. @@ -700,23 +701,23 @@ pt-PT: administrator: Administrador administrator_description: Utilizadores com esta permissão irão contornar todas as permissões delete_user_data: Eliminar dados de utilizador - delete_user_data_description: Permite que os utilizadores eliminem os dados doutros utilizadores sem tempo de espera + delete_user_data_description: Permite que os utilizadores eliminem os dados de outros utilizadores sem tempo de espera invite_users: Convidar utilizadores invite_users_description: Permite aos utilizadores convidar pessoas novas para o servidor - manage_announcements: Gerir comunicados - manage_announcements_description: Permite aos utilizadores gerirem os comunicados no servidor - manage_appeals: Gerir apelos - manage_appeals_description: Permite aos utilizadores rever recursos de moderação + manage_announcements: Gerir mensagens de manutenção + manage_announcements_description: Permite aos utilizadores gerirem as mensagem de manutenção no servidor + manage_appeals: Gerir contestações + manage_appeals_description: Permite aos utilizadores analisarem contestações contra ações de moderação manage_blocks: Gerir bloqueios - manage_blocks_description: Permite aos utilizadores bloquear fornecedores de e-mail e endereços IP + manage_blocks_description: Permite aos utilizadores bloquearem fornecedores de e-mail e endereços IP manage_custom_emojis: Gerir emojis personalizados manage_custom_emojis_description: Permite aos utilizadores gerirem os emojis personalizados do servidor manage_federation: Gerir federação - manage_federation_description: Permite aos utilizadores bloquear ou permitir federação com outros domínios e controlar a entregabilidade + manage_federation_description: Permite aos utilizadores bloquearem ou permitirem a federação com outros domínios e controlar a entregabilidade manage_invites: Gerir convites - manage_invites_description: Permite aos utilizadores pesquisarem e desativarem ligações de convite + manage_invites_description: Permite aos utilizadores pesquisarem e desativarem hiperligações de convite manage_reports: Gerir denúncias - manage_reports_description: Permite aos utilizadores rever denúncias e executar ações de moderação contra eles + manage_reports_description: Permite aos utilizadores reverem denúncias e executarem ações de moderação contra eles manage_roles: Gerir funções manage_roles_description: Permite aos utilizadores a gestão e atribuição de funções abaixo dos seus manage_rules: Gerir regras @@ -726,7 +727,7 @@ pt-PT: manage_taxonomies: Gerir taxonomias manage_taxonomies_description: Permite aos utilizadores rever o conteúdo em tendência e atualizar as configurações de hashtag manage_user_access: Gerir acesso de utilizador - manage_user_access_description: Permite aos utilizadores desativar a autenticação de dois factores de outros utilizadores, alterar o seu e-mail e reiniciar a sua palavra-passe + manage_user_access_description: Permite aos utilizadores desativarem a autenticação de dois fatores de outros utilizadores, alterarem os seus endereços de correio eletrónico e redefinirem as suas palavras-passe manage_users: Gerir utilizadores manage_users_description: Permite aos utilizadores ver os detalhes de outros utilizadores e executar ações de moderação contra eles manage_webhooks: Gerir webhooks @@ -743,33 +744,33 @@ pt-PT: delete: Eliminar description_html: Embora a maioria afirme ter lido e concordado com os termos de serviço, geralmente as pessoas só os leem depois de lhes surgir um problema. Torne fácil a leitura rápida das regras do seu servidor, apresentando-as numa lista de tópicos. Tente que cada regra seja sucinta e simples, mas tente também não dividi-las num número excessivo de tópicos separados. edit: Editar regra - empty: Nenhuma regra de instância foi ainda definida. - title: Regras da instância + empty: Ainda não foi definida nenhuma regra do servidor. + title: Regras do servidor settings: about: manage_rules: Gerir regras do servidor preamble: Forneça informações aprofundadas sobre como o servidor é operado, moderado, financiado. - rules_hint: Existe uma área dedicada às regras a que os seus utilizadores devem aderir. - title: Acerca de + rules_hint: Existe uma área dedicada às regras a que os teus utilizadores devem aderir. + title: Sobre appearance: - preamble: Personalize a interface web do Mastodon. - title: Aspeto + preamble: Personaliza a interface web do Mastodon. + title: Aparência branding: - preamble: A marca do seu servidor diferencia-a de outros servidores na rede. Essa informação pode ser mostrada em vários ambientes, como a interface web do Mastodon, aplicações nativas, visualizações de hiperligações em outros sites e dentro de aplicações de mensagens, etc. Por esta razão, é melhor manter esta informação clara, curta e concisa. + preamble: A marca do teu servidor diferencia-a de outros servidores na rede. Essa informação pode ser mostrada em vários ambientes, como a interface web do Mastodon, aplicações nativas, visualizações de hiperligações em outros sites e dentro de aplicações de mensagens, etc. Por esta razão, é melhor manter esta informação clara, curta e concisa. title: Marca captcha_enabled: - desc_html: Isto depende de scripts externos da hCaptcha, o que pode ser uma preocupação de segurança e privacidade. Além disso, isto pode tornar o processo de registo menos acessível para algumas pessoas (especialmente as com limitações físicas). Por isso, considere medidas alternativas tais como registo mediante aprovação ou sob convite. - title: Requerer que novos utilizadores resolvam um CAPTCHA para confirmar a sua conta + desc_html: Isto depende de scripts externos da hCaptcha, o que pode ser uma preocupação de segurança e privacidade. Além disso, isto pode tornar o processo de registo menos acessível para algumas pessoas (especialmente as com limitações físicas). Por isso, considera medidas alternativas tais como registo mediante aprovação ou sob convite. + title: Requerer que novos utilizadores resolvam um CAPTCHA para confirmar a conta content_retention: danger_zone: Zona de perigo - preamble: Controle a forma como o conteúdo gerado pelo utilizador é armazenado no Mastodon. + preamble: Controla a forma como o conteúdo gerado pelo utilizador é armazenado no Mastodon. title: Retenção de conteúdo default_noindex: - desc_html: Afeta todos os utilizadores que não alteraram esta configuração + desc_html: Afeta todos os utilizadores que não tenham alterado esta configuração title: Desativar, por omissão, a indexação de utilizadores por parte dos motores de pesquisa discovery: - follow_recommendations: Recomendações para seguir - preamble: Revelar conteúdos interessantes é fundamental para a entrada de novos utilizadores que podem não conhecer ninguém no Mastodon. Controle como os vários recursos de descoberta funcionam no seu servidor. + follow_recommendations: Recomendações de contas + preamble: Revelar conteúdos interessantes é fundamental para a entrada de novos utilizadores que podem não conhecer ninguém no Mastodon. Controla como os vários recursos de descoberta funcionam no teu servidor. profile_directory: Diretório de perfis public_timelines: Cronologias públicas publish_discovered_servers: Publicar servidores descobertos @@ -797,11 +798,11 @@ pt-PT: federation_authentication: Imposição de autenticação da federação title: Definições do servidor site_uploads: - delete: Eliminar arquivo carregado + delete: Eliminar ficheiro enviado destroyed_msg: Envio do site eliminado com sucesso! software_updates: critical_update: Crítico — por favor, atualize rapidamente - description: Recomenda-se que mantenha a sua instalação do Mastodon atualizada para beneficiar das últimas correções e funcionalidades. Além disso, é por vezes crítico atualizar o Mastodon de forma atempada para evitar problemas de segurança. Por estas razões, o Mastodon verifica se há actualizações a cada 30 minutos e notifica-o de acordo com as suas preferências de notificação por e-mail. + description: Recomenda-se que mantenha a sua instalação do Mastodon atualizada para beneficiar das últimas correções e funcionalidades. Além disso, é por vezes crítico atualizar o Mastodon de forma atempada para evitar problemas de segurança. Por estas razões, o Mastodon verifica as atualizações a cada 30 minutos e irá notificá-lo de acordo com as suas preferências de notificação por e-mail. documentation_link: Saber mais release_notes: Notas de lançamento title: Atualizações disponíveis @@ -814,43 +815,43 @@ pt-PT: statuses: account: Autor application: Aplicação - back_to_account: Voltar para página da conta + back_to_account: Voltar à página da conta back_to_report: Voltar à página da denúncia batch: remove_from_report: Remover da denúncia report: Denúncia deleted: Eliminado - favourites: Marcadores + favourites: Favoritos history: Histórico de versões - in_reply_to: A responder a + in_reply_to: Em resposta a language: Idioma media: - title: Media + title: Multimédia metadata: Metadados no_status_selected: Nenhum estado foi alterado porque nenhum foi selecionado open: Abrir publicação original_status: Publicação original - reblogs: Re-publicacões + reblogs: Impulsos status_changed: Publicação alterada - title: Estado das contas + title: Publicações da conta trending: Em tendência visibility: Visibilidade - with_media: Com media + with_media: Com multimédia strikes: actions: - delete_statuses: "%{name} eliminou a publicação de %{target}" + delete_statuses: "%{name} eliminou as publicações de %{target}" disable: "%{name} congelou a conta de %{target}" - mark_statuses_as_sensitive: "%{name} marcou as publicações de %{target} como problemáticas" + mark_statuses_as_sensitive: "%{name} marcou as publicações de %{target} como sensíveis" none: "%{name} enviou uma advertência a %{target}" - sensitive: "%{name} marcou a conta de %{target} como problemática" + sensitive: "%{name} marcou a conta de %{target} como sensível" silence: "%{name} limitou a conta de %{target}" suspend: "%{name} suspendeu a conta de %{target}" - appeal_approved: Recorrido - appeal_pending: Recurso pendente - appeal_rejected: Recurso rejeitado + appeal_approved: Contestado + appeal_pending: Contestação pendente + appeal_rejected: Contestação rejeitada system_checks: database_schema_check: - message_html: Há migrações de base de dados pendentes. Queira executá-las, para garantir que a aplicação se comporta como o esperado + message_html: Existem migrações de bases de dados pendentes. Execute-as para garantir que a aplicação se comporta como esperado elasticsearch_health_red: message_html: O cluster elasticsearch não está de boa saúde (estado vermelho), as funcionalidades de pesquisa não estão disponíveis elasticsearch_health_yellow: @@ -871,10 +872,13 @@ pt-PT: message_html: 'Versão de Elasticsearch incompatível: %{value}' version_comparison: A versão de Elasticsearch %{running_version} está em execução. No entanto, é obrigatória a versão %{required_version} rules_check: - action: Gerir regras da instância - message_html: Não definiu nenhuma regra para a instância. + action: Gerir regras do servidor + message_html: Não definiu nenhuma regra para o servidor. sidekiq_process_check: message_html: Nenhum processo Sidekiq em execução para a(s) fila(s) %{value}. Reveja a configuração do seu Sidekiq + software_version_check: + action: Ver atualizações disponíveis + message_html: Está disponível uma atualização do Mastodon. software_version_critical_check: action: Ver atualizações disponíveis message_html: Está disponível uma atualização crítica do Mastodon. Por favor, atualize assim que possível. @@ -891,7 +895,7 @@ pt-PT: moderation: not_trendable: Não pode ser tendência not_usable: Não utilizável - pending_review: Pendente de revisão + pending_review: Revisão pendente review_requested: Revisão solicitada reviewed: Revista title: Estado @@ -901,11 +905,11 @@ pt-PT: name: Nome newest: Mais recente oldest: Mais antiga - open: Visualizar Publicamente + open: Ver publicamente reset: Repor review: Estado da revisão search: Pesquisar - title: Hashtags + title: Etiquetas updated_msg: 'Definições de #etiquetas atualizadas com sucesso' title: Administração trends: @@ -921,10 +925,10 @@ pt-PT: confirm_allow_provider: Tem a certeza que pretende permitir os fornecedores selecionados? confirm_disallow: Tem a certeza que pretende rejeitar as hiperligações selecionadas? confirm_disallow_provider: Tem a certeza que pretende rejeitar os fornecedores selecionados? - description_html: Estas são as ligações que presentemente estão a ser muito partilhadas por contas visíveis pelo seu servidor. Estas podem ajudar os seus utilizador a descobrir o que está a acontecer no mundo. Nenhuma ligação é exibida publicamente até que o editor a aprove. Também pode permitir ou rejeitar ligações em avulso. - disallow: Não permitir ligação + description_html: Estas são as hiperligações que presentemente estão a ser muito partilhadas por contas visíveis pelo seu servidor. Estas podem ajudar os seus utilizador a descobrir o que está a acontecer no mundo. Nenhuma hiperligação é mostrada publicamente até que o editor a aprove. Também pode permitir ou rejeitar hiperligações individuais. + disallow: Não permitir hiperligação disallow_provider: Não permitir editor - no_link_selected: Nenhuma ligação foi alterada, pois nenhuma foi selecionada + no_link_selected: Nenhuma hiperligação foi alterada, pois nenhuma foi selecionada publishers: no_publisher_selected: Nenhum editor foi alterado, pois nenhum foi selecionado shared_by_over_week: @@ -937,7 +941,7 @@ pt-PT: pending_review: Pendente de revisão preview_card_providers: allowed: As hiperligações deste editor podem ser tendência - description_html: Estes são os domínios a partir dos quais ligações são frequentemente partilhadas no seu servidor. As suas ligações não serão colocadas em alta a menos que o seu domínio de origem seja aprovado. A sua aprovação (ou rejeição) estende-se a subdomínios. + description_html: Estes são os domínios a partir dos quais hiperligações são frequentemente partilhadas no seu servidor. As suas hiperligações não serão colocadas em alta a menos que o seu domínio de origem seja aprovado. A sua aprovação (ou rejeição) estende-se a subdomínios. rejected: As hiperligações deste editor não podem ser tendência title: Editores rejected: Rejeitado @@ -948,14 +952,14 @@ pt-PT: confirm_allow_account: Tem a certeza que pretende aceitar as contas selecionadas? confirm_disallow: Tem a certeza que pretende rejeitar os estados selecionados? confirm_disallow_account: Tem a certeza que pretende rejeitar as contas selecionadas? - description_html: Estas são publicações que o seu servidor conhece e que atualmente estão a ser frequentemente partilhadas e adicionadas aos favoritos. Isto pode ajudar os seus utilizadores, novos e retornados, a encontrar mais pessoas para seguir. Nenhuma publicação será exibida publicamente até que aprove o autor, e o autor permita que a sua conta seja sugerida a outros. Você também pode permitir ou rejeitar publicações individualmente. + description_html: Estas são publicações que o seu servidor conhece e que estão a ser muito partilhadas e adicionadas aos favoritos neste momento. Pode ajudar os seus utilizadores novos e antigos a encontrar mais pessoas para seguir. Nenhuma publicação é apresentada publicamente até que o autor seja aprovado e o autor permita que a sua conta seja sugerida a outros. Também pode permitir ou rejeitar mensagens individuais. disallow: Não permitir publicação disallow_account: Não permitir autor no_status_selected: Não foram alteradas quaisquer publicações de tendências, uma vez que nenhuma foi selecionada not_discoverable: O autor optou por não permitir que a sua conta seja sugerida a outros shared_by: - one: Partilhado ou adicionado aos marcadores uma vez - other: Partilhado e adicionado aos marcadores %{friendly_count} vezes + one: Partilhada ou adicionada aos favoritos uma vez + other: Partilhada ou adicionada aos favoritos %{friendly_count} vezes title: Publicações em tendência tags: current_score: Pontuação atual %{score} @@ -965,13 +969,13 @@ pt-PT: tag_servers_dimension: Servidores mais populares tag_servers_measure: servidores diferentes tag_uses_measure: utilizações totais - description_html: 'Estas são as #etiquetas que aparecem atualmente com frequência em publicações visíveis pelo seu servidor. Isto pode ajudar os seus utilizadores a descobrir o que está ser mais falado no momento. Nenhuma #etiqueta será exibida publicamente até que a aprove.' + description_html: 'Estas são as #etiquetas que aparecem atualmente com frequência em publicações visíveis pelo seu servidor. Isto pode ajudar os seus utilizadores a descobrirem o que está ser mais falado no momento. Nenhuma #etiqueta será mostrada publicamente até que a aprove.' listable: Pode ser sugerida no_tag_selected: Nenhuma etiqueta foi alterada, pois nenhuma foi selecionada not_listable: Não será sugerida not_trendable: Não aparecerá nas tendências not_usable: Não pode ser utilizada - peaked_on_and_decaying: Máximo em %{date}, agora a decair + peaked_on_and_decaying: No auge em %{date}, agora em declínio title: Etiquetas em tendência trendable: Pode aparecer nas tendências trending_rank: 'Tendência #%{rank}' @@ -1010,20 +1014,20 @@ pt-PT: webhook: Webhook admin_mailer: auto_close_registrations: - body: Devido à falta de atividade recente dos moderadores, as inscrições em %{instance} foram automaticamente alteradas para requererem revisão manual, para evitar que %{instance} seja utilizada como plataforma para potenciais maus atores. Pode voltar a alterar para inscrições abertas em qualquer altura. - subject: As incrições em %{instance} foram automaticamente alteradas para requererem aprovação + body: Devido à falta de atividade recente dos moderadores, as inscrições em %{instance} foram automaticamente alteradas para requererem revisão manual, para evitar que %{instance} seja utilizada como plataforma para potenciais más intenções. Pode voltar a alterar para inscrições abertas em qualquer altura. + subject: As inscrições em %{instance} foram automaticamente alteradas para requererem aprovação new_appeal: actions: - delete_statuses: para eliminar as suas publicações - disable: para congelar a sua conta - mark_statuses_as_sensitive: para marcar as suas publicações como problemáticas + delete_statuses: para eliminar as publicações dele + disable: para congelar a conta dele + mark_statuses_as_sensitive: marcar as publicações dele como sensíveis none: uma advertência - sensitive: para marcar a sua conta como problemática - silence: para limitar a sua conta - suspend: para suspender a sua conta - body: "%{target} está a recorrer de uma decisão de moderação de %{action_taken_by} a %{date}, que consistiu em %{type}. Escreveu:" - next_steps: Pode aprovar o recurso para reverter a decisão de moderação, ou ignorá-lo. - subject: "%{username} está a recorrer da decisão de moderação em %{instance}" + sensitive: para marcar a conta dele como sensível + silence: para limitar a conta dele + suspend: para suspender a conta dele + body: "%{target} está a contestar uma decisão de moderação de %{action_taken_by} a %{date}, que consistiu em %{type}. Ele escreveu:" + next_steps: Podes aprovar a contestação para reverter a decisão de moderação ou ignorá-la. + subject: "%{username} está a contestar a decisão de moderação em %{instance}" new_critical_software_updates: body: Foram lançadas novas versões críticas do Mastodon. Pode querer atualizar assim que possível! subject: Estão disponíveis atualizações críticas do Mastodon para %{instance}! @@ -1045,17 +1049,17 @@ pt-PT: title: Publicações em tendência new_trending_tags: title: Etiquetas em tendência - subject: Novas tendências para revisão em %{instance} + subject: Novas tendências para serem revistas em %{instance} aliases: add_new: Criar pseudónimo - created_msg: Criou com sucesso um novo pseudónimo. Pode agora iniciar a migração da conta antiga. + created_msg: Criaste com sucesso um novo pseudónimo. Podes agora iniciar a migração da conta antiga. deleted_msg: O pseudónimo foi removido com êxito. Deixará de ser possível passar dessa conta para esta. - empty: Não tem pseudónimos. - hint_html: Se quiser mudar de outra conta para esta, pode criar aqui um pseudónimo, que é necessário antes de poder prosseguir com a migração de seguidores da conta antiga para esta. Esta ação por si só é inofensiva e reversível. A migração da conta é iniciada a partir da conta antiga. + empty: Não tens pseudónimos. + hint_html: Se quiseres mudar de outra conta para esta, podes criar aqui um pseudónimo, que é necessário antes de poderes prosseguir com a migração de seguidores da conta antiga para esta. Esta ação por si só é inofensiva e reversível. A migração da conta é iniciada a partir da conta antiga. remove: Desvincular pseudónimo appearance: advanced_web_interface: Interface web avançada - advanced_web_interface_hint: 'Se quiser utilizar toda a largura do seu ecrã, a interface web avançada permite-lhe configurar várias colunas diferentes para ver tanta informação ao mesmo tempo quanto quiser: Página inicial, notificações, cronologia federada, qualquer número de listas e etiquetas.' + advanced_web_interface_hint: 'Se quiseres utilizar toda a largura do teu ecrã, a interface web avançada permite configurar várias colunas diferentes para veres tanta informação ao mesmo tempo quanto quiseres: página inicial, notificações, cronologia federada, qualquer número de listas e etiquetas.' animations_and_accessibility: Animações e acessibilidade confirmation_dialogs: Caixas de confirmação discovery: Descobrir @@ -1063,7 +1067,7 @@ pt-PT: body: O Mastodon é traduzido por voluntários. guide_link: https://pt.crowdin.com/project/mastodon/ guide_link_text: Todos podem contribuir. - sensitive_content: Conteúdo problemático + sensitive_content: Conteúdo sensível application_mailer: notification_preferences: Alterar preferências de e-mail salutation: "%{name}," @@ -1078,46 +1082,46 @@ pt-PT: logout: Sair regenerate_token: Regenerar token de acesso token_regenerated: Token de acesso regenerado com sucesso - warning: Cuidado com estes dados. Não partilhar com ninguém! + warning: Cuidado com estes dados. Não partilhes com ninguém! your_token: O teu token de acesso auth: apply_for_account: Solicitar uma conta captcha_confirmation: - help_html: Se tiver problemas a resolver o CAPTCHA, pode entrar em contacto connosco através de %{email} e poderemos ajudá-lo. - hint_html: Só mais uma coisa! Precisamos confirmar que você é um humano (isto para que possamos evitar spam!). Resolva o CAPTCHA abaixo e clique em "Continuar". + help_html: Se tiveres problemas a resolver o CAPTCHA, podes entrar em contacto connosco através de %{email} e poderemos ajudar-te. + hint_html: Só mais uma coisa! Precisamos confirmar que és um humano (isto para que possamos evitar spam!). Resolve o CAPTCHA abaixo e clica em "Continuar". title: Verificação de segurança confirmations: - awaiting_review: O seu endereço de e-mail está confirmado! A equipa de %{domain} está agora a analisar a sua inscrição. Receberá um e-mail se a sua conta for aprovada! - awaiting_review_title: A sua inscrição está a ser revista + awaiting_review: O teu endereço de e-mail está confirmado! A equipa de %{domain} está agora a analisar a tua inscrição. Receberás um e-mail se a tua conta for aprovada! + awaiting_review_title: A tua inscrição está a ser revista clicking_this_link: clicar nesta hiperligação login_link: iniciar sessão - proceed_to_login_html: Pode agora prosseguir para %{login_link}. - redirect_to_app_html: Devia ter sido reencaminhado para a aplicação %{app_name}. Se isso não aconteceu, tente %{clicking_this_link} ou volte manualmente para a aplicação. - registration_complete: O seu registo sem %{domain} está agora concluído! + proceed_to_login_html: Podes agora prosseguir para %{login_link}. + redirect_to_app_html: Devias ter sido reencaminhado para a aplicação %{app_name}. Se isso não aconteceu, tenta %{clicking_this_link} ou regressa manualmente para a aplicação. + registration_complete: O teu registo sem %{domain} está agora concluído! welcome_title: Bem-vindo(a), %{name}! - wrong_email_hint: Se este endereço de correio eletrónico não estiver correto, pode alterá-lo nas definições de conta. + wrong_email_hint: Se este endereço de correio eletrónico não estiver correto, podes alterá-lo nas definições de conta. delete_account: Eliminar conta - delete_account_html: Se deseja eliminar a sua conta, pode continuar aqui. Uma confirmação será solicitada. + delete_account_html: Se pretenderes eliminar a tua conta, podes fazê-lo aqui. Será pedida uma confirmação. description: prefix_invited_by_user: "@%{name} convidou-o a juntar-se a esta instância do Mastodon!" prefix_sign_up: Inscreva-se hoje no Mastodon! suffix: Com uma conta, poderá seguir pessoas, publicar atualizações e trocar mensagens com utilizadores de qualquer instância Mastodon e muito mais! - didnt_get_confirmation: Não recebeu um link de confirmação? + didnt_get_confirmation: Não recebeu uma hiperligação de confirmação? dont_have_your_security_key: Não tem a sua chave de segurança? forgot_password: Esqueceu-se da palavra-passe? invalid_reset_password_token: Token de modificação da palavra-passe é inválido ou expirou. Por favor, solicita um novo. - link_to_otp: Insira um código de autenticação em duas etapas do seu telemóvel, ou um código de recuperação - link_to_webauth: Usa o teu dispositivo de chave de segurança + link_to_otp: Introduza um código de dois fatores do seu telemóvel ou um código de recuperação + link_to_webauth: Utilize o seu dispositivo de chave de segurança log_in_with: Iniciar sessão com login: Entrar logout: Sair migrate_account: Mudar para uma conta diferente - migrate_account_html: Se deseja redirecionar esta conta para uma outra pode configurar isso aqui. + migrate_account_html: Se desejas redirecionar esta conta para uma outra podes configurar isso aqui. or_log_in_with: Ou iniciar sessão com privacy_policy_agreement_html: Eu li e concordo com a política de privacidade progress: confirm: Confirmar e-mail - details: Os seus dados + details: Os teus dados review: A nossa avaliação rules: Aceitar regras providers: @@ -1125,11 +1129,11 @@ pt-PT: saml: SAML register: Registar registration_closed: "%{instance} não está a aceitar novos membros" - resend_confirmation: Reenviar link de confirmação + resend_confirmation: Reenviar hiperligação de confirmação reset_password: Criar nova palavra-passe rules: accept: Aceitar - back: Retroceder + back: Voltar invited_by: 'Pode inscrever-se em %{domain} graças ao convite que recebeu de:' preamble: Estas são definidas e aplicadas pelos moderadores de %{domain}. preamble_invited: Antes de prosseguir, por favor, considere as regras base definidas pelos moderadores de %{domain}. @@ -1139,38 +1143,40 @@ pt-PT: set_new_password: Editar palavra-passe setup: email_below_hint_html: Verifique a sua pasta de spam ou solicite outra. Pode corrigir o seu endereço de e-mail se estiver errado. - email_settings_hint_html: Clique no link que enviamos para verificar %{email}. Esperaremos aqui. - link_not_received: Não recebeu um link? - new_confirmation_instructions_sent: Irá receber uma nova mensagem de e-mail com a ligação de confirmação dentro de alguns minutos! + email_settings_hint_html: Clica na hiperligação que enviamos para verificar %{email}. Esperaremos aqui. + link_not_received: Não recebeu uma hiperligação? + new_confirmation_instructions_sent: Irá receber uma nova mensagem de e-mail com a hiperligação de confirmação dentro de alguns minutos! title: Verifique a caixa de entrada do seu e-mail sign_in: preamble_html: Iniciar sessão com as suas credenciais de %{domain}. Se a sua conta estiver hospedada noutro servidor, não poderá iniciar sessão aqui. title: Iniciar sessão em %{domain} sign_up: - manual_review: Inscrições no %{domain} passam por uma revisão manual pelos nossos moderadores. Para nos ajudar a processar o seu pedido de inscrição, escreva um pouco sobre si e o porquê de quer uma conta no %{domain}. - preamble: Com uma conta neste servidor Mastodon, poderá seguir qualquer outra pessoa na rede, independentemente do servidor onde a conta esteja hospedada. - title: Vamos lá inscrevê-lo em %{domain}. + manual_review: As inscrições em %{domain} passam por uma revisão manual pelos nossos moderadores. Para nos ajudar a processar o teu pedido de inscrição, escreve um pouco sobre ti e o motivo para quereres uma conta em %{domain}. + preamble: Com uma conta neste servidor Mastodon, poderás seguir qualquer outra pessoa na rede, independentemente do servidor onde a conta esteja hospedada. + title: Vamos lá inscrever-te em %{domain}. status: account_status: Estado da conta confirming: A aguardar a confirmação do e-mail para ser concluída. - functional: A sua conta está totalmente operacional. - pending: A sua inscrição está a ser analisada pela nossa equipa. Este processo pode demorar algum tempo. Receberá um e-mail se a sua inscrição for aprovada. - redirecting_to: A sua conta está inativa porque está atualmente a ser redirecionada para %{acct}. - self_destruct: Como %{domain} vai fechar, só terá acesso limitado à sua conta. - view_strikes: Veja as reprimendas anteriores sobre a sua conta - too_fast: Formulário enviado demasiado rapidamente, tente novamente. + functional: A tua conta está totalmente operacional. + pending: A tua inscrição está a ser analisada pela nossa equipa. Este processo pode demorar algum tempo. Receberás um e-mail se a tua inscrição for aprovada. + redirecting_to: A tua conta está inativa porque está atualmente a ser redirecionada para %{acct}. + self_destruct: Como %{domain} vai fechar, só terás acesso limitado à tua conta. + view_strikes: Ver as reprimendas anteriores sobre a tua conta + too_fast: Formulário enviado demasiado rapidamente, tenta novamente. use_security_key: Usar chave de segurança author_attribution: example_title: Texto de exemplo - hint_html: Controle a forma como é creditado quando as hiperligações são partilhadas no Mastodon. + hint_html: Estás a escrever notícias ou artigos de blogue fora do Mastodon? Controla a forma como és creditados quando estes são partilhados no Mastodon. + instructions: 'Certifica-te que este código está no HTML do teu artigo:' more_from_html: Mais de %{name} - s_blog: Blog de %{name} - title: Atribuição de autor + s_blog: Blogue de %{name} + then_instructions: Em seguida, adiciona o nome de domínio da publicação no campo abaixo. + title: Atribuição do autor challenge: confirm: Continuar - hint_html: "Dica: Não vamos pedir novamente a sua palavra-passe durante a próxima hora." + hint_html: "Dica: Não vamos pedir novamente a tua palavra-passe durante a próxima hora." invalid_password: Palavra-passe inválida - prompt: Confirmar a sua palavra-passe para continuar + prompt: Confirma a palavra-passe para continuar crypto: errors: invalid_key: não é uma chave Ed25519 ou Curve25519 válida @@ -1185,102 +1191,102 @@ pt-PT: about_x_years: "%{count} anos" almost_x_years: "%{count} anos" half_a_minute: Agora mesmo - less_than_x_minutes: "%{count} meses" + less_than_x_minutes: "%{count}m" less_than_x_seconds: Agora mesmo over_x_years: "%{count} anos" x_days: "%{count} dias" - x_minutes: "%{count} minutos" + x_minutes: "%{count}m" x_months: "%{count} meses" - x_seconds: "%{count} segundos" + x_seconds: "%{count}s" deletes: - challenge_not_passed: A informação que inseriu não estava correcta - confirm_password: Insira sua palavra-passe atual para verificar a sua identidade - confirm_username: Insira seu nome de utilizador para confirmar o procedimento + challenge_not_passed: A informação que inseriste não estava correta + confirm_password: Introduz a palavra-passe atual para verificar a tua identidade + confirm_username: Introduz o teu nome de utilizador para confirmar o procedimento proceed: Eliminar conta - success_msg: A sua conta foi eliminada com sucesso + success_msg: A tua conta foi eliminada com sucesso warning: - before: 'Antes de continuar, por favor leia cuidadosamente estas notas:' + before: 'Antes de continuares, por favor lê cuidadosamente estas notas:' caches: O conteúdo que foi armazenado em cache por outras instâncias pode perdurar - data_removal: As suas publicações e outros dados serão eliminados permanentemente - email_change_html: Pode alterar o seu e-mail sem eliminar a sua conta - email_contact_html: Se ainda assim não o recebeu, pode enviar um e-mail para %{email} para obter ajuda - email_reconfirmation_html: Se não recebeu a mensagem de e-mail de confirmação, pode solicitá-la novamente - irreversible: Não será possível restaurar ou reativar sua conta - more_details_html: Para mais pormenores, leia a política de privacidade. - username_available: O seu nome de utilizador ficará novamente disponível - username_unavailable: O seu nome de utilizador permanecerá indisponível + data_removal: As tuas publicações e outros dados serão eliminados permanentemente + email_change_html: Podes alterar o teu e-mail sem eliminar a tua conta + email_contact_html: Se ainda assim não o recebeste, podes enviar um e-mail para %{email} para obter ajuda + email_reconfirmation_html: Se não recebeste a mensagem de e-mail de confirmação, podes solicitá-la novamente + irreversible: Não será possível restaurar ou reativar a tua conta + more_details_html: Para mais pormenores, lê a política de privacidade. + username_available: O teu nome de utilizador ficará novamente disponível + username_unavailable: O teu nome de utilizador permanecerá indisponível disputes: strikes: action_taken: Ação tomada - appeal: Recorrer - appeal_approved: Esta reprimenda foi alvo dum recurso entretanto deferido, pelo que já não é válida - appeal_rejected: O recurso foi rejeitado - appeal_submitted_at: Recurso submetido - appealed_msg: O seu recurso foi submetido. Se ele for aprovado, será notificado. + appeal: Contestar + appeal_approved: Esta reprimenda foi alvo de uma contestação aceite, pelo que já não é válida + appeal_rejected: A contestação foi rejeitada + appeal_submitted_at: Contestação submetida + appealed_msg: A tua contestação foi submetida. Se for aprovada, receberás uma notificação. appeals: - submit: Submeter recurso - approve_appeal: Deferir recurso + submit: Submeter contestação + approve_appeal: Aprovar contestação associated_report: Denúncia associada created_at: Data - description_html: Estas são ações tomadas contra a sua conta e avisos que lhe foram enviados pela equipa de %{instance}. + description_html: Estas são as ações tomadas contra a tua conta e avisos que te foram enviados pela equipa de %{instance}. recipient: Endereçado a - reject_appeal: Indeferir recurso + reject_appeal: Rejeitar contestação status: 'Publicação #%{id}' status_removed: Publicação já eliminada do sistema title: "%{action} de %{date}" title_actions: - delete_statuses: Remoção de publicação + delete_statuses: Eliminação da publicação disable: Congelamento da conta - mark_statuses_as_sensitive: Marcação das publicações como problemáticas + mark_statuses_as_sensitive: Marcação das publicações como sensíveis none: Advertência - sensitive: Marcação da conta como problemática + sensitive: Marcação da conta como sensível silence: Limitação da conta suspend: Suspensão da conta - your_appeal_approved: O seu recurso foi deferido - your_appeal_pending: Submeteu um recurso - your_appeal_rejected: O seu recurso foi indeferido + your_appeal_approved: A tua contestação foi aprovada + your_appeal_pending: Submeteste uma contestação + your_appeal_rejected: A tua contestação foi rejeitada edit_profile: basic_information: Informação básica - hint_html: "Personalize o que as pessoas veem no seu perfil público e junto das suas publicações. É mais provável que as outras pessoas o sigam de volta ou interajam consigo se tiver um perfil preenchido e uma imagem de perfil." + hint_html: "Personalizq o que as pessoas veem no teu perfil público e junto das tuas publicações. É mais provável que as outras pessoas te sigam de volta ou interajam contigo se tiveres um perfil preenchido e uma imagem de perfil." other: Outro errors: - '400': O pedido que submeteu foi inválido ou mal formulado. + '400': O pedido que submeteste foi inválido ou mal formulado. '403': Não tens a permissão necessária para ver esta página. - '404': A página que procura não existe. + '404': A página que procuras não existe. '406': Esta página não está disponível no formato solicitado. - '410': A página que procura já não existe. + '410': A página que procuras já não existe. '422': content: "A verificação de segurança falhou. \nDesativaste o uso de cookies?" title: A verificação de segurança falhou '429': Demasiados pedidos '500': - content: Desculpe, mas algo correu mal da nossa parte. + content: Pedimos desculpa, mas algo correu mal da nossa parte. title: Esta página não está correta '503': A página não pôde ser apresentada devido a uma falha temporária do servidor. - noscript_html: Para usar a aplicação web do Mastodon, ative o JavaScript. Alternativamente, experimente uma das aplicações nativas para o Mastodon na sua plataforma. + noscript_html: Para usar a aplicação web do Mastodon, ativa o JavaScript. Alternativamente, experimenta uma das aplicações nativas para o Mastodon na tua plataforma. existing_username_validator: not_found: não foi possível encontrar um utilizador local com esse nome not_found_multiple: não foi possível encontrar %{usernames} exports: archive_takeout: date: Data - download: Descarregar o seu arquivo - hint_html: Pode pedir um arquivo das suas publicações e ficheiros de media carregados. Os dados no ficheiro exportado estarão no formato ActivityPub, que pode ser lido com qualquer programa compatível. Pode solicitar um arquivo a cada 7 dias. - in_progress: A compilar o seu arquivo... - request: Peça o seu arquivo + download: Descarregar o teu arquivo + hint_html: Podes pedir um arquivo das tuas publicações e ficheiros multimédia enviados. Os dados no ficheiro exportado estarão no formato ActivityPub, que pode ser lido com qualquer programa compatível. Podes solicitar um arquivo a cada 7 dias. + in_progress: A compilar o teu arquivo... + request: Pedir o teu arquivo size: Tamanho blocks: Bloqueaste bookmarks: Marcadores csv: CSV domain_blocks: Bloqueios de domínio lists: Listas - mutes: Tens em silêncio - storage: Armazenamento de media + mutes: Que ocultaste + storage: Armazenamento de multimédia featured_tags: add_new: Adicionar nova errors: - limit: Já destacou o número máximo de hashtags permitido - hint_html: "O que são etiquetas em destaque? Exibidas de forma bem visível no seu perfil público, permitem que as pessoas consultem as suas publicações públicas especificamente sob essas etiquetas. São uma óptima ferramenta para dar seguimento a trabalhos criativos ou projectos de longo prazo." + limit: Já destacaste o número máximo de etiquetas permitido + hint_html: "Coloca as etiquetas mais importantes no teu perfil. Uma excelente ferramenta para acompanhar os teus trabalhos criativos e projetos a longo prazo, as etiquetas em destaque são apresentadas de forma proeminente no teu perfil e permitem um acesso rápido às tuas próprias publicações." filters: contexts: account: Perfis @@ -1292,15 +1298,15 @@ pt-PT: add_keyword: Adicionar palavra-chave keywords: Palavras-chave statuses: Publicações individuais - statuses_hint_html: Este filtro aplica-se a publicações individuais selecionadas independentemente de estas corresponderem às palavras-chave abaixo. Reveja ou remova publicações do filtro. + statuses_hint_html: Este filtro aplica-se a publicações individuais selecionadas independentemente de estas corresponderem às palavras-chave abaixo. Revê ou remove publicações do filtro. title: Editar filtros errors: - deprecated_api_multiple_keywords: Estes parâmetros não podem ser alterados a partir desta aplicação porque se aplicam a mais de um filtro de palavra-chave. Use uma aplicação mais recente ou a interface web. + deprecated_api_multiple_keywords: Estes parâmetros não podem ser alterados a partir desta aplicação porque se aplicam a mais de um filtro de palavra-chave. Usa uma aplicação mais recente ou a interface web. invalid_context: Inválido ou nenhum contexto fornecido index: contexts: Filtros em %{contexts} delete: Eliminar - empty: Não tem filtros. + empty: Não tens filtros. expires_in: Expira em %{distance} expires_on: Expira em %{date} keywords: @@ -1321,16 +1327,16 @@ pt-PT: batch: remove: Retirar do filtro index: - hint: Este filtro aplica-se a publicações individuais selecionadas independentemente de outros critérios. Pode adicionar mais publicações a este filtro através da interface web. + hint: Este filtro aplica-se a publicações individuais selecionadas independentemente de outros critérios. Podes adicionar mais publicações a este filtro através da interface web. title: Publicações filtradas generic: all: Tudo all_items_on_page_selected_html: one: "%{count} item nesta página está selecionado." - other: Todo os %{count} items nesta página estão selecionados. + other: Todo os %{count} itens nesta página estão selecionados. all_matching_items_selected_html: - one: "%{count} item que corresponde à sua pesquisa está selecionado." - other: Todos os %{count} items que correspondem à sua pesquisa estão selecionados. + one: "%{count} item que corresponde à pesquisa está selecionado." + other: Todos os %{count} itens que correspondem à pesquisa estão selecionados. cancel: Cancelar changes_saved_msg: Alterações guardadas! confirm: Confirmar @@ -1341,12 +1347,12 @@ pt-PT: order_by: Ordenar por save_changes: Guardar alterações select_all_matching_items: - one: Selecione %{count} item que corresponde à sua pesquisa. - other: Selecione todos os %{count} items que correspondem à sua pesquisa. + one: Selecionar %{count} item que corresponde à pesquisa. + other: Selecionar todos os %{count} itens que correspondem à pesquisa. today: hoje validation_errors: - one: Algo não está correcto. Por favor analise o erro abaixo - other: Algo não está bem. Queira analisar os %{count} erros abaixo + one: Algo ainda não está correto! Revê o erro abaixo + other: Algo ainda não está correto! Revê os %{count} erros abaixo imports: errors: empty: Ficheiro CSV vazio @@ -1356,26 +1362,26 @@ pt-PT: too_large: O ficheiro é demasiado grande failures: Falhas imported: Importado - mismatched_types_warning: Parece que selecionou o tipo errado para esta importação, por favor verifique novamente. + mismatched_types_warning: Parece que selecionaste o tipo errado para esta importação, por favor verifica novamente. modes: merge: Juntar merge_long: Manter os registos existentes e adicionar novos registos - overwrite: Escrever por cima + overwrite: Substituir overwrite_long: Substituir os registos atuais pelos novos overwrite_preambles: - blocking_html: Está prestes a substituir a sua lista de bloqueios com até %{total_items} contas de %{filename}. - bookmarks_html: Está prestes a substituir os seus marcadores com até %{total_items} publicações de %{filename}. - domain_blocking_html: Está prestes a substituir a sua lista de bloqueios de domínio com até %{total_items} domínios de %{filename}. - following_html: Está prestes a seguir até %{total_items} contas de %{filename} e parar de seguir quaisquer outras contas. - lists_html: Está prestes a substituir as suas listas pelo conteúdo de %{filename}. Até %{total_items} contas serão adicionadas a novas listas. - muting_html: Está prestes a substituir a sua lista de contas silenciadas com até %{total_items} contas de %{filename}. + blocking_html: Estás prestes a substituir a tua lista de bloqueios com até %{total_items} contas de %{filename}. + bookmarks_html: Estás prestes a substituir os teus marcadores com até %{total_items} publicações de %{filename}. + domain_blocking_html: Estás prestes a substituir a tua lista de bloqueios de domínio com até %{total_items} domínios de %{filename}. + following_html: Estás prestes a seguir até %{total_items} contas de %{filename} e parar de seguir quaisquer outras contas. + lists_html: Estás prestes a substituir as tuas listas pelo conteúdo de %{filename}. Até %{total_items} contas serão adicionadas a novas listas. + muting_html: Estás prestes a substituir a tua lista de contas ocultadas com até %{total_items} contas de %{filename}. preambles: - blocking_html: Está prestes a bloquear até %{total_items} contas de %{filename}. - bookmarks_html: Está prestes a adicionar até %{total_items} publicações de %{filename} aos seus marcadores. - domain_blocking_html: Está prestes a bloquear até %{total_items} domínios de %{filename}. - following_html: Está prestes a seguir até %{total_items} contas de %{filename}. - lists_html: Está prestes a adicionar até %{total_items} contas do ficheiro %{filename} para as suas listas. Novas listas serão criadas se não existir uma lista onde as adicionar. - muting_html: Está prestes a silenciar até %{total_items} contas de %{filename}. + blocking_html: Estás prestes a bloquear até %{total_items} contas de %{filename}. + bookmarks_html: Estás prestes a adicionar até %{total_items} publicações de %{filename} aos teus marcadores. + domain_blocking_html: Estás prestes a bloquear até %{total_items} domínios de %{filename}. + following_html: Estás prestes a seguir até %{total_items} contas de %{filename}. + lists_html: Estás prestes a adicionar até %{total_items} contas do ficheiro %{filename} para as tuas listas. Novas listas serão criadas se não existir uma lista onde as adicionar. + muting_html: Estás prestes a ocultar até %{total_items} contas de %{filename}. preface: Podes importar dados que tenhas exportado de outra instância, como a lista de pessoas que segues ou bloqueadas. recent_imports: Importações recentes states: @@ -1384,27 +1390,27 @@ pt-PT: scheduled: Agendado unconfirmed: Não confirmado status: Estado - success: Os teus dados foram enviados correctamente e serão processados em breve + success: Os teus dados foram enviados corretamente e serão processados em breve time_started: Iniciado em titles: - blocking: Importando contas bloqueadas - bookmarks: Importando marcadores - domain_blocking: Importando domínios bloqueados - following: Importando contas seguidas - lists: A importar listas - muting: Importando contas silenciadas + blocking: Importar contas bloqueadas + bookmarks: Importar marcadores + domain_blocking: Importar domínios bloqueados + following: Importar contas seguidas + lists: Importar listas + muting: Importar contas ocultadas type: Tipo de importação type_groups: constructive: Seguidores e marcadores - destructive: Bloqueios e silenciamentos + destructive: Bloqueios e ocultados types: - blocking: Lista de bloqueio + blocking: Lista de bloqueios bookmarks: Marcadores domain_blocking: Lista de domínios bloqueados following: Lista de pessoas que estás a seguir lists: Listas muting: Lista de utilizadores silenciados - upload: Carregar + upload: Enviar invites: delete: Desativar expired: Expirados @@ -1418,77 +1424,88 @@ pt-PT: expires_in_prompt: Nunca generate: Gerar hiperligação de convite invalid: Este convite não é válido - invited_by: 'Foi convidado por:' + invited_by: 'Foste convidado por:' max_uses: - one: 1 uso - other: "%{count} usos" + one: 1 utilização + other: "%{count} utilizações" max_uses_prompt: Sem limite - prompt: Gerar e partilhar ligações com outras pessoas para permitir acesso a essa instância + prompt: Gerar e partilhar hiperligações com outras pessoas para permitir acesso a essa instância table: expires_at: Expira - uses: Usos + uses: Utilizações title: Convidar pessoas lists: errors: - limit: Atingiu o número máximo de listas permitido + limit: Atingiste o número máximo de listas permitido login_activities: authentication_methods: - otp: aplicação de autenticação em duas etapas + otp: aplicação de autenticação de dois fatores password: palavra-passe sign_in_token: código de segurança de e-mail webauthn: chaves de segurança - description_html: Se vê atividade que não reconhece, considere alterar a sua palavra-passe e ativar a autenticação em duas etapas. + description_html: Se vires atividade que não reconheces, considera alterar a tua palavra-passe e ativar a autenticação de dois fatores. empty: Sem histórico de autenticação disponível failed_sign_in_html: Tentativa falhada de início de sessão com %{method} de %{ip} (%{browser}) - successful_sign_in_html: Sessão correctamente iniciada com %{method} de %{ip} (%{browser}) + successful_sign_in_html: Sessão corretamente iniciada com %{method} de %{ip} (%{browser}) title: Histórico de autenticação mail_subscriptions: unsubscribe: action: Sim, cancelar subscrição - complete: Subscrição Cancelada + complete: Subscrição cancelada + confirmation_html: Tens a certeza que desejas cancelar a subscrição para receber %{type} pelo Mastodon em %{domain} no teu e-mail em %{email}? Podes sempre subscrever novamente nas tuas definições de notificação por e-mail. + emails: + notification_emails: + favourite: e-mails de notificação de favoritos + follow: e-mails de notificação de seguidor + follow_request: e-mails de pedido de seguidor + mention: e-mails de notificação de menção + reblog: e-mails de notificação de impulsos + resubscribe_html: Se tiveres anulado a subscrição por engano, podes voltar a subscrevê-la nas definições de notificação por e-mail. + success_html: Não receberás novamente %{type} do Mastodon em %{domain} para o teu e-mail em %{email}. title: Cancelar subscrição media_attachments: validations: images_and_video: Não é possível anexar um vídeo a uma publicação que já contém imagens - not_ready: Não é possível anexar ficheiros que ainda não acabaram de ser processados. Tente outra vez daqui a pouco! + not_found: Multimédia %{ids} não encontrada ou já anexada a outra publicação + not_ready: Não é possível anexar ficheiros que ainda não acabaram de ser processados. Tenta outra vez daqui a pouco! too_many: Não é possível anexar mais de 4 ficheiros migrations: acct: Mudou-se para cancel: Cancelar redirecionamento - cancel_explanation: Cancelar o redirecionamento irá reativar a sua conta atual, mas não trará de volta os seguidores que foram migrados para essa conta. - cancelled_msg: Cancelou corretamente o redirecionamento. + cancel_explanation: Se cancelares o redirecionamento irás reativar a tua conta atual, mas não trará de volta os seguidores que foram migrados para essa conta. + cancelled_msg: Redirecionamento cancelado corretamente. errors: - already_moved: é a mesma conta para a qual já migrou - missing_also_known_as: não é um pseudónimo dessa conta - move_to_self: não pode ser conta atual + already_moved: é a mesma conta para a qual já migraste + missing_also_known_as: não é um pseudónimo desta conta + move_to_self: não pode ser a conta atual not_found: não foi encontrado - on_cooldown: Você está no período de espera + on_cooldown: Estás no período de espera followers_count: Seguidores no momento da migração incoming_migrations: A migrar de uma conta diferente - incoming_migrations_html: Para migrar de outra conta para esta, primeiro você precisa criar um pseudónimo. - moved_msg: A sua conta está agora a ser redirecionada para %{acct} e os seus seguidores estão a ser transferidos. - not_redirecting: A sua conta não está atualmente a ser redirecionada para nenhuma outra conta. - on_cooldown: Migrou recentemente a sua conta. Esta função ficará disponível novamente em %{count} dias. + incoming_migrations_html: Para passar de outra conta para esta, primeiro é necessário criar um pseudónimo de conta. + moved_msg: A tua conta está agora a ser redirecionada para %{acct} e os teus seguidores estão a ser transferidos. + not_redirecting: A rua conta não está atualmente a ser redirecionada para nenhuma outra conta. + on_cooldown: Migraste recentemente a tua conta. Esta função ficará disponível novamente em %{count} dias. past_migrations: Migrações anteriores proceed_with_move: Migrar seguidores - redirected_msg: A sua conta está agora a ser redirecionada para %{acct}. - redirecting_to: A sua conta está a ser redirecionada para %{acct}. + redirected_msg: A tua conta está agora a redirecionar para %{acct}. + redirecting_to: A tua conta está a redirecionar para %{acct}. set_redirect: Definir redirecionamento warning: backreference_required: A nova conta deve primeiro ser configurada para que esta seja referenciada - before: 'Antes de continuar, leia cuidadosamente estas notas:' - cooldown: Após a migração, há um período de tempo de espera durante o qual não poderá voltar a migrar - disabled_account: Posteriormente, a sua conta atual não será totalmente utilizável. No entanto, continuará a ter acesso à exportação de dados, bem como à reativação. + before: 'Antes de continuares, lê cuidadosamente estas notas:' + cooldown: Após a migração, há um período de tempo de espera durante o qual não poderás voltar a migrar + disabled_account: Posteriormente, a tua conta atual não será totalmente utilizável. No entanto, continuarás a ter acesso à exportação de dados, bem como à reativação. followers: Esta ação irá migrar todos os seguidores da conta atual para a nova conta - only_redirect_html: Em alternativa, pode apenas colocar um redirecionamento no seu perfil. + only_redirect_html: Em alternativa, podes apenas colocar um redirecionamento no teu perfil. other_data: Nenhum outro dado será migrado automaticamente - redirect: O perfil da sua conta atual será atualizado com um aviso de redirecionamento e será excluído das pesquisas + redirect: O perfil da tua conta atual será atualizado com um aviso de redirecionamento e será excluído das pesquisas moderation: title: Moderação move_handler: - carry_blocks_over_text: Este utilizador migrou de %{acct}, que você tinha bloqueado. - carry_mutes_over_text: Este utilizador migrou de %{acct}, que você tinha silenciado. - copy_account_note_text: 'Este utilizador migrou de %{acct}, aqui estão as suas notas anteriores sobre ele:' + carry_blocks_over_text: Este utilizador migrou de %{acct}, que tinhas bloqueado. + carry_mutes_over_text: Este utilizador migrou de %{acct}, que tinhas ocultado. + copy_account_note_text: 'Este utilizador migrou de %{acct}, aqui estão as tuas notas anteriores sobre ele:' navigation: toggle_menu: Alternar o menu notification_mailer: @@ -1498,11 +1515,11 @@ pt-PT: sign_up: subject: "%{name} inscreveu-se" favourite: - body: 'A sua publicação foi adicionada aos marcadores por %{name}:' - subject: "%{name} adicionou a sua publicação aos marcadores" - title: Novo marcador + body: 'A tua publicação foi adicionada aos favoritos por %{name}:' + subject: "%{name} adicionou a tua publicação aos favoritos" + title: Novo favorito follow: - body: "%{name} é teu seguidor!" + body: "%{name} está a seguir-te!" subject: "%{name} começou a seguir-te" title: Novo seguidor follow_request: @@ -1516,17 +1533,19 @@ pt-PT: subject: "%{name} mencionou-te" title: Nova menção poll: - subject: A sondagem de %{name} encerrou + subject: A sondagem de %{name} terminou reblog: - body: 'A sua publicação foi reforçada por %{name}:' - subject: "%{name} reforçou a sua publicação" - title: Novo reforço + body: 'A tua publicação foi impulsionada por %{name}:' + subject: "%{name} impulsionou a tua publicação" + title: Novo impulso status: subject: "%{name} acabou de publicar" update: subject: "%{name} editou uma publicação" notifications: - email_events_hint: 'Selecione os casos para os quais deseja receber notificações:' + administration_emails: Notificações por e-mail do administrador + email_events: Eventos para notificações por e-mail + email_events_hint: 'Seleciona os casos para os quais desejas receber notificações:' number: human: decimal_units: @@ -1539,28 +1558,28 @@ pt-PT: trillion: T otp_authentication: code_hint: Introduz o código gerado pela tua aplicação de autenticação para confirmar - description_html: Se ativar a autenticação em duas etapas, para entrar na sua conta terá de ter consigo o seu telefone, que vai gerar os tokens necessários à validação do seu acesso. + description_html: Se ativares a autenticação de dois fatores utilizando uma aplicação de autenticação, para iniciar sessão terás de estar na posse do seu telemóvel, que gerará tokens para introduzires. enable: Ativar - instructions_html: "Digitalize este código QR no Google Authenticator ou numa aplicação TOTP semelhante a partir do seu telemóvel. A partir desse momento, essa aplicação irá gerar tokens que terá que inserir para aceder à sua conta." - manual_instructions: 'Se não conseguir digitalizar o código QR e precisar de o inserir manualmente, eis o código por extenso:' + instructions_html: "Digitaliza este código QR no Google Authenticator ou numa aplicação TOTP semelhante a partir do teu telemóvel. A partir desse momento, essa aplicação irá gerar tokens que terás que inserir para acederes à tua conta." + manual_instructions: 'Se não conseguires digitalizar o código QR e precisares de o inserir manualmente, eis o código por extenso:' setup: Configurar wrong_code: O código introduzido é inválido! A hora do servidor e a hora do dispositivo estão corretos? pagination: newer: Mais nova next: Seguinte - older: Mais velha + older: Mais antiga prev: Anterior truncate: "…" polls: errors: - already_voted: Tu já votaste nesta sondagem + already_voted: Já votaste nesta sondagem duplicate_options: contém itens duplicados duration_too_long: está demasiado à frente no futuro - duration_too_short: é demasiado em cima da hora + duration_too_short: é demasiado cedo expired: A sondagem já terminou invalid_choice: A opção de voto escolhida não existe over_character_limit: não pode ter mais do que %{max} caracteres cada um - self_vote: Não pode votar numa sondagem criada por si + self_vote: Não podes votar numa sondagem criada por ti too_few_options: tem de ter mais do que um item too_many_options: não pode conter mais do que %{max} itens preferences: @@ -1568,33 +1587,33 @@ pt-PT: posting_defaults: Padrões de publicação public_timelines: Cronologias públicas privacy: - hint_html: "Defina como quer que o seu perfil e as suas publicações sejam encontrados. Várias funcionalidades no Mastodon podem ajudar a alcançar um público mais amplo quando ativadas. Tire um momento para rever estas definições para garantir que se aplicam ao seu caso de uso." + hint_html: "Define como queres que o teu perfil e as tuas publicações são encontradas. Várias funcionalidades no Mastodon podem ajudar a alcançar um público mais amplo quando ativadas. Tira um momento para rever estas definições para garantir que se aplicam ao teu caso de utilização." privacy: Privacidade - privacy_hint_html: Controle quanto pretende partilhar para o benefício de outros. As pessoas descobrem perfis e aplicações interessantes navegando pelos seguidores de outras pessoas e vendo que aplicações eles usam para publicar, mas pode preferir não revelar essa informação. + privacy_hint_html: Controla quanto pretendes partilhar para o benefício de outros. As pessoas descobrem perfis e aplicações interessantes navegando pelos seguidores de outras pessoas e vendo que aplicações eles usam para publicar, mas podes preferir não revelar essa informação. reach: Alcance - reach_hint_html: Controle se quer ser descoberto e seguido por novas pessoas. Quer que as suas publicações apareçam no ecrã Explorar? Pretende que outras pessoas o vejam nas suas recomendações? Quer aceitar todos os novos seguidores automaticamente, ou ter um controlo individual sobre cada um? + reach_hint_html: Controla se queres ser descoberto e seguido por novas pessoas. Queres que as tuas publicações apareçam no ecrã Explorar? Pretendes que outras pessoas te vejam nas recomendações deles? Queres aceitar todos os novos seguidores automaticamente ou ter um controlo individual sobre cada um? search: Pesquisa - search_hint_html: Controle como deseja ser encontrado. Quer que as pessoas o encontrem com base nas suas publicações? Que pessoas fora do Mastodon encontrem o seu perfil quando pesquisarem na web? Note que a exclusão total de todos os motores de busca não pode ser garantida para informação pública. + search_hint_html: Controla como desejas ser encontrado. Queres que as pessoas te encontrem com base nas tuas publicações? Que pessoas fora do Mastodon encontrem o teu perfil quando pesquisarem na web? Nota que a exclusão total de todos os motores de busca não pode ser garantida para informação pública. title: Privacidade e alcance privacy_policy: title: Política de Privacidade reactions: errors: - limit_reached: Alcançado limite de reações diferentes + limit_reached: Foi atingido o limite de diferentes reações unrecognized_emoji: não é um emoji reconhecido redirects: - prompt: Se confia nesta hiperligação, clique nela para continuar. - title: Está a deixar %{instance}. + prompt: Se confias nesta hiperligação, clica nela para continuar. + title: Estás a deixar %{instance}. relationships: activity: Atividade da conta - confirm_follow_selected_followers: Tem a certeza que deseja seguir os seguidores selecionados? - confirm_remove_selected_followers: Tem a certeza que deseja seguir os seguidores selecionados? - confirm_remove_selected_follows: Tem certeza que deseja remover os seguidores selecionados? + confirm_follow_selected_followers: Tens a certeza que desejas seguir os seguidores selecionados? + confirm_remove_selected_followers: Tens a certeza que desejas seguir os seguidores selecionados? + confirm_remove_selected_follows: Tens certeza que desejas remover os seguidores selecionados? dormant: Inativo follow_failure: Não foi possível seguir algumas das contas selecionadas. follow_selected_followers: Seguir seguidores selecionados followers: Seguidores - following: A seguir + following: Seguindo invited: Convidado last_active: Última atividade most_recent: Mais recente @@ -1607,7 +1626,7 @@ pt-PT: remove_selected_follows: Deixar de seguir os utilizadores selecionados status: Estado da conta remote_follow: - missing_resource: Não foi possível encontrar o URL de redirecionamento para a sua conta + missing_resource: Não foi possível encontrar o URL de redirecionamento para a tua conta reports: errors: invalid_rules: não faz referência a regras válidas @@ -1617,11 +1636,11 @@ pt-PT: account: Publicações públicas de @%{acct} tag: 'Publicações públicas marcadas com #%{hashtag}' scheduled_statuses: - over_daily_limit: Excedeste o limite de %{limit} publicações agendadas para esse dia - over_total_limit: Tu excedeste o limite de %{limit} publicações agendadas + over_daily_limit: Excedeste o limite de %{limit} publicações agendadas para hoje + over_total_limit: Excedeste o limite de %{limit} publicações agendadas too_soon: A data de agendamento tem de ser futura self_destruct: - lead_html: Infelizmente, %{domain} vai fechar definitivamente. Se lá tinha conta, não pode continuar a usá-la, mas ainda pode pedir uma cópia dos seus dados. + lead_html: Infelizmente, %{domain} vai fechar definitivamente. Se tinhas conta nele, não podes continuar a usá-lo, mas ainda podes pedir uma cópia dos teus dados. title: Este servidor vai fechar sessions: activity: Última atividade @@ -1644,7 +1663,7 @@ pt-PT: qq: QQ Browser safari: Safari uc_browser: Navegador UC - unknown_browser: Navegador Desconhecido + unknown_browser: Navegador desconhecido weibo: Weibo current_session: Sessão atual date: Data @@ -1661,46 +1680,48 @@ pt-PT: kai_os: KaiOS linux: Linux mac: macOS - unknown_platform: Plataforma Desconhecida + unknown_platform: Plataforma desconhecida windows: Windows windows_mobile: Windows Mobile windows_phone: Windows Phone revoke: Revogar - revoke_success: Sessão correctamente revogada + revoke_success: Sessão corretamente revogada title: Sessões - view_authentication_history: Ver histórico de autenticação da sua conta + view_authentication_history: Ver histórico de autenticação da tua conta settings: account: Conta account_settings: Definições da conta aliases: Pseudónimos da conta - appearance: Aspecto + appearance: Aparência authorized_apps: Aplicações autorizadas back: Voltar ao Mastodon delete: Eliminação da conta development: Desenvolvimento edit_profile: Editar perfil + export: Exportar featured_tags: Etiquetas destacadas import: Importar import_and_export: Importar e exportar migrate: Migração de conta + notifications: Notificações por e-mail preferences: Preferências profile: Perfil relationships: Seguindo e seguidores - severed_relationships: Relações cessadas - statuses_cleanup: Remoção automática da publicação - strikes: Punições de moderação - two_factor_authentication: Autenticação em duas etapas + severed_relationships: Relações cortadas + statuses_cleanup: Eliminação automática da publicação + strikes: Reprimendas de moderação + two_factor_authentication: Autenticação de dois fatores webauthn_authentication: Chaves de segurança severed_relationships: - download: Transferir (%{count}) + download: Descarregar (%{count}) event_type: account_suspension: Suspensão de conta (%{target_name}) domain_block: Suspensão de servidor (%{target_name}) user_domain_block: Bloqueou %{target_name} lost_followers: Seguidores perdidos - lost_follows: Pessoas que segue perdidas - preamble: Pode perder seguidores e pessoas que segue quando bloqueia um domínio ou quando os seus moderadores decidem suspender um servidor remoto. Quando isso acontecer, poderá descarregar listas de relações cortadas, para serem inspecionadas e possivelmente importadas para outro servidor. - purged: Informações sobre este servidor foram purgadas pelos administradores do seu servidor. + lost_follows: Contas seguidas perdidas + preamble: Podes perder seguidores e pessoas que segues quando bloqueias um domínio ou quando os teus moderadores decidem suspender um servidor remoto. Quando isso acontecer, poderás descarregar as listas de relações cortadas, para serem inspecionadas e possivelmente importadas para outro servidor. + purged: As informações sobre este servidor foram purgadas pelos administradores do servidor. type: Evento statuses: attached: @@ -1714,21 +1735,21 @@ pt-PT: video: one: "%{count} vídeo" other: "%{count} vídeos" - boosted_from_html: Reforçado por %{acct_link} + boosted_from_html: Impulsionado por %{acct_link} content_warning: 'Aviso de conteúdo: %{warning}' default_language: Igual ao idioma da interface disallowed_hashtags: one: 'continha uma #etiqueta proibida: %{tags}' - other: 'continha as hashtags proibidas: %{tags}' + other: 'continha as #etiquetas proibidas: %{tags}' edited_at_html: Editado em %{date} errors: - in_reply_not_found: A publicação a que está a tentar responder parece não existir. - over_character_limit: limite de caracter excedeu %{max} + in_reply_not_found: A publicação a que estás a tentar responder parece não existir. + over_character_limit: limite de caracteres %{max} excedido pin_errors: - direct: Publicações visíveis apenas para utilizadores mencionados não podem ser afixadas - limit: Já afixaste a quantidade máxima de publicações - ownership: Não podem ser afixadas publicações doutras pessoas - reblog: Não pode afixar um reforço + direct: As publicações que só são visíveis para os utilizadores mencionados não podem ser fixadas + limit: Já fixaste a quantidade máxima de publicações + ownership: Não podem ser fixadas publicações de outras pessoas + reblog: Não é possível fixar um impulso title: '%{name}: "%{quote}"' visibilities: direct: Direto @@ -1736,29 +1757,29 @@ pt-PT: private_long: Mostrar só aos seguidores public: Público public_long: Todos podem ver - unlisted: Não inventariado - unlisted_long: Todos podem ver, mas não será inventariado nas cronologias públicas + unlisted: Não listado + unlisted_long: Todos podem ver, mas não aparecerá nas cronologias públicas statuses_cleanup: - enabled: Apagar publicações antigas automaticamente - enabled_hint: Apaga automaticamente as suas publicações assim que atingirem um certo limite de tempo, a não ser que correspondam a uma das seguintes excepções + enabled: Eliminar publicações antigas automaticamente + enabled_hint: Elimina automaticamente as tuas publicações assim que atingirem um certo limite de tempo, a não ser que correspondam a uma das seguintes exceções exceptions: Exceções - explanation: Como apagar publicações é uma operação custosa, isto é feito lentamente ao longo do tempo, quando o servidor não está ocupado. Por esta razão, as suas publicações podem ser apagadas um pouco depois de atingirem o limite de idade definido. - ignore_favs: Ignorar marcadores - ignore_reblogs: Ignorar reforços + explanation: Como eliminar publicações é uma operação custosa, isto é feito lentamente ao longo do tempo, quando o servidor não está ocupado. Por esta razão, as tuas publicações podem ser eliminadas um pouco depois de atingirem o limite de idade definido. + ignore_favs: Ignorar favoritos + ignore_reblogs: Ignorar os impulsos interaction_exceptions: Exceções baseadas em interações - interaction_exceptions_explanation: Note que não há garantia de que as publicações sejam excluídas se ficarem abaixo do limite de favoritos ou partilhas após as ter verificado uma vez. + interaction_exceptions_explanation: Tem em atenção que não há garantia de que as mensagens sejam eliminadas se ficarem abaixo do limite de favoritos ou de impulsionamento depois de os terem ultrapassado. keep_direct: Manter mensagens diretas - keep_direct_hint: Não apaga nenhuma das suas mensagens diretas + keep_direct_hint: Não elimina nenhuma das tuas mensagens diretas keep_media: Manter publicações com anexos de multimédia - keep_media_hint: Não apaga nenhuma das suas publicações com multimédia anexada + keep_media_hint: Não elimina nenhuma das tuas publicações com multimédia anexada keep_pinned: Manter publicações afixadas - keep_pinned_hint: Não apagar nenhuma das suas publicações afixadas + keep_pinned_hint: Não elimina nenhuma das tuas publicações afixadas keep_polls: Manter sondagens - keep_polls_hint: Não apaga nenhuma das suas sondagens - keep_self_bookmark: Manter as publicações que marcou - keep_self_bookmark_hint: Não elimina as suas próprias publicações se as tiver nos marcadores - keep_self_fav: Manter as publicações que marcou - keep_self_fav_hint: Não apaga as suas próprias publicações se as tiver marcado + keep_polls_hint: Não elimina nenhuma das tuas sondagens + keep_self_bookmark: Manter as publicações que marquei + keep_self_bookmark_hint: Não elimina as tuas próprias publicações se as tiveres nos marcadores + keep_self_fav: Manter as publicações que adicionei aos favoritos + keep_self_fav_hint: Não elimina as tuas próprias publicações se as tiveres adicionado aos favoritos min_age: '1209600': 2 semanas '15778476': 6 meses @@ -1769,21 +1790,21 @@ pt-PT: '63113904': 2 anos '7889238': 3 meses min_age_label: Limite de idade - min_favs: Manter pelo menos as publicações dos marcadores - min_favs_hint: Não elimina nenhuma das suas publicações que tenha recebido pelo menos este número de favoritos. Deixe em branco para eliminar publicações, independentemente do seu número de favoritos - min_reblogs: Manter as publicações reforçadas mais de - min_reblogs_hint: Não apaga nenhuma das suas publicações que tenha sido partilhada mais do que este número de vezes. Deixe em branco para apagar as publicações, independentemente do número de partilhas + min_favs: Manter publicações adicionadas aos favoritos pelos menos + min_favs_hint: Não elimina nenhuma das tuas publicações que tenham sido adicionadas aos favoritos este número de vezes. Deixa em branco para eliminar publicações, independentemente do número de vezes que tenham sido adicionadas aos favoritos + min_reblogs: Manter as publicações impulsionadas, pelo menos + min_reblogs_hint: Não elimina nenhuma das tuas mensagens que tenham sido impulsionada pelo menos este número de vezes. Deixa em branco para eliminar as mensagens independentemente do número de impulsionamentos stream_entries: - sensitive_content: Conteúdo problemático + sensitive_content: Conteúdo sensível strikes: errors: - too_late: É tarde demais para recorrer desta reprimenda + too_late: É tarde demais para contestar esta reprimenda tags: does_not_match_previous_name: não coincide com o nome anterior themes: - contrast: Mastodon (Elevado contraste) - default: Mastodon (Escuro) - mastodon-light: Mastodon (Claro) + contrast: Mastodon (alto contraste) + default: Mastodon (escuro) + mastodon-light: Mastodon (claro) system: Automático (usar tema do sistema) time: formats: @@ -1798,105 +1819,105 @@ pt-PT: two_factor_authentication: add: Adicionar disable: Desactivar autenticação por dois factores (2FA) - disabled_success: Autenticação em duas etapas correctamente desactivada + disabled_success: Autenticação de dois fatores desativada com sucesso edit: Editar - enabled: A autenticação em duas etapas está ativada - enabled_success: Autenticação em duas etapas correctamente activada + enabled: A autenticação de dois fatores está ativada + enabled_success: Autenticação de dois fatores ativada com sucesso generate_recovery_codes: Gerar códigos para recuperar conta - lost_recovery_codes: Os códigos de recuperação permitem que recupere o acesso à sua conta caso perca o seu telemóvel. Se perder os códigos de recuperação, pode criar uns novos aqui. Os seus códigos antigos serão revogados. - methods: Métodos de autenticação em duas etapas + lost_recovery_codes: Os códigos de recuperação permitem que recupere o acesso à tua conta caso percas o teu telemóvel. Se perderes os códigos de recuperação, podes criar uns novos aqui. Os teus códigos antigos serão revogados. + methods: Métodos de autenticação de dois fatores otp: Aplicação de autenticação recovery_codes: Cópia de segurança dos códigos de recuperação - recovery_codes_regenerated: Códigos de recuperação foram correctamente gerados - recovery_instructions_html: Se perder o seu telemóvel, poderá usar um dos códigos de recuperação para voltar a ter acesso à sua conta. Guarde os códigos de recuperação em lugar seguro. Por exemplo, pode imprimi-los e guardá-los junto doutros documentos importantes. + recovery_codes_regenerated: Os códigos de recuperação foram corretamente gerados + recovery_instructions_html: Se perderes o seu telemóvel, poderás usar um dos códigos de recuperação para voltares a ter acesso à tua conta. Guarda os códigos de recuperação em lugar seguro. Por exemplo, podes imprimi-los e guardá-los junto a outros documentos importantes. webauthn: Chaves de segurança user_mailer: appeal_approved: - action: Configurações de Conta - explanation: O recurso à reprimenda contra a sua conta de %{strike_date}, enviado a %{appeal_date}, foi deferido. A sua conta encontra-se novamente em situação regular. - subject: O seu recurso de %{date} foi deferido - subtitle: A sua conta está em situação regular novamente. - title: Recurso deferido + action: Configurações da conta + explanation: A contestação à reprimenda contra a tua conta em %{strike_date}, enviada a %{appeal_date}, foi aceite. A tua conta encontra-se novamente em situação regular. + subject: A tua contestação em %{date} foi aceite + subtitle: A tua conta está em situação regular novamente. + title: Contestação aceite appeal_rejected: - explanation: O recurso à punição contra a sua conta de %{strike_date}, submetido em %{appeal_date}, foi indeferido. - subject: O seu recurso de %{date} foi indeferido - subtitle: O seu recurso foi rejeitado. - title: Recurso indeferido + explanation: A contestação à reprimenda contra a tua conta em %{strike_date}, submetida em %{appeal_date}, foi rejeitada. + subject: A tua contestação a %{date} foi rejeitada + subtitle: A tua contestação foi rejeitada. + title: Contestação rejeitada backup_ready: - explanation: Pediu uma cópia completa da sua conta Mastodon. - extra: Está pronta para transferir! - subject: O seu arquivo está pronto para descarregar + explanation: Pediste uma cópia de segurança da tua conta Mastodon. + extra: Está pronta para ser descarregada! + subject: O teu arquivo está pronto para ser descarregado title: Arquivo de ficheiros failed_2fa: - details: 'Aqui estão os detalhes da tentativa de entrada:' - explanation: Alguém tentou entrar em sua conta mas forneceu um segundo fator de autenticação inválido. - further_actions_html: Se não foi você, recomendamos que %{action} imediatamente, pois pode ter sido comprometido. + details: 'Eis os pormenores da tentativa de início de sessão:' + explanation: Alguém tentou iniciar sessão na tua conta, mas forneceu um segundo fator de autenticação inválido. + further_actions_html: Se não foste tu, recomendamos %{action} imediatamente, pois a conta pode ter sido comprometida. subject: Falha na autenticação do segundo fator title: Falha na autenticação do segundo fator suspicious_sign_in: - change_password: alterar a sua palavra-passe + change_password: alterar a palavra-passe details: 'Eis os pormenores do início de sessão:' - explanation: Detectámos um início de sessão na sua conta a partir dum endereço IP novo. - further_actions_html: Se não foi você, recomendamos que %{action} imediatamente e ative a autenticação de dois fatores para manter a sua conta segura. - subject: A sua conta foi acedida a partir dum endereço IP novo + explanation: Detetámos um início de sessão na tua conta a partir dum endereço IP novo. + further_actions_html: Se não foste tu, recomendamos %{action} imediatamente e ativar a autenticação de dois fatores para manter a conta segura. + subject: A tua conta foi acedida a partir de um endereço IP novo title: Um início de sessão novo warning: - appeal: Submeter um recurso - appeal_description: Se acha que isso é um erro, pode submeter um recurso para a equipa de %{instance}. + appeal: Submeter uma contestação + appeal_description: Se achas que isto é um erro, podes submeter uma contestação para a equipa de %{instance}. categories: - spam: Spam + spam: Publicidade indesejada / spam violation: O conteúdo infringe as seguintes diretrizes da comunidade explanation: - delete_statuses: Algumas das suas publicações foram consideradas como infractoras duma ou mais diretrizes da comunidade, e subsequentemente removidas pelos moderadores de %{instance}. - disable: Já não pode utilizar a sua conta, mas o seu perfil e outros dados permanecem intactos. Pode solicitar uma cópia dos seus dados, alterar as definições da conta, ou que a sua conta seja apagada. - mark_statuses_as_sensitive: Algumas das suas publicações foram marcadas como problemáticos pelos moderadores de %{instance}. Isto significa que as pessoas terão de tocar nas publicações para que possa ser apresentada uma pré-visualização. No futuro, quando publicar, lembre-se que pode você próprio marcar os media como problemáticos. - sensitive: A partir de agora, todos os ficheiros de media que carregue serão marcados como problemáticos e escondidos sob um aviso pedido para tocar para os ver. - silence: Pode ainda utilizar a sua conta mas apenas as pessoas que já o seguem poderão ver as suas mensagens neste servidor, e poderá ser excluído de várias funcionalidades de divulgação. No entanto, outros poderão ainda segui-lo manualmente. - suspend: Não pode mais utilizar a sua conta, e o seu perfil e outros dados já não se encontram acessíveis. Poderá ainda iniciar sessão para solicitar uma cópia dos seus dados até os mesmos serem totalmente removidos em cerca de 30 dias, porém reteremos alguns dados básicos para o impedir evitar a suspensão. + delete_statuses: Algumas das tuas mensagens foram consideradas como violando uma ou mais diretrizes da comunidade e foram subsequentemente removidas pelos moderadores do %{instance}. + disable: Já não podes utilizar a tua conta, mas o teu perfil e outros dados permanecem intactos. Podes solicitar uma cópia de segurança dos teus dados, alterar as definições da conta ou eliminar a tua conta. + mark_statuses_as_sensitive: Algumas das tuas publicações foram marcadas como sensíveis pelos moderadores de %{instance}. Isto significa que as pessoas terão de tocar/clicar nas publicações para que possa ser apresentada uma pré-visualização. No futuro, quando publicares, lembra-te que podes marcar os elementos multimédia como problemáticos. + sensitive: A partir de agora, todos os ficheiros multimédia que enviares serão marcados como sensíveis e escondidos sob um aviso pedido para tocar/clicar para os ver. + silence: Podes ainda utilizar a tua conta, mas apenas as pessoas que já te seguem poderão ver as tuas mensagens neste servidor, e poderás ser excluído de várias funcionalidades de divulgação. No entanto, outros poderão ainda seguir-te manualmente. + suspend: Não podes mais utilizar a tua conta, e o teu perfil e outros dados já não se encontram acessíveis. Poderás ainda iniciar sessão para solicitar uma cópia dos teus dados até os mesmos serem totalmente removidos em cerca de 30 dias, porém reteremos alguns dados básicos para impedirmos que evites a suspensão. reason: 'Motivo:' statuses: 'Publicações citadas:' subject: - delete_statuses: As suas publicações em %{acct} foram removidas + delete_statuses: As tuas publicações em %{acct} foram removidas disable: A tua conta %{acct} foi congelada - mark_statuses_as_sensitive: As suas publicações em %{acct} foram marcadas como problemáticas + mark_statuses_as_sensitive: As tuas publicações em %{acct} foram marcadas como sensíveis none: Aviso para %{acct} - sensitive: A partir de agora, as suas publicações em %{acct} serão marcadas como problemáticas - silence: A sua conta %{acct} foi limitada - suspend: A sua conta %{acct} foi suspensa + sensitive: A partir de agora, as tuas publicações em %{acct} serão marcadas como sensíveis + silence: A tua conta %{acct} foi limitada + suspend: A tua conta %{acct} foi suspensa title: delete_statuses: Publicações removidas disable: Conta congelada - mark_statuses_as_sensitive: Publicações marcadas como problemáticas + mark_statuses_as_sensitive: Publicações marcadas como sensíveis none: Aviso - sensitive: Conta marcada como problemática + sensitive: Conta marcada como sensível silence: Conta limitada suspend: Conta suspensa welcome: - apps_android_action: Baixe no Google Play - apps_ios_action: Baixar na App Store - apps_step: Descarregue as nossas aplicações oficiais. - apps_title: Apps Mastodon + apps_android_action: Obter no Google Play + apps_ios_action: Obter na App Store + apps_step: Descarrega as nossas aplicações oficiais. + apps_title: Aplicações Mastodon checklist_subtitle: 'Vamos começar nesta nova fronteira social:' - checklist_title: Checklist de Boas-vindas + checklist_title: Passos de boas-vindas edit_profile_action: Personalizar - edit_profile_step: Aumente suas interações tendo um perfil completo. - edit_profile_title: Personalize seu perfil + edit_profile_step: Aumenta as tuas interações com um perfil completo. + edit_profile_title: Personaliza o teu perfil explanation: Aqui estão algumas dicas para começar feature_action: Mais informações - feature_audience: O Mastodon oferece-lhe uma possibilidade única de gerir a sua audiência sem intermediários. O Mastodon implantado na sua própria infraestrutura permite-lhe seguir e ser seguido a partir de qualquer outro servidor Mastodon online e não está sob o controlo de ninguém a não ser o seu. - feature_audience_title: Construa seu público em confiança - feature_control: Você sabe melhor o que quer ver no seu feed. Não há algoritmos ou anúncios que o façam perder tempo. Siga qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e receba as suas mensagens por ordem cronológica e torne o seu canto da Internet um pouco mais parecido consigo. - feature_control_title: Mantenha o controlo da sua própria cronologia - feature_creativity: O Mastodon suporta publicações de áudio, vídeo e imagens, descrições de acessibilidade, sondagens, avisos de conteúdo, avatares animados, emojis personalizados, controlo de corte de miniaturas e muito mais, para o ajudar a expressar-se online. Quer esteja a publicar a sua arte, a sua música ou o seu podcast, o Mastodon está lá para si. + feature_audience: O Mastodon oferece-te uma possibilidade única de gerir a tua audiência sem intermediários. O Mastodon implantado na sua própria infraestrutura permite seguires e seres seguido a partir de qualquer outro servidor Mastodon online e não está sob o controlo de ninguém a não ser o teu. + feature_audience_title: Conquista o teu público + feature_control: Sabes melhor o que queres ver na cronologia da tua página inicial. Não há algoritmos ou anúncios que te façam perder tempo. Segue qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e recebe as tuas mensagens por ordem cronológica, e torna o teu canto da Internet um pouco mais parecido contigo. + feature_control_title: Mantém o controlo da tua própria cronologia + feature_creativity: O Mastodon suporta publicações de áudio, vídeo e imagens, descrições de acessibilidade, sondagens, avisos de conteúdo, avatares animados, emojis personalizados, controlo de corte de miniaturas e muito mais, para te ajudar a expressares-te online. Quer estejas a publicar a tua arte, a tua música ou o teu podcast, o Mastodon está aqui para ti. feature_creativity_title: Criatividade inigualável - feature_moderation: Mastodon coloca a tomada de decisões de volta em suas mãos. Cada servidor cria as suas próprias regras e regulamentos, que são aplicados localmente e não de cima para baixo como as redes sociais corporativas, tornando-o mais flexível na resposta às necessidades de diferentes grupos de pessoas. Junte-se a um servidor com as regras com as quais você concorda ou hospede as suas próprias. + feature_moderation: O Mastodon coloca a tomada de decisões de volta nas tuas mãos. Cada servidor cria as suas próprias regras e regulamentos, que são aplicados localmente e não de cima para baixo como as redes sociais corporativas, tornando-o mais flexível para responder às necessidades de diferentes grupos de pessoas. Junta-te a um servidor com as regras com as quais concordas ou aloja o teu próprio servidor. feature_moderation_title: Moderando como deve ser follow_action: Seguir - follow_step: Seguir pessoas interessantes é do que trata Mastodon. - follow_title: Personalize seu feed residencial - follows_subtitle: Siga contas bem conhecidas + follow_step: Seguir pessoas interessantes é o objetivo do Mastodon. + follow_title: Personaliza a cronologia na tua página inicial + follows_subtitle: Segue contas conhecidas follows_title: Quem seguir - follows_view_more: Veja mais pessoas para seguir + follows_view_more: Ver mais pessoas para seguir hashtags_recent_count: one: "%{people} pessoa nos últimos 2 dias" other: "%{people} pessoas nos últimos 2 dias" @@ -1904,42 +1925,44 @@ pt-PT: hashtags_title: Etiquetas em tendência hashtags_view_more: Ver mais etiquetas em tendência post_action: Compor - post_step: Diga olá para o mundo com texto, fotos, vídeos ou sondagens. - post_title: Faça a sua primeira publicação - share_action: Compartilhar - share_step: Diga aos seus amigos como te encontrar no Mastodon. - share_title: Compartilhe seu perfil de Mastodon + post_step: Diz olá para o mundo com texto, fotos, vídeos ou sondagens. + post_title: Faz a tua primeira publicação + share_action: Partilhar + share_step: Diz aos teus amigos como te podem encontrar no Mastodon. + share_title: Partilha o teu perfil de Mastodon sign_in_action: Iniciar sessão subject: Bem-vindo ao Mastodon title: Bem-vindo a bordo, %{name}! users: - follow_limit_reached: Não pode seguir mais do que %{limit} pessoas + follow_limit_reached: Não podes seguir mais do que %{limit} pessoas go_to_sso_account_settings: Ir para as definições de conta do seu fornecedor de identidade - invalid_otp_token: Código de autenticação inválido - otp_lost_help_html: Se perdeu o acesso a ambos, pode entrar em contacto com %{email} - rate_limited: Demasiadas tentativas de autenticação, tente novamente mais tarde. + invalid_otp_token: Código de dois fatores inválido + otp_lost_help_html: Se perdeste o acesso a ambos, podes entrar em contacto com %{email} + rate_limited: Demasiadas tentativas de autenticação, tenta novamente mais tarde. + seamless_external_login: A sessão foi iniciada através de um serviço externo, pelo que as definições de palavra-passe e e-mail não estão disponíveis. signed_in_as: 'Registado como:' verification: - extra_instructions_html: Dica: A ligação no seu site pode ser invisível. A parte importante é rel="me" que impede a personificação em sites com conteúdo gerado pelo utilizador. Pode até utilizar uma etiqueta link no cabeçalho da página ao invés de a, mas o HTML deve ser acessível sem executar JavaScript. - here_is_how: Veja como - hint_html: "Verificar a sua identidade no Mastodon é para todos. Baseado em normas públicas da web, agora e para sempre gratuitas. Tudo o que precisa é de um site pessoal pelo qual as pessoas o reconheçam. Quando coloca no seu perfil uma ligação para esse site, vamos verificar que o site tem uma ligação de volta para o seu perfil e mostrar um indicador visual." - instructions_html: Copie e cole o código abaixo no HTML do seu site. Em seguida, adicione o endereço do seu site num dos campos extras no seu perfil, na aba "Editar perfil" e guarde as alterações. + extra_instructions_html: Dica: a hiperligação no teu site pode ser invisível. A parte importante é rel="me" que impede a falsificação de identidade em sítios na web com conteúdos gerados pelos utilizadores. Podes até utilizar uma etiqueta link no cabeçalho da página ao invés de a, mas o HTML deve ser acessível sem executar JavaScript. + here_is_how: Eis o que fazer + hint_html: "Verificar a sua identidade no Mastodon é para todos. Baseado em normas públicas da web, agora e para sempre gratuitas. Tudo o que precisas é de um site pessoal pelo qual as pessoas te reconheçam. Quando colocas no teu perfil uma hiperligação para esse site, vamos verificar que o site tem uma hiperligação de volta para o teu perfil e mostrar um indicador visual." + instructions_html: Copia e cola o código abaixo no HTML do teu site. Em seguida, adiciona o endereço do teu site num dos campos extras no teu perfil, na aba "Editar perfil" e guarda as alterações. verification: Verificação - verified_links: As suas ligações verificadas + verified_links: As tuas hiperligações verificadas + website_verification: Verificação do sítio web webauthn_credentials: add: Adicionar nova chave de segurança create: - error: Ocorreu um problema ao adicionar sua chave de segurança. Tente novamente. - success: A sua chave de segurança foi correctamente adicionada. + error: Ocorreu um problema ao adicionar a chave de segurança. Tenta novamente. + success: A tua chave de segurança foi corretamente adicionada. delete: Eliminar - delete_confirmation: Tem a certeza de que pretende eliminar esta chave de segurança? - description_html: Se activar a autenticação com chave de segurança, vai passar a precisar de usar uma das suas chaves de segurança para aceder à sua conta. + delete_confirmation: Tens a certeza de que pretendes eliminar esta chave de segurança? + description_html: Se ativares a autenticação com chave de segurança, vais passar a precisar de usar uma das suas chaves de segurança para aceder à tua conta. destroy: - error: Ocorreu um problema ao remover a sua chave de segurança. Tente novamente. - success: A sua chave de segurança foi correctamente eliminada. + error: Ocorreu um problema ao remover a tua chave de segurança. Tenta novamente. + success: A tua chave de segurança foi corretamente eliminada. invalid_credential: Chave de segurança inválida - nickname_hint: Introduza a alcunha da sua nova chave de segurança - not_enabled: Ainda não ativou o WebAuthn + nickname_hint: Introduz a alcunha da tua nova chave de segurança + not_enabled: Ainda não ativaste o WebAuthn not_supported: Este navegador não funciona com chaves de segurança - otp_required: Para usar chaves de segurança, por favor ative primeiro a autenticação em duas etapas. + otp_required: Para utilizares chaves de segurança, ativa primeiro a autenticação de dois fatores. registered_on: Registado em %{date} diff --git a/config/locales/ro.yml b/config/locales/ro.yml index d4f202637b..faaf60c456 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -23,6 +23,7 @@ ro: one: Postare other: De Postări posts_tab_heading: Postări + self_follow_error: Urmărirea propriului cont nu este permisă admin: account_actions: action: Efectuează acțiunea @@ -429,6 +430,8 @@ ro: discovery: follow_recommendations: Urmează recomandările profile_directory: Catalogul de profiluri + statuses: + title: Postări cont aliases: add_new: Creează un alias created_msg: A fost creat cu succes un alias nou. Acum puteţi iniţia mutarea din vechiul cont. @@ -465,11 +468,16 @@ ro: migrate_account: Transfer către un alt cont migrate_account_html: Dacă dorești să redirecționezi acest cont către un altul, poți configura asta aici. or_log_in_with: Sau conectează-te cu + privacy_policy_agreement_html: Am citit și sunt de acord cu Politica de confidențialitate register: Înregistrare registration_closed: "%{instance} nu acceptă membri noi" reset_password: Resetare parolă security: Securitate set_new_password: Setează o nouă parolă + setup: + email_settings_hint_html: Faceți clic pe link-ul pe care vi l-am trimis pentru a verifica %{email}. Vom aștepta chiar aici. + sign_up: + preamble: Cu un cont pe acest server Mastodon, veți putea urmări orice altă persoană din rețea, indiferent de locul unde este găzduit contul lor. status: account_status: Starea contului redirecting_to: Contul dvs. este inactiv deoarece în prezent se redirecționează către %{acct}. @@ -546,6 +554,20 @@ ro: modes: overwrite: Suprascrie overwrite_long: Înlocuiţi înregistrările curente cu cele noi + overwrite_preambles: + blocking_html: Sunteți pe cale să înlocuiți lista cu conturi blocate cu până la %{total_items} conturi din %{filename}. + bookmarks_html: Sunteți pe cale să înlocuiți marcajele cu până la %{total_items} postări din %{filename}. + domain_blocking_html: Sunteți pe cale să înlocuiți lista cu domenii blocate cu până la %{total_items} domenii din %{filename}. + following_html: Sunteți pe cale să urmăriți până la %{total_items} conturi din %{filename} și să nu mai urmăriți pe altcineva. + lists_html: Sunteți pe cale să înlocuiți listele cu conținut din %{filename}. Până la %{total_items} conturi vor fi adăugate la listele noi. + muting_html: Sunteți pe cale să înlocuiți lista cu conturi amuțite cu până la %{total_items} conturi din %{filename}. + preambles: + blocking_html: Sunteți pe cale să blocați până la %{total_items} conturi din %{filename}. + bookmarks_html: Sunteți pe cale să adăugați până la %{total_items} postări din %{filename} în marcajele dvs. + domain_blocking_html: Sunteți pe cale să blocați până la %{total_items} domenii din %{filename}. + following_html: Sunteți pe cale să urmăriți până la %{total_items} conturi din %{filename}. + lists_html: Sunteți pe cale să adăugați până la %{total_items} conturi din %{filename} în listele dvs. Vor fi create liste noi dacă nu există nicio listă la care să adăugați. + muting_html: Sunteți pe cale să amuțiți până la %{total_items} conturi din %{filename}. preface: Puteți importa date pe care le-ați exportat de pe un alt server, cum ar fi o listă a persoanelor pe care le urmăriți sau blocați. success: Datele dvs. au fost încărcate cu succes și vor fi procesate acum în timp util types: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index c61c7f459f..a3aceca5ae 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -25,6 +25,7 @@ ru: one: Пост other: статусов posts_tab_heading: Посты + self_follow_error: Нельзя подписаться на самого себя admin: account_actions: action: Выполнить действие @@ -64,7 +65,7 @@ ru: demote: Разжаловать destroyed_msg: Данные %{username} поставлены в очередь на удаление disable: Заморозка - disable_sign_in_token_auth: Отключите аутентификацию с помощью маркера электронной почты + disable_sign_in_token_auth: Отключить аутентификацию по e-mail кодам disable_two_factor_authentication: Отключить 2FA disabled: Отключено display_name: Отображаемое имя @@ -73,7 +74,7 @@ ru: email: E-mail email_status: Статус e-mail enable: Включить - enable_sign_in_token_auth: Включите аутентификацию с помощью маркера электронной почты + enable_sign_in_token_auth: Включить аутентификацию по e-mail кодам enabled: Включен enabled_msg: Учётная запись %{username} успешно разморожена followers: Подписчики @@ -146,8 +147,8 @@ ru: security_measures: only_password: Только пароль password_and_2fa: Пароль и 2FA - sensitive: Отметить как «деликатного содержания» - sensitized: отмечено как «деликатного характера» + sensitive: Деликатный + sensitized: отмечено как деликатный контент shared_inbox_url: URL общих входящих show: created_reports: Жалобы, отправленные с этой учётной записи @@ -165,7 +166,7 @@ ru: unblock_email: Разблокировать e-mail адрес unblocked_email_msg: E-mail адрес %{username} разблокирован unconfirmed_email: Неподтверждённый e-mail - undo_sensitized: Убрать отметку «деликатного содержания» + undo_sensitized: Снять отметку "деликатный" undo_silenced: Отменить скрытие undo_suspension: Снять блокировку unsilenced_msg: Ограничения с учётной записи %{username} сняты успешно @@ -178,89 +179,89 @@ ru: whitelisted: В белом списке action_logs: action_types: - approve_appeal: Одобрить обжалование - approve_user: Утвердить + approve_appeal: Одобрение обжалований + approve_user: Утверждение регистраций assigned_to_self_report: Присвоение жалоб - change_email_user: Сменить e-mail для пользователя - change_role_user: Изменить роль пользователя + change_email_user: Смена e-mail пользователей + change_role_user: Смена ролей пользователей confirm_user: Подтверждение пользователей create_account_warning: Выдача предупреждения create_announcement: Создание объявлений - create_canonical_email_block: Создать блок электронной почты + create_canonical_email_block: Создание блокировок e-mail create_custom_emoji: Добавление эмодзи create_domain_allow: Разрешение доменов create_domain_block: Блокировка доменов - create_email_domain_block: Создать блок домена электронной почты + create_email_domain_block: Создание доменных блокировок e-mail create_ip_block: Создание правил для IP-адресов create_unavailable_domain: Добавление домена в список недоступных - create_user_role: Создать роль + create_user_role: Создание ролей demote_user: Разжалование пользователей destroy_announcement: Удаление объявлений - destroy_canonical_email_block: Удалить блок электронной почты + destroy_canonical_email_block: Удаление блокировок e-mail destroy_custom_emoji: Удаление эмодзи destroy_domain_allow: Отзыв разрешений для доменов destroy_domain_block: Разблокировка доменов - destroy_email_domain_block: Удалить блок домена электронной почты + destroy_email_domain_block: Удаление доменных блокировок e-mail destroy_instance: Очистить домен destroy_ip_block: Удаление правил для IP-адресов destroy_status: Удаление постов destroy_unavailable_domain: Исключение доменов из списка недоступных - destroy_user_role: Удалить роль + destroy_user_role: Удаление ролей disable_2fa_user: Отключение 2FA disable_custom_emoji: Отключение эмодзи - disable_sign_in_token_auth_user: Отключить аутентификацию пользователя с помощью токена электронной почты + disable_sign_in_token_auth_user: Отключение аутентификации по e-mail кодам disable_user: Заморозка пользователей enable_custom_emoji: Включение эмодзи - enable_sign_in_token_auth_user: Включить аутентификацию пользователя с помощью токена электронной почты + enable_sign_in_token_auth_user: Включение аутентификации по e-mail кодам enable_user: Разморозка пользователей memorialize_account: Присвоение пользователям статуса «мемориала» promote_user: Повышение пользователей - reject_appeal: Отклонить обжалование - reject_user: Отклонить + reject_appeal: Отклонение обжалований + reject_user: Отклонение регистраций remove_avatar_user: Удаление аватаров reopen_report: Возобновление жалоб - resend_user: Повторно отправить письмо с подтверждением + resend_user: Повторная отправка писем с подтверждением reset_password_user: Сброс пароля пользователей resolve_report: Отметка жалоб «решёнными» sensitive_account: Присвоение пользователям отметки «деликатного содержания» silence_account: Скрытие пользователей suspend_account: Блокировка пользователей unassigned_report: Снятие жалоб - unblock_email_account: Разблокировать e-mail адрес + unblock_email_account: Разблокировка e-mail адресов unsensitive_account: Снятие с пользователей отметки «деликатного содержания» unsilence_account: Отмена скрытия пользователей unsuspend_account: Разблокировка пользователей update_announcement: Обновление объявлений update_custom_emoji: Обновление эмодзи update_domain_block: Изменение блокировки домена - update_ip_block: Обновить правило для IP-адреса - update_report: Обновить рапорт + update_ip_block: Обновление правил для IP-адресов + update_report: Изменение жалоб update_status: Изменение постов - update_user_role: Обновить роль + update_user_role: Изменение ролей actions: - approve_appeal_html: "%{name} одобрил апелляцию на умеренное решение от %{target}" + approve_appeal_html: "%{name} одобрил(а) обжалование действий модерации от %{target}" approve_user_html: "%{name} утвердил(а) регистрацию %{target}" assigned_to_self_report_html: "%{name} назначил(а) себя для решения жалобы %{target}" - change_email_user_html: "%{name} изменил адрес электронной почты пользователя %{target}" + change_email_user_html: "%{name} cменил(а) e-mail адрес пользователя %{target}" change_role_user_html: "%{name} изменил(а) роль %{target}" - confirm_user_html: "%{name} подтвержденный адрес электронной почты пользователя %{target}" + confirm_user_html: "%{name} подтвердил(а) e-mail адрес пользователя %{target}" create_account_warning_html: "%{name} выдал(а) предупреждение %{target}" create_announcement_html: "%{name} создал(а) новое объявление %{target}" - create_canonical_email_block_html: "%{name} заблокировал письмо с хэшем %{target}" + create_canonical_email_block_html: "%{name} заблокировал(а) e-mail с хешем %{target}" create_custom_emoji_html: "%{name} загрузил(а) новый эмодзи %{target}" create_domain_allow_html: "%{name} разрешил(а) федерацию с доменом %{target}" create_domain_block_html: "%{name} заблокировал(а) домен %{target}" - create_email_domain_block_html: "%{name} заблокированный почтовый домен %{target}" + create_email_domain_block_html: "%{name} заблокировал(а) e-mail домен %{target}" create_ip_block_html: "%{name} создал(а) правило для IP %{target}" create_unavailable_domain_html: "%{name} приостановил доставку на узел %{target}" create_user_role_html: "%{name} создал(а) роль %{target}" demote_user_html: "%{name} разжаловал(а) пользователя %{target}" destroy_announcement_html: "%{name} удалил(а) объявление %{target}" - destroy_canonical_email_block_html: "%{name} разблокированное письмо с хэшем %{target}" + destroy_canonical_email_block_html: "%{name} снял(а) блокировку e-mail с хэшем %{target}" destroy_custom_emoji_html: "%{name} удалил(а) эмодзи %{target}" destroy_domain_allow_html: "%{name} запретил(а) федерацию с доменом %{target}" destroy_domain_block_html: "%{name} снял(а) блокировку с домена %{target}" - destroy_email_domain_block_html: "%{name} разблокированный почтовый домен %{target}" + destroy_email_domain_block_html: "%{name} снял(а) блокировку с e-mail домена %{target}" destroy_instance_html: "%{name} очистил(а) данные для домена %{target}" destroy_ip_block_html: "%{name} удалил(а) правило для IP %{target}" destroy_status_html: "%{name} удалил(а) пост пользователя %{target}" @@ -268,18 +269,18 @@ ru: destroy_user_role_html: "%{name} удалил(а) роль %{target}" disable_2fa_user_html: "%{name} отключил(а) требование двухэтапной авторизации для пользователя %{target}" disable_custom_emoji_html: "%{name} отключил(а) эмодзи %{target}" - disable_sign_in_token_auth_user_html: "%{name} отключил аутентификацию по маркеру электронной почты для %{target}" + disable_sign_in_token_auth_user_html: "%{name} отключил(а) аутентификацию по e-mail кодам для %{target}" disable_user_html: "%{name} заморозил(а) пользователя %{target}" enable_custom_emoji_html: "%{name} включил(а) эмодзи %{target}" - enable_sign_in_token_auth_user_html: "%{name} включил аутентификацию с помощью маркера электронной почты для %{target}" + enable_sign_in_token_auth_user_html: "%{name} включил(а) аутентификацию по e-mail кодам для %{target}" enable_user_html: "%{name} разморозил(а) пользователя %{target}" memorialize_account_html: "%{name} перевел(а) учётную запись пользователя %{target} в статус памятника" promote_user_html: "%{name} повысил(а) пользователя %{target}" - reject_appeal_html: "%{name} отклонил апелляцию на модерацию от %{target}" + reject_appeal_html: "%{name} отклонил(а) обжалование действий модерации от %{target}" reject_user_html: "%{name} отклонил(а) регистрацию %{target}" remove_avatar_user_html: "%{name} убрал(а) аватарку пользователя %{target}" reopen_report_html: "%{name} повторно открыл(а) жалобу %{target}" - resend_user_html: "%{name} повторно отправил письмо с подтверждением для %{target}" + resend_user_html: "%{name} повторно отправил(а) письмо с подтверждением для %{target}" reset_password_user_html: "%{name} сбросил(а) пароль пользователя %{target}" resolve_report_html: "%{name} решил(а) жалобу %{target}" sensitive_account_html: "%{name} установил(а) отметку файлов %{target} как «деликатного характера»" @@ -294,7 +295,7 @@ ru: update_custom_emoji_html: "%{name} обновил(а) эмодзи %{target}" update_domain_block_html: "%{name} обновил(а) блокировку домена для %{target}" update_ip_block_html: "%{name} изменил(а) правило для IP %{target}" - update_report_html: "%{name} обновленный отчет %{target}" + update_report_html: "%{name} изменил(а) жалобу %{target}" update_status_html: "%{name} изменил(а) пост пользователя %{target}" update_user_role_html: "%{name} изменил(а) роль %{target}" deleted_account: удалённая учётная запись @@ -460,8 +461,9 @@ ru: create: Создать блокировку resolve: Проверить домен title: Блокировка нового почтового домена - no_email_domain_block_selected: Блоки почтовых доменов не были изменены, так как ни один из них не был выбран + no_email_domain_block_selected: Блокировки почтовых доменов не были изменены, так как ни один из них не был выбран not_permitted: Не разрешено + resolved_dns_records_hint_html: Доменное имя указывает на следующие MX-домены, которые в конечном итоге отвечают за прием электронной почты. Блокировка MX-домена будет блокировать регистрации с любого адреса электронной почты, который использует тот же MX-домен, даже если видимое доменное имя отличается от него. Будьте осторожны, чтобы не заблокировать основных провайдеров электронной почты resolved_through_html: Разрешено через %{domain} title: Заблокированные e-mail домены export_domain_allows: @@ -625,8 +627,9 @@ ru: resolve_description_html: Никаких действий не будет выполнено относительно доложенного содержимого. Жалоба будет закрыта. silence_description_html: Учетная запись будет видна только тем пользователям, которые уже подписаны на неё, либо открыли его вручную. Это действие можно отменить в любой момент, и отменяет все жалобы против аккаунта. suspend_description_html: Аккаунт и все его содержимое будут недоступны и в конечном итоге удалены, и взаимодействие с ним будет невозможно. Это действие можно отменить в течение 30 дней. Отменяет все жалобы против этого аккаунта. + actions_description_html: Выберите действие, чтобы разрешить данную жалобу. Если вы примете меры модерации против аккаунта, его владелец получит уведомление по электронной почте, кроме тех случаев, когда выбрана категория Спам. actions_description_remote_html: Решите вопрос о том, какие меры необходимо принять для урегулирования этой жалобы. Это повлияет только на то, как ваш сервер взаимодействует с этим удаленным аккаунтом и обрабатывает его содержимое. - actions_no_posts: У этого отчета нет связанных с ним сообщений для удаления + actions_no_posts: У этой жалобы нет связанных с ней постов для удаления add_to_report: Прикрепить ещё already_suspended_badges: local: На этом сервере уже забанен @@ -667,7 +670,7 @@ ru: report: Жалоба №%{id} reported_account: Учётная запись нарушителя reported_by: Отправитель жалобы - reported_with_application: Сообщается с приложением + reported_with_application: Использованное для отправки жалобы приложение resolved: Решённые resolved_msg: Жалоба обработана, спасибо! skip_to_actions: Перейти к действиям @@ -815,7 +818,7 @@ ru: approved: Для регистрации требуется подтверждение none: Никто не может регистрироваться open: Все могут регистрироваться - warning_hint: Мы рекомендуем использовать "Требуется одобрение для регистрации", если вы не уверены, что ваша команда модераторов сможет своевременно справиться со спамом и вредоносными регистрациями. + warning_hint: Мы рекомендуем использовать "Требуется одобрение для регистрации", если вы не уверены, что ваша команда модераторов сможет своевременно справиться со спамом и злоумышленными регистрациями. security: authorized_fetch: Требовать аутентификацию от федеративных серверов authorized_fetch_hint: Требование аутентификации от федеративных серверов позволяет более строго соблюдать блокировки как на уровне пользователя, так и на уровне сервера. Однако при этом снижается производительность, уменьшается охват ваших ответов и могут возникнуть проблемы совместимости с некоторыми федеративными сервисами. Кроме того, это не помешает специальным исполнителям получать ваши публичные сообщения и учётные записи. @@ -901,6 +904,9 @@ ru: message_html: Вы не определили правила сервера. sidekiq_process_check: message_html: Ни один Sidekiq не запущен для %{value} очереди(-ей). Пожалуйста, просмотрите настройки Sidekiq + software_version_check: + action: Посмотреть доступные обновления + message_html: Доступно обновление для Mastodon. software_version_critical_check: action: Посмотреть доступные обновления message_html: Доступно критическое обновление Mastodon, пожалуйста, обновитесь как можно скорее. @@ -916,19 +922,19 @@ ru: tags: moderation: not_trendable: Не в тренде - not_usable: Невозможно использовать - pending_review: В ожидании обзора - review_requested: Обзор запрошен - reviewed: Рассмотрено + not_usable: Недоступный + pending_review: На рассмотрении + review_requested: Запрошено рассмотрение + reviewed: Рассмотренный title: Статус - trendable: Трендовый - unreviewed: Без рецензии - usable: Полезное + trendable: В тренде + unreviewed: Нерассмотренный + usable: Доступный name: Название - newest: Новейший - oldest: Старейший + newest: Сначала новые + oldest: Сначала старые open: Посмотреть публично - reset: Сброс + reset: Сбросить review: Состояние проверки search: Поиск title: Хэштеги @@ -946,7 +952,7 @@ ru: confirm_allow: Вы уверены, что хотите разрешить выбранные ссылки? confirm_allow_provider: Вы уверены, что хотите разрешить выбранных провайдеров? confirm_disallow: Вы уверены, что хотите запретить выбранные ссылки? - confirm_disallow_provider: Вы уверены, что хотите запретить выбранных поставщиков? + confirm_disallow_provider: Вы уверены, что хотите запретить выбранных провайдеров? description_html: Это ссылки, которыми в настоящее время много пользуются аккаунты, с которых ваш сервер видит сообщения. Это может помочь вашим пользователям узнать, что происходит в мире. Никакие ссылки не отображаются публично, пока вы не одобрите издателя. Вы также можете разрешить или отклонить индивидуальные ссылки. disallow: Запретить ссылку disallow_provider: Отклонить издание @@ -1012,14 +1018,14 @@ ru: many: За последнюю неделю использовало %{count} человек one: За последнюю неделю использовал один человек other: За последнюю неделю использовал %{count} человек - title: Рекомендации и тенденции + title: Рекомендации и тренды trending: Популярное warning_presets: add_new: Добавить delete: Удалить edit_preset: Удалить шаблон предупреждения empty: Вы еще не определили пресеты предупреждений. - title: Предупреждающие пред установки + title: Шаблоны предупреждений webhooks: add_new: Добавить конечную точку delete: Удалить @@ -1196,9 +1202,11 @@ ru: use_security_key: Использовать ключ безопасности author_attribution: example_title: Образец текста - hint_html: Контролируйте, как вы будете отмечены при обмене ссылками на Mastodon. + hint_html: Публикуете ли вы свои статьи где-либо ещё кроме Mastodon? Если да, то ваше авторство может быть упомянуто, когда ими делятся в Mastodon. + instructions: 'Добавьте код ниже в HTML ваших статей:' more_from_html: Больше от %{name} s_blog: "%{name}'S Блог" + then_instructions: Затем добавьте доменное имя сайта, где вы публикуетесь, в поле ниже. title: Авторская атрибуция challenge: confirm: Продолжить @@ -1308,7 +1316,7 @@ ru: csv: CSV domain_blocks: Доменные блокировки lists: Списки - mutes: Ваши игнорируете + mutes: Ваши игнорируемые storage: Ваши файлы featured_tags: add_new: Добавить @@ -1325,7 +1333,7 @@ ru: edit: add_keyword: Добавить ключевое слово keywords: Ключевые слова - statuses: Отдельные сообщения + statuses: Отдельные посты statuses_hint_html: Этот фильтр применяется для выбора отдельных постов, независимо от того, соответствуют ли они ключевым словам ниже. Просмотрите или удалите посты из фильтра. title: Изменить фильтр errors: @@ -1496,6 +1504,7 @@ ru: unsubscribe: action: Да, отписаться complete: Подписка отменена + confirmation_html: Вы точно желаете отписаться от всех уведомления типа «%{type}», доставляемых из сервера Mastodon %{domain} на ваш адрес электронной почты %{email}? Вы всегда сможете подписаться снова в настройках e-mail уведомлений. emails: notification_emails: favourite: любимые электронные письма с уведомлениями @@ -1741,6 +1750,7 @@ ru: delete: Удаление учётной записи development: Разработчикам edit_profile: Изменить профиль + export: Экспорт featured_tags: Избранные хэштеги import: Импорт import_and_export: Импорт и экспорт @@ -1761,7 +1771,7 @@ ru: domain_block: Приостановка сервера (%{target_name}) user_domain_block: Вы заблокировали %{target_name} lost_followers: Потерянные подписчики - lost_follows: Потерянный следует + lost_follows: Потерянные подписки preamble: Вы можете потерять подписчиков и последователей, если заблокируете домен или, если ваши модераторы решат приостановить работу удаленного сервера. Когда это произойдет, вы сможете загрузить списки разорванных отношений, чтобы проверить их и, возможно, импортировать на другой сервер. purged: Информация об этом сервере была удалена администраторами вашего сервера. type: Событие diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 306e670b71..9ab62cea71 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -30,17 +30,25 @@ sc: created_msg: As creadu una nota de moderatzione. destroyed_msg: As cantzelladu una nota de moderatzione. accounts: + add_email_domain_block: Bloca domìniu de posta eletrònica approve: Aprova approved_msg: Sa dimanda de registru de %{username} est istada aprovada are_you_sure: Seguru? avatar: Immàgine de profilu by_domain: Domìniu change_email: + changed_msg: Indiritzu eletrònicu de su contu modificadu! current_email: Indiritzu eletrònicu atuale label: Muda s'indiritzu eletrònicu new_email: Indiritzu eletrònicu nou submit: Muda s'indiritzu eletrònicu title: Muda s'indiritzu eletrònicu de %{username} + change_role: + changed_msg: Ruolu modificadu. + edit_roles: Gesti is ruolos de utente + label: Modifica su ruolu + no_role: Nissunu ruolu + title: Modifica su ruolu de %{username} confirm: Cunfirma confirmed: Cunfirmadu confirming: Cunfirmende @@ -91,6 +99,7 @@ sc: most_recent_ip: IP prus reghente no_account_selected: Perunu contu est istadu mudadu, dae chi non nd'as seletzionadu no_limits_imposed: Sena lìmites + no_role_assigned: Nissunu ruolu assignadu not_subscribed: Sena sutiscritzione pending: De revisionare perform_full_suspension: Suspèndidu @@ -108,12 +117,19 @@ sc: removed_header_msg: S'immàgine de intestatzione de %{username} est istada bogada resend_confirmation: already_confirmed: Custa persone est giai cunfirmada + send: Torra a imbiare su ligòngiu de cunfirmatzione + success: Ligòngiu de cunfirmatzione imbiadu. reset: Reseta reset_password: Reseta sa crae resubscribe: Torra a sutascrìere + role: Ruolu search: Chirca + search_same_email_domain: Àteras persones cun su pròpiu domìniu de posta search_same_ip: Àteras persones cun sa pròpiu IP security: Seguresa + security_measures: + only_password: Crae isceti + password_and_2fa: Crae e 2FA sensitive: Sensìbile sensitized: Marcadu comente sensìbile shared_inbox_url: URL de intrada cumpartzida @@ -129,6 +145,8 @@ sc: suspension_irreversible: Is datos de custu contu sunt istados cantzellados in manera irreversìbile. Podes bogare sa suspensione a su contu pro chi si potzat impreare, ma no at a recuperare datu perunu de is chi teniat in antis. suspension_reversible_hint_html: Su contu est istadu suspèndidu, e is datos ant a èssere cantzelladu de su totu su %{date}. Finas a tando, su contu si podet ripristinare sena efetu malu perunu. Si boles cantzellare totu is datos de su contu immediatamente ddu podes fàghere inoghe in bassu. title: Contos + unblock_email: Isbloca s'indiritzu de posta eletrònica + unblocked_email_msg: Posta eletrònica de %{username} isblocada unconfirmed_email: Posta eletrònica sena cunfirmare undo_sensitized: Boga sa marcadura comente sensìbile undo_silenced: Non pòngias a sa muda @@ -143,21 +161,31 @@ sc: whitelisted: Federatzione permìtida action_logs: action_types: + approve_user: Aprova s'utente assigned_to_self_report: Assigna s'informe + change_email_user: Muda s'indiritzu eletrònicu pro s'utente + change_role_user: Muda su ruolu de s'utente confirm_user: Cunfirma s'utente create_account_warning: Crea un'avisu create_announcement: Crea un'annùntziu + create_canonical_email_block: Crea unu blocu de posta eletrònica create_custom_emoji: Crea un'emoji personalizadu create_domain_allow: Crea unu domìniu permìtidu create_domain_block: Crea unu blocu de domìniu + create_email_domain_block: Crea unu blocu de domìniu de posta eletrònica create_ip_block: Crea una règula IP + create_unavailable_domain: Crea unu domìniu no a disponimentu + create_user_role: Crea unu ruolu demote_user: Degrada s'utente destroy_announcement: Cantzella s'annùntziu + destroy_canonical_email_block: Cantzella su blocu de posta eletrònica destroy_custom_emoji: Cantzella s'emoji personalizadu destroy_domain_allow: Cantzella su domìniu permìtidu destroy_domain_block: Cantzella su blocu de domìniu + destroy_email_domain_block: Cantzella su blocu de domìniu de posta eletrònica destroy_ip_block: Cantzella sa règula IP destroy_status: Cantzella s'istadu + destroy_unavailable_domain: Cantzella su domìniu no a disponimentu disable_2fa_user: Disativa 2FA disable_custom_emoji: Disativa s'emoji personalizadu disable_user: Disativa utente @@ -165,23 +193,33 @@ sc: enable_user: Ativa utente memorialize_account: Torra in unu contu de regordu promote_user: Promove utente + reject_user: Refuda s'utente remove_avatar_user: Cantzella immàgine de profilu reopen_report: Torra a abèrrere s'informe + resend_user: Torra a imbiare messàgiu eletrònicu de cunfirmatzione reset_password_user: Reseta sa crae resolve_report: Isorve s'informe sensitive_account: Marca is cuntenutos multimediales in su contu tuo comente sensìbiles silence_account: Pone custu contu a sa muda suspend_account: Suspende custu contu unassigned_report: Boga s'assignatzione de custu informe + unblock_email_account: Isbloca s'indiritzu de posta eletrònica unsensitive_account: Boga sa marcadura "sensìbiles" a is elementos multimediales in su contu tuo unsilence_account: Boga custu contu de is contos a sa muda unsuspend_account: Boga custu contu de is contos suspèndidos update_announcement: Atualiza s'annùntziu update_custom_emoji: Atualiza s'emoji personalizadu update_domain_block: Atualiza blocu de domìniu + update_ip_block: Atualiza sa règula IP + update_report: Atualiza s'informe update_status: Atualiza s'istadu + update_user_role: Atualiza su ruolu actions: + approve_user_html: "%{name} at aprovadu su registru de %{target}" assigned_to_self_report_html: "%{name} s'est auto-assignadu s'informe %{target}" + change_email_user_html: "%{name} at mudadu s'indiritzu de posta eletrònica de s'utente %{target}" + change_role_user_html: "%{name} at mudadu su ruolu de %{target}" + confirm_user_html: "%{name} at cunfirmadu s'indiritzu de posta eletrònica de s'utente %{target}" create_account_warning_html: "%{name} at imbiadu un'avisu a %{target}" create_announcement_html: "%{name} at creadu un'annùntziu nou %{target}" create_custom_emoji_html: "%{name} at carrigadu un'emoji nou %{target}" @@ -291,6 +329,8 @@ sc: confirm_suspension: cancel: Annulla confirm: Suspende + remove_all_data: Custu at a cantzellare totu su cuntenutu, elementos multimediales e datos de profilu pro is contos de custu domìniu dae su serbidore tuo. + stop_communication: Su serbidore tuo at a tzessare sa comunicatzione cun custos serbidores. title: Cunfirma su blocu de domìniu de %{domain} created_msg: Protzessende su blocu de domìniu destroyed_msg: Su blocu de domìniu est istadu iscontzadu @@ -361,9 +401,12 @@ sc: dashboard: instance_accounts_dimension: Contos prus sighidos instance_accounts_measure: contos sarvados + instance_languages_dimension: Limbas printzipales instance_reports_measure: informes a subra de àtere + instance_statuses_measure: publicatziones sarvadas delivery: all: Totus + unavailable: No a disponimentu delivery_available: Sa cunsigna est a disponimentu empty: Perunu domìniu agatadu. known_accounts: diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml index b591cdca57..0a665fb784 100644 --- a/config/locales/simple_form.ar.yml +++ b/config/locales/simple_form.ar.yml @@ -3,7 +3,6 @@ ar: simple_form: hints: account: - attribution_domains_as_text: يحمي من الإسناد الزائف. discoverable: يمكن عرض مشاركاتك العامة وملفك الشخصي أو التوصية به في مختلف مناطق ماستدون ويمكن اقتراح ملفك الشخصي على مستخدمين آخرين. display_name: اسمك الكامل أو اسمك المرح. fields: صفحتك الرئيسية، ضمائرك، عمرك، أي شيء تريده. diff --git a/config/locales/simple_form.ast.yml b/config/locales/simple_form.ast.yml index 5e3f1af89a..cca9f72df1 100644 --- a/config/locales/simple_form.ast.yml +++ b/config/locales/simple_form.ast.yml @@ -25,11 +25,11 @@ ast: password: Usa polo menos 8 caráuteres setting_aggregate_reblogs: Nun amuesa los artículos compartíos nuevos que yá se compartieren de recién (namás afeuta a los artículos compartíos d'agora) setting_always_send_emails: Los avisos nun se suelen unviar per corréu electrónicu si uses activamente Mastodon - setting_default_sensitive: El conteníu multimedia sensible anúbrese por defeutu y pue amosase al calcar nelli - setting_display_media_default: Anubrilu cuando se marque como sensible - setting_display_media_hide_all: Anubrilu siempres - setting_display_media_show_all: Amosalu siempres - setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia anubríu mas desenfonca los detalles + setting_default_sensitive: El conteníu multimedia sensible escuéndrese por defeutu y pue amosase al calcar nelli + setting_display_media_default: Escondelu cuando se marque como sensible + setting_display_media_hide_all: Escondelu siempre + setting_display_media_show_all: Amosalu siempre + setting_use_blurhash: Los dilíos básense nos colores del conteníu multimedia escondíu mas desenfonca los detalles featured_tag: name: 'Equí tán dalgunes de les etiquetes qu''usesti apocayá:' form_admin_settings: @@ -93,7 +93,7 @@ ast: expires_in: Caduca dempués de fields: Campos adicionales header: Semeya de la testera - irreversible: Escartar en cuentes d'anubrir + irreversible: Escartar en cuentes d'esconder locale: Llingua de la interfaz max_uses: Númberu máximu d'usos new_password: Contraseña nueva @@ -103,24 +103,24 @@ ast: phrase: Pallabra clave o fras setting_advanced_layout: Activar la interfaz web avanzada setting_aggregate_reblogs: Agrupar los artículos compartíos nes llinies de tiempu - setting_always_send_emails: Unviar siempres los avisos per corréu electrónicu + setting_always_send_emails: Unviar siempre los avisos per corréu electrónicu setting_auto_play_gif: Reproducir automáticamente los GIFs - setting_boost_modal: Amosar el diálogu de confirmación enantes de compartir un artículu + setting_boost_modal: Amosar el diálogu de confirmación enantes de compartir una publicación setting_default_language: Llingua de los artículos setting_default_privacy: Privacidá de los artículos - setting_default_sensitive: Marcar siempres tol conteníu como sensible - setting_delete_modal: Amosar el diálogu de confirmación enantes de desaniciar un artículu + setting_default_sensitive: Marcar siempre tol conteníu como sensible + setting_delete_modal: Amosar el diálogu de confirmación enantes de desaniciar una publicación setting_disable_hover_cards: Desactivar la previsualización de perfiles al pasar el mur penriba setting_disable_swiping: Desactivar el movimientu de desplazamientu setting_display_media: Conteníu multimedia - setting_expand_spoilers: Espander siempres los artículos marcaos con alvertencies de conteníu - setting_hide_network: Anubrir les cuentes que sigas y te sigan + setting_expand_spoilers: Espander siempre los artículos marcaos con alvertencies de conteníu + setting_hide_network: Esconder les cuentes que sigas y te sigan setting_reduce_motion: Amenorgar el movimientu de les animaciones setting_system_font_ui: Usar la fonte predeterminada del sistema setting_theme: Estilu del sitiu setting_trends: Amosar les tendencies de güei setting_unfollow_modal: Amosar el diálogu de confirmación enantes de dexar de siguir a daquién - setting_use_blurhash: Facer que'l conteníu multimedia anubríu tenga dilíos coloríos + setting_use_blurhash: Facer que'l conteníu multimedia escondíu tenga dilíos coloríos setting_use_pending_items: Mou lentu severity: Gravedá sign_in_token_attempt: Códigu de seguranza @@ -161,12 +161,12 @@ ast: sign_up_block: Bloquiar el rexistru de cuentes nueves sign_up_requires_approval: Llendar les cuentes rexistraes nueves notification_emails: - favourite: Daquién marcó como favoritu'l to artículu + favourite: Daquién marcó como favorita la to publicación follow: Daquién te sigue follow_request: Daquién solicitó siguite mention: Daquién te mentó pending_account: Una cuenta nueva precisa una revisión - reblog: Daquién compartió'l to artículu + reblog: Daquién compartió la to publicación report: Unvióse un informe nuevu software_updates: label: Hai disponible un anovamientu de Mastodon diff --git a/config/locales/simple_form.az.yml b/config/locales/simple_form.az.yml new file mode 100644 index 0000000000..e9ba86bc79 --- /dev/null +++ b/config/locales/simple_form.az.yml @@ -0,0 +1 @@ +az: diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index 7b7d92995b..567c55eae8 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -3,7 +3,7 @@ bg: simple_form: hints: account: - attribution_domains_as_text: Защитава от фалшиви атрибути. + attribution_domains_as_text: Едно на ред. Защитава от фалшиви атрибути. discoverable: Вашите публични публикации и профил може да се представят или препоръчват в различни области на Mastodon и вашия профил може да се предлага на други потребители. display_name: Вашето пълно име или псевдоним. fields: Вашата начална страница, местоимения, години, всичко що искате. @@ -144,7 +144,7 @@ bg: url: До къде ще се изпращат събитията labels: account: - attribution_domains_as_text: Позволяване само на особени уебсайтове + attribution_domains_as_text: Уебсайтове, на които е позволено да приписват авторството ви discoverable: Включване на профил и публикации в алгоритмите за откриване fields: name: Етикет diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 7b651470bf..168ccc697f 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -3,7 +3,7 @@ ca: simple_form: hints: account: - attribution_domains_as_text: Protegeix de falses atribucions. + attribution_domains_as_text: Un per línia. Protegeix de falses atribucions. discoverable: El teu perfil i els teus tuts públics poden aparèixer o ser recomanats en diverses àreas de Mastodon i el teu perfil pot ser suggerit a altres usuaris. display_name: El teu nom complet o el teu nom divertit. fields: La teva pàgina d'inici, pronoms, edat, el que vulguis. @@ -144,7 +144,7 @@ ca: url: On els esdeveniments seran enviats labels: account: - attribution_domains_as_text: Permet només webs específics + attribution_domains_as_text: Webs que us poden donar crèdit discoverable: Permet el perfil i el tuts en els algorismes de descobriment fields: name: Etiqueta diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml index 6242b1ca6e..1650502388 100644 --- a/config/locales/simple_form.cs.yml +++ b/config/locales/simple_form.cs.yml @@ -3,6 +3,7 @@ cs: simple_form: hints: account: + attribution_domains_as_text: Jeden na řádek. Chrání před falešným připisování autorství. discoverable: Vaše veřejné příspěvky a profil mohou být zobrazeny nebo doporučeny v různých oblastech Mastodonu a váš profil může být navrhován ostatním uživatelům. display_name: Vaše celé jméno nebo přezdívka. fields: Vaše domovská stránka, zájmena, věk, cokoliv chcete. @@ -130,6 +131,7 @@ cs: name: Můžete měnit pouze velikost písmen, například kvůli lepší čitelnosti user: chosen_languages: Po zaškrtnutí budou ve veřejných časových osách zobrazeny pouze příspěvky ve zvolených jazycích + role: Role určuje, která oprávnění uživatel má. user_role: color: Barva, která má být použita pro roli v celém UI, jako RGB v hex formátu highlighted: Toto roli učiní veřejně viditelnou @@ -142,6 +144,7 @@ cs: url: Kam budou události odesílány labels: account: + attribution_domains_as_text: Webové stránky s povolením Vám připsat autorství discoverable: Zobrazovat profil a příspěvky ve vyhledávacích algoritmech fields: name: Označení diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 56d1f873dc..0af738712d 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -3,7 +3,7 @@ cy: simple_form: hints: account: - attribution_domains_as_text: Yn amddiffyn rhag priodoliadau ffug. + attribution_domains_as_text: Un i bob llinell. Yn amddiffyn rhag priodoli ffug. discoverable: Mae'n bosibl y bydd eich postiadau cyhoeddus a'ch proffil yn cael sylw neu'n cael eu hargymell mewn gwahanol feysydd o Mastodon ac efallai y bydd eich proffil yn cael ei awgrymu i ddefnyddwyr eraill. display_name: Eich enw llawn neu'ch enw hwyl. fields: Eich tudalen cartref, rhagenwau, oed, neu unrhyw beth. @@ -41,7 +41,7 @@ cy: defaults: autofollow: Bydd pobl sy'n cofrestru drwy'r gwahoddiad yn eich dilyn yn awtomatig avatar: WEBP, PNG, GIF neu JPG. %{size} ar y mwyaf. Bydd yn cael ei leihau i %{dimensions}px - bot: Mae'r cyfrif hwn yn perfformio gweithredoedd awtomatig yn bennaf ac mae'n bosib nad yw'n cael ei fonitro + bot: Rhoi gwybod i eraill bod y cyfrif hwn yn perfformio gweithredoedd awtomatig yn bennaf ac mae'n bosib nad yw'n cael ei fonitro context: Un neu fwy cyd-destun lle dylai'r hidlydd weithio current_password: At ddibenion diogelwch, nodwch gyfrinair y cyfrif cyfredol current_username: I gadarnhau, nodwch enw defnyddiwr y cyfrif cyfredol @@ -144,7 +144,7 @@ cy: url: I ble bydd digwyddiadau'n cael eu hanfon labels: account: - attribution_domains_as_text: Dim ond yn caniatáu gwefannau penodol + attribution_domains_as_text: Gwefannau sy'n cael caniatâd i'ch cydnabod chi discoverable: Proffil nodwedd a phostiadau mewn algorithmau darganfod fields: name: Label diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index e7b8fe337a..24cb95813f 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -3,12 +3,12 @@ da: simple_form: hints: account: - attribution_domains_as_text: Beskytter mod falske tilskrivninger. + attribution_domains_as_text: Ét pr. linje. Beskytter mod falske tilskrivninger. discoverable: Dine offentlige indlæg og profil kan blive fremhævet eller anbefalet i forskellige områder af Mastodon, og profilen kan blive foreslået til andre brugere. display_name: Dit fulde navn eller dit sjove navn. fields: Din hjemmeside, dine pronominer, din alder, eller hvad du har lyst til. indexable: Dine offentlige indlæg vil kunne vises i Mastodon-søgeresultater. Folk, som har interageret med dem, vil kunne finde dem uanset. - note: 'Du kan @omtale andre personer eller #hashtags.' + note: 'Du kan @omtale andre personer eller #etiketter.' show_collections: Folk vil ikke kunne tjekke dine Følger og Følgere. Folk, du selv følger, vil stadig kunne se dette. unlocked: Folk vil kunne følge dig uden krav om godkendelse. Fjern markeringen, såfremt du ønsker at tjekke Følg-anmodninger og individuelt acceptere eller afvise nye Følgere. account_alias: @@ -16,7 +16,7 @@ da: account_migration: acct: Angiv brugernavn@domain for den konto, hvortil du vil flytte account_warning_preset: - text: Du kan bruge indlægssyntaks, såsom URL'er, hashtags og omtaler + text: Du kan bruge indlægssyntaks, såsom URL'er, etiketter og omtaler title: Valgfri. Ikke synlig for modtageren admin_account_action: include_statuses: Brugeren vil se, hvilke indlæg, som har forårsaget modereringen/advarslen @@ -54,7 +54,7 @@ da: password: Brug mindst 8 tegn phrase: Matches uanset uanset brug af store/små bogstaver i teksten eller indholdsadvarsel for et indlæg scopes: De API'er, som applikationen vil kunne tilgå. Vælges en topniveaudstrækning, vil detailvalg være unødvendige. - setting_aggregate_reblogs: Vis ikke nye boosts for nyligt boostede indlæg (påvirker kun nyligt modtagne boosts) + setting_aggregate_reblogs: Vis ikke nye fremhævelser for nyligt fremhævede indlæg (påvirker kun nyligt modtagne fremhævelser) setting_always_send_emails: Normalt sendes ingen e-mailnotifikationer under aktivt brug af Mastodon setting_default_sensitive: Sensitive medier er som standard skjult og kan vises med et klik setting_display_media_default: Skjul medier med sensitiv-markering @@ -70,7 +70,7 @@ da: domain: Dette kan være domænenavnet vist i den benyttede i e-mailadresse eller MX-post. Begge tjekkes under tilmelding. with_dns_records: Et forsøg på at opløse det givne domænes DNS-poster foretages, og resultaterne blokeres ligeledes featured_tag: - name: 'Her er nogle af dine hyppigst brugte hashtags:' + name: 'Her er nogle af dine hyppigst brugte etiketter:' filters: action: Vælg handlingen til eksekvering, når et indlæg matcher filteret actions: @@ -82,7 +82,7 @@ da: backups_retention_period: Brugere har mulighed for at generere arkiver af deres indlæg til senere downloade. Når sat til positiv værdi, vil disse arkiver automatisk blive slettet fra lagerpladsen efter det angivne antal dage. bootstrap_timeline_accounts: Disse konti fastgøres øverst på nye brugeres følg-anbefalinger. closed_registrations_message: Vises, når tilmeldinger er lukket - content_cache_retention_period: Alle indlæg fra andre servere (herunder boosts og besvarelser) slettes efter det angivne antal dage uden hensyn til lokal brugerinteraktion med disse indlæg. Dette omfatter indlæg, hvor en lokal bruger har markeret dem som bogmærker eller favoritter. Private omtaler mellem brugere fra forskellige instanser vil også være tabt og umulige at gendanne. Brugen af denne indstilling er beregnet til særlige formål instanser og bryder mange brugerforventninger ved implementering til almindelig brug. + content_cache_retention_period: Alle indlæg fra andre servere (herunder fremhævelser og besvarelser) slettes efter det angivne antal dage uden hensyn til lokal brugerinteraktion med disse indlæg. Dette omfatter indlæg, hvor en lokal bruger har markeret dem som bogmærker eller favoritter. Private omtaler mellem brugere fra forskellige instanser vil også være tabt og umulige at gendanne. Brugen af denne indstilling er beregnet til særlige formål instanser og bryder mange brugerforventninger ved implementering til almindelig brug. custom_css: Man kan anvende tilpassede stilarter på Mastodon-webversionen. favicon: WEBP, PNG, GIF eller JPG. Tilsidesætter standard Mastodon favikonet på mobilenheder med et tilpasset ikon. mascot: Tilsidesætter illustrationen i den avancerede webgrænseflade. @@ -101,7 +101,7 @@ da: thumbnail: Et ca. 2:1 billede vist sammen med serveroplysningerne. timeline_preview: Udloggede besøgende kan gennemse serverens seneste offentlige indlæg. trendable_by_default: Spring manuel gennemgang af trendindhold over. Individuelle elementer kan stadig fjernes fra trends efter kendsgerningen. - trends: Tendenser viser, hvilke indlæg, hashtags og nyheder opnår momentum på serveren. + trends: Tendenser viser, hvilke indlæg, etiketter og nyheder opnår momentum på serveren. trends_as_landing_page: Vis tendensindhold til udloggede brugere og besøgende i stedet for en beskrivelse af denne server. Kræver, at tendenser er aktiveret. form_challenge: current_password: Du bevæger dig ind på et sikkert område @@ -144,7 +144,7 @@ da: url: Hvor begivenheder sendes til labels: account: - attribution_domains_as_text: Tillad kun bestemte websteder + attribution_domains_as_text: Hjemmesider, der må kreditere dig discoverable: Fremhæv profil og indlæg i opdagelsesalgoritmer fields: name: Etiket @@ -205,10 +205,10 @@ da: password: Adgangskode phrase: Nøgleord/-sætning setting_advanced_layout: Aktivér avanceret webgrænseflade - setting_aggregate_reblogs: Gruppér boosts på tidslinjer + setting_aggregate_reblogs: Gruppér fremhævelser på tidslinjer setting_always_send_emails: Send altid e-mailnotifikationer setting_auto_play_gif: Autoafspil animerede GIF'er - setting_boost_modal: Vis bekræftelsesdialog inden boosting + setting_boost_modal: Vis bekræftelsesdialog inden fremhævelse setting_default_language: Sprog for indlæg setting_default_privacy: Fortrolighed for indlæg setting_default_sensitive: Markér altid medier som sensitive @@ -297,7 +297,7 @@ da: follow_request: Nogen anmodede om at følge dig mention: Nogen omtalte dig pending_account: Ny konto kræver gennemgang - reblog: Nogen boostede dit indlæg + reblog: Nogen fremhævede dit indlæg report: Ny anmeldelse indsendt software_updates: all: Notificér ved alle opdateringer @@ -313,10 +313,10 @@ da: indexable: Inkludér profilside i søgemaskiner show_application: Vis, fra hvilken app et indlæg er sendt tag: - listable: Tillad visning af dette hashtag i søgninger og forslag + listable: Tillad visning af denne etiket i søgninger og forslag name: Hashtag - trendable: Tillad visning af dette hashtag under trends - usable: Tillad indlæg at benytte dette hashtag lokalt + trendable: Tillad visning af denne etiket under tendenser + usable: Tillad indlæg at benytte denne etiket lokalt user: role: Rolle time_zone: Tidszone diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index f7e55f1a7b..e181ecdd6f 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -3,7 +3,7 @@ de: simple_form: hints: account: - attribution_domains_as_text: Dadurch können falsche Zuschreibungen unterbunden werden. + attribution_domains_as_text: Eine Domain pro Zeile. Dadurch können falsche Zuschreibungen unterbunden werden. discoverable: Deine öffentlichen Beiträge und dein Profil können in verschiedenen Bereichen auf Mastodon angezeigt oder empfohlen werden und dein Profil kann anderen vorgeschlagen werden. display_name: Dein richtiger Name oder dein Fantasiename. fields: Deine Website, Pronomen, dein Alter – alles, was du möchtest. @@ -144,7 +144,7 @@ de: url: Wohin Ereignisse gesendet werden labels: account: - attribution_domains_as_text: Nur ausgewählte Websites zulassen + attribution_domains_as_text: Websites, die auf dich verweisen dürfen discoverable: Profil und Beiträge in Suchalgorithmen berücksichtigen fields: name: Beschriftung @@ -242,7 +242,7 @@ de: filters: actions: hide: Vollständig ausblenden - warn: Mit einer Inhaltswarnung ausblenden + warn: Mit einer Warnung ausblenden form_admin_settings: activity_api_enabled: Aggregierte Nutzungsdaten über die API veröffentlichen app_icon: App-Symbol diff --git a/config/locales/simple_form.el.yml b/config/locales/simple_form.el.yml index d46e764a44..7c1d231665 100644 --- a/config/locales/simple_form.el.yml +++ b/config/locales/simple_form.el.yml @@ -3,7 +3,7 @@ el: simple_form: hints: account: - attribution_domains_as_text: Προστατεύει από ψευδείς ιδιότητες. + attribution_domains_as_text: Μία ανά γραμμή. Προστατεύει από ψευδείς ιδιότητες. discoverable: Οι δημόσιες δημοσιεύσεις και το προφίλ σου μπορεί να εμφανίζονται ή να συνιστώνται σε διάφορους τομείς του Mastodon και το προφίλ σου μπορεί να προτείνεται σε άλλους χρήστες. display_name: Το πλήρες ή το αστείο σου όνομα. fields: Η αρχική σου σελίδα, αντωνυμίες, ηλικία, ό,τι θες. @@ -144,7 +144,7 @@ el: url: Πού θα σταλούν τα γεγονότα labels: account: - attribution_domains_as_text: Να επιτρέπονται μόνο συγκεκριμένες ιστοσελίδες + attribution_domains_as_text: Ιστοσελίδες που επιτρέπεται να σου δώσουν εύσημα discoverable: Παροχή προφίλ και αναρτήσεων σε αλγορίθμους ανακάλυψης fields: name: Περιγραφή diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml index b802fd532f..039a69dba2 100644 --- a/config/locales/simple_form.en-GB.yml +++ b/config/locales/simple_form.en-GB.yml @@ -3,7 +3,7 @@ en-GB: simple_form: hints: account: - attribution_domains_as_text: Protects from false attributions. + attribution_domains_as_text: One per line. Protects from false attributions. discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users. display_name: Your full name or your fun name. fields: Your homepage, pronouns, age, anything you want. @@ -144,7 +144,7 @@ en-GB: url: Where events will be sent to labels: account: - attribution_domains_as_text: Only allow specific websites + attribution_domains_as_text: Websites allowed to credit you discoverable: Feature profile and posts in discovery algorithms fields: name: Label diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 6d57adb831..1a60ca8206 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -3,7 +3,7 @@ en: simple_form: hints: account: - attribution_domains_as_text: Protects from false attributions. + attribution_domains_as_text: One per line. Protects from false attributions. discoverable: Your public posts and profile may be featured or recommended in various areas of Mastodon and your profile may be suggested to other users. display_name: Your full name or your fun name. fields: Your homepage, pronouns, age, anything you want. @@ -180,7 +180,7 @@ en: kmyblue: kmyblue labels: account: - attribution_domains_as_text: Only allow specific websites + attribution_domains_as_text: Websites allowed to credit you discoverable: Feature profile and posts in discovery algorithms fields: examples: diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml index cb4a9041e8..dfc9935194 100644 --- a/config/locales/simple_form.eo.yml +++ b/config/locales/simple_form.eo.yml @@ -3,7 +3,7 @@ eo: simple_form: hints: account: - attribution_domains_as_text: Protektas kontraŭ falsaj atribuoj. + attribution_domains_as_text: Unu por linio. Protektas kontraŭ falsaj atribuoj. discoverable: Viaj publikaj afiŝoj kaj profilo povas esti prezentitaj aŭ rekomenditaj en diversaj lokoj de Mastodon kaj via profilo povas esti proponita al aliaj uzantoj. display_name: Via plena nomo aŭ via kromnomo. fields: Via retpaĝo, pronomoj, aĝo, ĉio, kion vi volas. @@ -40,12 +40,14 @@ eo: text: Oni povas apelaci strikin nur unufoje defaults: autofollow: Homoj, kiuj registriĝos per la invito aŭtomate sekvos vin + avatar: WEBP, PNG, GIF aŭ JPG. Maksimume %{size}. Malgrandiĝos al %{dimensions}px bot: Tiu konto ĉefe faras aŭtomatajn agojn, kaj povas esti ne kontrolata context: Unu ol pluraj kuntekstoj kie la filtrilo devus agi current_password: Pro sekuraj kialoj, bonvolu enigi la pasvorton de la nuna konto current_username: Por konfirmi, bonvolu enigi la uzantnomon de la nuna konto digest: Sendita nur post longa tempo de neaktiveco, kaj nur se vi ricevis personan mesaĝon en via foresto email: Vi ricevos konfirman retpoŝton + header: WEBP, PNG, GIF aŭ JPG. Maksimume %{size}. Malgrandiĝos al %{dimensions}px inbox_url: Kopiu la URL de la ĉefpaĝo de la ripetilo, kiun vi volas uzi irreversible: La filtritaj mesaĝoj malaperos por eterne, eĉ se la filtrilo poste estas forigita locale: La lingvo de la fasado, retpoŝtaĵoj, kaj sciigoj @@ -54,10 +56,10 @@ eo: scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn. setting_aggregate_reblogs: Ne montri novajn plusendojn de mesaĝoj lastatempe plusenditaj (nur efikas al nove ricevitaj plusendoj) setting_always_send_emails: Normale, la sciigoj per retpoŝto ne estos senditaj kiam vi uzas Mastodon aktive - setting_default_sensitive: Tiklaj plurmedioj estas kaŝitaj implicite, kaj povas esti montritaj per klako + setting_default_sensitive: Tiklaj vidaŭdaĵoj estas implicite kaŝitaj kaj povas esti montritaj per alklako setting_display_media_default: Kaŝi plurmediojn markitajn kiel tiklaj - setting_display_media_hide_all: Ĉiam kaŝi la plurmediojn - setting_display_media_show_all: Ĉiam montri la plurmediojn + setting_display_media_hide_all: Ĉiam kaŝi la vidaŭdaĵojn + setting_display_media_show_all: Ĉiam montri la vidaŭdaĵojn setting_use_blurhash: Transirojn estas bazita sur la koloroj de la kaŝitaj aŭdovidaĵoj sed ne montri iun ajn detalon setting_use_pending_items: Kaŝi tempoliniajn ĝisdatigojn malantaŭ klako anstataŭ aŭtomate rulumi la fluon username: Vi povas uzi literojn, ciferojn kaj substrekojn @@ -76,11 +78,15 @@ eo: warn: Kaŝi la enhavon filtritan malantaŭ averto mencianta la nomon de la filtro form_admin_settings: activity_api_enabled: Nombroj de loke publikigitaj afiŝoj, aktivaj uzantoj kaj novaj registradoj en semajnaj siteloj + app_icon: WEBP, PNG, GIF aŭ JPG. Anstataŭigas la defaŭltan aplikaĵan bildsimbolon sur porteblaj aparatoj kun propra bildsimbolo. + backups_retention_period: Uzantoj havas la kapablon generi arkivojn de siaj afiŝoj por elŝuti poste. Kiam estas agordita al pozitiva valoro, ĉi tiuj arkivoj estos aŭtomate forigitaj de via stokado post la specifita nombro da tagoj. bootstrap_timeline_accounts: Ĉi tiuj kontoj pinglitas al la supro de sekvorekomendoj de novaj uzantoj. closed_registrations_message: Montrita kiam registroj fermitas + content_cache_retention_period: Ĉiuj afiŝoj de aliaj serviloj (inkluzive de diskonigoj kaj respondoj) estos forigitaj post la specifita nombro da tagoj, sen konsidero al iu ajn loka uzantinterago kun tiuj afiŝoj. Ĉi tio inkluzivas afiŝojn, kie loka uzanto markis ĝin kiel legosignojn aŭ ŝatatajn. Privataj mencioj inter uzantoj de malsamaj nodoj ankaŭ estos perditaj kaj neeble restaŭreblaj. Uzo de ĉi tiu agordo estas celita por specialcelaj okazoj kaj rompas multajn uzantajn atendojn kiam efektivigita por ĝenerala uzo. custom_css: Vi povas meti propajn stilojn en la retversio de Mastodon. favicon: WEBP, PNG, GIF aŭ JPG. Anstataŭigas la defaŭltan Mastodon-favikono kun propra bildsimbolo. mascot: Anstatauigi la ilustraĵon en la altnivela retinterfaco. + media_cache_retention_period: Amaskomunikilaj dosieroj de afiŝoj faritaj de foraj uzantoj estas konservitaj en kaŝmemoro en via servilo. Kiam agordita al pozitiva valoro, amaskomunikilaro estos forigita post la specifita nombro da tagoj. Se la amaskomunikilaro-datumoj estas petitaj post kiam ĝi estas forigita, ĝi estos re-elŝutita, se la fonta enhavo ankoraŭ disponeblas. Pro limigoj pri kiom ofte ligaj antaŭrigardaj kartoj enketas retejojn de ekstera liveranto, oni rekomendas agordi ĉi tiun valoron al almenaŭ 14 tagoj, aŭ ligaj antaŭrigardaj kartoj ne estos ĝisdatigitaj laŭpostule antaŭ tiu tempo. peers_api_enabled: Listo de domajnaj nomoj kiujn ĉi tiu servilo renkontis en la fediverso. Neniuj datumoj estas inkluditaj ĉi tie pri ĉu vi federacias kun donita servilo, nur ke via servilo scias pri ĝi. Ĉi tio estas uzata de servoj kiuj kolektas statistikojn pri federacio en ĝenerala signifo. profile_directory: La profilujo listigas ĉiujn uzantojn kiu volonte malkovrebli. require_invite_text: Kiam registroj bezonas permanan aprobon, igi la "Kial vi volas aliĝi?" tekstoenigon deviga anstau nedeviga @@ -138,7 +144,7 @@ eo: url: Kien eventoj sendotas labels: account: - attribution_domains_as_text: Permesi nur specifajn retejojn + attribution_domains_as_text: Retejoj permesitaj krediti vin discoverable: Elstarigi profilon kaj afiŝojn en eltrovantaj algoritmoj fields: name: Etikedo @@ -175,8 +181,8 @@ eo: text: Klarigu kial ĉi tiu decido devas inversigitis defaults: autofollow: Inviti al sekvi vian konton - avatar: Rolfiguro - bot: Tio estas robota konto + avatar: Profilbildo + bot: Ĉi tio estas aŭtomata konto chosen_languages: Filtri lingvojn confirm_new_password: Konfirmi novan pasvorton confirm_password: Konfirmi pasvorton @@ -205,11 +211,11 @@ eo: setting_boost_modal: Montri konfirman fenestron antaŭ ol diskonigi mesaĝon setting_default_language: Publikada lingvo setting_default_privacy: Privateco de afiŝado - setting_default_sensitive: Ĉiam marki plurmediojn kiel tiklaj + setting_default_sensitive: Ĉiam marki la vidaŭdaĵojn kiel tiklaj setting_delete_modal: Montri konfirman fenestron antaŭ ol forigi mesaĝon setting_disable_hover_cards: Malebligi profilan antaŭmontron kiam oni musumas setting_disable_swiping: Malebligi svingajn movojn - setting_display_media: Montrado de plurmedioj + setting_display_media: Vidigo de vidaŭdaĵoj setting_display_media_default: Implicita setting_display_media_hide_all: Kaŝi ĉiujn setting_display_media_show_all: Montri ĉiujn @@ -243,6 +249,7 @@ eo: backups_retention_period: Uzantoarkivretendauro bootstrap_timeline_accounts: Ĉiam rekomendi ĉi tiujn kontojn al novaj uzantoj closed_registrations_message: Kutima mesaĝo kiam registroj ne estas disponeblaj + content_cache_retention_period: Retenperiodo de fora enhavo custom_css: Propa CSS favicon: Favorikono mascot: Propa maskoto diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index d06d09761a..98254c5e99 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -3,7 +3,7 @@ es-AR: simple_form: hints: account: - attribution_domains_as_text: Protege de atribuciones falsas. + attribution_domains_as_text: Una por línea. Protege de falsas atribuciones. discoverable: Tu perfil y publicaciones pueden ser destacadas o recomendadas en varias áreas de Mastodon, y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu pseudónimo. fields: Tu sitio web, pronombres, edad, o lo que quieras. @@ -144,7 +144,7 @@ es-AR: url: Adónde serán enviados los eventos labels: account: - attribution_domains_as_text: Solo permitir sitios web específicos + attribution_domains_as_text: Sitios web autorizados a acreditarte discoverable: Destacar perfil y mensajes en algoritmos de descubrimiento fields: name: Nombre de campo diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index 8c84e35a4d..135755bc7e 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -3,20 +3,20 @@ es-MX: simple_form: hints: account: - attribution_domains_as_text: Protege frente atribuciones fraudulentas. + attribution_domains_as_text: Uno por línea. Protege contra atribuciones falsas. discoverable: Tu perfil y las publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. - display_name: Tu nombre completo o tu nick. - fields: Tu página de inicio, pronombres, edad, todo lo que quieras. + display_name: Tu nombre completo o tu apodo. + fields: Tu página de inicio, pronombres, edad, lo que quieras. indexable: Tus publicaciones públicas pueden aparecer en los resultados de búsqueda en Mastodon. Las personas que han interactuado con tus publicaciones pueden buscarlas en cualquier momento. - note: 'Puedes @mencionar a otra gente o #hashtags.' + note: 'Puedes @mencionar a otra gente o #etiquetas.' show_collections: Las personas pueden navegar a través de tus seguidos y seguidores. Las personas que te siguen pueden ver que las sigues. unlocked: Las personas pueden seguirte sin solicitar la aprobación. No lo selecciones si quieres revisar las solicitudes de seguimiento y elegir si aceptas o rechazas a nuevos seguidores. account_alias: acct: Especifique el nombre de usuario@dominio de la cuenta desde la cual se desea migrar account_migration: - acct: Especifique el nombre de usuario@dominio de la cuenta a la cual desea migrar + acct: Especifica el nombre de usuario@dominio de la cuenta a la cual desea migrar account_warning_preset: - text: Puede usar sintaxis de publicaciones, como URLs, etiquetas y menciones + text: Puedes usar sintaxis de publicaciones, como URLs, etiquetas y menciones title: Opcional. No visible para el destinatario admin_account_action: include_statuses: El usuario verá qué publicaciones han causado la acción de moderación o advertencia @@ -25,7 +25,7 @@ es-MX: type_html: Elige qué hacer con %{acct} types: disable: Evitar que el usuario utilice su cuenta, pero no eliminar ni ocultar sus contenidos. - none: Utilizar esto para enviar una advertencia al usuario, sin poner en marcha ninguna otra acción. + none: Usa esto para enviar una advertencia al usuario, sin desencadenar ninguna otra acción. sensitive: Forzar que todos los archivos multimedia de este usuario sean marcados como sensibles. silence: Evita que el usuario pueda publicar con visibilidad pública, y oculta sus publicaciones y notificaciones a personas que no lo siguen. Cierra todas las denuncias contra esta cuenta. suspend: Evita cualquier interacción desde o hacia esta cuenta y elimina su contenido. Reversible en 30 días. Cierra todas las denuncias contra esta cuenta. @@ -48,20 +48,20 @@ es-MX: digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia email: Se le enviará un correo de confirmación header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px - inbox_url: Copia la URL de la página principal del relés que quieres utilizar + inbox_url: Copia la URL de la página principal del relé que deseas usar irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push - password: Utilice al menos 8 caracteres + password: Utiliza al menos 8 caracteres phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una publicación scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. setting_aggregate_reblogs: No mostrar nuevos impulsos para las publicaciones que han sido recientemente impulsadas (sólo afecta a las publicaciones recibidas recientemente) setting_always_send_emails: Normalmente las notificaciones por correo electrónico no se enviarán cuando estés usando Mastodon activamente - setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click + setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un clic setting_display_media_default: Ocultar contenido multimedia marcado como sensible setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible - setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles - setting_use_pending_items: Ocultar nuevos estados detrás de un clic en lugar de desplazar automáticamente el feed + setting_use_blurhash: Los degradados se basan en los colores de los elementos visuales ocultos, pero ocultan cualquier detalle + setting_use_pending_items: Ocultar las publicaciones de la línea de tiempo tras un clic en lugar de desplazar automáticamente el feed username: Puedes usar letras, números y guiones bajos whole_word: Cuando la palabra clave o frase es solo alfanumérica, solo será aplicado si concuerda con toda la palabra domain_allow: @@ -133,7 +133,7 @@ es-MX: chosen_languages: Cuando se marca, solo se mostrarán las publicaciones en los idiomas seleccionados en las líneas de tiempo públicas role: El rol controla qué permisos tiene el usuario. user_role: - color: Color que se utilizará para el rol a lo largo de la interfaz de usuario, como RGB en formato hexadecimal + color: Color que se usará para el rol en toda la interfaz de usuario, como RGB en formato hexadecimal highlighted: Esto hace que el rol sea públicamente visible name: Nombre público del rol, si el rol se establece para que se muestre como una insignia permissions_as_keys: Los usuarios con este rol tendrán acceso a... @@ -144,7 +144,7 @@ es-MX: url: Donde los eventos serán enviados labels: account: - attribution_domains_as_text: Solo permitir sitios web específicos + attribution_domains_as_text: Sitios web autorizados para acreditarte discoverable: Destacar el perfil y las publicaciones en el algoritmo de descubrimiento fields: name: Etiqueta @@ -193,7 +193,7 @@ es-MX: email: Dirección de correo electrónico expires_in: Expirar tras fields: Metadatos de perfil - header: Img. cabecera + header: Imagen de encabezado honeypot: "%{label} (no rellenar)" inbox_url: URL de la entrada de relés irreversible: Dejar en lugar de ocultar @@ -222,11 +222,11 @@ es-MX: setting_expand_spoilers: Siempre expandir las publicaciones marcadas con advertencias de contenido setting_hide_network: Ocultar tu red setting_reduce_motion: Reducir el movimiento de las animaciones - setting_system_font_ui: Utilizar la tipografía por defecto del sistema + setting_system_font_ui: Usar la fuente por defecto del sistema setting_theme: Tema del sitio setting_trends: Mostrar las tendencias de hoy setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien - setting_use_blurhash: Mostrar gradientes coloridos para contenido multimedia oculto + setting_use_blurhash: Mostrar degradados de colores para contenidos multimedia ocultos setting_use_pending_items: Modo lento severity: Severidad sign_in_token_attempt: Código de seguridad diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index b22701aae7..1e80b9ce05 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -3,7 +3,7 @@ es: simple_form: hints: account: - attribution_domains_as_text: Protege frente atribuciones fraudulentas. + attribution_domains_as_text: Una por línea. Protege de falsas atribuciones. discoverable: Tu perfil y publicaciones públicas pueden ser destacadas o recomendadas en varias áreas de Mastodon y tu perfil puede ser sugerido a otros usuarios. display_name: Tu nombre completo o tu apodo. fields: Tu carta de presentación, pronombres, edad, lo que quieras. @@ -16,7 +16,7 @@ es: account_migration: acct: Especifica el nombre_de_usuario@dominio de la cuenta hacia la que quieres migrar account_warning_preset: - text: Puede usar sintaxis de publicaciones, como URLs, hashtags y menciones + text: Puede usar sintaxis de publicaciones, como URLs, etiquetas y menciones title: Opcional. No es visible para el destinatario admin_account_action: include_statuses: El usuario verá qué publicaciones han causado la acción de moderación o advertencia @@ -46,12 +46,12 @@ es: current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia - email: Se le enviará un correo de confirmación + email: Te enviaremos un correo electrónico de confirmación header: WEBP, PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px inbox_url: Copia la URL de la página principal del relés que quieres utilizar irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push - password: Utilice al menos 8 caracteres + password: Utiliza al menos 8 caracteres phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una publicación scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. setting_aggregate_reblogs: No mostrar nuevos impulsos para las publicaciones que han sido recientemente impulsadas (sólo afecta a los impulsos recibidos recientemente) @@ -101,7 +101,7 @@ es: thumbnail: Una imagen de aproximadamente 2:1 se muestra junto a la información de tu servidor. timeline_preview: Los visitantes no registrados podrán navegar por los mensajes públicos más recientes disponibles en el servidor. trendable_by_default: Omitir la revisión manual del contenido en tendencia. Los elementos individuales aún podrán eliminarse de las tendencias. - trends: Las tendencias muestran qué mensajes, etiquetas y noticias están ganando tracción en tu servidor. + trends: Las tendencias muestran qué publicaciones, etiquetas y noticias están ganando tracción en tu servidor. trends_as_landing_page: Mostrar contenido en tendencia para usuarios y visitantes en lugar de una descripción de este servidor. Requiere que las tendencias estén habilitadas. form_challenge: current_password: Estás entrando en un área segura @@ -144,7 +144,7 @@ es: url: Donde los eventos serán enviados labels: account: - attribution_domains_as_text: Solo permitir sitios web específicos + attribution_domains_as_text: Sitios web autorizados a acreditarte discoverable: Destacar perfil y publicaciones en algoritmos de descubrimiento fields: name: Etiqueta @@ -193,7 +193,7 @@ es: email: Dirección de correo electrónico expires_in: Expirar tras fields: Metadatos de perfil - header: Img. cabecera + header: Imagen de encabezado honeypot: "%{label} (no rellenar)" inbox_url: URL de la entrada de relés irreversible: Rechazar en lugar de ocultar @@ -208,7 +208,7 @@ es: setting_aggregate_reblogs: Agrupar impulsos en las líneas de tiempo setting_always_send_emails: Enviar siempre notificaciones por correo setting_auto_play_gif: Reproducir automáticamente los GIFs animados - setting_boost_modal: Mostrar ventana de confirmación antes de impulsar + setting_boost_modal: Mostrar diálogo de confirmación antes de impulsar una publicación setting_default_language: Idioma de publicación setting_default_privacy: Privacidad de publicaciones setting_default_sensitive: Marcar siempre imágenes como sensibles @@ -339,5 +339,5 @@ es: text: necesario title: sessions: - webauthn: Utilice una de sus claves de seguridad para iniciar sesión + webauthn: Utiliza una de sus claves de seguridad para iniciar sesión 'yes': Sí diff --git a/config/locales/simple_form.et.yml b/config/locales/simple_form.et.yml index 8d045cfcfe..a2ebf63b11 100644 --- a/config/locales/simple_form.et.yml +++ b/config/locales/simple_form.et.yml @@ -3,7 +3,7 @@ et: simple_form: hints: account: - attribution_domains_as_text: Kaitseb valede omistuste eest. + attribution_domains_as_text: Üks rea peal. See kaitseb pahatahtlike viidete eest. discoverable: Su profiili ja avalikke postitusi võidakse Mastodoni erinevates piirkondades esile tõsta või soovitada ning su profiili soovitada teistele kasutajatele. display_name: Su täisnimi või naljanimi. fields: Su koduleht, sugu, vanus. Mistahes, mida soovid. @@ -144,7 +144,7 @@ et: url: Kuhu sündmused saadetakse labels: account: - attribution_domains_as_text: Luba vaid kindlad veebilehed + attribution_domains_as_text: Sinule viidata lubatud veebilehed discoverable: Tõsta postitused ja profiil avastamise algoritmides esile fields: name: Nimetus diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index 7647e187ec..f9de2de93c 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -3,6 +3,7 @@ eu: simple_form: hints: account: + attribution_domains_as_text: Lerroko bat. Atribuzio faltsuetatik babesten ditu. discoverable: Zure bidalketa publikoak eta profila nabarmendu edo gomendatu egin daitezke Mastodon-go hainbat eremutan eta zure profila beste erabiltzaile batzuei iradoki dakieke. display_name: Zure izena edo ezizena. fields: Zure webgunea, izenordainak, adina, nahi duzun guztia. @@ -142,6 +143,7 @@ eu: url: Nora bidaliko diren gertaerak labels: account: + attribution_domains_as_text: Akreditatzeko baimendutako webguneak discoverable: Ezagutarazi profila eta bidalketak bilaketa algoritmoetan fields: name: Etiketa @@ -241,11 +243,13 @@ eu: warn: Ezkutatu ohar batekin form_admin_settings: activity_api_enabled: Argitaratu erabiltzaile-jardueraren guztizko estatistikak APIan + app_icon: Aplikazio ikonoa backups_retention_period: Erabiltzailearen artxiboa gordetzeko epea bootstrap_timeline_accounts: Gomendatu beti kontu hauek erabiltzaile berriei closed_registrations_message: Izen-emateak itxita daudenerako mezu pertsonalizatua content_cache_retention_period: Urruneko edukiaren atxikipen-aldia custom_css: CSS pertsonalizatua + favicon: Gune-ikurra mascot: Maskota pertsonalizatua (zaharkitua) media_cache_retention_period: Multimediaren cachea atxikitzeko epea peers_api_enabled: Argitaratu aurkitutako zerbitzarien zerrenda APIan @@ -310,6 +314,7 @@ eu: listable: Baimendu traola hau bilaketetan agertzea eta profilen direktorioan name: Traola trendable: Baimendu traola hau joeretan agertzea + usable: Baimendu bidalketek traola lokal hau erabiltzea user: role: Rola time_zone: Ordu zona diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index bbb0523b17..36eba5fcca 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -3,6 +3,7 @@ fa: simple_form: hints: account: + attribution_domains_as_text: یکی در هر خط. محافظت از اعتباردهی‌های اشتباه. discoverable: ممکن است نمایه و فرسته‌های عمومیتان در جاهای مختلف ماستودون نمایانده و توصیه شود و نمایه‌تان به دیگر کاربران پیشنهاد شود. display_name: نام کامل یا باحالتان. fields: صفحهٔ خانگی، تلفّظ، سن و هرچیزی که دوست دارید. @@ -39,15 +40,17 @@ fa: text: فقط یک بار می‌توانید برای اخطار درخواست تجدیدنظر کنید defaults: autofollow: کسانی که از راه دعوت‌نامه عضو می‌شوند به طور خودکار پیگیر شما خواهند شد + avatar: یکی از قالب‌های WEBP، PNG، GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد bot: این حساب بیشتر به طور خودکار فعالیت می‌کند و نظارت پیوسته‌ای روی آن وجود ندارد context: یک یا چند زمینه که پالایه باید در آن‌ها اعمال شود current_password: به دلایل امنیتی لطفاً گذرواژه این حساب را وارد کنید current_username: برای تأیید، لطفاً نام کاربری حساب فعلی را وارد کنید digest: تنها وقتی فرستاده می‌شود که مدتی طولانی فعالیتی نداشته باشید و در این مدت برای شما پیغام خصوصی‌ای نوشته شده باشد - email: به شما ایمیل تأییدی فرستاده خواهد شد + email: تأییدیه‌ای برایتان رایانامه خواهد شد + header: یکی از قالب‌های WEBP، PNG، GIF یا JPG. بیشترین اندازه %{size}. تصویر به اندازهٔ %{dimensions} پیکسل تبدیل خواهد شد inbox_url: نشانی صفحهٔ اصلی رله‌ای را که می‌خواهید به کار ببرید کپی کنید irreversible: فرسته‌های پالوده به طور برگشت‌ناپذیری ناپدید می‌شوند، حتا اگر بعدها پالایه برداشته شود - locale: زبان واسط کاربری، رایانامه‌ها و آگاهی‌های ارسالی + locale: زبان میانای کاربری، رایانامه‌ها و آگاهی‌های ارسالی password: دست‌کم باید ۸ نویسه داشته باشد phrase: مستقل از کوچکی و بزرگی حروف، با متن اصلی یا هشدار محتوای فرسته‌ها مقایسه می‌شود scopes: واسط‌های برنامه‌نویسی که این برنامه به آن دسترسی دارد. اگر بالاترین سطح دسترسی را انتخاب کنید، دیگر نیازی به انتخاب سطح‌های پایینی ندارید. @@ -75,10 +78,15 @@ fa: warn: نهفتن محتوای پالوده پشت هشداری که به عنوان پالایه اشاره می‌کند form_admin_settings: activity_api_enabled: تعداد بوق‌های منتشرهٔ محلی، کاربران فعال، و کاربران تازه در هر هفته + app_icon: WEBP، PNG، GIF یا JPG. با یک نماد سفارشی، نماد برنامه پیش‌فرض را در دستگاه‌های تلفن همراه لغو می‌کند. + 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: می‌توانیدروی نگارش وب ماستودون سبک‌های سفارشی اعمال کنید. + favicon: WEBP، PNG، GIF یا JPG. فاویکون پیش‌فرض ماستودون را با یک نماد سفارشی لغو می‌کند. mascot: نقش میانای وب پیش‌رفته را پایمال می‌کند. + media_cache_retention_period: فایل های رسانه ای از پست های ارسال شده توسط کاربران راه دور در سرور شما ذخیره می شوند. وقتی روی مقدار مثبت تنظیم شود، رسانه پس از تعداد روزهای مشخص حذف می شود. اگر داده‌های رسانه پس از حذف درخواست شود، در صورتی که محتوای منبع هنوز در دسترس باشد، مجدداً بارگیری می‌شود. با توجه به محدودیت‌هایی که در مورد تعداد دفعات نظرسنجی کارت‌های پیش‌نمایش پیوند از سایت‌های شخص ثالث وجود دارد، توصیه می‌شود این مقدار را حداقل 14 روز تنظیم کنید، در غیر این صورت کارت‌های پیش‌نمایش پیوند قبل از آن زمان به‌روزرسانی نمی‌شوند. peers_api_enabled: فهرستی از نام‌های دامنه‌ای که این کارساز در فدیورس با آن مواجه شده است. هیچ اطلاعاتی در مورد اینکه آیا شما با یک کارساز داده شده متعهد هستید، در اینجا گنجانده نشده است، فقط کارساز شما در مورد آن می‌داند. این توسط خدماتی استفاده می‌شود که آمار مربوط به فدراسیون را به معنای کلی جمع‌آوری می‌کنند. profile_directory: شاخهٔ نمایه، همهٔ کاربرانی که کشف‌پذیری را برگزیده‌اند سیاهه می‌کند. require_invite_text: زمانی که نام‌نویسی ها نیازمند تایید دستی است، متن «چرا می‌خواهید بپیوندید؟» بخش درخواست دعوت را به جای اختیاری، اجباری کنید @@ -88,6 +96,13 @@ fa: site_short_description: شرحی کوتاه برای کمک به شناسایی یکتای کارسازتان. چه‌کسی می‌گرداندش و برای چه کسیست؟ site_terms: از سیاست محرمانگی خوتان استفاده کرده یا برای استفاده از سیاست پیش‌گزیده خالی بگذارید. می‌تواند در قالب مارک‌دون باشد. site_title: چگونه مردم ممکن است به کارساز شما علاوه بر نام دامنه آن مراجعه کنند. + status_page_url: نشانی وب صفحه‌ای که در آن افراد می‌توانند وضعیت این سرور را در هنگام قطع شدن ببینند + theme: زمینه‌ای که بینندگان خارج شده و کاربران جدید می‌بینند. + thumbnail: یک تصویر تقریباً 2:1 در کنار اطلاعات سرور شما نمایش داده می شود. + timeline_preview: بازدیدکنندگانی که از سیستم خارج شده اند می توانند جدیدترین پست های عمومی موجود در سرور را مرور کنند. + trendable_by_default: از بررسی دستی محتوای پرطرفدار صرف نظر کنید. آیتم های فردی هنوز هم می توانند پس از واقعیت از روند حذف شوند. + trends: روندها نشان می‌دهند که کدام پست‌ها، هشتگ‌ها و داستان‌های خبری در سرور شما مورد توجه قرار گرفته‌اند. + trends_as_landing_page: به جای توضیح این سرور، محتوای پرطرفدار را به کاربران و بازدیدکنندگان از سیستم خارج شده نشان دهید. نیاز به فعال شدن روندها دارد. form_challenge: current_password: شما در حال ورود به یک منطقهٔ‌ حفاظت‌شده هستید imports: @@ -104,6 +119,7 @@ fa: sign_up_requires_approval: ثبت‌نام‌های جدید، نیازمند تأییدتان خواهند بود severity: بگزنید با درخواست‌ها از این آی‌پی چه شود rule: + hint: اختیاری. جزئیات بیشتری در مورد قانون ارائه دهید text: قائده یا نیازمندی‌هایی را برای کاربران این کارساز تشریح کنید. سعی کنید آن را ساده و کوتاه نگاه دارید sessions: otp: 'کد تأیید دومرحله‌ای که کاره روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:' @@ -115,12 +131,21 @@ fa: name: شما تنها می‌توانید بزرگی و کوچکی حروف را تغییر دهید تا مثلاً آن را خواناتر کنید user: chosen_languages: اگر انتخاب کنید، تنها نوشته‌هایی که به زبان‌های برگزیدهٔ شما نوشته شده‌اند در فهرست نوشته‌های عمومی نشان داده می‌شوند + role: نقش کنترل می کند که کاربر چه مجوزهایی دارد. + user_role: + color: رنگی که برای نقش در سرتاسر UI استفاده می شود، به عنوان RGB در قالب هگز + highlighted: این باعث می شود که نقش به طور عمومی قابل مشاهده باشد + name: نام عمومی نقش، اگر قرار است نقش به عنوان یک نشان نمایش داده شود + permissions_as_keys: کاربرانی که این نقش را دارند به... + position: نقش بالاتر در موقعیت‌های خاص حل تعارض را تعیین می‌کند. برخی اقدامات را فقط می توان روی نقش هایی با اولویت کمتر انجام داد webhook: events: گزینش رویدادها برای فرستادن + template: بار JSON خود را با استفاده از درون یابی متغیر بنویسید. JSON پیش فرض را خالی بگذارید. url: جایی که رویدادها فرستاده می‌شوند labels: account: - discoverable: معرّفی نمایه و فرسته‌ها در الگوریتم‌های کشف + attribution_domains_as_text: پابگاه‌های وبی که اجازهٔ اعتبار دهی به شما را دارند + discoverable: مشخص کردن مشخصات و فرسته‌ها در الگوریتم‌های اکتشاف fields: name: برچسب value: محتوا @@ -135,8 +160,8 @@ fa: text: متن از پیش آماده‌شده title: عنوان admin_account_action: - include_statuses: فرسته‌های گزارش‌شده را در ایمیل بگنجان - send_email_notification: اطلاع‌رسانی به کاربر از راه ایمیل + include_statuses: قرار دادن فرسته‌های گزارش شده در رایانامه + send_email_notification: آگاهی کاربر به ازای هر رایانامه text: هشدار موردی type: کنش types: @@ -165,7 +190,7 @@ fa: current_password: گذرواژه کنونی data: داده‌ها display_name: نمایش به نام - email: نشانی ایمیل + email: نشانی رایانامه expires_in: تاریخ انقضا fields: اطلاعات تکمیلی نمایه header: تصویر زمینه @@ -207,8 +232,8 @@ fa: sign_in_token_attempt: کد امنیتی title: عنوان type: نوع درون‌ریزی - username: نام کاربری (لاتین) - username_or_email: نام کاربری یا ایمیل + username: نام کاربری + username_or_email: نام کاربری یا رایانامه whole_word: تطابق واژهٔ کامل email_domain_block: with_dns_records: شامل رکوردهای MX و‌IPهای دامنه @@ -224,7 +249,9 @@ fa: backups_retention_period: دورهٔ نگه‌داری بایگانی کاربری bootstrap_timeline_accounts: پیشنهاد همیشگی این حساب‌ها به کاربران جدید closed_registrations_message: پیام سفارشی هنگام در دسترس نبودن ثبت‌نام‌ها + content_cache_retention_period: دوره نگهداری محتوا از راه دور custom_css: سبک CSS سفارشی + favicon: نمادک mascot: نشان سفارشی (قدیمی) media_cache_retention_period: دورهٔ نگه‌داری انبارهٔ رسانه peers_api_enabled: انتشار سیاههٔ کارسازهای کشف شده در API @@ -265,12 +292,12 @@ fa: notification_emails: appeal: شخصی به تصمیم مدیر اعتراض کرد digest: فرستادن رایانامه‌های خلاصه - favourite: وقتی کسی نوشتهٔ شما را پسندید ایمیل بفرست - follow: وقتی کسی پیگیر شما شد ایمیل بفرست - follow_request: وقتی کسی درخواست پیگیری کرد ایمیل بفرست - mention: وقتی کسی از شما نام برد ایمیل بفرست - pending_account: وقتی حساب تازه‌ای نیاز به بازبینی داشت ایمیل بفرست - reblog: وقتی کسی فرستهٔ شما را تقویت کرد ایمیل بفرست + favourite: شخصی فرسته‌تان را برگزید + follow: شخصی پیتان گرفت + follow_request: شخصی خواست پیتان بگیرد + mention: شخصی از شما نام برد + pending_account: حساب تازهٔ نیازمند بررسی + reblog: شخصی فرسته‌تان را تقویت کرد report: گزارش جدیدی فرستاده شد software_updates: all: آگاهی برای همهٔ به‌روز رسانی‌ها @@ -301,6 +328,7 @@ fa: position: اولویت webhook: events: رویدادهای به کار افتاده + template: قالب بار url: نشانی نقطهٔ پایانی 'no': خیر not_recommended: پیشنهاد نشده diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 5c85367dbb..a9e77b6cac 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -3,13 +3,13 @@ fi: simple_form: hints: account: - attribution_domains_as_text: Suojaa vääriltä tunnustuksilta. + attribution_domains_as_text: Yksi riviä kohti. Suojaa vääriltä tekijän nimeämisiltä. 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: Verkkosivustosi, pronominisi, ikäsi ja mitä ikinä haluatkaan ilmoittaa. indexable: Julkiset julkaisusi voivat näkyä Mastodonin hakutuloksissa. Käyttäjät, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta. note: 'Voit @mainita muita käyttäjiä tai #aihetunnisteita.' - show_collections: Käyttäjät voivat selata seurattujasi ja seuraajiasi. Käyttäjät, joita seuraat, näkevät joka tapauksessa, että seuraat heitä. + show_collections: Käyttäjät voivat selata seurattaviasi ja seuraajiasi. Käyttäjät, joita seuraat, näkevät joka tapauksessa, että seuraat heitä. unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntääsi. Poista valinta, jos haluat tarkistaa sekä hyväksyä tai hylätä vastaanottamasi seurantapyynnöt. account_alias: acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, josta haluat muuttaa @@ -144,13 +144,13 @@ fi: url: Mihin tapahtumat lähetetään labels: account: - attribution_domains_as_text: Salli vain tietyt verkkosivustot + attribution_domains_as_text: Verkkosivustot, jotka voivat antaa sinulle tunnustusta discoverable: Pidä profiiliasi ja julkaisujasi esillä löytämisalgoritmeissa fields: name: Nimike value: Sisältö indexable: Sisällytä julkiset julkaisut hakutuloksiin - show_collections: Näytä seuratut ja seuraajat profiilissa + show_collections: Näytä seurattavat ja seuraajat profiilissa unlocked: Hyväksy uudet seuraajat automaattisesti account_alias: acct: Vanhan tilin käyttäjätunnus diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml index afcd3b39ac..e45183df99 100644 --- a/config/locales/simple_form.fo.yml +++ b/config/locales/simple_form.fo.yml @@ -3,7 +3,7 @@ fo: simple_form: hints: account: - attribution_domains_as_text: Verjir fyri følskum ískoytum. + attribution_domains_as_text: Eitt á hvørja reglu. Tað verjir fyri skeivum tilsipingum. discoverable: Tínir almennu postar og tín vangi kunnu vera drigin fram og viðmæld ymsa staðni í Mastodon og vangin hjá tær kann vera viðmæltur øðrum brúkarum. display_name: Títt fulla navn og títt stuttliga navn. fields: Heimasíðan hjá tær, fornøvn, aldur ella hvat tú vil. @@ -144,7 +144,7 @@ fo: url: Hvar hendingar verða sendar til labels: account: - attribution_domains_as_text: Loyv einans ávísum heimasíðum + attribution_domains_as_text: Heimasíður, sum hava loyvi at sipa til tín discoverable: Framheva vanga og postar í uppdagingar-algoritmum fields: name: Spjaldur diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml index 90a268f411..fe8043a64a 100644 --- a/config/locales/simple_form.fr-CA.yml +++ b/config/locales/simple_form.fr-CA.yml @@ -3,7 +3,7 @@ fr-CA: simple_form: hints: account: - attribution_domains_as_text: Protège contre les fausses attributions. + attribution_domains_as_text: Un par ligne. Protège contre les fausses attributions. discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs. display_name: Votre nom complet ou votre nom cool. fields: Votre page d'accueil, pronoms, âge, tout ce que vous voulez. @@ -144,7 +144,7 @@ fr-CA: url: Là où les événements seront envoyés labels: account: - attribution_domains_as_text: Autoriser uniquement des sites Web spécifiques + attribution_domains_as_text: Sites web autorisés à vous citer discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages fields: name: Étiquette diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml index 370f5c1e46..f300f294e7 100644 --- a/config/locales/simple_form.fr.yml +++ b/config/locales/simple_form.fr.yml @@ -3,7 +3,7 @@ fr: simple_form: hints: account: - attribution_domains_as_text: Protège contre les fausses attributions. + attribution_domains_as_text: Un par ligne. Protège contre les fausses attributions. discoverable: Vos messages publics et votre profil peuvent être mis en avant ou recommandés dans diverses parties de Mastodon et votre profil peut être suggéré à d’autres utilisateurs. display_name: Votre nom complet ou votre nom rigolo. fields: Votre page personnelle, vos pronoms, votre âge, ce que vous voulez. @@ -21,7 +21,7 @@ fr: admin_account_action: include_statuses: L’utilisateur·rice verra quels messages sont la source de l’action de modération ou de l’avertissement send_email_notification: L’utilisateur recevra une explication de ce qu’il s’est passé avec son compte - text_html: Facultatif. Vous pouvez utiliser la syntaxe des publications. Vous pouvez ajouter des présélections d'attention pour gagner du temps + text_html: Facultatif. Vous pouvez utiliser la syntaxe des messages. Vous pouvez ajouter des avertissements préconfigurés pour gagner du temps type_html: Choisir que faire avec %{acct} types: disable: Empêcher l’utilisateur·rice d’utiliser son compte, mais ne pas supprimer ou masquer son contenu. @@ -43,7 +43,7 @@ fr: avatar: WEBP, PNG, GIF ou JPG. Au plus %{size}. Sera réduit à %{dimensions}px bot: Signale aux autres que ce compte exécute principalement des actions automatisées et pourrait ne pas être surveillé context: Un ou plusieurs contextes où le filtre devrait s’appliquer - current_password: Par mesure de sécurité, veuillez saisir le mot de passe de ce compte + current_password: Par mesure de sécurité, veuillez saisir le mot de passe du compte actuel current_username: Pour confirmer, veuillez saisir l’identifiant de ce compte digest: Uniquement envoyé après une longue période d’inactivité en cas de messages personnels reçus pendant votre absence email: Vous recevrez un courriel de confirmation @@ -101,7 +101,7 @@ fr: thumbnail: Une image d'environ 2:1 affichée à côté des informations de votre serveur. timeline_preview: Les utilisateur⋅rice⋅s déconnecté⋅e⋅s pourront parcourir les derniers messages publics disponibles sur le serveur. trendable_by_default: Ignorer l'examen manuel du contenu tendance. Des éléments individuels peuvent toujours être supprimés des tendances après coup. - trends: Les tendances montrent quelles publications, hashtags et actualités gagnent en ampleur sur votre serveur. + trends: Les tendances montrent quels messages, hashtags et actualités gagnent en popularité sur votre serveur. trends_as_landing_page: Afficher le contenu tendance au lieu d'une description de ce serveur pour les comptes déconnectés et les non-inscrit⋅e⋅s. Nécessite que les tendances soient activées. form_challenge: current_password: Vous entrez une zone sécurisée @@ -144,7 +144,7 @@ fr: url: Là où les événements seront envoyés labels: account: - attribution_domains_as_text: Autoriser uniquement des sites Web spécifiques + attribution_domains_as_text: Sites web autorisés à vous citer discoverable: Autoriser des algorithmes de découverte à mettre en avant votre profil et vos messages fields: name: Étiquette @@ -162,7 +162,7 @@ fr: admin_account_action: include_statuses: Inclure les messages signalés dans le courriel send_email_notification: Notifier l’utilisateur par courriel - text: Attention personnalisée + text: Avertissement personnalisé type: Action types: disable: Désactiver diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index e7deca9460..c840342db5 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -3,6 +3,7 @@ fy: simple_form: hints: account: + attribution_domains_as_text: Ien per rigel. Beskermet tsjin falske attribúsjes. discoverable: Jo iepenbiere berjochten kinne útljochte wurde op ferskate plakken binnen Mastodon en jo account kin oanrekommandearre wurde oan oare brûkers. display_name: Jo folsleine namme of in aardige bynamme. fields: Jo website, persoanlike foarnammewurden, leeftiid, alles wat jo mar kwyt wolle. @@ -130,6 +131,7 @@ fy: name: Jo kinne elk wurd mei in haadletter begjinne, om sa bygelyks de tekst mear lêsber te meitsjen user: chosen_languages: Allinnich berjochten yn de selektearre talen wurde op de iepenbiere tiidline toand + role: De rol bepaalt hokker rjochten in brûker hat. user_role: color: Kleur dy’t brûkt wurdt foar de rol yn de UI, as RGB yn heksadesimaal formaat highlighted: Dit makket de rol iepenbier sichtber @@ -142,6 +144,7 @@ fy: url: Wêr’t eveneminten nei ta stjoerd wurde labels: account: + attribution_domains_as_text: Websites dy’t jo wurdearring jaan meie discoverable: Profyl en bydragen yn sykalgoritmen opnimme litte fields: name: Label diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index 772f996ca6..f8257a9da9 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -3,7 +3,7 @@ ga: simple_form: hints: account: - attribution_domains_as_text: Cosnaíonn sé ó sannadh bréagach. + attribution_domains_as_text: Ceann in aghaidh an líne. Cosnaíonn sé ó sannadh bréagach. discoverable: Seans go mbeidh do phostálacha poiblí agus do phróifíl le feiceáil nó molta i réimsí éagsúla de Mastodon agus is féidir do phróifíl a mholadh d’úsáideoirí eile. display_name: D'ainm iomlán nó d'ainm spraoi. fields: Do leathanach baile, forainmneacha, aois, rud ar bith is mian leat. @@ -144,7 +144,7 @@ ga: url: An áit a seolfar imeachtaí chuig labels: account: - attribution_domains_as_text: Ná ceadaigh ach láithreáin ghréasáin ar leith + attribution_domains_as_text: Tá cead ag suíomhanna Gréasáin creidmheas a thabhairt duit discoverable: Próifíl gné agus postálacha in halgartaim fionnachtana fields: name: Lipéad diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index de585c7a21..af1f06a316 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -3,7 +3,7 @@ gd: simple_form: hints: account: - attribution_domains_as_text: Dìonadh seo o bhuaidh-aithrisean cearra. + attribution_domains_as_text: Loidhne fa leth do gach fear. Dìonaidh seo o iomraidhean meallta. discoverable: Dh’fhaoidte gun dèid na postaichean poblach ’s a’ phròifil agad a bhrosnachadh no a mholadh ann an caochladh roinnean de Mhastodon agus gun dèid a’ phròifil agad a mholadh do chàch. display_name: D’ ainm slàn no spòrsail. fields: An duilleag-dhachaigh agad, roimhearan, aois, rud sam bith a thogras tu. @@ -144,7 +144,7 @@ gd: url: Far an dèid na tachartasan a chur labels: account: - attribution_domains_as_text: Na ceadaich ach làraichean-lìnn sònraichte + attribution_domains_as_text: Na làraichean-lìn a dh’fhaodas iomradh a thoirt ort discoverable: Brosnaich a’ phròifil is postaichean agad sna h-algairimean rùrachaidh fields: name: Leubail diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index cddeae5cee..c4f9bffa7a 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -3,7 +3,7 @@ gl: simple_form: hints: account: - attribution_domains_as_text: Protéxete de falsas atribucións. + attribution_domains_as_text: Un por liña. Protéxete das atribucións falsas. discoverable: As túas publicacións públicas e perfil poden mostrarse ou recomendarse en varias zonas de Mastodon e o teu perfil ser suxerido a outras usuarias. display_name: O teu nome completo ou un nome divertido. fields: Páxina web, pronome, idade, o que ti queiras. @@ -144,7 +144,7 @@ gl: url: A onde se enviarán os eventos labels: account: - attribution_domains_as_text: Permitir só os sitios web indicados + attribution_domains_as_text: Sitios web que poden acreditarte discoverable: Perfil destacado e publicacións nos algoritmos de descubrimento fields: name: Etiqueta @@ -190,7 +190,7 @@ gl: current_password: Contrasinal actual data: Datos display_name: Nome mostrado - email: Enderezo de email + email: Enderezo de correo expires_in: Caduca tras fields: Metadatos do perfil header: Cabeceira @@ -267,7 +267,7 @@ gl: site_terms: Política de Privacidade site_title: Nome do servidor status_page_url: URL da páxina do estado - theme: Decorado por defecto + theme: Decorado predeterminado thumbnail: Icona do servidor timeline_preview: Permitir acceso á cronoloxía pública sen autenticación trendable_by_default: Permitir tendencias sen aprobación previa diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 1feebb0d69..d8d6af5e99 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -3,7 +3,7 @@ he: simple_form: hints: account: - attribution_domains_as_text: הגנה מייחוסים שקריים. + attribution_domains_as_text: אחד בכל שורה. יגן מפני יחוס מטעה. discoverable: הפוסטים והפרופיל שלך עשויים להיות מוצגים או מומלצים באזורים שונים באתר וייתכן שהפרופיל שלך יוצע למשתמשים אחרים. display_name: שמך המלא או שם הכיף שלך. fields: עמוד הבית שלך, לשון הפנייה, גיל, וכל מידע אחר לפי העדפתך האישית. @@ -144,7 +144,7 @@ he: url: היעד שאליו יישלחו אירועים labels: account: - attribution_domains_as_text: רק אתרים מסויימים יאושרו + attribution_domains_as_text: אתרים המורשים לייחס אליך מאמרים discoverable: הצג משתמש ופוסטים בעמוד התגליות fields: name: תווית diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 383bdd0760..60922b06b5 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -48,7 +48,7 @@ hu: digest: Csak hosszú távollét esetén küldődik és csak ha személyes üzenetet kaptál távollétedben email: Kapsz egy megerősítő e-mailt header: WEBP, PNG, GIF vagy JPG. Legfeljebb %{size}. Át lesz méretezve %{dimensions} képpontosra. - inbox_url: Másold ki a használandó relé szerver kezdőoldalának URL-jét + inbox_url: Másold ki a használandó továbbító kiszolgáló kezdőoldalának URL-jét irreversible: A kiszűrt bejegyzések visszafordíthatatlanul eltűnnek, a szűrő későbbi törlése esetén is locale: A felhasználói felület, e-mailek, push üzenetek nyelve password: Legalább 8 karakter @@ -144,7 +144,7 @@ hu: url: Ahová az eseményket küldjük labels: account: - attribution_domains_as_text: Csak meghatározott weboldalak engedélyezése + attribution_domains_as_text: Weboldalak, melyek szerzőként tüntethetnek fel discoverable: Profil és bejegyzések szerepeltetése a felfedezési algoritmusokban fields: name: Címke @@ -195,7 +195,7 @@ hu: fields: Profil metaadatai header: Fejléc honeypot: "%{label} (ne töltsd ki)" - inbox_url: Relé inbox-hoz tartozó URL + inbox_url: Továbbító inbox-hoz tartozó URL irreversible: Eldobás elrejtés helyett locale: Felhasználói felület nyelve max_uses: Hányszor használható diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml index dc5aad57ae..e7da9b1051 100644 --- a/config/locales/simple_form.ia.yml +++ b/config/locales/simple_form.ia.yml @@ -3,6 +3,7 @@ ia: simple_form: hints: account: + attribution_domains_as_text: Un per linea. Protege contra false attributiones. discoverable: Tu messages public e tu profilo pote esser mittite in evidentia o recommendate in varie areas de Mastodon e tu profilo pote esser suggerite a altere usatores. display_name: Tu prenomine e nomine de familia o tu pseudonymo. fields: Tu pagina principal, pronomines, etate, tote lo que tu vole. @@ -39,35 +40,35 @@ ia: text: Tu pote solo appellar contra un sanction un vice defaults: autofollow: Le personas qui se inscribe per medio del invitation te sequera automaticamente - avatar: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px + avatar: WEBP, PNG, GIF o JPG. Al maximo %{size}. Sera reducite a %{dimensions}px bot: Signala a alteres que le conto principalmente exeque actiones automatisate e poterea non esser surveliate context: Un o plure contextos ubi le filtro deberea applicar se current_password: Pro propositos de securitate insere le contrasigno del conto actual current_username: Pro confirmar, insere le nomine de usator del conto actual digest: Solo inviate post un longe periodo de inactivitate e solo si tu ha recipite alcun messages personal in tu absentia - email: Te sera inviate un email de confirmation - header: WEBP, PNG, GIF or JPG. Al maximo %{size}. Sera diminuite a %{dimensions}px + email: Tu recipera un e-mail de confirmation + header: WEBP, PNG, GIF o JPG. Al maximo %{size}. Essera reducite a %{dimensions}px inbox_url: Copia le URL ab le pagina principal del repetitor que tu vole usar - irreversible: Le messages filtrate disparera irreversibilemente, mesmo si le filtro es plus tarde removite + irreversible: Le messages filtrate disparera irreversibilemente, mesmo si le filtro es removite plus tarde locale: Le lingua del interfacie de usator, del emails e del notificationes pulsate password: Usa al minus 8 characteres - phrase: Sera concordate ignorante majuscule/minuscule in le texto o avisos de contento de un message - scopes: A que APIs sera permittite acceder al application. Si tu selige un ambito de maxime nivello, tu non besonia de seliger los singulemente. + phrase: Se applicara independentemente de majusculas/minusculas in le texto o del aviso de contento de un message + scopes: Le APIs al quales le application habera accesso. Si tu selige un ambito de nivello superior, non es necessari seliger ambitos individual. setting_aggregate_reblogs: Non monstrar nove impulsos pro messages que ha essite recentemente impulsate (affecta solmente le impulsos novemente recipite) - setting_always_send_emails: Normalmente le avisos de email non sera inviate quando tu activemente usa Mastodon + setting_always_send_emails: Normalmente, le notificationes de e-mail non es inviate quando tu activemente usa Mastodon setting_default_sensitive: Le medios sensibile es celate de ordinario e pote esser revelate con un clic setting_display_media_default: Celar le medios marcate como sensibile - setting_display_media_hide_all: Sempre celar le medios - setting_display_media_show_all: Sempre monstrar le medios - setting_use_blurhash: Le imagines degradate es basate sur le colores del medios visual celate, ma illos offusca qualcunque detalios - setting_use_pending_items: Celar le classification temporal detra un clic in vice que automaticamente rolante le fluxo + setting_display_media_hide_all: Sempre celar contento multimedial + setting_display_media_show_all: Sempre monstrar contento multimedial + setting_use_blurhash: Le imagines degradate se basa sur le colores del visuales celate, ma illos offusca tote le detalios + setting_use_pending_items: Requirer un clic pro monstrar nove messages in vice de rolar automaticamente le fluxo username: Tu pote usar litteras, numeros e tractos de sublineamento - whole_word: Quando le parola o expression clave es solo alphanumeric, illo sera solo applicate si illo concorda con tote le parola + whole_word: Quando le parola-clave o phrase es alphanumeric, illo essera solmente applicate si illo corresponde a tote le parola domain_allow: domain: Iste dominio potera extraher datos de iste servitor e le datos entrante de illo essera processate e immagazinate email_domain_block: - domain: Isto pote esser le nomine de dominio que apparera in le adresse email o le registration MX que illo usa. Illos sera verificate durante le inscription. - with_dns_records: Un tentativa sera facite pro resolver le registrationes de DNS del dominio date e le resultatos sera alsi blocate + domain: Isto pote esser le nomine de dominio que apparera in le adresse de e-mail o le registro MX que illo usa. Illos essera verificate durante le inscription. + with_dns_records: Un tentativa de resolver le registros DNS del dominio date essera facite e le resultatos essera equalmente blocate featured_tag: name: 'Ecce alcun del hashtags que tu usava le plus recentemente:' filters: @@ -78,16 +79,16 @@ ia: form_admin_settings: activity_api_enabled: Numeros de messages localmente publicate, usatores active, e nove registrationes in gruppos septimanal app_icon: WEBP, PNG, GIF o JPG. Supplanta le icone predefinite sur apparatos mobile con un icone personalisate. - backups_retention_period: Le usatores pote generar archivos de lor messages pro discargar los plus tarde. Quando predefinite a un valor positive, iste archivos sera automaticamente delite de tu immagazinage post le specificate numero de dies. - bootstrap_timeline_accounts: Iste contos sera appunctate al summitate del recommendationes a sequer del nove usatores. + backups_retention_period: Le usatores pote generar archivos de lor messages pro discargar los plus tarde. Si iste option es definite a un valor positive, iste archivos essera automaticamente delite de tu immagazinage post le numero specificate de dies. + bootstrap_timeline_accounts: Iste contos essera fixate al initio del recommendationes de sequimento de nove usatores. closed_registrations_message: Monstrate quando le inscriptiones es claudite content_cache_retention_period: Tote le messages de altere servitores (includite impulsos e responsas) essera delite post le numero de dies specificate, independentemente de tote interaction de usatores local con ille messages. Isto include le messages addite al marcapaginas o marcate como favorite per un usator local. Le mentiones private inter usatores de differente instantias tamben essera irrecuperabilemente perdite. Le uso de iste parametro es intendite pro instantias con scopos specific e viola multe expectationes de usatores si es implementate pro uso general. custom_css: Tu pote applicar stilos personalisate sur le version de web de Mastodon. favicon: WEBP, PNG, GIF o JPG. Supplanta le favicone predefinite de Mastodon con un icone personalisate. mascot: Illo substitue le illustration in le interfacie web avantiate. - media_cache_retention_period: Le files multimedial de messages producite per usatores remote es in cache sur tu servitor. Quando predefinite a un valor positive, le medios sera delite post le numero de dies specificate. Le datos multimedial requirite post que illo es delite, sera re-discargate, si le contento original sera ancora disponibile. Per limitationes sur le frequentia con que le schedas de pre-visualisation de ligamine scruta le sitos de tertie partes, il es recommendate de predefinir iste valor a al minus 14 dies, o le schedas de pre-visualisation de ligamine non sera actualisate sur demanda ante ille tempore. - peers_api_enabled: Un lista de nomines de dominio que iste servitor ha incontrate in le fediverso. Nulle datos es includite ci re tu federation con un date servitor, justo que tu servitor lo cognosce. Isto es usate per servicios que collige statistica re le federation in senso general. - profile_directory: Le directorio de profilo lista tote le usatores qui ha optate pro esser detectabile. + media_cache_retention_period: Le files multimedial de messages producite per usatores distante se immagazina in cache sur tu servitor. Quando iste option es definite a un valor positive, tal files essera delite post le numero specificate de dies. Si alcuno requesta le datos multimedial post lor deletion, illos essera re-discargate si le contento original es ancora disponibile. Debite a limitationes sur le frequentia con que le cartas de previsualisation de ligamines se connecte al sitos de tertios, il es recommendate definir iste valor a al minus 14 dies, alteremente le previsualisationes de ligamines non essera actualisate sur demanda ante ille tempore. + peers_api_enabled: Un lista de nomines de dominio que iste servitor ha incontrate in le fediverso. Iste datos non indica si tu es in federation con un servitor date, ma solmente que tu servitor lo cognosce. Isto es usate per servicios que collige statisticas general sur le federation. + profile_directory: Le directorio de profilos lista tote le usatores que ha optate pro esser discoperibile. require_invite_text: Quando le inscriptiones require approbation manual, rende obligatori, plus tosto que optional, le entrata de texto “Perque vole tu junger te?” site_contact_email: Como pote contactar te le personas pro questiones legal o de supporto. site_contact_username: Como pote contactar te le personas re Mastodon. @@ -97,8 +98,8 @@ ia: site_title: Como le personas pote referer se a tu servitor in addition su nomine de dominio. status_page_url: URL de un pagina ubi le personas pote vider le stato de iste servitor durante un interruption theme: Thema que le visitatores disconnexe e le nove usatores vide. - thumbnail: Un imagine approximativemente 2:1 monstrate al latere del informationes de tu servitor. - timeline_preview: Le visitatores disconnexe potera navigar per le plus recente messages public disponibile sur le servitor. + thumbnail: Un imagine de circa 2:1 monstrate al latere del informationes de tu servitor. + timeline_preview: Le visitatores foras de session potera percurrer le messages public le plus recente disponibile sur le servitor. trendable_by_default: Saltar le revision manual del contento de tendentia. Elementos singule pote ancora esser removite de tendentias post le facto. trends: Tendentias monstra que messages, hashtags e novas gania traction sur tu servitor. trends_as_landing_page: Monstrar contento de tendentia a usatores disconnexe e visitatores in vice que un description de iste servitor. Require tendentias esser activate. @@ -114,7 +115,7 @@ ia: ip: Inserer un adresse IPv4 o IPv6. Tu pote blocar campos integre per le syntaxe CIDR. Sia attente pro non disconnecter te! severities: no_access: Blocar accesso a tote le ressources - sign_up_block: Nove inscriptiones non sera possibile + sign_up_block: Nove inscriptiones non essera possibile sign_up_requires_approval: Nove inscriptiones requirera tu approbation severity: Seliger que evenira con requestas ab iste IP rule: @@ -129,7 +130,8 @@ ia: tag: name: Tu pote solmente cambiar le litteras inter majusculas e minusculas, per exemplo, pro render lo plus legibile user: - chosen_languages: Si marcate, solo le messages in le linguas seligite sera monstrate in chronologias public + chosen_languages: Si marcate, solmente le messages in le linguas seligite apparera in chronologias public + role: Le rolo controla qual permissos le usator ha. user_role: color: Color a esser usate pro le rolo in omne parte del UI, como RGB in formato hexadecimal highlighted: Iste rende le rolo publicamente visibile @@ -139,10 +141,10 @@ ia: webhook: events: Selige le eventos a inviar template: Compone tu proprie carga utile JSON per interpolation de variabile. Lassar blanc pro JSON predefinite. - url: Ubi le eventos essera inviate + url: A ubi le eventos essera inviate labels: account: - attribution_domains_as_text: Solmente permitter sitos web specific + attribution_domains_as_text: Sitos web autorisate a accreditar te discoverable: Evidentiar le profilo e messages in le algorithmos de discoperta fields: name: Etiquetta @@ -179,7 +181,7 @@ ia: text: Explicar perque iste decision deberea esser revertite defaults: autofollow: Invitar a sequer tu conto - avatar: Pictura de profilo + avatar: Imagine de profilo bot: Isto es un conto automatisate chosen_languages: Filtrar linguas confirm_new_password: Confirmar nove contrasigno @@ -191,14 +193,14 @@ ia: email: Adresse de e-mail expires_in: Expira post fields: Campos extra - header: Imagine titulo + header: Imagine de titulo honeypot: "%{label} (non compilar)" inbox_url: URL del cassa de ingresso de repetitor irreversible: Declinar in vice que celar locale: Lingua de interfacie max_uses: Numero max de usos new_password: Nove contrasigno - note: Bio + note: Biographia otp_attempt: Codice a duo factores password: Contrasigno phrase: Parola o phrase clave @@ -211,6 +213,7 @@ ia: setting_default_privacy: Confidentialitate del messages setting_default_sensitive: Sempre marcar le medios cmo sensbile setting_delete_modal: Monstrar le dialogo de confirmation ante deler un message + setting_disable_hover_cards: Disactivar le previsualisation de profilos al passar del mus setting_disable_swiping: Disactivar le movimentos per glissamento setting_display_media: Visualisation de medios setting_display_media_default: Predefinite @@ -256,7 +259,7 @@ ia: registrations_mode: Qui pote inscriber se require_invite_text: Requirer un ration pro junger se show_domain_blocks: Monstrar le blocadas de dominio - show_domain_blocks_rationale: Monstrar perque le dominios era blocate + show_domain_blocks_rationale: Monstrar proque le dominios ha essite blocate site_contact_email: Adresse de e-mail de contacto site_contact_username: Nomine de usator de contacto site_extended_description: Description extense @@ -272,8 +275,8 @@ ia: trends_as_landing_page: Usar tendentias como pagina de destination interactions: must_be_follower: Blocar notificationes de personas qui non te seque - must_be_following: Blocar notificationes de gente que tu non sequer - must_be_following_dm: Blocar messages directe de gente que tu non seque + must_be_following: Blocar notificationes de personas que tu non seque + must_be_following_dm: Blocar messages directe de personas que tu non seque invite: comment: Commento invite_request: @@ -287,12 +290,12 @@ ia: sign_up_requires_approval: Limitar inscriptiones severity: Regula notification_emails: - appeal: Alcuno appella un decision de moderator + appeal: Alcuno appella contra un decision de moderator digest: Inviar emails compendio - favourite: Alcuno appreciava tu message - follow: Alcuno te sequeva - follow_request: Alcuno requireva de sequer te - mention: Alcuno te mentionava + favourite: Alcuno ha appreciate tu message + follow: Alcuno ha comenciate a sequer te + follow_request: Alcuno ha demandate de sequer te + mention: Alcuno te ha mentionate pending_account: Nove conto besonia de revision reblog: Alcuno ha impulsate tu message report: Un nove reporto es inviate @@ -308,7 +311,7 @@ ia: text: Regula settings: indexable: Includer pagina de profilo in le motores de recerca - show_application: Monstrar ab que app tu ha inviate un message + show_application: Monstrar desde qual app tu ha inviate un message tag: listable: Permitter a iste hashtag apparer in le recercas e suggestiones name: Hashtag diff --git a/config/locales/simple_form.ig.yml b/config/locales/simple_form.ig.yml index 7c264f0d73..e88d195b8a 100644 --- a/config/locales/simple_form.ig.yml +++ b/config/locales/simple_form.ig.yml @@ -1 +1,8 @@ +--- ig: + simple_form: + labels: + defaults: + avatar: Foto profaịlụ + chosen_languages: Myọcha asụsụ + context: Myọcha ọnọdụ diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index 5cbbd9d06e..2caa1a6349 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -3,7 +3,7 @@ io: simple_form: hints: account: - attribution_domains_as_text: Protektas de falsa akreditaji. + attribution_domains_as_text: Un en singla lineo. discoverable: Vua publika posti e profilo povas remarkesar o rekomendesar en diferanta parti di Mastodon e vua profilo povas sugestesar ad altra uzanti. display_name: Vua tota nomo o vua gaya nomo. fields: Vua retsituo, pronomi, evo, irgo quan vu volas. @@ -21,15 +21,15 @@ io: admin_account_action: include_statuses: Uzanto vidos quala posti quo kauzigas jero o averto send_email_notification: Uzanto ganos expliko pri quo eventas a olia konto - text_html: Neobligata. Vu povas uzar postosintaxo. Vu povas insertar avertofixiti por sparar tempo + text_html: Nemustiga. Vu povas adjuntar avertselektaji por sparar tempo type_html: Selektez ago per %{acct} types: disable: Preventez uzanto de uzar olia konto ma ne efacez o celez olia kontenaji. none: Uzez co por sendar averto a la uzanto sen eventigar irga altra ago. - sensitive: Koaktez omna mediiatachaji da ca uzanto markizesar quale sentoza. + sensitive: Igar omna audvidajaddonaji da ca uzanto markesar quale trublema. silence: Preventez la uzanto de povar postar per publika videbleso, celez lua posti e avizi de personi qui ne sequas lu. Co klozas omna raporto kontra ca konto. suspend: Preventez irga interago de o a ca konto e efacez lua kontenaji. Inversebla til 30 dii. Co klozas omna raporti kontra ca konto. - warning_preset_id: Neobligata. Vu povas ankore insertar kustume texto a extremajo di fixito + warning_preset_id: Nemustiga announcement: all_day: Kande kontrolesas, nur tempoporteodato montresos ends_at: Neobligata. Anunco automatika depublikigesos dum ta tempo @@ -56,12 +56,12 @@ io: scopes: Quala API quon softwaro permisesas acesar. Se vu selektas alta skopo, vu ne mustas selektar individui. setting_aggregate_reblogs: Ne montrez nova repeti di posti qui ja repetesis recente (nur efektigas repeti recevata nove) setting_always_send_emails: Normale retpostoavizi ne sendesas kande vu aktiva uzas Mastodon - setting_default_sensitive: Sentoza medii originala celesas e povas revelesar per klikto - setting_display_media_default: Celez medii quo markizesis quale sentoza - setting_display_media_hide_all: Sempre celez medii - setting_display_media_show_all: Sempre montrez medii + setting_default_sensitive: Trublema audvidaji originala celesas e povas descelesar per kliko + setting_display_media_default: Celez audvidaji qua markesis quale trublema + setting_display_media_hide_all: Omnatempe celas audvidaji + setting_display_media_show_all: Omnatempe montras audvidaji setting_use_blurhash: Inklini esas segun kolori di celesis vidaji ma kovras irga detali - setting_use_pending_items: Celez tempolineonovi dop kliktar e ne automatike movigar niuzeto + setting_use_pending_items: Celez tempolinetildatigo dop kliko vice automatike ruligar la fluo username: Vu darfas uzar literi, nombri, e sublinei whole_word: Kande klefvorto o fraz esas nur litera e nombra, ol nur aplikesos se ol parigesas la tota vorto domain_allow: @@ -79,17 +79,17 @@ io: form_admin_settings: activity_api_enabled: Quanto de lokale publikigita posti, aktiva uzanti e nova registri, donita semanope app_icon: WEBP, PNG, GIF o JPG. Ol remplas la originala imajeto di softwaro sur poshaparati kun personaligita imajeto. - backups_retention_period: Uzanto povas facar arkivi di sua posti por deskargar pose. Se ol esas positiva nombro, ca arkivi automate efacesis de vua konserveyo pos la decidita quanto di dii. - bootstrap_timeline_accounts: Ca konti pinglagesos a super sequorekomendi di nova uzanti. + backups_retention_period: Uzanto povas igar arkivi di sua afishi por deskargar pose. + bootstrap_timeline_accounts: Ca konti adpinglesos ad super sequorekomendi di nova uzanti. closed_registrations_message: Montresas kande registradi klozesas content_cache_retention_period: Omna posti de altra servili efacesos (anke repeti e respondi) pos decidita quanto di dii, sen ye irga lokala uzantointerago kun ti posti. Privata mencioni inter uzanto de dessanta servili anke desganos e neposible riganesos. custom_css: Vu povas pozar kustumizita staili en retverso di Mastodon. favicon: WEBP, PNG, GIF o JPG. Ol remplas la originala imajeto di Mastodon kun personaligita imajeto. mascot: Remplas montreso en avanca retintervizajo. - media_cache_retention_period: Medidoseri de posti quan posti da deslokala uzanti retummemoresis sur vua servilo. Se medidatumo demandesas pos ol efacesas, ol rideskargesos. + media_cache_retention_period: Audvidajdosieri di afishi da deslokala uzanti retmemoresis sur vua servilo. Se audvidajdatumo demandesas pos ol forigesis, ol rideskargesos. peers_api_enabled: Listo di domeni quin ca servilo trovis en la fediverso. Nula informo inkluzesas hike pri ka vu federas kun partikulara servilo, nur ke vua servilo savas pri lo. Co es uzata da enti qui kolektas statistiki pri federeso generale. - profile_directory: La profilcheflisto montras omna uzanti quo voluntale volas esar deskovrebla. - require_invite_text: Kande registradi bezonas manuala aprobo, ol kauzigas "Por quo vu volas juntas?" textoenpozo esar obliganta + profile_directory: La profiluyo listigas omna uzanti qua volunte esar deskovrebla. + require_invite_text: Kande registragi bezonas manuala aprobo, "Por quo vu volas adeskar?" textoenpoza esos mustiga site_contact_email: Quale personi povas kontaktar vu por legala o suportquestioni. site_contact_username: Quale personi povas kontaktar vu en Mastodon. site_extended_description: Irga plusa informi quo forsan esar utila por vizitanti e uzanti. Povas strukturigesar per sintaxo di Markdown. @@ -100,8 +100,8 @@ io: theme: Temo quo videsas da ekirita vizitanti e nova uzanti. thumbnail: Cirkum 2:1 imajo montresar kun informo di ca servilo. timeline_preview: Ekirita vizitanti videsos maxim recenta publika posti quo esas displonebla en la servilo. - trendable_by_default: Ignorez manuala kontrolar di tendencoza kontenajo. Singla kozi povas ankore efacesar de tendenci pose. - trends: Tendenci montras quala posti, hashtagi e niuzrakonti famozeskas en ca servilo. + trendable_by_default: Ignorez manuala kontrolar di populara enhavajo. + trends: Populari montras quala afishi, gretvorti e novaji populareskas en vua servilo. trends_as_landing_page: Montrez populara posti a uzanti neeniriti e vizitanti vice deskriptajo pri ca servilo. Bezonas ke populari es aktivita. form_challenge: current_password: Vu eniras sekura areo @@ -110,7 +110,7 @@ io: invite_request: text: Co helpos ni kontrolar vua apliko ip_block: - comment: Neobligata. Memorez por quo vu insertas ca regulo. + comment: Nemustiga. expires_in: IP-Adresi esas finita moyeno, oli kelkafoye partigesas e frequenta uzesas da multa personi. Do, nedefinita IP-restrikti ne rekomendesas. ip: Tipez adreso di IPv4 o IPv6. Vu povas restrikar tota porteo per sintaxo CIDR. Sorgemez por ke vu ne klefklozas su! severities: @@ -123,7 +123,7 @@ io: text: Deskriptez regulo o bezonaj por uzanti en ca servilo. Vu debas lasar lu esar korta e simpla sessions: otp: Enter the Two-factor code from your phone or use one of your recovery codes. - webauthn: Se ol esas klefo di USB, certigar ke vu insertas e se bezonesas, tushetez. + webauthn: Se ol es USB-klefo, certigar ke vu enpozas e se bezonesas, tushetez ol. settings: indexable: Vua profilpagino povas aparar en serchorezultaji che Google, Bing, e altri. show_application: Vu sempre povos vidar qua apliko publikigis vua posto irgakaze. @@ -144,7 +144,7 @@ io: url: Ibe eventi sendesos labels: account: - attribution_domains_as_text: Nur permisas specifika retsitui + attribution_domains_as_text: Reteyi kua permisesis agnoskar vu discoverable: Inkluzar profilo e posti en trovado-algoritmi fields: name: Etiketo @@ -193,7 +193,7 @@ io: email: Retpost-adreso expires_in: Expiras pos fields: Profilmetadato - header: Kapimajo + header: Fundimajo honeypot: "%{label} (ne plenigez)" inbox_url: URL di relayomesajbuxo irreversible: Deslevez e ne celez @@ -204,29 +204,29 @@ io: otp_attempt: Dufaktora identigilo password: Pasvorto phrase: Klefvorto o frazo - setting_advanced_layout: Aktivigez avancata retintervizajo + setting_advanced_layout: Ebligar altnivela retintervizajo setting_aggregate_reblogs: Grupigar repeti en tempolinei setting_always_send_emails: Sempre sendez retpostoavizi - setting_auto_play_gif: Automate pleez animigita GIFi + setting_auto_play_gif: Autoplear anima GIFi setting_boost_modal: Montrez konfirmdialogo ante repetar setting_default_language: Postolinguo setting_default_privacy: Videbleso di la mesaji - setting_default_sensitive: Sempre markizez medii quale sentoza + setting_default_sensitive: Omnatempe markas audvidaji quale trublema setting_delete_modal: Montrez konfirmdialogo ante efacar posto - setting_disable_hover_cards: Desaktivigez profilprevido dum klikpaso - setting_disable_swiping: Desaktivigez fingromovi - setting_display_media: Mediomontrajo + setting_disable_hover_cards: Desebligar profilprevido dum paso + setting_disable_swiping: Desebligar fingromovi + setting_display_media: Audvidajmontrajo setting_display_media_default: Originalo setting_display_media_hide_all: Celez omno setting_display_media_show_all: Montrez omno setting_expand_spoilers: Sempre expansigez posti quo markizesis kun kontenajaverti setting_hide_network: Celez vua sociala grafiko - setting_reduce_motion: Diminutez moveso di animacii + setting_reduce_motion: Despluigar movo di animi setting_system_font_ui: Uzez originala literfonto di sistemo - setting_theme: Sittemo - setting_trends: Montrez tendenco di hodie + setting_theme: Reteytemo + setting_trends: Montrar hodia populari setting_unfollow_modal: Montrez konfirmdialogo ante desequar ulu - setting_use_blurhash: Montrez koloroza inklini por celata medii + setting_use_blurhash: Montrez koloroza inklini por celata audvidaji setting_use_pending_items: Modo lenta severity: Severeso sign_in_token_attempt: Sekureskodexo @@ -253,11 +253,11 @@ io: custom_css: Kustumizita CSS favicon: Imajeto mascot: Kustumizita reprezentimajo (oldo) - media_cache_retention_period: Mediimemorajretendurtempo + media_cache_retention_period: Audvidajretmemorretendurtempo peers_api_enabled: Publikigez listo di deskovrita servili en API - profile_directory: Aktivigez profilcheflisto + profile_directory: Ebligar profiluyo registrations_mode: Qua povas registragar - require_invite_text: Mustez pozar motivo por juntar + require_invite_text: Bezonas motivo por adeskar show_domain_blocks: Montrez domenobstrukti show_domain_blocks_rationale: Montrez por quo domeni obstruktesir site_contact_email: Kontaktoretposto @@ -270,8 +270,8 @@ io: theme: Originala temo thumbnail: Servilimajeto timeline_preview: Permisez neyurizita aceso a publika tempolineo - trendable_by_default: Permisez tendenci sen bezonar kontrolo - trends: Aktivigez tendenci + trendable_by_default: Permisez populari sen kontrolo + trends: Ebligar populari trends_as_landing_page: Uzar populari quale la iniciala pagino interactions: must_be_follower: Celar la savigi da homi, qui ne sequas tu @@ -280,7 +280,7 @@ io: invite: comment: Komento invite_request: - text: Por quo vu volas juntar? + text: Por quo vu volas adeskar? ip_block: comment: Komento ip: IP @@ -305,7 +305,7 @@ io: label: Nova Mastodon-versiono es disponebla none: Nultempe notifikar pri aktualigi (ne rekomendata) patch: Notifikar pri problemosolvanta aktualigi - trending_tag: Nova tendenco bezonas kontrolo + trending_tag: Nova popularo bezonas kontrolo rule: hint: Plusa informo text: Regulo @@ -315,7 +315,7 @@ io: tag: listable: Permisez ca hashtago aparar en trovaji e sugestaji name: Hashtago - trendable: Permisez ca hashtago aparar che tendenci + trendable: Permisez ca gretvorto aparar en populari usable: Permisez posti uzar ca gretiketo lokale user: role: Rolo @@ -327,7 +327,7 @@ io: permissions_as_keys: Permisi position: Prioreso webhook: - events: Aktivigita eventi + events: Ebligita eventi template: Pagkargshablono url: URL di finpunto 'no': Ne diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 6f3a4fe8a5..40ae267a06 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -3,7 +3,7 @@ is: simple_form: hints: account: - attribution_domains_as_text: Ver fyrir fölskum tilvísunum í höfunda. + attribution_domains_as_text: Eitt á hverja línu. Ver fyrir röngum tilvísunum. discoverable: Opinberar færslur og notandasnið þitt geta birst eða verið mælt með á hinum ýmsu svæðum í Mastodon auk þess sem hægt er að mæla með þér við aðra notendur. display_name: Fullt nafn þitt eða eitthvað til gamans. fields: Heimasíðan þín, fornöfn, aldur eða eitthvað sem þú vilt koma á framfæri. @@ -144,7 +144,7 @@ is: url: Hvert atburðir verða sendir labels: account: - attribution_domains_as_text: Einungis leyfa tiltekin vefsvæði + attribution_domains_as_text: Vefsvæði sem mega vitna í þig discoverable: Hafa notandasnið og færslur með í reikniritum leitar fields: name: Skýring diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 7ed4c0d004..c36fce36f7 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -3,7 +3,7 @@ it: simple_form: hints: account: - attribution_domains_as_text: Protegge da false attribuzioni. + attribution_domains_as_text: Uno per riga. Protegge da false attribuzioni. discoverable: I tuoi post pubblici e il tuo profilo potrebbero essere presenti o consigliati in varie aree di Mastodon e il tuo profilo potrebbe essere suggerito ad altri utenti. display_name: Il tuo nome completo o il tuo soprannome. fields: La tua homepage, i pronomi, l'età, tutto quello che vuoi. @@ -144,7 +144,7 @@ it: url: Dove gli eventi saranno inviati labels: account: - attribution_domains_as_text: Consenti solo siti web specifici + attribution_domains_as_text: Siti web autorizzati ad accreditarti discoverable: Include il profilo e i post negli algoritmi di scoperta fields: name: Etichetta diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index 1f3a52c0fd..bd8cb11415 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -3,6 +3,7 @@ ja: simple_form: hints: account: + attribution_domains_as_text: 1行につき1つずつ入力してください。この設定は関わりのないwebサイトに対して虚偽の帰属表示が行われることを防止する役割があります。 discoverable: プロフィールと公開投稿をMastodonのおすすめやハイライトとしてほかのユーザーに表示することを許可します。 display_name: フルネーム、ハンドルネームなど fields: ホームページ、代名詞、年齢など何でも構いません。 @@ -165,6 +166,7 @@ ja: name: 視認性向上などのためにアルファベット大文字小文字の変更のみ行うことができます user: chosen_languages: 選択すると、選択した言語の投稿のみが公開タイムラインに表示されるようになります + role: そのロールは、ユーザーが持つ権限を制御します。 user_role: color: UI 全体でロールの表示に使用される色(16進数RGB形式) highlighted: これによりロールが公開されます。 @@ -178,6 +180,7 @@ ja: kmyblue: kmyblue labels: account: + attribution_domains_as_text: あなたの著者表示を許可するwebサイト discoverable: アカウントを見つけやすくする fields: examples: diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index f390d42132..ff041b257b 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -104,6 +104,7 @@ kab: featured_tag: name: Ahacṭag form_admin_settings: + app_icon: Tignit n usnas custom_css: CSS udmawan profile_directory: Rmed akaram n imaγnuten site_contact_email: Imayl n unermas diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index a649b4ec5a..ddac920e2f 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -3,7 +3,7 @@ ko: simple_form: hints: account: - attribution_domains_as_text: 가짜 기여로부터 보호합니다. + attribution_domains_as_text: 한 줄에 하나씩. 가짜 기여로부터 보호합니다. discoverable: 내 공개 게시물과 프로필이 마스토돈의 다양한 추천 기능에 나타날 수 있고 프로필이 다른 사용자에게 제안될 수 있습니다 display_name: 진짜 이름 또는 재미난 이름. fields: 홈페이지, 호칭, 나이, 뭐든지 적고 싶은 것들. @@ -32,9 +32,9 @@ ko: warning_preset_id: 선택사항. 틀의 마지막에 임의의 텍스트를 추가 할 수 있습니다 announcement: all_day: 체크 되었을 경우, 그 시간에 속한 날짜들에만 표시됩니다 - ends_at: 옵션입니다. 공지사항이 이 시간에 자동으로 발행 중지 됩니다 + ends_at: 선택사항. 공지사항이 이 시간에 자동으로 발행 중지 됩니다 scheduled_at: 공백으로 두면 공지사항이 곧바로 발행 됩니다 - starts_at: 공지사항이 특정한 시간에 종속 될 때를 위한 옵션입니다 + starts_at: 선택사항. 공지사항이 특정한 시간에 종속 될 때를 위한 옵션입니다 text: 게시물 문법을 사용할 수 있습니다. 공지사항은 사용자의 화면 상단 공간을 차지한다는 것을 명심하세요 appeal: text: 처벌에 대해 단 한 번만 이의제기를 할 수 있습니다 @@ -46,7 +46,7 @@ ko: current_password: 보안을 위해 현재 계정의 암호를 입력해주세요 current_username: 확인을 위해, 현재 계정의 사용자명을 입력해주세요 digest: 오랫동안 활동하지 않았을 때 받은 멘션들에 대한 요약 받기 - email: 확인용 이메일을 보냈습니다. + email: 확인용 이메일을 보내게 됩니다 header: WEBP, PNG, GIF 혹은 JPG. 최대 %{size}. %{dimensions}px로 축소됨 inbox_url: 사용 할 릴레이 서버의 프론트페이지에서 URL을 복사합니다 irreversible: 필터링 된 게시물은 나중에 필터가 사라지더라도 돌아오지 않게 됩니다 @@ -110,7 +110,7 @@ ko: invite_request: text: 이 정보는 신청을 검토하는데 도움을 줄 수 있습니다. ip_block: - comment: 필수 아님. 왜 이 규칙을 추가했는지 기억하세요. + comment: 선택사항. 왜 이 규칙을 추가했는지 기억하세요. expires_in: IP 주소는 한정된 자원입니다, 이것들은 가끔 공유 되거나 자주 소유자가 바뀌기도 합니다. 이런 이유로 인해, IP 차단을 영구히 유지하는 것은 추천하지 않습니다. ip: IPv4 또는 IPv6 주소를 입력하세요. CIDR 문법을 사용해서 모든 범위를 차단할 수도 있습니다. 자기 자신을 잠가버리지 않도록 주의하세요! severities: @@ -119,7 +119,7 @@ ko: sign_up_requires_approval: 새 가입이 승인을 필요로 하도록 합니다 severity: 해당 IP로부터의 요청에 대해 무엇이 일어나게 할 지 고르세요 rule: - hint: 옵션사항. 규칙에 대한 더 상세한 정보를 제공하세요 + hint: 선택사항. 규칙에 대한 더 상세한 정보를 제공하세요 text: 이 서버 사용자들이 지켜야 할 규칙과 요구사항을 설명해주세요. 짧고 간단하게 작성해주세요 sessions: otp: '휴대전화에서 생성된 이중 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' @@ -140,11 +140,11 @@ ko: position: 특정 상황에서 충돌이 발생할 경우 더 높은 역할이 충돌을 해결합니다. 특정 작업은 우선순위가 낮은 역할에 대해서만 수행될 수 있습니다 webhook: events: 전송할 이벤트를 선택하세요 - template: 원하는 JSON 페이로드를 변수와 함께 작성하거나, 그냥 냅둬서 기본 JSON을 사용할 수 있습니다. + template: 원하는 JSON 페이로드를 변수와 함께 작성하거나, 그대로 두어 기본 JSON을 사용할 수 있습니다. url: 이벤트가 어디로 전송될 지 labels: account: - attribution_domains_as_text: 특정 웹사이트만 허용하기 + attribution_domains_as_text: 나를 기여자로 올릴 수 있도록 허용된 웹사이트들 discoverable: 발견하기 알고리즘에 프로필과 게시물을 추천하기 fields: name: 라벨 @@ -208,11 +208,11 @@ ko: setting_aggregate_reblogs: 타임라인의 부스트를 그룹화 setting_always_send_emails: 항상 이메일 알림 보내기 setting_auto_play_gif: 애니메이션 GIF를 자동 재생 - setting_boost_modal: 부스트 전 확인 창을 표시 + setting_boost_modal: 부스트 전 확인창을 띄웁니다 setting_default_language: 게시물 언어 setting_default_privacy: 게시물 프라이버시 setting_default_sensitive: 미디어를 언제나 민감한 콘텐츠로 설정 - setting_delete_modal: 게시물 삭제 전 확인 창을 표시 + setting_delete_modal: 게시물 삭제 전 확인창을 띄웁니다 setting_disable_hover_cards: 호버시 프로필 미리보기를 비활성화 setting_disable_swiping: 스와이프 모션 비활성화 setting_display_media: 미디어 표시 diff --git a/config/locales/simple_form.la.yml b/config/locales/simple_form.la.yml index 3a7ba0d445..0ad29b408a 100644 --- a/config/locales/simple_form.la.yml +++ b/config/locales/simple_form.la.yml @@ -1 +1,6 @@ +--- la: + simple_form: + hints: + account: + unlocked: Homines tibi sine approbātiōnis postulātiōne sequī poterunt. Dēlēgās, sī rogātiōnēs sequendī recēnseāre vīs et utrum novōs sectātōrēs accipere an repudiāre mālīs. diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index 94e387107a..de37005312 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -307,6 +307,7 @@ lad: listable: Permite ke esta etiketa apareska en bushkedas i sujestyones name: Etiketa trendable: Permite ke esta etiketa apareska en trendes + usable: Permite ke publikasyones uzen esta etiketa lokalmente user: role: Rolo time_zone: Zona de tiempo diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml index 5d3a02993b..6c4b6b3632 100644 --- a/config/locales/simple_form.lt.yml +++ b/config/locales/simple_form.lt.yml @@ -3,14 +3,14 @@ lt: simple_form: hints: account: - attribution_domains_as_text: Apsaugo nuo klaidingų atributų. + attribution_domains_as_text: Po vieną eilutėje. Apsaugo nuo klaidingų atributų. discoverable: Tavo vieši įrašai ir profilis gali būti rodomi arba rekomenduojami įvairiose Mastodon vietose, o profilis gali būti siūlomas kitiems naudotojams. display_name: Tavo pilnas vardas arba smagus vardas. fields: Tavo pagrindinis puslapis, įvardžiai, amžius, bet kas, ko tik nori. indexable: Tavo vieši įrašai gali būti rodomi Mastodon paieškos rezultatuose. Žmonės, kurie bendravo su tavo įrašais, gali jų ieškoti nepriklausomai nuo to. note: 'Gali @paminėti kitus žmones arba #saitažodžius.' show_collections: Žmonės galės peržiūrėti tavo sekimus ir sekėjus. Žmonės, kuriuos seki, matys, kad juos seki, nepaisant to. - unlocked: Žmonės galės tave sekti nepaprašę patvirtinimo. Panaikink žymėjimą, jei nori peržiūrėti sekimo prašymus ir pasirinkti, ar priimti, ar atmesti naujus sekėjus. + unlocked: Asmenys galės jus sekti nepaprašę patvirtinimo. Panaikinkite žymėjimą, jei norite peržiūrėti sekimo prašymus, ir pasirinkti, ar priimti, ar atmesti naujus sekėjus. account_alias: acct: Nurodyk paskyros, iš kurios nori perkelti, naudotojo vardą@domeną account_migration: @@ -107,7 +107,7 @@ lt: role: Vaidmuo valdo, kokius leidimus naudotojas turi. labels: account: - attribution_domains_as_text: Leisti tik konkrečias svetaines + attribution_domains_as_text: Svetainės, kuriuose leidžiama jus nurodyti discoverable: Rekomenduoti profilį ir įrašus į atradimo algoritmus indexable: Įtraukti viešus įrašus į paieškos rezultatus show_collections: Rodyti sekimus ir sekėjus profilyje diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 9cc32457f7..6c71aa9cf1 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -3,14 +3,14 @@ lv: simple_form: hints: account: - attribution_domains_as_text: Aizsargā no nepatiesa attiecinājuma. + attribution_domains_as_text: Viens katrā līnijā. Aizsargā no nepatiesa attiecinājuma. discoverable: Tavas publiskās ziņas un profils var tikt piedāvāti vai ieteikti dažādās Mastodon vietās, un tavs profils var tikt ieteikts citiem lietotājiem. display_name: Tavs pilnais vārds vai tavs joku vārds. fields: Tava mājas lapa, vietniekvārdi, vecums, viss, ko vēlies. indexable: Tavi publiskie ieraksti var tikt parādīti Mastodon meklēšanas iznākumā. Cilvēki, kuri ir mijiedarbojušies ar Taviem ierakstiem, var tos meklēt neatkarīgi no tā. note: 'Tu vari @minēt citus cilvēkus vai #mirkļbirkas.' show_collections: Cilvēki varēs pārlūkot Tavus sekotājus un sekojamos. Cilvēki, kuriem Tu seko, redzēs, ka Tu seko viņiem neatkarīgi no tā. - unlocked: Cilvēki varēs tev sekot, neprasot apstiprinājumu. Noņem atzīmi, ja vēlies pārskatīt sekošanas pieprasījumus un izvēlēties, pieņemt vai noraidīt jaunus sekotājus. + unlocked: Cilvēki varēs Tev sekot bez apstiprinājuma pieprasīšanas. Jānoņem atzīme, ja vēlies pārskatīt sekošanas pieprasījumus un izvēlēties, vai apstiprināt vai noraidīt jaunus sekotājus. account_alias: acct: Norādi konta lietotājvārdu@domēnu, no kura vēlies pārvākties account_migration: @@ -19,14 +19,14 @@ lv: text: Vari izmantot ziņu sintaksi, piemēram, URL, atsauces un pieminējumus title: Neobligāts. Saņēmējam nav redzams admin_account_action: - include_statuses: Lietotājs redzēs, kuras ziņas izraisījušas moderācijas darbību vai brīdinājumu + include_statuses: Lietotājs redzēs, kuras ziņas izraisījušas satura pārraudzības darbību vai brīdinājumu send_email_notification: Lietotājs saņems paskaidrojumu par to, kas notika ar viņa kontu text_html: Neobligāts. Tu vari lietot ziņu sintaksi. Lai ietaupītu laiku, tu vari pievienot brīdinājuma sākotnējos iestatījumus type_html: Izvēlies, ko darīt ar %{acct} types: disable: Neļauj lietotājam izmantot savu kontu, bet neizdzēs vai neslēp tā saturu. none: Izmanto šo, lai nosūtītu lietotājam brīdinājumu, neradot nekādas citas darbības. - sensitive: Piespiest visus šī lietotāja multivides pielikumus atzīmēt kā sensitīvus. + sensitive: Visus šī lietotāja informācijas nesēju pielikumus uzspiesti atzīmēt kā jūtīgus. silence: Neļaut lietotājam veikt ierakstus ar publisku redzamību, paslēpt viņa ierakstus un paziņojumus no cilvēkiem, kas tam neseko. Tiek aizvērti visi ziņojumi par šo kontu. suspend: Novērs jebkādu mijiedarbību no šī konta vai uz to un dzēs tā saturu. Atgriežams 30 dienu laikā. Tiek aizvērti visi šī konta pārskati. warning_preset_id: Neobligāts. Tu joprojām vari pievienot pielāgotu tekstu sākotnējās iestatīšanas beigās @@ -53,15 +53,15 @@ lv: locale: Lietotāja saskarnes, e-pasta ziņojumu un push paziņojumu valoda password: Izmanto vismaz 8 rakstzīmes phrase: Tiks saskaņots neatkarīgi no ziņas teksta reģistra vai satura brīdinājuma - scopes: Kuriem API lietojumprogrammai būs atļauta piekļuve. Ja izvēlies augstākā līmeņa tvērumu, tev nav jāatlasa atsevišķi vienumi. + scopes: Kuriem API lietotnei būs ļauts piekļūt. Ja atlasa augstākā līmeņa tvērumu, nav nepieciešamas atlasīt atsevišķus. setting_aggregate_reblogs: Nerādīt jaunus izcēlumus ziņām, kas nesen tika palielinātas (ietekmē tikai nesen saņemtos palielinājumus) setting_always_send_emails: Parasti e-pasta paziņojumi netiek sūtīti, kad aktīvi izmantojat Mastodon - setting_default_sensitive: Sensitīva multivide pēc noklusējuma ir paslēpti, un tos var atklāt, noklikšķinot - setting_display_media_default: Paslēpt multividi, kas atzīmēta kā sensitīva + setting_default_sensitive: Pēc noklusējuma jūtīgi informācijas nesēji ir paslēpti, un tos var atklāt ar klikšķi + setting_display_media_default: Paslēpt informācijas nesējus, kas atzīmēti kā jūtīgi setting_display_media_hide_all: Vienmēr slēpt multividi setting_display_media_show_all: Vienmēr rādīt multividi setting_use_blurhash: Pāreju pamatā ir paslēpto uzskatāmo līdzekļu krāsas, bet saturs tiek padarīts neskaidrs - setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis automātiski ritini plūsmu + setting_use_pending_items: Paslēpt laika skalas atjauninājumus aiz klikšķa, nevis ar automātisku plūsmas ritināšanu username: Tu vari lietot burtus, ciparus un zemsvītras whole_word: Ja atslēgvārds vai frāze ir tikai burtciparu, tas tiks lietots tikai tad, ja tas atbilst visam vārdam domain_allow: @@ -80,15 +80,16 @@ lv: activity_api_enabled: Vietēji publicēto ziņu, aktīvo lietotāju un jauno reģistrāciju skaits nedēļas kopās app_icon: WEBP, PNG, GIF vai JPG. Mobilajās ierīcēs aizstāj noklusējuma lietotnes ikonu ar pielāgotu. backups_retention_period: Lietotājiem ir iespēja izveidot savu ierakstu arhīvu lejupielādēšanai vēlāk. Kad iestatīta pozitīva vērtība, šie arhīvi tiks automātiski izdzēsti no krātuves pēc norādītā dienu skaita. - bootstrap_timeline_accounts: Šie konti tiks piesprausti jauno lietotāju ieteikumu augšdaļā. + bootstrap_timeline_accounts: Šie konti tiks piesprausti jauno lietotāju sekošanas ieteikumu augšdaļā. closed_registrations_message: Tiek rādīts, kad reģistrēšanās ir slēgta content_cache_retention_period: Visi ieraksti no citiem serveriem (tajā skaitā pastiprinājumi un atbildes) tiks izdzēsti pēc norādītā dienu skaita, neņemot vērā vietēja lietotāja mijiedarbību ar šādiem ierakstiem. Tas ietver ierakstus, kurus vietējs lietotājs ir atzīmējis kā grāmatzīmi vai pievienojis izlasē. Tiks zaudēti arī privāti pieminējumi starp lietotājiem no dažādiem serveriem, un tos nebūs iespējams atgūt. Šī iestatījuma izmantošana ir paredzēta īpašam nolūkam paredzētiem serveriem un neatbilst tam, ko sagaida vairums lietotāju, kad pielietots vispārējas izmantošanas serveros. custom_css: Vari lietot pielāgotus stilus Mastodon tīmekļa versijā. favicon: WEBP, PNG, GIF vai JPG. Aizstāj noklusējuma Mastodon favikonu ar pielāgotu. mascot: Ignorē ilustrāciju uzlabotajā tīmekļa saskarnē. + media_cache_retention_period: Informācijas nesēju datnes no ierakstiem, kurus ir veikuši attālie lietotāji, tiek kešoti šajā serverī. Kad ir iestatīta apstiprinoša vērtība, informācijas nesēji tiks izdzēsti pēc norādītā dienu skaita. Ja informācijas nesēju dati tiks pieprasīti pēc tam, kad tie tika izdzēsti, tie tiks atkārtoti lejupielādēti, ja avota saturs joprojām būs pieejams. Saišu priekšskatījuma karšu vaicājumu biežuma ierobežojumu dēļ ir ieteicams iestatīt šo vērtību vismaz 14 dienas vai saišu priekšskatījuma kartes netiks atjauninātas pēc pieprasījuma pirms tā laika. peers_api_enabled: Domēna vārdu saraksts, ar kuriem šis serveris ir saskāries fediversā. Šeit nav iekļauti dati par to, vai tu veic federāciju ar noteiktu serveri, tikai tavs serveris par to zina. To izmanto dienesti, kas apkopo statistiku par federāciju vispārīgā nozīmē. profile_directory: Profilu direktorijā ir uzskaitīti visi lietotāji, kuri ir izvēlējušies būt atklājami. - require_invite_text: 'Ja pierakstīšanai nepieciešama manuāla apstiprināšana, izdari tā, lai teksta: “Kāpēc vēlaties pievienoties?” ievade ir obligāta, nevis opcionāla' + require_invite_text: Ja nepieciešama pašrocīga apstiprināšana, lai pierakstītos, teksta “Kāpēc vēlies pievienoties?” ievade jāpadara par nepieciešamu, nevis izvēles site_contact_email: Kā cilvēki var sazināties ar tevi par juridiskiem vai atbalsta jautājumiem. site_contact_username: Tagad cilvēki var tevi sasniegt Mastodon. site_extended_description: Jebkura papildu informācija, kas var būt noderīga apmeklētājiem un lietotājiem. Var strukturēt ar Markdown sintaksi. @@ -118,10 +119,10 @@ lv: sign_up_requires_approval: Jaunām reģistrācijām būs nepieciešams tavs apstiprinājums severity: Izvēlies, kas notiks ar pieprasījumiem no šīs IP adreses rule: - hint: Izvēles. Sniedz vairāk informācijas par nosacījumu - text: Apraksti nosacījumus vai prasības šī servera lietotājiem. Centies, lai tas būtu īss un vienkāršs + hint: Izvēles. Sniedz vairāk informācijas par noteikumu + text: Jāapraksta nosacījums vai prasība šī servera lietotājiem. Jāmēģina to veidot īsu un vienkāršu sessions: - otp: 'Ievadi divfaktoru kodu, ko ģenerējusi tava tālruņa lietotne, vai izmanto kādu no atkopšanas kodiem:' + otp: 'Jāievada tālruņa lietotnes izveidots divpakāpju kods vai jāizmanto viens no saviem atkopes kodie:' webauthn: Ja tā ir USB atslēga, noteikti ievieto to un, ja nepieciešams, pieskaries tai. settings: indexable: Tava profila lapa var tikt parādīta Google, Bing un citu meklēšanas dzinēju rezultātos. @@ -143,7 +144,7 @@ lv: url: Kur notikumi tiks nosūtīti labels: account: - attribution_domains_as_text: Ļaut tikai noteiktas tīmekļvietnes + attribution_domains_as_text: Tīmekļvietnes, kurām ir tiesības uzskaitīt Tevi discoverable: Funkcijas profils un ziņas atklāšanas algoritmos fields: name: Marķējums @@ -166,7 +167,7 @@ lv: types: disable: Iesaldēt none: Nosūtīt brīdinājumu - sensitive: Sensitīvs + sensitive: Jūtīgs silence: Ierobežot suspend: Apturēt warning_preset_id: Lietot iepriekš iestatītus brīdinājumus @@ -182,7 +183,7 @@ lv: autofollow: Uzaicini sekot tavam kontam avatar: Profila attēls bot: Šis ir automatizēts konts - chosen_languages: Filtrēt valodas + chosen_languages: Atlasīt valodas confirm_new_password: Apstiprināt jauno paroli confirm_password: Apstiprināt paroli context: Filtrēt kontekstus @@ -210,7 +211,7 @@ lv: setting_boost_modal: Rādīt apstiprinājuma dialogu pirms izcelšanas setting_default_language: Publicēšanas valoda setting_default_privacy: Publicēšanas privātums - setting_default_sensitive: Atļaut atzīmēt multividi kā sensitīvu + setting_default_sensitive: Vienmēr atzīmēt informācijas nesējus kā jūtīgus setting_delete_modal: Parādīt apstiprinājuma dialogu pirms ziņas dzēšanas setting_disable_hover_cards: Atspējot profila priekšskatījumu pēc kursora novietošanas setting_disable_swiping: Atspējot vilkšanas kustības @@ -338,5 +339,5 @@ lv: text: nepieciešams title: sessions: - webauthn: Lai pierakstītos, izmanto vienu no savām drošības atslēgām + webauthn: Lai pieteiktos, jāizmanto viena no savām drošības atslēgām 'yes': Jā diff --git a/config/locales/simple_form.ms.yml b/config/locales/simple_form.ms.yml index ecc3588d67..4f6dd7c0a1 100644 --- a/config/locales/simple_form.ms.yml +++ b/config/locales/simple_form.ms.yml @@ -78,6 +78,7 @@ ms: bootstrap_timeline_accounts: Akaun ini akan disematkan pada bahagian atas cadangan ikutan pengguna baharu. closed_registrations_message: Dipaparkan semasa pendaftaran ditutup custom_css: Anda boleh menggunakan gaya tersuai pada versi web Mastodon. + favicon: WEBP, PNG, GIF, atau JPG. Arca tersuai diutamakan dari arca kegemaran Mastodon lalai. mascot: Mengatasi ilustrasi dalam antara muka web lanjutan. peers_api_enabled: Senarai nama domain yang pernah ditemui oleh server ini dalam fediverse. Tiada data disertakan di sini tentang sama ada anda bersekutu dengan server tertentu, cuma server anda mengetahuinya. Ini digunakan oleh perkhidmatan yang mengumpul statistik mengenai persekutuan dalam pengertian umum. profile_directory: Direktori profil menyenaraikan semua pengguna yang telah mengikut serta untuk ditemui. @@ -237,6 +238,7 @@ ms: bootstrap_timeline_accounts: Sentiasa mengesyorkan akaun ini kepada pengguna baharu closed_registrations_message: Mesej tersuai apabila pendaftaran tidak tersedia custom_css: CSS tersuai + favicon: Arca kegemaran mascot: Maskot tersuai (warisan) media_cache_retention_period: Tempoh pengekalan cache media peers_api_enabled: Terbitkan senarai pelayan yang ditemui dalam API @@ -277,7 +279,7 @@ ms: notification_emails: appeal: Seseorang merayu keputusan moderator digest: Hantar e-mel ringkasan - favourite: Seorang menggemarkan hantaran anda + favourite: Seseorang menyukai hantaran anda follow: Seorang mengikuti anda follow_request: Seorang meminta untuk mengikuti anda mention: Seorang menyebut anda diff --git a/config/locales/simple_form.nan.yml b/config/locales/simple_form.nan.yml new file mode 100644 index 0000000000..aec73b64e1 --- /dev/null +++ b/config/locales/simple_form.nan.yml @@ -0,0 +1,12 @@ +--- +nan: + simple_form: + hints: + account: + display_name: Lí ê全名á是別號。 + fields: Lí ê頭頁、代名詞、年歲,kap其他beh分享ê。 + unlocked: 逐ê m̄免受批准就ē當tuè lí,若是lí想beh審查跟綴ê請求,揀beh准á是拒絕跟tuè ê,請毋通勾。 + defaults: + password: 用 8 ê字元以上 + setting_display_media_hide_all: 一直khàm掉媒體 + setting_display_media_show_all: 一直展示媒體 diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 7f8aaa01d6..f50e223e8c 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -3,7 +3,7 @@ nl: simple_form: hints: account: - attribution_domains_as_text: Beschermt tegen onjuiste attributies. + attribution_domains_as_text: Eén per regel. Beschermt tegen ongeldige attributies. discoverable: Jouw openbare berichten kunnen worden uitgelicht op verschillende plekken binnen Mastodon en jouw account kan worden aanbevolen aan andere gebruikers. display_name: Jouw volledige naam of een leuke bijnaam. fields: Jouw website, persoonlijke voornaamwoorden, leeftijd, alles wat je maar kwijt wilt. @@ -144,7 +144,7 @@ nl: url: Waar gebeurtenissen naartoe worden verzonden labels: account: - attribution_domains_as_text: Alleen bepaalde websites toestaan + attribution_domains_as_text: Websites die jou credit mogen geven discoverable: Jouw account en berichten laten uitlichten door Mastodon fields: name: Label @@ -213,7 +213,7 @@ nl: setting_default_privacy: Zichtbaarheid van nieuwe berichten setting_default_sensitive: Media altijd als gevoelig markeren setting_delete_modal: Vraag voor het verwijderen van een bericht een bevestiging - setting_disable_hover_cards: Profielvoorbeelden door eroverheen te zweven uitschakelen + setting_disable_hover_cards: Hover-kaarten met profielvoorbeelden uitschakelen setting_disable_swiping: Swipebewegingen uitschakelen setting_display_media: Mediaweergave setting_display_media_default: Standaard @@ -268,7 +268,7 @@ nl: site_title: Servernaam status_page_url: URL van statuspagina theme: Standaardthema - thumbnail: Serverthumbnail + thumbnail: Server-miniatuur timeline_preview: Toegang tot de openbare tijdlijnen zonder in te loggen toestaan trendable_by_default: Trends goedkeuren zonder voorafgaande beoordeling trends: Trends inschakelen @@ -295,7 +295,7 @@ nl: favourite: Wanneer iemand jouw bericht als favoriet markeert follow: Wanneer iemand jou is gaan volgen follow_request: Wanneer iemand jou wil volgen - mention: Wanneer iemand jou heeft vermeld + mention: Je bent door iemand vermeld pending_account: Wanneer een nieuw account moet worden beoordeeld reblog: Wanneer iemand jouw bericht heeft geboost report: Nieuwe rapportage is ingediend diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index ddd5ed8995..fc47c7164c 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -3,7 +3,7 @@ nn: simple_form: hints: account: - attribution_domains_as_text: Vernar mot falske krediteringar. + attribution_domains_as_text: Ein per line. Vernar mot falske krediteringar. discoverable: Dei offentlege innlegga dine og profilen din kan dukka opp i tilrådingar på ulike stader på Mastodon, og profilen din kan bli føreslegen for andre folk. display_name: Ditt fulle namn eller ditt tøysenamn. fields: Heimesida di, pronomen, alder, eller kva du måtte ynskje. @@ -101,7 +101,7 @@ nn: thumbnail: Eit omlag 2:1 bilete vist saman med informasjon om tenaren. timeline_preview: Besøkjande som ikkje er logga inn vil kunne bla gjennom dei siste offentlege innlegga på tenaren. trendable_by_default: Hopp over manuell gjennomgang av populært innhald. Enkeltståande innlegg kan fjernast frå trendar i etterkant. - trends: Trendar viser kva for nokre innlegg, emneknaggar og nyheiter som er i støytet på tenaren. + trends: Trendar viser kva for nokre innlegg, emneknaggar og nyheiter som er populære på tenaren. trends_as_landing_page: Vis populært innhald til utlogga brukarar og folk som kjem innom sida i staden for ei skildring av tenaren. Du må ha skrudd på trendar for å kunna bruka dette. form_challenge: current_password: Du går inn i eit trygt område @@ -137,14 +137,14 @@ nn: highlighted: Dette gjer rolla synleg offentleg name: Offentleg namn på rolla, dersom rolla skal visast som eit emblem permissions_as_keys: Brukarar med denne rolla vil ha tilgang til... - position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan kun utførast på rollar med lågare prioritet + position: Høgare rolle avgjer konfliktløysing i visse situasjonar. Visse handlingar kan berre utførast på roller med lågare prioritet webhook: events: Vel hendingar å senda template: Skriv di eiga JSON nyttelast ved å bruka variabel interpolering. La stå tom for standard JSON. url: Kvar hendingar skal sendast labels: account: - attribution_domains_as_text: Tillat berre visse nettstader + attribution_domains_as_text: Nettstader som har lov å kreditera deg discoverable: Ta med profilen og innlegga i oppdagingsalgoritmar fields: name: Merkelapp diff --git a/config/locales/simple_form.no.yml b/config/locales/simple_form.no.yml index 73ba17cd4c..f1973b1d06 100644 --- a/config/locales/simple_form.no.yml +++ b/config/locales/simple_form.no.yml @@ -235,6 +235,7 @@ warn: Skjul med en advarsel form_admin_settings: activity_api_enabled: Publiser samlet statistikk om brukeraktivitet i API + app_icon: App-ikon backups_retention_period: Brukers oppbevaringsperiode for arkiv bootstrap_timeline_accounts: Anbefaler alltid disse kontoene til nye brukere closed_registrations_message: Egendefinert melding når registrering ikke er tilgjengelig diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index bb404e56c9..866872fb08 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -3,11 +3,11 @@ pl: simple_form: hints: account: - attribution_domains_as_text: Chroni przed fałszywym przypisaniem wpisów. + attribution_domains_as_text: Jedna na linię. Chroni przed fałszywym przypisaniem wpisów. discoverable: Twój profil i publiczne wpisy mogą być promowane lub polecane na Mastodonie i twój profil może być sugerowany innym użytkownikom. display_name: Twoje imię lub pseudonim. fields: Co ci się tylko podoba – twoja strona domowa, zaimki, wiek… - indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy wchodzili w interakcje z twoimi wpisami będą mogli je znaleźć niezależnie od tego ustawienia. + indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy reagowali na Twoje wpisy, będą mogli je znaleźć niezależnie od tego ustawienia. note: 'Możesz @wspomnieć użytkowników albo #hasztagi.' show_collections: Twoja lista obserwowanych i obserwujących będzie widoczna dla wszystkich. Użytkownicy których obserwujesz będą jednak o tym wiedzieli. unlocked: Inni użytkownicy będą mogli cię obserwować bez proszenia o zgodę. Odznacz, jeżeli chcesz aprobować obserwujących ręcznie po przejrzeniu próśb o obserwowanie. @@ -144,7 +144,7 @@ pl: url: Dokąd będą wysłane zdarzenia labels: account: - attribution_domains_as_text: Zezwól tylko na konkretne strony + attribution_domains_as_text: Strony które mogą ci przypisywać autorstwo. discoverable: Udostępniaj profil i wpisy funkcjom odkrywania fields: name: Nazwa diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml index 96bc219e8e..acc390381d 100644 --- a/config/locales/simple_form.pt-BR.yml +++ b/config/locales/simple_form.pt-BR.yml @@ -3,14 +3,14 @@ pt-BR: simple_form: hints: account: - attribution_domains_as_text: Protege de atribuições falsas. + attribution_domains_as_text: Um por linha. Protege de falsas atribuições. discoverable: Suas publicações e perfil públicos podem ser destaques ou recomendados em várias áreas de Mastodon, e seu perfil pode ser sugerido a outros usuários. display_name: Seu nome completo ou apelido. fields: Sua página inicial, pronomes, idade ou qualquer coisa que quiser. indexable: Suas publicações públicas podem aparecer nos resultados da pesquisa em Mastodon. As pessoas que interagiram com suas publicações podem conseguir pesquisá-las independentemente disso. - note: 'Você pode @mencionar outras pessoas ou #hashtags.' - show_collections: As pessoas poderão navegar entre os seus seguidores e seguidores. As pessoas que você segue verão que você as segue independentemente disso. - unlocked: As pessoas poderão te seguir sem pedir aprovação. Desmarque se você deseja revisar pedidos e escolher se aceita ou rejeita novos seguidores. + note: 'Você pode @mencionar outras pessoas ou usar #hashtags.' + show_collections: As pessoas podem ver seus seguidores e quem você está seguindo. Os perfis que você seguir saberão que você os segue independentemente do que selecionar. + unlocked: As pessoas poderão te seguir sem solicitar aprovação. Desmarque caso você queira revisar as solicitações. account_alias: acct: Especifique o usuário@domínio de onde veio account_migration: @@ -27,8 +27,8 @@ pt-BR: disable: Impede o usuário de usar a conta, porém sem excluí-la ou suspendê-la. none: Use isto para enviar uma advertência ao usuário, sem nenhuma outra ação. sensitive: Marca todas as mídias do usuário como sensível. - silence: Impede o usuário de enviar postagens visualmente públicas, além de ocultar suas publicações e notificações dos que não o seguem. Ademais, fecha todas as denúncias contra esta conta. - suspend: Impede qualquer interação de ou para esta conta e exclui seu conteúdo. Reversível dentro de 30 dias. Ademais, fecha todas as denúncias contra esta conta. + silence: Impede o usuário de postar publicamente, restringe suas publicações e notificações a somente quem o segue. Encerra todas as denúncias contra esta conta. + suspend: Impede qualquer interação de ou para esta conta e exclui seu conteúdo. Reversível dentro de 30 dias. Encerra todas as denúncias contra esta conta. warning_preset_id: Opcional. Você pode adicionar texto personalizado no final da advertência pré-definida announcement: all_day: Quando marcada, apenas as datas do período serão mostradas @@ -37,11 +37,11 @@ pt-BR: starts_at: Opcional. Caso o comunicado esteja vinculado a um período específico text: Você pode usar a sintaxe do toot. Considere o espaço que o comunicado ocupará na tela do usuário appeal: - text: Você só pode solicitar uma revisão uma vez + text: Você só pode recorrer uma vez defaults: autofollow: Pessoas que criarem conta através de seu convite te seguirão automaticamente avatar: WEBP, PNG, GIF ou JPG. No máximo %{size}. Será reduzido para %{dimensions}px - bot: Essa conta executa principalmente ações automatizadas e pode não ser monitorada + bot: Sinaliza aos outros de que essa conta executa principalmente ações automatizadas e pode não ser monitorada context: Um ou mais contextos onde o filtro deve atuar current_password: Para fins de segurança, digite a senha da conta atual current_username: Para confirmar, digite o nome de usuário da conta atual @@ -54,7 +54,7 @@ pt-BR: password: Use pelo menos 8 caracteres phrase: Corresponderá independente de maiúsculas ou minúsculas, no texto ou no Aviso de Conteúdo de um toot scopes: Quais APIs o aplicativo vai ter permissão de acessar. Se você selecionar uma autorização de alto nível, você não precisa selecionar individualmente os outros. - setting_aggregate_reblogs: Não mostra novos impulsos para publicações já receberam recentemente (afeta somente os impulsos mais recentes) + setting_aggregate_reblogs: Não mostrar novos impulsos para publicações que já foram impulsionadas recentemente (afeta somente os impulsos mais recentes) setting_always_send_emails: Normalmente, as notificações por e-mail não serão enviadas enquanto você estiver usando ativamente o Mastodon setting_default_sensitive: Mídia sensível está oculta por padrão e pode ser revelada com um clique setting_display_media_default: Sempre ocultar mídia sensível @@ -79,7 +79,7 @@ pt-BR: form_admin_settings: activity_api_enabled: Contagem de publicações locais, usuários ativos e novos usuários semanais app_icon: WEBP, PNG, GIF ou JPG. Sobrescrever o ícone padrão do aplicativo em dispositivos móveis com um ícone personalizado. - backups_retention_period: Os usuários têm a capacidade de gerar arquivos de suas postagens para baixar mais tarde. Quando definido como um valor positivo, esses arquivos serão automaticamente excluídos do seu armazenamento após o número especificado de dias. + backups_retention_period: Os usuários podem gerar arquivos de suas postagens para baixar mais tarde. Quando definido como um valor positivo, esses arquivos serão automaticamente excluídos do seu armazenamento após o número especificado de dias. bootstrap_timeline_accounts: Estas contas serão fixadas no topo das recomendações de novos usuários para seguir. closed_registrations_message: Exibido quando as inscrições estiverem fechadas content_cache_retention_period: Todas as postagens de outros servidores (incluindo boosts e respostas) serão excluídas após o número especificado de dias, sem levar a qualquer interação do usuário local com esses posts. Isto inclui postagens onde um usuário local o marcou como favorito ou favoritos. Menções privadas entre usuários de diferentes instâncias também serão perdidas e impossíveis de restaurar. O uso desta configuração destina-se a instâncias especiais de propósitos e quebra muitas expectativas dos usuários quando implementadas para uso de propósito geral. @@ -144,7 +144,7 @@ pt-BR: url: Aonde os eventos serão enviados labels: account: - attribution_domains_as_text: Permitir apenas sites específicos + attribution_domains_as_text: Sites permitidos para credenciar você discoverable: Destacar perfil e publicações nos algoritmos de descoberta fields: name: Rótulo diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 3b606df032..c2ebfb0c1f 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -3,19 +3,20 @@ pt-PT: simple_form: hints: account: + attribution_domains_as_text: Um por linha. Protege contra falsas atribuições. discoverable: As suas publicações e perfil públicos podem ser destacados ou recomendados em várias áreas do Mastodon e o seu perfil pode ser sugerido a outros utilizadores. display_name: O seu nome completo ou o seu nome divertido. fields: A sua página inicial, os seus pronomes, idade e tudo o que quiser. indexable: As suas mensagens públicas podem aparecer nos resultados da pesquisa no Mastodon. Independentemente disso, as pessoas que interagiram com as suas publicações podem ser capazes de as pesquisar. - note: 'Pode @mencionar outras pessoas ou #hashtags.' + note: 'Pode @mencionar outras pessoas e usar #etiquetas.' show_collections: As pessoas podem navegar pelas listas das pessoas que segue e dos seus seguidores. Independentemente disso, as pessoas que segue verão que você as segue. - unlocked: As pessoas podem segui-lo/a sem pedir a sua aprovação. Desmarque se quiser rever os pedidos para seguir e escolher se aceita ou rejeita os novos seguidores. + unlocked: As pessoas podem seguir-te sem pedir a tua aprovação. Desmarca se quiseres rever os pedidos para seguir e escolher se aceitas ou rejeitas os novos seguidores. account_alias: acct: Especifique o utilizador@domínio da conta de onde você deseja migrar account_migration: acct: Especifique o utilizador@domínio da conta para onde você deseja migrar account_warning_preset: - text: Pode usar sintaxe de escrita, como URL, etiquetas, e referências + text: Pode usar sintaxe de publicações, como URL, etiquetas e referências title: Opcional. Invisível para o destinatário admin_account_action: include_statuses: O utilizador verá quais as publicações que foram a razão da moderação ou advertência @@ -25,18 +26,18 @@ pt-PT: types: disable: Impede o utilizador de usar a sua conta, mas não elimina ou oculta o seu conteúdo. none: Use isto para enviar um aviso ao utilizador, sem espoletar nenhuma outra ação. - sensitive: Força todos os anexos de media deste utilizador a serem sinalizados como problemáticos. + sensitive: Forçar todos os anexos multimédia deste utilizador a serem assinalados como sensíveis. silence: Impede que o utilizador possa publicar com visibilidade pública, ocultando as suas publicações e notificações de pessoas que não o seguem. Encerra todas as denúncias contra esta conta. suspend: Evita qualquer interação de ou para esta conta e elimina o seu conteúdo. Reversível num período de 30 dias. Encerra todas as denúncias contra esta conta. warning_preset_id: Opcional. Tu ainda podes adicionar texto personalizado no fim do predefinido announcement: all_day: Quando marcado, apenas as datas do intervalo de tempo serão apresentadas - ends_at: Opcional. O anúncio será automaticamente retirado de exibição neste momento - scheduled_at: Deixe em branco para publicar o anúncio imediatamente - starts_at: Opcional. Caso o seu anúncio seja vinculado a um intervalo de tempo específico - text: Pode utilizar a sintaxe de publicações. Por favor, tenha em consideração o espaço que o comunicado ocupará no ecrã do utilizador + ends_at: Opcional. A mensagem de manutenção deixará de estar publicada neste momento + scheduled_at: Deixe em branco para publicar a mensagem de manutenção imediatamente + starts_at: Opcional. Caso a sua mensagem de manutenção seja vinculada a um intervalo de tempo específico + text: Pode utilizar a sintaxe de publicações. Por favor, tenha em consideração o espaço que a mensagem de manutenção ocupará no ecrã do utilizador appeal: - text: Só pode recorrer uma única vez de uma reprimenda + text: Só podes recorrer uma única vez de uma reprimenda defaults: autofollow: As pessoas que aderirem através do convite segui-lo-ão automaticamente avatar: WEBP, PNG, GIF ou JPG. No máximo %{size}. Será reduzido para %{dimensions}px @@ -53,15 +54,15 @@ pt-PT: password: Use pelo menos 8 caracteres phrase: Será correspondido independentemente da capitalização ou do aviso de conteúdo duma publicação scopes: Quais as API a que a aplicação terá permissão para aceder. Se selecionar um âmbito de nível superior, não precisa de selecionar âmbitos individuais. - setting_aggregate_reblogs: Não mostrar novos reforços de publicações recentemente reforçadas (só afecta publicações acabadas de reforçar) + setting_aggregate_reblogs: Não mostrar os novos impulsos para publicações que tenham sido recentemente impulsionadas (apenas afeta os impulsos recentemente recebidos) setting_always_send_emails: Normalmente as notificações por e-mail não serão enviadas quando estiver a utilizar ativamente o Mastodon - setting_default_sensitive: Media problemática oculta por padrão, pode ser revelada com um clique - setting_display_media_default: Esconder media marcada como problemática - setting_display_media_hide_all: Esconder sempre toda a media - setting_display_media_show_all: Mostrar sempre a media + setting_default_sensitive: Os multimédia sensíveis são ocultados por predefinição e podem ser revelados com um clique/toque + setting_display_media_default: Esconder multimédia marcada como sensível + setting_display_media_hide_all: Esconder sempre toda a multimédia + setting_display_media_show_all: Mostrar sempre a multimédia setting_use_blurhash: Os gradientes são baseados nas cores das imagens escondidas, mas ofuscam quaisquer pormenores - setting_use_pending_items: Ocultar atualizações da cronologia por detrás dum clique, em vez de rolar automaticamente o fluxo - username: Pode utilizar letras, números e sublinhados + setting_use_pending_items: Ocultar as atualizações da cronologia após um clique em vez de percorrer automaticamente a cronologia + username: Podes utilizar letras, números e traços inferiores (_) whole_word: Quando a palavra-chave ou expressão-chave é somente alfanumérica, ela só será aplicada se corresponder à palavra completa domain_allow: domain: Este domínio será capaz de obter dados desta instância e os dados dele recebidos serão processados e armazenados @@ -78,10 +79,10 @@ pt-PT: form_admin_settings: activity_api_enabled: Contagem, em blocos semanais, de publicações locais, utilizadores ativos e novos registos app_icon: WEBP, PNG, GIF ou JPG. Substitui o ícone padrão da aplicação em dispositivos móveis por um ícone personalizado. - backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado. + backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas publicações para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado. bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores. closed_registrations_message: Apresentado quando as inscrições estiverem encerradas - content_cache_retention_period: Todas as publicações de outros servidores (incluindo boosts e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas publicações. Isto inclui publicações em que um utilizador local as tenha marcado ou favoritado. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral. + content_cache_retention_period: Todas as mensagens de outros servidores (incluindo impulsos e respostas) serão eliminadas após o número de dias especificado, independentemente de qualquer interação do utilizador local com essas mensagens. Isto inclui mensagens em que um utilizador local as tenha marcado ou adicionado aos favoritos. As menções privadas entre utilizadores de instâncias diferentes também se perderão e serão impossíveis de restaurar. A utilização desta definição destina-se a instâncias para fins especiais e quebra muitas expectativas dos utilizadores quando implementada para utilização geral. custom_css: Pode aplicar estilos personalizados na versão web do Mastodon. favicon: WEBP, PNG, GIF ou JPG. Substitui o ícone de favorito padrão do Mastodon por um ícone personalizado. mascot: Sobrepõe-se à ilustração na interface web avançada. @@ -110,7 +111,7 @@ pt-PT: text: Isto vai ajudar-nos a analisar o seu pedido ip_block: comment: Opcional. Relembre-se por que adicionou esta regra. - expires_in: Endereços IP são um recurso limitado, algumas vezes são compartilhados e muitas vezes mudam de mãos. Por essa razão, bloqueios de IP indefinidos não são recomendados. + expires_in: Os endereços de IP são um recurso limitado, algumas vezes são partilhados e muitas vezes mudam de mãos. Por essa razão, não são recomendados bloqueios de IP indefinidos. ip: Introduza um endereço IPv4 ou IPv6. Pode bloquear intervalos inteiros usando a sintaxe CIDR. Tenha cuidado para não se bloquear a sí mesmo! severities: no_access: Bloquear o acesso a todos os recursos @@ -121,7 +122,7 @@ pt-PT: hint: Opcional. Forneça mais detalhes sobre a regra text: Descreva uma regra ou requisito para os utilizadores nesta instância. Tente mantê-la curta e simples sessions: - otp: 'Insira o código de autenticação em duas etapas gerado pelo seu telemóvel ou use um dos seus códigos de recuperação:' + otp: 'Insira o código de autenticação de dois fatores gerado pelo seu telemóvel ou use um dos seus códigos de recuperação:' webauthn: Se for uma chave USB tenha certeza de inseri-la e, se necessário, toque nela. settings: indexable: A sua página de perfil pode aparecer nos resultados de pesquisa no Google, Bing e outros. @@ -143,11 +144,12 @@ pt-PT: url: Para onde os eventos serão enviados labels: account: + attribution_domains_as_text: Sites autorizados a atribuir-lhe crédito discoverable: Destacar perfil e publicações nos algoritmos de descoberta fields: name: Rótulo value: Conteúdo - indexable: Incluir mensagens públicas nos resultados da pesquisa + indexable: Incluir mensagens públicas nos resultados de pesquisas show_collections: Mostrar quem sigo e os meus seguidores no perfil unlocked: Aceitar automaticamente novos seguidores account_alias: @@ -161,11 +163,11 @@ pt-PT: include_statuses: Incluir no e-mail as publicações denunciadas send_email_notification: Notificar o utilizador por e-mail text: Aviso personalizado - type: Acção + type: Ação types: disable: Congelar none: Enviar um aviso - sensitive: Problemático + sensitive: Sensível silence: Limitar suspend: Suspender warning_preset_id: Usar um aviso pré-definido @@ -174,11 +176,11 @@ pt-PT: ends_at: Fim do evento scheduled_at: Agendar publicação starts_at: Início do evento - text: Comunicado + text: Mensagem de manutenção appeal: - text: Explique porque esta decisão deve ser revertida + text: Explicar por que razão esta decisão deve ser anulada defaults: - autofollow: Convidar para seguir a tua conta + autofollow: Convidar para seguir a sua conta avatar: Imagem de perfil bot: Esta é uma conta robô chosen_languages: Filtrar idiomas @@ -191,7 +193,7 @@ pt-PT: email: Endereço de correio electrónico expires_in: Expira em fields: Metadados de perfil - header: Cabeçalho + header: Imagem de cabeçalho honeypot: "%{label} (não preencher)" inbox_url: URL da caixa de entrada do repetidor irreversible: Expandir em vez de esconder @@ -199,32 +201,32 @@ pt-PT: max_uses: Número máximo de utilizações new_password: Nova palavra-passe note: Biografia - otp_attempt: Código de autenticação em duas etapas + otp_attempt: Código de autenticação de dois fatores password: Palavra-passe phrase: Palavra-chave ou frase setting_advanced_layout: Ativar interface web avançada - setting_aggregate_reblogs: Agrupar reforços em cronologias - setting_always_send_emails: Enviar sempre notificações de email + setting_aggregate_reblogs: Agrupar impulsos em linhas de tempo + setting_always_send_emails: Enviar sempre notificações por e-mail setting_auto_play_gif: Reproduzir GIF automaticamente - setting_boost_modal: Solicitar confirmação antes de partilhar uma publicação + setting_boost_modal: Mostrar caixa de diálogo de confirmação antes de impulsionar setting_default_language: Idioma de publicação setting_default_privacy: Privacidade da publicação - setting_default_sensitive: Marcar sempre os media como problemáticos + setting_default_sensitive: Marcar sempre os multimédia como sensíveis setting_delete_modal: Solicitar confirmação antes de eliminar uma publicação setting_disable_hover_cards: Desativar visualização de perfil ao passar o cursor setting_disable_swiping: Desativar os movimentos de deslize - setting_display_media: Visualização de media + setting_display_media: Visualização de multimédia setting_display_media_default: Pré-definição setting_display_media_hide_all: Esconder todos setting_display_media_show_all: Mostrar todos setting_expand_spoilers: Expandir sempre as publicações marcadas com avisos de conteúdo setting_hide_network: Esconder a tua rede - setting_reduce_motion: Reduz movimento em animações + setting_reduce_motion: Reduzir movimento em animações setting_system_font_ui: Usar o tipo de letra padrão do sistema setting_theme: Tema do sítio setting_trends: Mostrar as tendências de hoje setting_unfollow_modal: Solicitar confirmação antes de deixar de seguir alguém - setting_use_blurhash: Mostrar gradientes coloridos para medias ocultas + setting_use_blurhash: Mostrar gradientes coloridos para multimédias ocultas setting_use_pending_items: Modo lento severity: Gravidade sign_in_token_attempt: Código de segurança @@ -251,7 +253,7 @@ pt-PT: custom_css: CSS personalizado favicon: Ícone de favoritos mascot: Mascote personalizada (legado) - media_cache_retention_period: Período de retenção de ficheiros de media em cache + media_cache_retention_period: Período de retenção de ficheiros multimédia em cache peers_api_enabled: Publicar lista de servidores descobertos na API profile_directory: Ativar o diretório de perfis registrations_mode: Quem se pode inscrever @@ -288,14 +290,14 @@ pt-PT: sign_up_requires_approval: Limitar inscrições severity: Regra notification_emails: - appeal: Alguém recorreu de uma decisão de moderação + appeal: Alguém contestou uma decisão de moderação digest: Enviar e-mails de resumo - favourite: Alguém adicionou uma publicação sua aos marcadores + favourite: Quando alguém adiciona uma publicação sua aos favoritos follow: Alguém começou a segui-lo follow_request: Alguém pediu para ser seu seguidor mention: Alguém o mencionou pending_account: Uma nova conta aguarda aprovação - reblog: Alguém reforçou uma publicação sua + reblog: Alguém impulsionou uma publicação sua report: Uma nova denúncia foi submetida software_updates: all: Notificar todas as atualizações @@ -314,7 +316,7 @@ pt-PT: listable: Permitir que esta etiqueta apareça em pesquisas e no diretório de perfis name: Etiqueta trendable: Permitir que esta etiqueta apareça nas tendências - usable: Permitir que as publicações usem esta hashtag localmente + usable: Permitir que as publicações usem esta etiqueta localmente user: role: Função time_zone: Fuso horário diff --git a/config/locales/simple_form.ro.yml b/config/locales/simple_form.ro.yml index 458638ddec..801a61d5aa 100644 --- a/config/locales/simple_form.ro.yml +++ b/config/locales/simple_form.ro.yml @@ -3,10 +3,13 @@ ro: simple_form: hints: account: + attribution_domains_as_text: Una pe linie. Protejează împotriva atribuirilor false. discoverable: Este posibil ca postările și profilul tău să fie recomandate în diferite zone ale Mastodon, iar profilul tău ar poate fi sugerat altor utilizatori. + display_name: Numele dvs. complet sau numele dvs. amuzant. fields: Pagina ta principală, pronumele tale, vârsta, sau orice îți dorești. indexable: Postările tale publice pot apărea în rezultatele căutărilor pe Mastodon. Persoanele care au interacționat cu postările tale vor putea să le caute oricând. note: 'Poți @menționa alte persoane sau #hashtag-uri.' + show_collections: Oamenii vor putea să răsfoiască urmăriți și urmăritorii dvs. Oamenii pe care îi urmăriți vor vedea că îi urmăriți indiferent. unlocked: Alte persoane vă vor putea urmări fără a solicita aprobare. Debifați dacă doriți să revizuiți cererile și să alegeți dacă doriți să acceptați sau să respingeți noii urmăritori. account_alias: acct: Specificați numele de utilizator@domeniu al contului de la care doriți să treceți @@ -20,6 +23,12 @@ ro: send_email_notification: Utilizatorul va primi o explicație cu privire la ceea ce sa întâmplat cu contul lui text_html: Opțional. Poți utiliza sintaxe. Poți adăuga avertismente predefinite pentru a salva timp type_html: Alege ce se întâmplă cu %{acct} + types: + disable: Împiedicați utilizatorul să-și folosească contul, dar nu ștergeți sau ascundeți conținutul acestuia. + none: Utilizați acest lucru pentru a trimite o avertizare utilizatorului, fără a declanșa nicio altă acțiune. + sensitive: Forțează toate atașamentele media ale acestui utilizator să fie marcate ca sensibile. + silence: Împiedicați utilizatorul să poată posta cu vizibilitate publică, ascundeți postările și notificările de la persoanele care nu le urmăresc. Închide toate rapoartele pentru acest cont. + suspend: Preveniți orice interacțiune din sau către acest cont și ștergeți conținutul acestuia. Reversibil în 30 de zile. Închide toate rapoartele pentru acest cont. warning_preset_id: Opțional. Poți adăuga text personalizat la sfârșitul presetului announcement: all_day: Când este bifat, numai datele intervalului de timp vor fi afișate @@ -27,6 +36,8 @@ ro: scheduled_at: Lăsați necompletat pentru a publica anunțul imediat starts_at: Opțional. În cazul în care anunțul tău este legat de un anumit interval de timp text: Poți folosi sintaxa de postare. Te rugăm să fii atent la spațiul pe care anunțul îl va ocupa pe ecranul utilizatorului + appeal: + text: Puteți contesta un avertisment o singură dată defaults: autofollow: Persoanele care se înregistrează datorită invitației tale te vor urmări automat avatar: WEBP, PNG, GIF sau JPG. Cel mult %{size}. Va fi redimensionată la %{dimensions}px @@ -65,27 +76,74 @@ ro: actions: hide: Ascunde complet conținutul filtrat, ca și cum nu ar exista warn: Ascunde conținutul filtrat în spatele unui avertisment care menționează titlul filtrului + form_admin_settings: + activity_api_enabled: Numărul de postări publicate local, utilizatori activi și înregistrări noi în grupe săptămânale + app_icon: WEBP, PNG, GIF sau JPG. Înlocuiește pictograma implicită a aplicației pe dispozitivele mobile cu o pictogramă personalizată. + backups_retention_period: Utilizatorii au posibilitatea de a genera arhive ale postărilor lor pentru a le descărca mai târziu. Când este setat la o valoare pozitivă, aceste arhive vor fi șterse automat din spațiul dvs. de stocare după numărul de zile specificat. + bootstrap_timeline_accounts: Aceste conturi vor fi fixate în partea de sus a recomandărilor de urmărire ale noilor utilizatori. + closed_registrations_message: Afișat când înscrierile sunt închise + content_cache_retention_period: Toate postările de pe alte servere (inclusiv amplificarea și răspunsurile) vor fi șterse după numărul specificat de zile, fără a ține cont de interacțiunea utilizatorului local cu acele postări. Aceasta include postările în care un utilizator local le-a marcat ca marcaje sau favorite. Mențiunile private între utilizatorii din diferite instanțe se vor pierde și vor fi imposibil de restaurat. Utilizarea acestei setări este destinată cazurilor cu scop special și încalcă multe așteptări ale utilizatorilor atunci când este implementată pentru uz general. + custom_css: Puteți aplica stiluri personalizate pe versiunea web a Mastodon. + favicon: WEBP, PNG, GIF sau JPG. Suprascrie favicon-ul implicit Mastodon cu o pictogramă personalizată. + mascot: Suprascrie ilustrația din interfața web avansată. + media_cache_retention_period: Fișierele media din postările făcute de utilizatorii la distanță sunt stocate în cache pe serverul dvs. Când este setată la o valoare pozitivă, fișierele media vor fi ștearse după numărul specificat de zile. Dacă datele media sunt solicitate după ce sunt șterse, acestea vor fi re-descărcate, dacă conținutul sursă este încă disponibil. Din cauza restricțiilor cu privire la frecvența cu care cardurile de previzualizare a linkurilor interogează site-urile terțelor părți, se recomandă să setați această valoare la cel puțin 14 zile, sau cardurile de previzualizare a linkurilor nu vor fi actualizate la cerere înainte de această oră. + peers_api_enabled: O listă de nume de domenii pe care acest server le-a întâlnit în fediverse. Nu sunt incluse aici date despre dacă vă federați cu un anumit server, doar că serverul dvs. știe despre asta. Acesta este folosit de serviciile care colectează statistici despre federație în sens general. + profile_directory: Directorul de profil listează toți utilizatorii care au optat pentru a fi descoperibili. + require_invite_text: Când înscrierile necesită aprobare manuală, faceți introducerea textului „De ce doriți să vă alăturați?” obligatorie și nu opțională + site_contact_email: Cum vă pot contacta oamenii pentru întrebări juridice sau de asistență. + site_contact_username: Cum vă pot contacta oamenii pe Mastodon. + site_extended_description: Orice informație suplimentară care poate fi utilă vizitatorilor și utilizatorilor dvs. Poate fi structurată cu sintaxa Markdown. + site_short_description: O descriere scurtă pentru a ajuta la identificarea unică a serverului dvs. Cine-l conduce, pentru cine este? + site_terms: Utilizați propria politică de confidențialitate sau lăsați necompletat pentru a o utiliza pe cea implicit. Poate fi structurată cu sintaxa Markdown. + site_title: Cum se pot referi oamenii la serverul dvs. în afară de numele său de domeniu. + status_page_url: URL-ul unei pagini unde oamenii pot vedea starea acestui server în timpul unei întreruperi + theme: Tema pe care vizitatorii deconectați și utilizatorii noi o văd. + thumbnail: O imagine de aproximativ 2:1 afișată alături de informațiile serverului dvs. + timeline_preview: Vizitatorii deconectați vor putea să răsfoiască cele mai recente postări publice disponibile pe server. + trendable_by_default: Omiteți revizuirea manuală a conținutului în tendințe. Elementele individuale pot fi în continuare eliminate din tendințe după fapt. + trends: Tendințele arată ce postări, hashtag-uri și știri câștigă teren pe serverul dvs. + trends_as_landing_page: Afișați conținut în tendințe utilizatorilor deconectați și vizitatorilor în loc de o descriere a acestui server. Necesită ca tendințele să fie activate. form_challenge: current_password: Ați intrat într-o zonă securizată imports: data: Fișierul CSV exportat de la o altă instanță invite_request: text: Acest lucru ne va ajuta să revizuim cererea dvs + ip_block: + comment: Opțional. Amintiți-vă de ce ați adăugat această regulă. + expires_in: Adresele IP sunt o resursă finită, uneori sunt partajate și adesea se schimbă. Din acest motiv, blocurile IP nedefinite nu sunt recomandate. + ip: Introduceți o adresă IPv4 sau IPv6. Puteți bloca întregul spectru folosind sintaxa CIDR. Aveți grijă să nu vă blocați! + severities: + no_access: Blocați accesul la toate resursele + sign_up_block: Nu vor fi posibile înscrieri noi + sign_up_requires_approval: Înscrierile noi vor necesita aprobarea dvs. + severity: Alegeți ce se va întâmpla cu cererile de la acestă adresă IP + rule: + hint: Opțional. Oferiți mai multe detalii despre regulă + text: Descrieți o regulă sau o cerință pentru utilizatorii de pe acest server. Încercați să o faceți scurtă și simplă sessions: otp: 'Introdu codul pentru dubla protecție generat de telefonul mobil sau unul din codurile de rezervă:' + webauthn: Dacă este o cheie USB, asigurați-vă că o introduceți și, dacă este necesar, atingeți-o. + settings: + indexable: Pagina dvs. de profil poate apărea în rezultatele căutării pe Google, Bing și altele. + show_application: Veți putea întotdeauna să vedeți ce aplicație v-a publicat postarea. tag: name: Poți doar să schimbi caseta literelor, de exemplu, pentru a o face mai lizibilă user: chosen_languages: Doar postările în limbile selectate vor fi afișate în fluxurile publice + role: Rolul controlează ce permisiuni are utilizatorul. + user_role: + color: Culoare care va fi folosită pentru rol în întreaga interfață, ca RGB în format hexazecimal labels: account: + attribution_domains_as_text: Site-uri web care vă pot credita fields: name: Etichetă value: Conținut account_alias: - acct: Manipularea contului vechi + acct: Identificatorul contului vechi account_migration: - acct: Manipularea contului nou + acct: Identificatorul contului nou account_warning_preset: text: Text presetat title: Titlu diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml index 3ff746451b..37626ff9fd 100644 --- a/config/locales/simple_form.ru.yml +++ b/config/locales/simple_form.ru.yml @@ -3,7 +3,7 @@ ru: simple_form: hints: account: - attribution_domains_as_text: Защищает от ложных атрибуций. + attribution_domains_as_text: По одному на строку. Защищает от ложных атрибуций. discoverable: Ваши публичные сообщения и профиль могут быть показаны или рекомендованы в различных разделах Mastodon, и ваш профиль может быть предложен другим пользователям. display_name: Ваше полное имя или псевдоним. fields: Ваша домашняя страница, местоимения, возраст - все, что угодно. @@ -144,7 +144,7 @@ ru: url: Куда события будут отправляться labels: account: - attribution_domains_as_text: Разрешить только определенные сайты + attribution_domains_as_text: Веб-сайты, которым разрешено ссылаться на вас discoverable: Профиль и сообщения в алгоритмах обнаружения fields: name: Пункт diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index d1ae553c8c..d9645aceba 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -3,6 +3,7 @@ sl: simple_form: hints: account: + attribution_domains_as_text: Ena na vrstico. Ščiti pred napačno navedbo avtorstva. discoverable: Vaše javne objave in profil so lahko predstavljeni ali priporočeni v različnih delih Mastodona, vaš profil pa je lahko predlagan drugim uporabnikom. display_name: Vaše polno ime ali lažno ime. fields: Vaša domača stran, starost, kar koli. @@ -130,6 +131,7 @@ sl: name: Spremenite lahko le npr. velikost črk (velike/male), da je bolj berljivo user: chosen_languages: Ko je označeno, bodo v javnih časovnicah prikazane samo objave v izbranih jezikih + role: Vloga določa, katera dovoljenja ima uporabnik. user_role: color: Barva, uporabljena za vlogo po celem up. vmesniku, podana v šestnajstiškem zapisu RGB highlighted: S tem je vloga javno vidna @@ -142,6 +144,7 @@ sl: url: Kam bodo poslani dogodki labels: account: + attribution_domains_as_text: Spletna mesta, ki vas smejo navajati kot avtorja/ico discoverable: Izpostavljaj profile in objave v algoritmih odkrivanja fields: name: Oznaka diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index 169f4a02de..1ca9037e63 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -3,7 +3,7 @@ sq: simple_form: hints: account: - attribution_domains_as_text: Mbron nga atribuime të rreme. + attribution_domains_as_text: Një për rresht. Kjo mbron nga atribuime të rreme. discoverable: Postimet dhe profili juaj publik mund të shfaqen, ose rekomandohen në zona të ndryshme të Mastodon-it dhe profili juaj mund të sugjerohet përdoruesve të tjerë. display_name: Emri juaj i plotë, ose emri juaj lojcak. fields: Faqja juaj hyrëse, përemra, moshë, ç’të keni qejf. @@ -144,7 +144,7 @@ sq: url: Ku do të dërgohen aktet labels: account: - attribution_domains_as_text: Lejo vetëm sajte specifikë + attribution_domains_as_text: Sajte të lejuar t’ju japin hakë discoverable: Profilin dhe postimet bëji objekt të algoritmeve të zbulimit fields: name: Etiketë diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 297e96a2bd..49ad75e3c6 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -3,6 +3,7 @@ sv: simple_form: hints: account: + attribution_domains_as_text: En per rad. Skyddar mot falska attributioner. discoverable: Dina offentliga inlägg och din profil kan komma att presenteras eller rekommenderas inom olika områden av Mastodon och din profil kan komma att föreslås till andra användare. display_name: Ditt fullständiga namn eller ditt roliga namn. fields: Din hemsida, ditt pronomen, din ålder, vadhelst du vill. @@ -73,7 +74,7 @@ sv: filters: action: Välj vilken åtgärd som ska utföras när ett inlägg matchar filtret actions: - hide: Dölj det filtrerade innehållet helt (beter sig som om det inte fanns) + hide: Dölj det filtrerade innehållet helt, beter sig som om det inte fanns warn: Dölj det filtrerade innehållet bakom en varning som visar filtrets rubrik form_admin_settings: activity_api_enabled: Antalet lokalt publicerade inlägg, aktiva användare och nya registrerade konton per vecka @@ -143,12 +144,13 @@ sv: url: Dit händelser kommer skickas labels: account: + attribution_domains_as_text: Webbplatser som får kreditera dig discoverable: Presentera profil och inlägg med upptäcktsalgoritmer fields: name: Etikett value: Innehåll indexable: Inkludera offentliga inlägg i sökresultaten - show_collections: Göm följare och följeslagare på profilen + show_collections: Visa följare och följeslagare på profilen unlocked: Godkänn nya följare automatiskt account_alias: acct: Namnet på det gamla kontot diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 1ecd672a97..f8f4d3f119 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -3,7 +3,7 @@ th: simple_form: hints: account: - attribution_domains_as_text: ปกป้องจากการระบุแหล่งที่มาที่ผิด + attribution_domains_as_text: หนึ่งรายการต่อบรรทัด ปกป้องจากการระบุแหล่งที่มาที่ผิด discoverable: อาจแสดงหรือแนะนำโพสต์และโปรไฟล์สาธารณะของคุณในพื้นที่ต่าง ๆ ของ Mastodon และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้ใช้อื่น ๆ display_name: ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ fields: หน้าแรก, สรรพนาม, อายุของคุณ สิ่งใดก็ตามที่คุณต้องการ @@ -144,7 +144,7 @@ th: url: ที่ซึ่งจะส่งเหตุการณ์ไปยัง labels: account: - attribution_domains_as_text: อนุญาตเฉพาะเว็บไซต์ที่เฉพาะเจาะจงเท่านั้น + attribution_domains_as_text: เว็บไซต์ที่ได้รับอนุญาตให้ให้เครดิตคุณ discoverable: แสดงโปรไฟล์และโพสต์ในอัลกอริทึมการค้นพบ fields: name: ป้ายชื่อ diff --git a/config/locales/simple_form.tok.yml b/config/locales/simple_form.tok.yml index 37b0ee765a..98968ffa93 100644 --- a/config/locales/simple_form.tok.yml +++ b/config/locales/simple_form.tok.yml @@ -3,7 +3,16 @@ tok: simple_form: hints: account: + attribution_domains_as_text: linja sitelen wan la wan taso o lon. ni la, sona pona pi jan pali li lon. display_name: nimi sina ale anu nimi sina musi. + fields: lipu open sina, en nimi pi kon sina, en suli tenpo sina, en ijo ante ale pi wile sina. + note: 'sina ken @mu e jan ante, li ken lon e #kulupu toki suli.' + show_collections: 'jan li ken lukin e ni: sina kute e jan seme, jan seme li kute e sina. ale la, sina kute e jan la ona li sona.' + unlocked: ni li lon la, ale la jan li ken kute e sina. sina ken anu ala e ona la, ni li suli ala. sina wile ken e wile kute, li wile ala e ona, la o ala e nasin ni. + account_alias: + acct: o toki e nimi@ma pi sijelo tan + account_migration: + acct: o toki e nimi@ma pi sijelo tawa defaults: setting_display_media_hide_all: sitelen ale li len setting_display_media_show_all: sitelen ale li len ala diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index d90b97bf9b..5aed566626 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -3,7 +3,7 @@ tr: simple_form: hints: account: - attribution_domains_as_text: Sahte atıflardan korur. + attribution_domains_as_text: Her satırda bir tanesi. Sahte atıflardan korur. discoverable: Herkese açık gönderileriniz ve profiliniz Mastodon'un çeşitli kısımlarında öne çıkarılabilir veya önerilebilir ve profiliniz başka kullanıcılara önerilebilir. display_name: Tam adınız veya kullanıcı adınız. fields: Ana sayfanız, zamirleriniz, yaşınız, istediğiniz herhangi bir şey. @@ -144,7 +144,7 @@ tr: url: Olayların gönderileceği yer labels: account: - attribution_domains_as_text: Yalnızca belirli websitelerine izin ver + attribution_domains_as_text: Size atıf verebilecek websiteleri discoverable: Profil ve gönderileri keşif algoritmalarında kullan fields: name: Etiket diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index b584a6cada..9b901cbe2c 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -3,7 +3,7 @@ uk: simple_form: hints: account: - attribution_domains_as_text: Захищає від фальшивих атрибутів. + attribution_domains_as_text: Один на рядок. Захищає від фальшивих атрибутів. discoverable: Ваші дописи та профіль можуть бути рекомендовані в різних частинах Mastodon і ваш профіль може бути запропонований іншим користувачам. display_name: Ваше повне ім'я або ваш псевдонім. fields: Ваша домашня сторінка, займенники, вік, все, що вам заманеться. @@ -144,7 +144,7 @@ uk: url: Куди надсилатимуться події labels: account: - attribution_domains_as_text: Дозволити лише на певних вебсайтах + attribution_domains_as_text: Сайти дозволяють вам вказувати ваше авторство discoverable: Функції профілю та дописів у алгоритмах виявлення fields: name: Мітка @@ -213,7 +213,7 @@ uk: setting_default_privacy: Видимість дописів setting_default_sensitive: Позначати медіа делікатними setting_delete_modal: Показувати діалог підтвердження під час видалення допису - setting_disable_hover_cards: Вимкнути попередній перегляд профілю при наведенні + setting_disable_hover_cards: Вимкнути попередній перегляд профілю під час наведення мишки setting_disable_swiping: Вимкнути рух посування setting_display_media: Показ медіа setting_display_media_default: За промовчанням @@ -316,7 +316,7 @@ uk: listable: Дозволити появу цього хештеґа у каталозі пошуку і пропозицій name: Хештеґ trendable: Дозволити появу цього хештеґа у списку популярних хештеґів - usable: Дозволити дописам використовувати цей хештег локально + usable: Дозволити дописам використовувати цей гештеґ локально user: role: Роль time_zone: Часовий пояс diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index 010bb262ad..2b1d84f595 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -3,7 +3,7 @@ vi: simple_form: hints: account: - attribution_domains_as_text: Bảo vệ khỏi những sự gán ghép sai. + attribution_domains_as_text: Mỗi cái một dòng. Bảo vệ khỏi những sự gán ghép sai. discoverable: Hồ sơ và tút công khai của bạn được đề xuất cho những người dùng Mastodon khác. display_name: Tên đầy đủ hoặc biệt danh đều được. fields: Trang blog của bạn, nghề nghiệp, tuổi hoặc bất cứ thứ gì. @@ -43,7 +43,7 @@ vi: avatar: WEBP, PNG, GIF hoặc JPG, tối đa %{size}. Sẽ bị nén xuống %{dimensions}px bot: Tài khoản này tự động thực hiện các hành động và không được quản lý bởi người thật context: Chọn những nơi mà bộ lọc sẽ áp dụng - current_password: Vì mục đích bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại + current_password: Để bảo mật, vui lòng nhập mật khẩu của tài khoản hiện tại current_username: Để xác nhận, vui lòng nhập tên người dùng của tài khoản hiện tại digest: Chỉ gửi sau một thời gian dài không hoạt động hoặc khi bạn nhận được tin nhắn (trong thời gian vắng mặt) email: Bạn sẽ được gửi một email xác minh @@ -144,7 +144,7 @@ vi: url: Nơi những sự kiện được gửi đến labels: account: - attribution_domains_as_text: Chỉ cho phép các website đặc biệt + attribution_domains_as_text: Các trang web được ghi nhận cho bạn discoverable: Cho phép khám phá hồ sơ fields: name: Nhãn @@ -290,7 +290,7 @@ vi: sign_up_requires_approval: Giới hạn đăng ký severity: Mức độ notification_emails: - appeal: Ai đó kháng cáo kiểm duyệt + appeal: Ai đó khiếu nại kiểm duyệt digest: Gửi email định kỳ favourite: Ai đó thích tút của bạn follow: Ai đó theo dõi bạn diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index 419cb99abb..7e204f6b3b 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -3,20 +3,20 @@ zh-CN: simple_form: hints: account: - attribution_domains_as_text: 保护作品免受虚假署名。 - discoverable: 您的公开嘟文和个人资料可能会在 Mastodon 的多个位置展示,您的个人资料可能会被推荐给其他用户。 + attribution_domains_as_text: 每行一个域名。这样就可以保护作品免受虚假署名。 + discoverable: 你的公开嘟文和个人资料可能会在 Mastodon 的多个位置展示,你的个人资料可能会被推荐给其他用户。 display_name: 你的全名或昵称。 fields: 你的主页、人称代词、年龄,以及任何你想要添加的内容。 - indexable: 您的公开嘟文会出现在 Mastodon 的搜索结果中。无论是否勾选,与您的嘟文有过交互的人都可能通过搜索找到它们。 - note: '你可以提及 @其他人 或 #标签 。' - show_collections: 人们将能够浏览您的关注和追随者。您关注的人会看到您关注他们。 + indexable: 你的公开嘟文会出现在 Mastodon 的搜索结果中。无论是否勾选,与你的嘟文有过交互的人都可能通过搜索找到它们。 + note: '你可以提及 @其他人 或 #话题 。' + show_collections: 人们将能够浏览你的关注和追随者。你关注的人会看到你关注他们。 unlocked: 人们将能够在不请求批准的情况下关注你。如果你希望审核关注请求并选择接受或拒绝新的粉丝,请取消勾选此项。 account_alias: acct: 指定你想要迁移过来的原账号:用户名@站点域名 account_migration: acct: 指定你想迁移过去的目标账号:用户名@站点域名 account_warning_preset: - text: 你可以使用嘟文格式,例如加入 URL、话题标签和“@” + text: 你可以使用嘟文格式,例如加入 URL、话题和“@” title: 可选。对接收者不可见 admin_account_action: include_statuses: 用户将会看到哪些嘟文导致了管理操作或警告 @@ -24,11 +24,11 @@ zh-CN: text_html: 可选。你可以使用嘟文格式。你可以预置警告以节省时间 type_html: 用%{acct}选择做什么 types: - disable: 禁止用户使用账户,但不会删除或隐藏账户内容。 + disable: 禁止用户使用账号,但不会删除或隐藏账号内容。 none: 用它来向用户发送警告,不会触发其他操作。 sensitive: 强制将此用户的所有媒体文件标记为敏感内容。 - silence: 阻止用户发送公开嘟文,除了关注者以外,其他人都无法看到他的嘟文和通知。关闭针对此账户的所有举报。 - suspend: 阻止此账户的任何交互并删除其内容。30天内可以撤销操作。关闭针对此账户的所有举报。 + silence: 阻止用户发送公开嘟文,除了关注者以外,其他人都无法看到他的嘟文和通知。关闭针对此账号的所有举报。 + suspend: 阻止此账号的任何交互并删除其内容。30天内可以撤销操作。关闭针对此账号的所有举报。 warning_preset_id: 可选。你可以在预置文本末尾添加自定义文本 announcement: all_day: 如果选中,只有该时间段内的日期会显示。 @@ -41,15 +41,15 @@ zh-CN: defaults: autofollow: 通过邀请链接注册的用户将会自动关注你 avatar: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。将缩小到 %{dimensions}px - bot: 来自这个账户的绝大多数操作都是自动进行的,并且可能无人监控 - context: 过滤器的应用环境 + bot: 来自这个账号的绝大多数操作都是自动进行的,并且可能无人监控 + context: 过滤规则将被应用到的一个或多个场景 current_password: 为了安全起见,请输入当前账号的密码 current_username: 请输入当前账号的用户名以确认 digest: 仅在你长时间未登录,且收到了私信时发送 email: 我们会向你发送一封确认邮件 - header: 支持WEBP、PNG、GIF 或 JPG。最大 %{size}。将缩小到 %{dimensions}px + header: 支持 WEBP、PNG、GIF 或 JPG。最大 %{size}。分辨率将被压缩至 %{dimensions}px inbox_url: 从你想要使用的中继站的主页上复制 URL - irreversible: 已过滤的嘟文会不可逆转地消失,即便移除过滤器之后也一样 + irreversible: 被过滤的嘟文会永久消失,移除过滤规则后也不会恢复 locale: 在用户界面、电子邮件和推送通知中使用的语言 password: 至少需要8个字符 phrase: 匹配将忽略嘟文或内容警告里的字母大小写 @@ -61,8 +61,8 @@ zh-CN: setting_display_media_hide_all: 始终隐藏媒体 setting_display_media_show_all: 始终显示媒体 setting_use_blurhash: 渐变是基于模糊后的隐藏内容生成的 - setting_use_pending_items: 关闭自动滚动更新,时间轴会在点击后更新 - username: 您只能使用字母、数字和下划线 + setting_use_pending_items: 点击查看时间线更新,而非自动滚动更新动态。 + username: 你只能使用字母、数字和下划线 whole_word: 如果关键词只包含字母和数字,将只在词语完全匹配时才会应用 domain_allow: domain: 该站点将能够从该服务器上拉取数据,并处理和存储收到的数据。 @@ -72,22 +72,22 @@ zh-CN: featured_tag: name: 以下是你最近使用过的标签: filters: - action: 选择在嘟文命中过滤器时要执行的操作 + action: 选择在嘟文命中过滤规则时要执行的操作 actions: - hide: 彻底屏蔽过滤内容,犹如它不曾存在过一般 - warn: 在警告中提及过滤器标题后,隐藏过滤内容 + hide: 选择在嘟文命中过滤规则时要执行的操作 + warn: 显示带有过滤规则标题的警告,并隐藏过滤内容 form_admin_settings: activity_api_enabled: 本站每周的嘟文数、活跃用户数和新注册用户数 app_icon: WEBP、PNG、GIF 或 JPG。使用自定义图标覆盖移动设备上的默认应用图标。 backups_retention_period: 用户可以生成其嘟文存档以供之后下载。当该值被设为正值时,这些存档将在指定的天数后自动从你的存储中删除。 - bootstrap_timeline_accounts: 这些账号将在新用户关注推荐中置顶。 + bootstrap_timeline_accounts: 这些账号将在新用户关注推荐中置顶显示。 closed_registrations_message: 在关闭注册时显示 content_cache_retention_period: 来自其它实例的所有嘟文(包括转嘟与回复)都将在指定天数后被删除,不论本实例用户是否与这些嘟文产生过交互。这包括被本实例用户喜欢和收藏的嘟文。实例间用户的私下提及也将丢失并无法恢复。此设置针对的是特殊用途的实例,用于一般用途时会打破许多用户的期望。 custom_css: 你可以为网页版 Mastodon 应用自定义样式。 favicon: WEBP、PNG、GIF 或 JPG。使用自定义图标覆盖 Mastodon 的默认图标。 mascot: 覆盖高级网页界面中的绘图形象。 media_cache_retention_period: 来自外站用户嘟文的媒体文件将被缓存到你的实例上。当该值被设为正值时,缓存的媒体文件将在指定天数后被清除。如果媒体文件在被清除后重新被请求,且源站内容仍然可用,它将被重新下载。由于链接预览卡拉取第三方站点的频率受到限制,建议将此值设置为至少 14 天,如果小于该值,链接预览卡将不会按需更新。 - peers_api_enabled: 此服务器在联邦宇宙中遇到的域名列表。 这里不包含关于您是否与给定服务器联合的数据,只是您的服务器知道它。 这由收集一般意义上的联邦统计信息的服务使用。 + peers_api_enabled: 本站在联邦宇宙中遇到的站点列表。 此处不包含关于您是否与给定站点联合的数据,只是您的实例知道它。 这由收集一般意义上的联合统计信息的服务使用。 profile_directory: 个人资料目录会列出所有选择可被发现的用户。 require_invite_text: 当注册需要手动批准时,将“你为什么想要加入?”设为必填项 site_contact_email: 他人需要询恰法务或支持信息时的联络方式 @@ -99,7 +99,7 @@ zh-CN: status_page_url: 配置一个网址,当服务中断时,人们可以通过该网址查看服务器的状态。 theme: 给未登录访客和新用户使用的主题。 thumbnail: 与服务器信息一并展示的约 2:1 比例的图像。 - timeline_preview: 未登录访客将能够浏览服务器上最新的公共嘟文。 + timeline_preview: 未登录访客将能够浏览服务器上的最新公开嘟文。 trendable_by_default: 跳过对热门内容的手工审核。个别项目仍可在之后从趋势中删除。 trends: 热门页中会显示正在你服务器上受到关注的嘟文、标签和新闻故事。 trends_as_landing_page: 向注销的用户和访问者显示热门内容,而不是对该服务器的描述,需要启用热门。 @@ -125,17 +125,17 @@ zh-CN: otp: 输入你手机应用上生成的双因素认证代码,或者任意一个恢复代码: webauthn: 如果是 USB 密钥,请确保将其插入,如有必要,请点击它。 settings: - indexable: 您的个人资料页面可能会出现在Google、Bing等搜索结果中。 + indexable: 你的个人资料可能会出现在Google、Bing等的搜索结果中。 show_application: 无论如何,你始终可以看到是哪个应用发布了你的嘟文。 tag: name: 你只能改变字母的大小写,让它更易读 user: - chosen_languages: 仅选中语言的嘟文会出现在公共时间轴上(全不选则显示所有语言的嘟文) + chosen_languages: 仅选中语言的嘟文会出现在公共时间线上(全不选则显示所有语言的嘟文) role: 角色用于控制用户拥有的权限。 user_role: color: 在界面各处用于标记该角色的颜色,以十六进制 RGB 格式表示 highlighted: 使角色公开可见 - name: 角色的公开名称,将在设为展示徽章时使用 + name: 角色的公开名称,将在外显为徽章时使用 permissions_as_keys: 具有此角色的用户将有权访问... position: 用于在特定情况下处理决策冲突。一些特定操作只能对优先级更低的角色执行 webhook: @@ -144,13 +144,13 @@ zh-CN: url: 事件将被发往的目的地 labels: account: - attribution_domains_as_text: 仅允许特定网站 - discoverable: 在发现算法中展示你的个人资料和嘟文 + attribution_domains_as_text: 授权展示你的署名的网站 + discoverable: 在发现算法中展示你的账号与嘟文 fields: name: 标签 value: 内容 indexable: 将公开嘟文纳入搜索范围 - show_collections: 在个人资料中显示关注和关注者 + show_collections: 在个人资料显示关注和关注者 unlocked: 自动接受新关注者 account_alias: acct: 处理旧账号 @@ -180,20 +180,20 @@ zh-CN: appeal: text: 说明此结果应当被推翻的理由 defaults: - autofollow: 让被邀请人关注你的账户 + autofollow: 让被邀请人关注你的账号 avatar: 头像 - bot: 这是一个机器人账户 - chosen_languages: 语言过滤 + bot: 这是一个机器人账号 + chosen_languages: 过滤语言 confirm_new_password: 确认新密码 confirm_password: 确认密码 - context: 过滤环境 + context: 过滤规则生效场景 current_password: 当前密码 data: 数据文件 display_name: 昵称 email: 邮箱地址 expires_in: 失效时间 fields: 个人资料附加信息 - header: 个人资料页横幅图片 + header: 封面图 honeypot: "%{label} (请勿填写)" inbox_url: 中继站收件箱的 URL irreversible: 丢弃而非隐藏 @@ -205,7 +205,7 @@ zh-CN: password: 密码 phrase: 关键词 setting_advanced_layout: 启用高级 Web 界面 - setting_aggregate_reblogs: 在时间轴中合并转嘟 + setting_aggregate_reblogs: 在时间线中合并转嘟 setting_always_send_emails: 总是发送电子邮件通知 setting_auto_play_gif: 自动播放 GIF 动画 setting_boost_modal: 在转嘟前询问我 @@ -238,16 +238,16 @@ zh-CN: email_domain_block: with_dns_records: 包括该域名的 MX 记录和 IP 地址 featured_tag: - name: 话题标签 + name: 话题 filters: actions: hide: 完全隐藏 - warn: 隐藏时显示警告信息 + warn: 隐藏时显示警告 form_admin_settings: activity_api_enabled: 在 API 中发布有关用户活动的汇总统计数据 app_icon: 应用图标 backups_retention_period: 用户存档保留期 - bootstrap_timeline_accounts: 推荐新用户关注以下账号 + bootstrap_timeline_accounts: 向新用户推荐以下账号 closed_registrations_message: 在关闭注册时显示的自定义消息 content_cache_retention_period: 外站内容保留期 custom_css: 自定义 CSS @@ -257,9 +257,9 @@ zh-CN: peers_api_enabled: 在API中公开的已知实例的服务器的列表 profile_directory: 启用用户目录 registrations_mode: 谁可以注册 - require_invite_text: 注册前需要提供理由 - show_domain_blocks: 显示域名屏蔽列表 - show_domain_blocks_rationale: 显示域名屏蔽原因 + require_invite_text: 注册时需要提供理由 + show_domain_blocks: 显示站点屏蔽列表 + show_domain_blocks_rationale: 显示站点屏蔽原因 site_contact_email: 联系邮箱 site_contact_username: 用于联系的公开用户名 site_extended_description: 完整说明 @@ -269,7 +269,7 @@ zh-CN: status_page_url: 状态页网址 theme: 默认主题 thumbnail: 本站缩略图 - timeline_preview: 时间轴预览 + timeline_preview: 允许未登录用户访问公共时间线 trendable_by_default: 允许在未审核的情况下将话题置为热门 trends: 启用热门 trends_as_landing_page: 使用热门页作为登陆页面 @@ -293,12 +293,12 @@ zh-CN: appeal: 有人对审核结果提出申诉 digest: 发送摘要邮件 favourite: 当有用户喜欢了我的嘟文时,发送电子邮件提醒我 - follow: 有用户关注我时 - follow_request: 有用户向我发送关注请求时 - mention: 有用户提及我时 - pending_account: 有账号需要审核时 - reblog: 有用户转嘟我的嘟文时 - report: 新举报已提交 + follow: 有人关注了我 + follow_request: 有人向我发送了关注请求 + mention: 有人提到了我 + pending_account: 有账号需要审核 + reblog: 有人转嘟了我的嘟文 + report: 有人提交了新举报 software_updates: all: 通知所有更新 critical: 仅在有关键更新时通知 @@ -310,13 +310,13 @@ zh-CN: hint: 补充信息 text: 规则 settings: - indexable: 允许搜索引擎索引个人资料页面 - show_application: 显示你发嘟所用的应用 + indexable: 允许搜索引擎索引个人资料 + show_application: 显示你发嘟使用的应用 tag: - listable: 允许这个话题标签在用户目录中显示 - name: 话题标签 + listable: 允许这个话题在用户目录中显示 + name: 话题 trendable: 允许在热门下显示此话题 - usable: 允许本站嘟文使用此话题标签 + usable: 允许本站嘟文使用此话题 user: role: 角色 time_zone: 时区 @@ -324,12 +324,12 @@ zh-CN: color: 徽章颜色 highlighted: 在用户资料中显示角色徽章 name: 名称 - permissions_as_keys: 权限设置 + permissions_as_keys: 权限 position: 优先级 webhook: events: 已启用事件 - template: 载荷模板 - url: 对端 URL + template: Payload 模板 + url: 端点 URL 'no': 否 not_recommended: 不推荐 overridden: 已覆盖 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index a5bc683634..289a24f122 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -3,7 +3,7 @@ zh-TW: simple_form: hints: account: - attribution_domains_as_text: 偽造署名保護。 + attribution_domains_as_text: 每行一個。以保護偽造署名。 discoverable: 公開嘟文及個人檔案可能於各 Mastodon 功能中被推薦,並且您的個人檔案可能被推薦至其他使用者。 display_name: 完整名稱或暱稱。 fields: 烘培雞、自我認同代稱、年齡,及任何您想分享的。 @@ -144,7 +144,7 @@ zh-TW: url: 事件會被傳送至何處 labels: account: - attribution_domains_as_text: 僅允許特定網站 + attribution_domains_as_text: 允許對您予與信譽之網站 discoverable: 於探索演算法中推薦個人檔案及嘟文 fields: name: 標籤 diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 8076682ed4..808c7b04e3 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -8,10 +8,10 @@ sk: title: Ohľadom accounts: followers: - few: Sledovateľov + few: Sledujúcich many: Sledovateľov one: Sledujúci - other: Sledovatelia + other: Sledujúci following: Nasledujem instance_actor_flash: Toto konto je virtuálny aktér, ktorý predstavuje samotný server, a nie konkrétneho používateľa. Používa sa na účely federácie a nemal by byť pozastavený. last_active: naposledy aktívny @@ -25,9 +25,12 @@ sk: one: Príspevok other: Príspevkov posts_tab_heading: Príspevky + self_follow_error: Nieje povolené nasledovať svoj vlastný účet admin: account_actions: action: Vykonaj + already_silenced: Tento účet už bol obmedzený. + already_suspended: Tento účet už bol vylúčený. title: Vykonaj moderovací úkon voči %{acct} account_moderation_notes: create: Zanechaj poznámku @@ -49,6 +52,7 @@ sk: title: Zmeň email pre %{username} change_role: changed_msg: Postavenie úspešne zmenené! + edit_roles: Spravuj role užívateľov label: Zmeň pozíciu no_role: Žiadna pozícia title: Zmeň pozíciu pre %{username} @@ -61,6 +65,7 @@ sk: demote: Degraduj destroyed_msg: "%{username} je teraz zaradený do fronty na okamžité vymazanie" disable: Zablokuj + disable_sign_in_token_auth: Vypni overovanie e-mailovým tokenom disable_two_factor_authentication: Vypni dvoj-faktorové overovanie disabled: Blokovaný display_name: Ukáž meno @@ -69,6 +74,7 @@ sk: email: Email email_status: Stav emailu enable: Povoľ + enable_sign_in_token_auth: Povoľ overovania e-mailovým tokenom enabled: Povolený enabled_msg: Úspešne rozmrazené konto %{username} followers: Sledujúci @@ -179,11 +185,13 @@ sk: create_custom_emoji: Vytvor vlastné emotikony create_domain_allow: Vytvor povolenie pre doménu create_domain_block: Vytvor zákaz domény + create_email_domain_block: Vytvor zákaz emailovej domény create_ip_block: Vytvor IP pravidlo create_unavailable_domain: Vytvor nedostupnú doménu create_user_role: Vytvoriť rolu demote_user: Zniž užívateľskú rolu destroy_announcement: Vymaž oboznámenie + destroy_canonical_email_block: Zruš blokovanie emailu destroy_custom_emoji: Vymaž vlastné emotikony destroy_domain_allow: Zmaž povolenie pre doménu destroy_domain_block: Zruš blokovanie domény @@ -239,6 +247,7 @@ sk: destroy_custom_emoji_html: "%{name} vymazal/a emotikonu %{target}" destroy_domain_allow_html: "%{name} zakázal/a federáciu s doménou %{target}" destroy_domain_block_html: "%{name} odblokoval/i doménu %{target}" + destroy_email_domain_block_html: "%{name} odblokoval/a emailovú doménu %{target}" destroy_ip_block_html: "%{name} vymazal/a pravidlo pre IP %{target}" destroy_status_html: "%{name} zmazal/a príspevok od %{target}" destroy_unavailable_domain_html: "%{name} znova spustil/a doručovanie pre doménu %{target}" @@ -353,6 +362,7 @@ sk: cancel: Zruš confirm: Vylúč preamble_html: Chystáš sa vylúčiť %{domain} a jej poddomény. + stop_communication: Tvoj server prestane komunikovať s týmito servermi. title: Potvrď blokovanie domény %{domain} created_msg: Doména je v štádiu blokovania destroyed_msg: Blokovanie domény bolo zrušené @@ -384,6 +394,7 @@ sk: email_domain_blocks: add_new: Pridaj nový allow_registrations_with_approval: Povoľ registrovanie so schválením + created_msg: Úspešne zablokovaná emailová doména delete: Vymaž dns: types: @@ -392,6 +403,7 @@ sk: new: create: Pridaj doménu resolve: Preveď doménu + title: Blokovať novú emailovú doménu not_permitted: Nepovolená resolved_through_html: Prevedená cez %{domain} title: Blokované e-mailové domény @@ -822,6 +834,7 @@ sk: prefix_invited_by_user: "@%{name} ťa pozýva na tento Mastodon server!" prefix_sign_up: Zaregistruj sa na Mastodone už dnes! suffix: S účtom budeš môcť nasledovať ľudí, posielať príspevky, a vymieňať si správy s užívateľmi z hocijakého Mastodon servera a viac! + didnt_get_confirmation: Neobdržal/a si odkaz na potvrdenie? dont_have_your_security_key: Nemáš svoj bezpečnostný kľúč? forgot_password: Zabudnuté heslo? invalid_reset_password_token: Token na obnovu hesla vypršal. Prosím vypítaj si nový. @@ -832,6 +845,7 @@ sk: migrate_account_html: Ak si želáš presmerovať tento účet na nejaký iný, môžeš si to nastaviť tu. or_log_in_with: Alebo prihlás s progress: + confirm: Potvrď email details: Tvoje údaje rules: Súhlas s pravidlami register: Zaregistruj sa @@ -1167,7 +1181,7 @@ sk: dormant: Spiace follow_failure: Nemožno nasledovať niektoré z vybraných účtov. follow_selected_followers: Následuj označených sledovatelov - followers: Následovatelia + followers: Sledovatelia following: Nasledovaní invited: Pozvaný/á last_active: Naposledy aktívny @@ -1358,6 +1372,7 @@ sk: explanation: Tu nájdeš nejaké tipy do začiatku feature_action: Zisti viac follow_action: Nasleduj + follow_title: Prispôsob svoj domáci kanál follows_title: Koho nasledovať post_title: Vytvor svoj prvý príspevok share_action: Zdieľaj diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 286bece877..9474dca721 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -25,9 +25,12 @@ sl: other: Objav two: Objavi posts_tab_heading: Objave + self_follow_error: Ni dovoljeno slediti lastnemu računu admin: account_actions: action: Izvedi dejanje + already_silenced: Ta račun je že omejen. + already_suspended: Ta račun je že suspendiran. title: Izvedi moderirano dejanje za %{acct} account_moderation_notes: create: Pusti opombo @@ -49,6 +52,7 @@ sl: title: Spremeni e-naslov za %{username} change_role: changed_msg: Vloga uspešno spremenjena! + edit_roles: Upravljaj z uporabniškimi vlogami label: Spremeni vlogo no_role: Brez vloge title: Spremeni vlogo za %{username} @@ -486,6 +490,9 @@ sl: title: Sledi priporočilom unsuppress: Obnovi sledenje priporočilom instances: + audit_log: + title: Nedavni revizijski zapisi + view_all: Prikaži ves revizijski dnevnik availability: description_html: few: Če dostava v domeno spodleti %{count} različne dni brez uspeha, ne bo nadaljnjih poskusov dostopa, razen če je prejeta dostava iz domene. @@ -622,6 +629,7 @@ sl: suspend_description_html: Račun in vsa njegova vsebina ne bo dostopna in bo postopoma izbrisana, interakcija z njim pa ne bo več možna. Dejanje je moč povrniti v roku 30 dni. Zaključi vse prijave zoper ta račun. actions_description_html: Odločite se, katere ukrepe boste sprejeli za rešitev te prijave. Če sprejmete kazenski ukrep proti prijavljenemu računu, mu bo poslano e-poštno obvestilo, razen če je izbrana kategorija Neželena pošta. actions_description_remote_html: Odločite se za dejanje, ki bo odločilo o tej prijavi. To bo vplivalo le na to, kako vaš strežnik komunicira s tem oddaljenim računom in obravnava njegovo vsebino. + actions_no_posts: To poročilo ni vezano na nobene objave, ki bi jih lahko izbrisali add_to_report: Dodaj več v prijavo already_suspended_badges: local: Že suspendiran na tem strežniku @@ -896,6 +904,9 @@ sl: message_html: Nobenih pravil strežnika niste določili. sidekiq_process_check: message_html: Noben proces Sidekiq ne poteka za %{value} vrst. Preglejte svojo prilagoditev Sidekiq + software_version_check: + action: Oglejte si razpoložljive posodobitve + message_html: Na voljo je posodobitev Mastodona. software_version_critical_check: action: Glejte razpoložljive posodobitve message_html: Na voljo je kritična posodobitev Mastodona. Posodobite čim prej. @@ -922,6 +933,7 @@ sl: name: Ime newest: Najnovejše oldest: Najstarejše + open: Prikaži javno reset: Ponastavi review: Stanje pregleda search: Išči @@ -1188,6 +1200,14 @@ sl: view_strikes: Pokaži pretekle ukrepe proti mojemu računu too_fast: Obrazec oddan prehitro, poskusite znova. use_security_key: Uporabi varnostni ključ + author_attribution: + example_title: Vzorčno besedilo + hint_html: Ali pišete novičke ali spletni dnevnik kje drugje poleg Mastodona? Poskrbite, da bo vaše avtorstvo pravilno navedeno, ko bo kdo delil vaše delo na Mastodonu. + instructions: 'Poskrbite, da bo v dokumentu HTML vašega prispevka naslednja koda:' + more_from_html: Več od %{name} + s_blog: Spletni dnevnik %{name} + then_instructions: Nato dodajte ime domene, kamor objavljate, v spodnje polje. + title: Priznanje avtorstva challenge: confirm: Nadaljuj hint_html: "Namig: naslednjo uro vas ne bomo več vprašali po vašem geslu." @@ -1498,6 +1518,7 @@ sl: media_attachments: validations: images_and_video: Videoposnetka ni mogoče priložiti objavi, ki že vsebuje slike + not_found: Predstavnosti %{ids} ne najdem ali pa je že pripeta k drugi objavi not_ready: Datotek, katerih obdelava ni dokončana, ni mogoče pripeti. Poskusite znova kmalu! too_many: Ni možno priložiti več kot 4 datoteke migrations: @@ -1729,6 +1750,7 @@ sl: delete: Brisanje računa development: Razvoj edit_profile: Uredi profil + export: Izvozi featured_tags: Vključeni ključniki import: Uvozi import_and_export: Uvoz in izvoz @@ -1988,6 +2010,7 @@ sl: instructions_html: Spodnjo kodo kopirajte in prilepite v HTML svojega spletnega mesta. Nato dodajte naslov svoje spletne strani v eno od dodatnih polj v svojem profilu v zavihku »Uredi profil« in shranite spremembe. verification: Potrditev verified_links: Vaše preverjene povezave + website_verification: Overitev spletišča webauthn_credentials: add: Dodaj nov varnostni ključ create: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 2f05d7860c..7d7df6d4c2 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -21,6 +21,7 @@ sq: one: Mesazh other: Mesazhe posts_tab_heading: Mesazhe + self_follow_error: Ndjekja e llogarisë personale nuk lejohet admin: account_actions: action: Kryeje veprimin @@ -644,6 +645,7 @@ sq: report: 'Raportim #%{id}' reported_account: Llogari e raportuar reported_by: Raportuar nga + reported_with_application: Raportuar me aplikacion resolved: I zgjidhur resolved_msg: Raportimi u zgjidh me sukses! skip_to_actions: Kaloni te veprimet @@ -1158,9 +1160,11 @@ sq: use_security_key: Përdor kyç sigurie author_attribution: example_title: Tekst shembull - hint_html: Kontrolloni se si vlerësoheni, kur ndahen lidhje me të tjerë në Mastodon. + hint_html: Shkruani lajme, apo artikuj blogu jashtë Mastodon-it? Kontrolloni se si ju jepet hakë, kur ndahen me të tjerët në Mastodon. + instructions: 'Sigurohuni që ky kod të jetë në HTML-në e artikullit tuaj:' more_from_html: Më tepër nga %{name} s_blog: Blogu i %{name} + then_instructions: Mandej, shtoni te fusha më poshtë emrin e përkatësisë së botimit. title: Atribuim autorësh challenge: confirm: Vazhdo diff --git a/config/locales/sv.yml b/config/locales/sv.yml index dadd5f1600..9e15ec87cd 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -21,10 +21,12 @@ sv: one: Inlägg other: Inlägg posts_tab_heading: Inlägg + self_follow_error: Det är inte tillåtet att följa ditt eget konto admin: account_actions: action: Utför åtgärd already_silenced: Detta konto är redan begränsat. + already_suspended: Detta konto är redan avstängt. title: Utför aktivitet för moderering på %{acct} account_moderation_notes: create: Lämna kommentar @@ -57,11 +59,11 @@ sv: delete: Radera data deleted: Raderad demote: Degradera - destroyed_msg: "%{username}'s data har nu lagts till kön för att raderas omedelbart" - disable: inaktivera + destroyed_msg: "%{username}s data har nu lagts till kön för att raderas omedelbart" + disable: Inaktivera disable_sign_in_token_auth: Inaktivera autentisering med pollett via e-post disable_two_factor_authentication: Inaktivera 2FA - disabled: inaktiverad + disabled: Inaktiverad display_name: Visningsnamn domain: Domän edit: Redigera @@ -70,7 +72,7 @@ sv: enable: Aktivera enable_sign_in_token_auth: Aktivera autentisering med pollett via e-post enabled: Aktiverad - enabled_msg: Uppfrysningen av %{username}'s konto lyckades + enabled_msg: Uppfrysningen av %{username}s konto lyckades followers: Följare follows: Följs header: Rubrik @@ -85,7 +87,7 @@ sv: remote: Avlägsen title: Plats login_status: Inloggningsstatus - media_attachments: Media bifogade filer + media_attachments: Mediebilagor memorialize: Förvandla till ett memoriam memorialized: Memorialiserad memorialized_msg: Omvandlingen av %{username} till ett minneskonto lyckades @@ -140,7 +142,7 @@ sv: only_password: Endast lösenord password_and_2fa: Lösenord och 2FA sensitive: Känsligt - sensitized: markerad som känsligt + sensitized: Markerad som känsligt shared_inbox_url: Delad inkorg URL show: created_reports: Anmälningar som skapats av det här kontot @@ -261,23 +263,26 @@ sv: destroy_user_role_html: "%{name} raderade rollen %{target}" disable_2fa_user_html: "%{name} inaktiverade tvåfaktorsautentiseringskrav för användaren %{target}" disable_custom_emoji_html: "%{name} inaktiverade emoji %{target}" + disable_sign_in_token_auth_user_html: "%{name} inaktiverade e-posttokenautentisering för %{target}" disable_user_html: "%{name} stängde av inloggning för användaren %{target}" enable_custom_emoji_html: "%{name} aktiverade emoji %{target}" + enable_sign_in_token_auth_user_html: "%{name} aktiverade e-posttokenautentisering för %{target}" enable_user_html: "%{name} aktiverade inloggning för användaren %{target}" - memorialize_account_html: "%{name} gjorde %{target}'s konto till en minnessida" + memorialize_account_html: "%{name} gjorde %{target}s konto till en minnessida" promote_user_html: "%{name} befordrade användaren %{target}" reject_appeal_html: "%{name} avvisade överklagande av modereringsbeslut från %{target}" reject_user_html: "%{name} avvisade registrering från %{target}" - remove_avatar_user_html: "%{name} tog bort %{target}'s avatar" + remove_avatar_user_html: "%{name} tog bort %{target}s avatar" reopen_report_html: "%{name} öppnade rapporten igen %{target}" + resend_user_html: "%{name} skickade bekräftelsemail för %{target} på nytt" reset_password_user_html: "%{name} återställ användarens lösenord %{target}" resolve_report_html: "%{name} löste rapporten %{target}" - sensitive_account_html: "%{name} markerade %{target}'s media som känsligt" - silence_account_html: "%{name} begränsade %{target}'s konto" + sensitive_account_html: "%{name} markerade %{target}s media som känsligt" + silence_account_html: "%{name} begränsade %{target}s konto" suspend_account_html: "%{name} stängde av %{target}s konto" unassigned_report_html: "%{name} tog bort tilldelning av rapporten %{target}" unblock_email_account_html: "%{name} avblockerade %{target}s e-postadress" - unsensitive_account_html: "%{name} avmarkerade %{target}'s media som känsligt" + unsensitive_account_html: "%{name} avmarkerade %{target}s media som känsligt" unsilence_account_html: "%{name} tog bort begränsning av %{target}s konto" unsuspend_account_html: "%{name} ångrade avstängningen av %{target}s konto" update_announcement_html: "%{name} uppdaterade kungörelsen %{target}" @@ -430,6 +435,7 @@ sv: attempts_over_week: one: "%{count} försök under den senaste veckan" other: "%{count} registreringsförsök under den senaste veckan" + created_msg: Blockerade e-postdomänen delete: Radera dns: types: @@ -438,8 +444,12 @@ sv: new: create: Skapa domän resolve: Slå upp domän + title: Blockera ny e-postdomän + no_email_domain_block_selected: Inga blockeringar av e-postdomäner ändrades eftersom inga valdes not_permitted: Ej tillåtet + resolved_dns_records_hint_html: Domännamnet ger uppslag till följande MX-domäner, vilka är ytterst ansvariga för att e-post tas emot. Att blockera en MX-domän blockerar även registreringar från alla e-postadresser som använder samma MX-domän, även om det synliga domännamnet är annorlunda. Var noga med att inte blockera stora e-postleverantörer. resolved_through_html: Uppslagen genom %{domain} + title: Blockerade e-postdomäner export_domain_allows: new: title: Importera domäntillåtelser @@ -532,7 +542,7 @@ sv: total_followed_by_them: Följs av dem total_followed_by_us: Följs av oss total_reported: Rapporter om dem - total_storage: Media-bilagor + total_storage: Mediebilagor totals_time_period_hint_html: Totalsummorna som visas nedan inkluderar data för all tid. unknown_instance: Det finns för närvarande inga uppgifter om denna domän på denna server. invites: @@ -559,9 +569,9 @@ sv: no_ip_block_selected: Inga IP-regler ändrades då inga var valda title: IP-regler relationships: - title: "%{acct}'s relationer" + title: "%{acct}s relationer" relays: - add_new: Lägg till nytt relä + add_new: Lägg till nytt ombud delete: Radera description_html: Ett federeringsombud är en mellanliggande server som utbyter höga antal offentliga inlägg mellan servrar som prenumererar på och publicerar till det. Det kan hjälpa små och medelstora servrar upptäcka innehåll från fediversumet, vilket annars skulle kräva att lokala användare manuellt följer personer på fjärrservrar. disable: Inaktivera @@ -572,10 +582,10 @@ sv: inbox_url: Ombuds-URL pending: Väntar på ombudets godkännande save_and_enable: Spara och aktivera - setup: Konfigurera en relä-anslutning - signatures_not_enabled: Ombud fungerar inte korrekt medan säkert läge eller begränsat federeringsläge är aktiverade + setup: Konfigurera ett ombud + signatures_not_enabled: Ombud fungerar inte korrekt om säkert läge eller begränsat federeringsläge är aktiverade status: Status - title: Relä + title: Ombud report_notes: created_msg: Anmälningsanteckning har skapats! destroyed_msg: Anmälningsanteckning har raderats! @@ -593,7 +603,9 @@ sv: resolve_description_html: Ingen åtgärd vidtas mot det rapporterade kontot, ingen prick registreras och rapporten stängs. silence_description_html: Kontot kommer endast synas för de som redan följer den eller manuellt söker på den, vilket dramatiskt minskar dess räckvidd. Kan alltid ångras. Stänger alla anmälningar mot detta konto. suspend_description_html: Kontot och allt dess innehåll kommer att vara oåtkomligt och så småningom tas bort, det kommer inte gå att interagera med kontot. Kan ångras inom 30 dagar. Stänger alla anmälningar mot detta konto. + actions_description_html: Välj vilken åtgärd som skall vidtas för att lösa denna rapport. Om du vidtar en bestraffningsåtgärd mot det rapporterade kontot kommer en e-postnotis att skickas till dem, förutom om du valt kategorin Skräppost. actions_description_remote_html: Bestäm vilka åtgärder som ska vidtas för att lösa denna rapport. Detta kommer bara att påverka hur din server kommunicerar med detta fjärrkonto och hanterar dess innehåll. + actions_no_posts: Denna rapport har inga associerade inlägg att ta bort add_to_report: Lägg till mer i rapporten already_suspended_badges: local: Redan avstängd på denna server @@ -657,6 +669,7 @@ sv: delete_data_html: Ta bort @%{acct}s profil och innehåll om 30 dagar ifall deras avstängning inte tagits bort under tiden preview_preamble_html: "@%{acct} kommer få en varning med följande innehåll:" record_strike_html: Registrera en varning mot @%{acct} för att hjälpa dig eskalera vid framtida överträdelser från detta konto + send_email_html: Skicka @%{acct} ett varningsmejl warning_placeholder: Valfri ytterligare resonemang för modereringsåtgärd. target_origin: Ursprung för anmält konto title: Anmälningar @@ -696,6 +709,7 @@ sv: manage_appeals: Hantera överklaganden manage_appeals_description: Tillåter användare att granska överklaganden av modereringsåtgärder manage_blocks: Hantera blockeringar + manage_blocks_description: Tillåter användare att blockera e-postleverantörer och IP-adresser manage_custom_emojis: Hantera egna emojier manage_custom_emojis_description: Tillåter användare att hantera egna emojier på servern manage_federation: Hantera federering @@ -713,6 +727,7 @@ sv: manage_taxonomies: Hantera taxonomier manage_taxonomies_description: Tillåter användare att granska trendande innehåll och uppdatera inställningar för hashtaggar manage_user_access: Hantera användaråtkomst + manage_user_access_description: Tillåter användare att inaktivera andra användares tvåfaktorsautentisering, ändra deras e-postadress samt återställa deras lösenord manage_users: Hantera användare manage_users_description: Tillåter användare att granska användares data och utföra modereringsåtgärder på dessa manage_webhooks: Hantera webhooks @@ -787,6 +802,7 @@ sv: destroyed_msg: Webbplatsuppladdningen har raderats! software_updates: critical_update: Kritiskt — vänligen uppdatera omgående + description: Det rekommenderas att hålla din Mastodon-installation uppdaterad för att ta nytta av de senaste fixarna och funktionerna. Dessutom är det ibland viktigt att uppdatera Mastodon i tid för att undvika säkerhetsproblem. Av dessa skäl kontrollerar Mastodon efter uppdateringar var 30:e minut och meddelar dig i enlighet med dina e-postaviseringsinställningar. documentation_link: Läs mer release_notes: Ändringslogg title: Tillgängliga uppdateringar @@ -820,7 +836,7 @@ sv: title: Kontoinlägg trending: Trendande visibility: Synlighet - with_media: med media + with_media: Med media strikes: actions: delete_statuses: "%{name} raderade %{target}s inlägg" @@ -861,6 +877,7 @@ sv: sidekiq_process_check: message_html: Ingen Sidekiq-process körs för kön/köerna %{value}. Vänligen kontrollera din Sidekiq-konfiguration software_version_check: + action: Se tillgängliga uppdateringar message_html: En Mastodon-uppdatering är tillgänglig. software_version_critical_check: action: Se tillgängliga uppdateringar @@ -876,22 +893,38 @@ sv: message_html: "Din objektlagring är felkonfigurerad. Sekretessen för dina användare är i riskzonen." tags: moderation: + not_trendable: Kan inte trenda + not_usable: Inte användbar + pending_review: Väntar på granskning + review_requested: Granskning begärd reviewed: Granskat title: Status - trendable: + trendable: Kan trenda + unreviewed: Ogranskad + usable: Användbar name: Namn + newest: Nyaste + oldest: Äldsta + open: Visa offentligt reset: Återställ review: Granskningsstatus search: Sök + title: Hashtaggar updated_msg: Hashtagg-inställningarna har uppdaterats title: Administration trends: allow: Tillåt approved: Godkänd + confirm_allow: Är du säker på att du vill tillåta valda taggar? + confirm_disallow: Är du säker på att du vill förbjuda valda taggar? disallow: Neka links: allow: Tillåt länk allow_provider: Tillåt utgivare + confirm_allow: Är du säker på att du vill tillåta valda länkar? + confirm_allow_provider: Är du säker på att du vill tillåta valda leverantörer? + confirm_disallow: Är du säker på att du vill förbjuda valda länkar? + confirm_disallow_provider: Är du säker på att du vill förbjuda valda leverantörer? description_html: Detta är länkar som för närvarande delas mycket av konton som din server ser inlägg från. Det kan hjälpa dina användare att ta reda på vad som händer i världen. Inga länkar visas offentligt tills du godkänner utgivaren. Du kan också tillåta eller avvisa enskilda länkar. disallow: Blockera länk disallow_provider: Blockera utgivare @@ -915,6 +948,10 @@ sv: statuses: allow: Tillåt inlägg allow_account: Godkänn författare + confirm_allow: Är du säker på att du vill tillåta valda statusar? + confirm_allow_account: Är du säker på att du vill tillåta valda konton? + confirm_disallow: Är du säker på att du vill förbjuda valda statusar? + confirm_disallow_account: Är du säker på att du vill förbjuda valda konton? description_html: Detta är inlägg som din server vet om som för närvarande delas och favoriseras mycket just nu. Det kan hjälpa dina nya och återvändande användare att hitta fler människor att följa. Inga inlägg visas offentligt förrän du godkänner författaren, och författaren tillåter att deras konto föreslås till andra. Du kan också tillåta eller avvisa enskilda inlägg. disallow: Tillåt inte inlägg disallow_account: Tillåt inte författare @@ -1034,6 +1071,7 @@ sv: application_mailer: notification_preferences: Ändra e-postpreferenser salutation: "%{name}," + settings: 'Ändra e-postinställningar: %{link}' unsubscribe: Avprenumerera view: 'Granska:' view_profile: Visa profil @@ -1053,6 +1091,7 @@ sv: hint_html: En sista sak till! Vi måste bekräfta att du är en människa (för att hålla borta skräpinlägg!). Lös CAPTCHA nedan och klicka på "Fortsätt". title: Säkerhetskontroll confirmations: + awaiting_review: Din e-postadress är bekräftad! %{domain} personalen granskar nu din registrering. Du kommer att få ett e-postmeddelande om de godkänner ditt konto! awaiting_review_title: Din registrering är under granskning clicking_this_link: klicka på denna länk login_link: logga in @@ -1060,6 +1099,7 @@ sv: redirect_to_app_html: Du borde ha omdirigerats till appen %{app_name}. Om det inte hände, försök att %{clicking_this_link} eller återgå manuellt till appen. registration_complete: Din registrering på %{domain} är nu slutförd! welcome_title: Välkommen %{name}! + wrong_email_hint: Om e-postadressen inte är rätt, kan du ändra den i kontoinställningarna. delete_account: Radera konto delete_account_html: Om du vill radera ditt konto kan du fortsätta här. Du kommer att bli ombedd att bekräfta. description: @@ -1080,6 +1120,7 @@ sv: or_log_in_with: Eller logga in med privacy_policy_agreement_html: Jag har läst och godkänner integritetspolicyn progress: + confirm: Bekräfta e-postadress details: Dina uppgifter review: Vår recension rules: Acceptera regler @@ -1101,8 +1142,10 @@ sv: security: Säkerhet set_new_password: Skriv in nytt lösenord setup: + email_below_hint_html: Kolla din skräppost-mapp eller begär en ny. Du kan korrigera din e-postadress om den är fel. email_settings_hint_html: Klicka på länken som vi har skickat till dig för att bekräfta %{email}. Vi väntar här. link_not_received: Fick du ingen länk? + new_confirmation_instructions_sent: Du kommer att få ett nytt e-postmeddelande med bekräftelselänken om några minuter! title: Kolla din inkorg sign_in: preamble_html: Logga in med dina användaruppgifter på %{domain}. Om ditt konto finns på en annan server kommer du inte att kunna logga in här. @@ -1113,6 +1156,7 @@ sv: title: Låt oss få igång dig på %{domain}. status: account_status: Kontostatus + confirming: Väntar på att e-postbekräftelsen ska slutföras. functional: Ditt konto fungerar som det ska. pending: Din ansökan inväntar granskning. Detta kan ta tid. Du kommer att få ett e-postmeddelande om din ansökan har godkänts. redirecting_to: Ditt konto är inaktivt eftersom det för närvarande dirigeras om till %{acct}. @@ -1122,6 +1166,12 @@ sv: use_security_key: Använd säkerhetsnyckel author_attribution: example_title: Exempeltext + hint_html: Skriver du nyheter eller bloggartiklar utanför Mastodon? Kontrollera hur du får krediteras när de delas på Mastodon. + instructions: 'Se till att den här koden finns i din artikels HTML:' + more_from_html: Mer från %{name} + s_blog: "%{name}s blogg" + then_instructions: Lägg sedan till domännamnet för publikationen i fältet nedan. + title: Författarattribution challenge: confirm: Fortsätt hint_html: "Tips: Vi frågar dig inte efter ditt lösenord igen under nästkommande timme." @@ -1416,10 +1466,11 @@ sv: media_attachments: validations: images_and_video: Det går inte att bifoga en video till ett inlägg som redan innehåller bilder + not_found: Media %{ids} hittades inte eller är redan anslutet till ett annat inlägg not_ready: Kan inte bifoga filer som inte har behandlats färdigt. Försök igen om ett ögonblick! too_many: Det går inte att bifoga mer än 4 filer migrations: - acct: användarnamn@domän av det nya kontot + acct: Flyttad till cancel: Avbryt omdirigering cancel_explanation: Avstängning av omdirigeringen kommer att återaktivera ditt nuvarande konto, men kommer inte att återskapa följare som har flyttats till det kontot. cancelled_msg: Avbröt omdirigeringen. @@ -1628,7 +1679,7 @@ sv: ios: iOS kai_os: KaiOS linux: Linux - mac: Mac + mac: macOS unknown_platform: Okänd plattform windows: Windows windows_mobile: Windows Mobile @@ -1751,8 +1802,8 @@ sv: tags: does_not_match_previous_name: matchar inte det föregående namnet themes: - contrast: Hög kontrast - default: Mastodon + contrast: Mastodon (Hög kontrast) + default: Mastodon (Mörk) mastodon-light: Mastodon (ljust) system: Automatisk (använd systemtema) time: @@ -1804,7 +1855,7 @@ sv: subject: Andra faktorns autentiseringsfel title: Misslyckad tvåfaktorsautentisering suspicious_sign_in: - change_password: Ändra ditt lösenord + change_password: ändra ditt lösenord details: 'Här är inloggningsdetaljerna:' explanation: Vi har upptäckt en inloggning till ditt konto från en ny IP-adress. further_actions_html: Om detta inte var du, rekommenderar vi att du snarast %{action} och aktiverar tvåfaktorsautentisering för att hålla ditt konto säkert. @@ -1897,6 +1948,7 @@ sv: instructions_html: Kopiera och klistra in koden nedan in i HTML-koden på din webbplats. Lägg sedan till adressen till din webbplats i ett av de extra fälten på din profil från fliken "Redigera profil" och spara ändringar. verification: Bekräftelse verified_links: Dina verifierade länkar + website_verification: Webbplats verifiering webauthn_credentials: add: Lägg till ny säkerhetsnyckel create: diff --git a/config/locales/th.yml b/config/locales/th.yml index 3cb802afe3..f6117ffc32 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -19,6 +19,7 @@ th: posts: other: โพสต์ posts_tab_heading: โพสต์ + self_follow_error: ไม่อนุญาตการติดตามบัญชีของคุณเอง admin: account_actions: action: ทำการกระทำ @@ -1054,7 +1055,7 @@ th: salutation: "%{name}," settings: 'เปลี่ยนการกำหนดลักษณะอีเมล: %{link}' unsubscribe: เลิกบอกรับ - view: 'มุมมอง:' + view: 'ดู:' view_profile: ดูโปรไฟล์ view_status: ดูโพสต์ applications: @@ -1147,9 +1148,11 @@ th: use_security_key: ใช้กุญแจความปลอดภัย author_attribution: example_title: ข้อความตัวอย่าง - hint_html: ควบคุมวิธีที่ให้เครดิตแก่คุณเมื่อมีการแบ่งปันลิงก์ใน Mastodon + hint_html: คุณกำลังเขียนข่าวหรือบทความบล็อกภายนอก Mastodon หรือไม่? ควบคุมวิธีที่คุณได้รับเครดิตเมื่อมีการแบ่งปันข่าวหรือบทความบล็อกใน Mastodon + instructions: 'ตรวจสอบให้แน่ใจว่าโค้ดนี้อยู่ใน HTML ของบทความของคุณ:' more_from_html: เพิ่มเติมจาก %{name} s_blog: บล็อกของ %{name} + then_instructions: จากนั้น เพิ่มชื่อโดเมนของการเผยแพร่ในช่องด้านล่าง title: การระบุแหล่งที่มาผู้สร้าง challenge: confirm: ดำเนินการต่อ diff --git a/config/locales/tok.yml b/config/locales/tok.yml index 9f962d2b53..3aff3713b2 100644 --- a/config/locales/tok.yml +++ b/config/locales/tok.yml @@ -1,5 +1,51 @@ --- tok: + about: + about_mastodon_html: ilo toki pi tenpo kama. sitelen esun li lon ala, jan li lawa ala e sina, jan pali li jo ala e wile ike. kin la, jan lawa li wan taso ala a! ilo Masoton la, sona sina li ken ijo pi sina taso! + contact_missing: lon ala + contact_unavailable: sona ala + hosted_on: lipu Masoton pi ma %{domain} + title: sona suli + accounts: + followers: + other: jan ni li kute e sina + following: sina kute e jan ni + instance_actor_flash: sijelo ni li lon ala, li jan wan taso ala, li kulupu jan. ona li pona e nasin pi lawa mute. jan lawa o weka ala e sijelo ni. + last_active: tenpo poka + link_verified_on: "%{date} la mi sona e ni: jan seme li jo e lipu ni" + nothing_here: ala li lon ni a! + pin_errors: + following: sina wile toki e pona jan la, sina o kute e ona + posts: + other: toki suli + posts_tab_heading: toki suli + self_follow_error: sina ken ala kute e sina admin: + account_actions: + action: o ijo + already_silenced: jan ni li jo e ken lili lon tenpo ni. accounts: + approve: o wile are_you_sure: ni li pona ala pona? + avatar: sitelen + delete: o ala e sona + deleted: jan li ala e ni + demote: o lili e ken + edit: ante toki + invite_request_text: nasin kama + ip: nanpa IP + joined: tenpo kama + search: o alasa + statuses: + title: toki suli pi jan ni + tags: + search: o alasa + imports: + overwrite_preambles: + blocking_html: "jan %{total_items} li lon lipu %{filename}. sina wile ala lukin e toki jan la, sina ni la kulupu pi lukin ala li kama kulupu lipu." + bookmarks_html: "toki %{total_items} li lon lipu %{filename}. toki li suli tawa sina la, sina ni la kulupu pi toki suli li kama kulupu lipu." + domain_blocking_html: "ma %{total_items} li lon lipu %{filename}. sina wile ala lukin e toki tan ma la, sina ni la kulupu pi lukin ala li kama kulupu lipu." + following_html: "jan %{total_items} li lon lipu %{filename}. sina wile kute e jan la, sina ni la kulupu kute li kama kulupu lipu." + lists_html: "jan %{total_items} li lon lipu %{filename}. sina jo e kulupu jan. sina ni la kulupu sina li weka, sina kama jo e kulupu lipu." + privacy: + search: o alasa diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 7382631911..aa697db37e 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1,7 +1,7 @@ --- tr: about: - about_mastodon_html: Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezileştirilmemiş yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir. + about_mastodon_html: Mastodon ücretsiz ve açık kaynaklı bir sosyal ağdır. Merkezi olmayan yapısı sayesinde diğer ticari sosyal platformların aksine iletişimininizin tek bir firmada tutulmasının/yönetilmesinin önüne geçer. Güvendiğiniz bir sunucuyu seçerek oradaki kişilerle etkileşimde bulunabilirsiniz. Herkes kendi Mastodon sunucusunu kurabilir ve sorunsuz bir şekilde Mastodon sosyal ağına dahil edebilir! contact_missing: Ayarlanmadı contact_unavailable: Bulunamadı hosted_on: Mastodon %{domain} üzerinde barındırılıyor @@ -21,6 +21,7 @@ tr: one: Gönderi other: Gönderiler posts_tab_heading: Gönderiler + self_follow_error: Kendi hesabınızı takip etmenize izin yok admin: account_actions: action: Eylemi gerçekleştir @@ -1165,9 +1166,11 @@ tr: use_security_key: Güvenlik anahtarını kullan author_attribution: example_title: Örnek metin - hint_html: Mastodon'da bağlantılar paylaşıldığında nasıl tanınmak istediğinizi denetleyin. + hint_html: Mastodon dışında haber veya günlük yazıları mı yazıyorsunuz? Bu yazılar Mastodon'da paylaşıldığında size nasıl atıf yapılacağını denetleyin. + instructions: 'Bu kodun yazınızın HTML''sinde olduğundan emin olun:' more_from_html: "%{name} kişisinden daha fazlası" s_blog: "%{name} kişisinin Günlüğü" + then_instructions: Daha sonra, yayının alan adını aşağıda sahaya girin. title: Yazar atıfı challenge: confirm: Devam et diff --git a/config/locales/uk.yml b/config/locales/uk.yml index de1847a745..f941bfac79 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -25,6 +25,7 @@ uk: one: Допис other: Дописів posts_tab_heading: Дописів + self_follow_error: Ви не можете стежити за власним обліковим записом admin: account_actions: action: Виконати дію @@ -57,7 +58,7 @@ uk: title: Змінити роль для %{username} confirm: Зберегти confirmed: Підтверджено - confirming: Зберігається + confirming: Підтверджується custom: Власне delete: Видалити дані deleted: Видалено @@ -91,8 +92,8 @@ uk: title: Розміщення login_status: Стан входу media_attachments: Мультимедійні вкладення - memorialize: Меморіалізувати - memorialized: Перетворено на пам'ятник + memorialize: Увічнити + memorialized: Увічнено memorialized_msg: "%{username} успішно перетворено на пам'ятний обліковий запис" moderation: active: Активний @@ -922,7 +923,7 @@ uk: moderation: not_trendable: Не трендові not_usable: Невикористовувані - pending_review: Очікує розгляду + pending_review: Очікує на розгляд review_requested: Запит на розгляд reviewed: Розглянуто title: Статус @@ -936,7 +937,7 @@ uk: reset: Скинути review: Переглянути допис search: Пошук - title: Хештеги + title: Гештеґи updated_msg: Параметри хештеґів успішно оновлені title: Адміністрування trends: @@ -1201,9 +1202,11 @@ uk: use_security_key: Використовувати ключ безпеки author_attribution: example_title: Зразок тексту - hint_html: Контроль авторства поширених посилань на Mastodon. + hint_html: Ви пишете новини чи статті в блозі за межами Mastodon? Контролюйте, як вони підписуються, коли ними діляться на Mastodon. + instructions: 'Переконайтесь, що цей код розміщено в HTML-коді вашої статті:' more_from_html: Більше від %{name} s_blog: Блог %{name} + then_instructions: Потім додайте доменне ім'я публікації у поле нижче. title: Атрибути авторства challenge: confirm: Далі diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 7e44e76e44..560d1282b4 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -19,6 +19,7 @@ vi: posts: other: Tút posts_tab_heading: Tút + self_follow_error: Bạn không thể tự theo dõi chính bạn admin: account_actions: action: Thực hiện hành động @@ -32,7 +33,7 @@ vi: accounts: add_email_domain_block: Chặn tên miền email approve: Phê duyệt - approved_msg: Đã phê duyệt đăng ký %{username} + approved_msg: Đã chấp nhận đăng ký %{username} are_you_sure: Bạn có chắc không? avatar: Ảnh đại diện by_domain: Máy chủ @@ -131,7 +132,7 @@ vi: resubscribe: Đăng ký lại role: Vai trò search: Tìm kiếm - search_same_email_domain: Những người khác với cùng tên miền email + search_same_email_domain: Những người có cùng tên miền email search_same_ip: Tra cứu IP security: Bảo mật security_measures: @@ -164,49 +165,49 @@ vi: unsuspended_msg: Đã kích hoạt lại %{username} thành công username: Tài khoản view_domain: Xem mô tả tài khoản này - warn: Nhắc + warn: Cảnh cáo web: Web whitelisted: Danh sách trắng action_logs: action_types: - approve_appeal: Chấp nhận kháng cáo - approve_user: Duyệt đăng ký + approve_appeal: Chấp nhận khiếu nại + approve_user: Chấp nhận đăng ký assigned_to_self_report: Tự xử lý báo cáo change_email_user: Đổi email người dùng change_role_user: Đổi vai trò confirm_user: Xác minh create_account_warning: Cảnh cáo create_announcement: Tạo thông báo mới - create_canonical_email_block: Chặn địa chỉ email + create_canonical_email_block: Chặn địa chỉ email biến thể create_custom_emoji: Tạo emoji create_domain_allow: Cho phép máy chủ create_domain_block: Chặn máy chủ - create_email_domain_block: Tạo chặn tên miền email + create_email_domain_block: Chặn tên miền email create_ip_block: Chặn IP - create_unavailable_domain: Ngừng liên hợp + create_unavailable_domain: Bỏ liên hợp create_user_role: Tạo vai trò demote_user: Hạ vai trò destroy_announcement: Xóa thông báo - destroy_canonical_email_block: Bỏ chặn địa chỉ email + destroy_canonical_email_block: Bỏ chặn địa chỉ email biến thể destroy_custom_emoji: Xóa emoji - destroy_domain_allow: Bỏ thanh trừng máy chủ + destroy_domain_allow: Bỏ máy chủ cho phép destroy_domain_block: Bỏ chặn máy chủ destroy_email_domain_block: Bỏ chặn tên miền email destroy_instance: Thanh trừng máy chủ destroy_ip_block: Bỏ chặn IP destroy_status: Xóa tút - destroy_unavailable_domain: Tái liên hợp + destroy_unavailable_domain: Cho phép liên hợp destroy_user_role: Xóa vai trò disable_2fa_user: Vô hiệu hóa 2FA disable_custom_emoji: Vô hiệu hóa emoji disable_sign_in_token_auth_user: Tắt xác minh bằng email cho người dùng disable_user: Vô hiệu hóa đăng nhập - enable_custom_emoji: Duyệt emoji + enable_custom_emoji: Cho phép emoji enable_sign_in_token_auth_user: Bật xác minh bằng email cho người dùng enable_user: Cho phép đăng nhập - memorialize_account: Đánh dấu tưởng niệm + memorialize_account: Gán tưởng niệm promote_user: Nâng vai trò - reject_appeal: Từ chối kháng cáo + reject_appeal: Từ chối khiếu nại reject_user: Từ chối đăng ký remove_avatar_user: Xóa ảnh đại diện reopen_report: Mở lại báo cáo @@ -216,7 +217,7 @@ vi: sensitive_account: Gán nhạy cảm silence_account: Gán ẩn suspend_account: Gán vô hiệu hóa - unassigned_report: Báo cáo chưa xử lý + unassigned_report: Bỏ xử lý báo cáo unblock_email_account: Bỏ chặn địa chỉ email unsensitive_account: Bỏ nhạy cảm unsilence_account: Bỏ ẩn @@ -229,64 +230,64 @@ vi: update_status: Cập nhật tút update_user_role: Cập nhật vai trò actions: - approve_appeal_html: "%{name} đã duyệt kháng cáo của %{target}" + approve_appeal_html: "%{name} đã chấp nhận khiếu nại từ %{target}" approve_user_html: "%{name} đã chấp nhận đăng ký từ %{target}" - assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}" + assigned_to_self_report_html: "%{name} đã tự xử lý báo cáo %{target}" change_email_user_html: "%{name} đã thay đổi địa chỉ email của %{target}" - change_role_user_html: "%{name} đã thay đổi vai trò %{target}" + change_role_user_html: "%{name} đã thay đổi vai trò của %{target}" confirm_user_html: "%{name} đã xác minh địa chỉ email của %{target}" create_account_warning_html: "%{name} đã cảnh cáo %{target}" - create_announcement_html: "%{name} tạo thông báo mới %{target}" - create_canonical_email_block_html: "%{name} đã chặn địa chỉ email với hash %{target}" + create_announcement_html: "%{name} đã tạo thông báo %{target}" + create_canonical_email_block_html: "%{name} đã chặn địa chỉ email biến thể %{target}" create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}" - create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}" - create_domain_block_html: "%{name} chặn máy chủ %{target}" + create_domain_allow_html: "%{name} đã bật liên hợp với %{target}" + create_domain_block_html: "%{name} đã chặn máy chủ %{target}" create_email_domain_block_html: "%{name} đã chặn tên miền email %{target}" create_ip_block_html: "%{name} đã chặn IP %{target}" - create_unavailable_domain_html: "%{name} ngưng phân phối với máy chủ %{target}" + create_unavailable_domain_html: "%{name} đã bỏ liên hợp với máy chủ %{target}" create_user_role_html: "%{name} đã tạo vai trò %{target}" demote_user_html: "%{name} đã hạ vai trò của %{target}" - destroy_announcement_html: "%{name} xóa thông báo %{target}" - destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email với hash %{target}" + destroy_announcement_html: "%{name} đã xóa thông báo %{target}" + destroy_canonical_email_block_html: "%{name} đã bỏ chặn địa chỉ email biến thể %{target}" destroy_custom_emoji_html: "%{name} đã xóa emoji %{target}" destroy_domain_allow_html: "%{name} đã ngừng liên hợp với %{target}" - destroy_domain_block_html: "%{name} bỏ chặn máy chủ %{target}" + destroy_domain_block_html: "%{name} đã bỏ chặn máy chủ %{target}" destroy_email_domain_block_html: "%{name} đã bỏ chặn email %{target}" - destroy_instance_html: "%{name} thanh trừng máy chủ %{target}" - destroy_ip_block_html: "%{name} bỏ chặn IP %{target}" + destroy_instance_html: "%{name} đã thanh trừng máy chủ %{target}" + destroy_ip_block_html: "%{name} đã bỏ chặn IP %{target}" destroy_status_html: "%{name} đã xóa tút của %{target}" - destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}" + destroy_unavailable_domain_html: "%{name} tiếp tục liên hợp với máy chủ %{target}" destroy_user_role_html: "%{name} đã xóa vai trò %{target}" disable_2fa_user_html: "%{name} đã vô hiệu hóa xác minh hai bước của %{target}" disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}" disable_sign_in_token_auth_user_html: "%{name} đã tắt xác minh email của %{target}" - disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}" - enable_custom_emoji_html: "%{name} cho phép emoji %{target}" + disable_user_html: "%{name} đã vô hiệu hóa đăng nhập %{target}" + enable_custom_emoji_html: "%{name} đã cho phép emoji %{target}" enable_sign_in_token_auth_user_html: "%{name} đã bật xác minh email của %{target}" - enable_user_html: "%{name} bỏ vô hiệu hóa đăng nhập %{target}" + enable_user_html: "%{name} đã bỏ vô hiệu hóa đăng nhập %{target}" memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm" promote_user_html: "%{name} đã nâng vai trò của %{target}" - reject_appeal_html: "%{name} đã từ chối kháng cáo của %{target}" + reject_appeal_html: "%{name} đã từ chối khiếu nại từ %{target}" reject_user_html: "%{name} đã từ chối đăng ký từ %{target}" remove_avatar_user_html: "%{name} đã xóa ảnh đại diện của %{target}" - reopen_report_html: "%{name} mở lại báo cáo %{target}" + reopen_report_html: "%{name} đã mở lại báo cáo %{target}" resend_user_html: "%{name} đã gửi lại email xác minh cho %{target}" reset_password_user_html: "%{name} đã đặt lại mật khẩu của %{target}" resolve_report_html: "%{name} đã xử lý báo cáo %{target}" - sensitive_account_html: "%{name} đánh dấu nội dung của %{target} là nhạy cảm" + sensitive_account_html: "%{name} đã gán nội dung của %{target} là nhạy cảm" silence_account_html: "%{name} đã ẩn %{target}" suspend_account_html: "%{name} đã vô hiệu hóa %{target}" - unassigned_report_html: "%{name} đã xử lý báo cáo %{target} chưa xử lí" - unblock_email_account_html: "%{name} bỏ chặn địa chỉ email của %{target}" - unsensitive_account_html: "%{name} đánh dấu nội dung của %{target} là bình thường" + unassigned_report_html: "%{name} đã thôi xử lý báo cáo %{target}" + unblock_email_account_html: "%{name} đã bỏ chặn địa chỉ email của %{target}" + unsensitive_account_html: "%{name} đã gán nội dung của %{target} là bình thường" unsilence_account_html: "%{name} đã bỏ ẩn %{target}" unsuspend_account_html: "%{name} đã bỏ vô hiệu hóa %{target}" - update_announcement_html: "%{name} cập nhật thông báo %{target}" + update_announcement_html: "%{name} đã cập nhật thông báo %{target}" update_custom_emoji_html: "%{name} đã cập nhật emoji %{target}" - update_domain_block_html: "%{name} cập nhật chặn máy chủ %{target}" - update_ip_block_html: "%{name} cập nhật chặn IP %{target}" - update_report_html: "%{name} cập nhật báo cáo %{target}" - update_status_html: "%{name} cập nhật tút của %{target}" + update_domain_block_html: "%{name} đã cập nhật chặn máy chủ %{target}" + update_ip_block_html: "%{name} đã cập nhật chặn IP %{target}" + update_report_html: "%{name} đã cập nhật báo cáo %{target}" + update_status_html: "%{name} đã cập nhật tút của %{target}" update_user_role_html: "%{name} đã cập nhật vai trò %{target}" deleted_account: tài khoản đã xóa empty: Không tìm thấy bản ghi. @@ -353,7 +354,7 @@ vi: new_users: người mới opened_reports: báo cáo pending_appeals_html: - other: "%{count} kháng cáo đang chờ" + other: "%{count} khiếu nại đang chờ" pending_reports_html: other: "%{count} báo cáo đang chờ" pending_tags_html: @@ -371,7 +372,7 @@ vi: disputes: appeals: empty: Không tìm thấy. - title: Kháng cáo + title: Khiếu nại domain_allows: add_new: Cho phép liên hợp với máy chủ created_msg: Máy chủ đã được kích hoạt liên hợp thành công @@ -691,8 +692,8 @@ vi: invite_users_description: Cho phép mời những người mới vào máy chủ manage_announcements: Quản lý thông báo manage_announcements_description: Cho phép quản lý thông báo trên máy chủ - manage_appeals: Quản lý kháng cáo - manage_appeals_description: Cho phép thành viên kháng cáo đối với các hành động kiểm duyệt + manage_appeals: Quản lý khiếu nại + manage_appeals_description: Cho phép thành viên khiếu nại đối với các hành động kiểm duyệt manage_blocks: Quản lý chặn manage_blocks_description: Cho phép người dùng tự chặn các nhà cung cấp email và địa chỉ IP manage_custom_emojis: Quản lý emoji @@ -818,7 +819,7 @@ vi: original_status: Tút gốc reblogs: Lượt đăng lại status_changed: Tút đã sửa - title: Toàn bộ tút + title: Tất cả tút trending: Xu hướng visibility: Hiển thị with_media: Có media @@ -831,8 +832,8 @@ vi: sensitive: "%{name} đã đánh dấu %{target} là nhạy cảm" silence: "%{name} đã ẩn %{target}" suspend: "%{name} đã vô hiệu hóa %{target}" - appeal_approved: Đã khiếu nại - appeal_pending: Đang kháng cáo + appeal_approved: Khiếu nại được chấp nhận + appeal_pending: Đang khiếu nại appeal_rejected: Khiếu nại bị từ chối system_checks: database_schema_check: @@ -1007,7 +1008,7 @@ vi: silence: hạn chế tài khoản của họ suspend: vô hiệu hóa tài khoản của họ body: "%{target} đã khiếu nại vì bị %{action_taken_by} %{type} vào %{date}. Họ cho biết:" - next_steps: Bạn có thể duyệt kháng cáo để hủy kiểm duyệt hoặc bỏ qua. + next_steps: Bạn có thể chấp nhận khiếu nại để bỏ kiểm duyệt, hoặc không. subject: "%{username} đang khiếu nại quyết định kiểm duyệt trên %{instance}" new_critical_software_updates: body: Các phiên bản quan trọng mới của Mastodon đã được phát hành, bạn nên cập nhật càng sớm càng tốt! @@ -1147,9 +1148,11 @@ vi: use_security_key: Dùng khóa bảo mật author_attribution: example_title: Văn bản mẫu - hint_html: Kiểm soát cách bạn được ghi nhận khi chia sẻ liên kết trên Mastodon. - more_from_html: Thêm từ %{name} + hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bài viết của bạn được ghi nhận khi chia sẻ trên Mastodon. + instructions: 'Đặt mã này trong HTML bài viết:' + more_from_html: Viết bởi %{name} s_blog: "%{name}'s Blog" + then_instructions: Sau đó, thêm URL của báo/blog trong trường bên dưới. title: Ghi nhận người đăng challenge: confirm: Tiếp tục @@ -1204,12 +1207,12 @@ vi: appealed_msg: Khiếu nại của bạn đã được gửi đi. Nếu nó được chấp nhận, bạn sẽ nhận được thông báo. appeals: submit: Gửi khiếu nại - approve_appeal: Duyệt kháng cáo + approve_appeal: Chấp nhận khiếu nại associated_report: Báo cáo đính kèm created_at: Ngày description_html: Đây là những cảnh cáo và áp đặt kiểm duyệt đối với bạn bởi đội ngũ %{instance}. recipient: Người nhận - reject_appeal: Từ chối kháng cáo + reject_appeal: Từ chối khiếu nại status: 'Tút #%{id}' status_removed: Tút này đã được xóa khỏi hệ thống title: "%{action} từ %{date}" @@ -1373,10 +1376,10 @@ vi: muting: Đang nhập người đã ẩn type: Kiểu nhập type_groups: - constructive: Lượt theo dõi và những thứ đã lưu - destructive: Lượt chặn và ẩn + constructive: Theo dõi và lưu + destructive: Chặn và ẩn types: - blocking: Danh sách chặn + blocking: Danh sách người đã chặn bookmarks: Tút đã lưu domain_blocking: Danh sách máy chủ đã chặn following: Danh sách người theo dõi @@ -1734,7 +1737,7 @@ vi: ignore_favs: Bỏ qua số lượt thích ignore_reblogs: Bỏ qua lượt đăng lại interaction_exceptions: Ngoại lệ dựa trên tương tác - interaction_exceptions_explanation: Lưu ý rằng không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng tụt dưới ngưỡng mức yêu thích hoặc đăng lại, dù đã từng đạt. + interaction_exceptions_explanation: Lưu ý là không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng bị giảm lượt thích hoặc đăng lại, dù đã từng đạt. keep_direct: Giữ lại tin nhắn keep_direct_hint: Không xóa tin nhắn của bạn keep_media: Giữ lại những tút có đính kèm media @@ -1765,7 +1768,7 @@ vi: sensitive_content: NSFW strikes: errors: - too_late: Đã quá trễ để kháng cáo + too_late: Đã quá trễ để khiếu nại tags: does_not_match_previous_name: không khớp với tên trước themes: @@ -1839,8 +1842,8 @@ vi: disable: Bạn không còn có thể sử dụng tài khoản của mình, nhưng hồ sơ của bạn và dữ liệu khác vẫn còn nguyên. Bạn có thể yêu cầu sao lưu dữ liệu của mình, thay đổi cài đặt tài khoản hoặc xóa tài khoản của bạn. mark_statuses_as_sensitive: Vài tút của bạn đã bị kiểm duyệt viên %{instance} đánh dấu nhạy cảm. Mọi người cần nhấn vào media để xem nó. Bạn có thể tự đánh dấu tài khoản của bạn là nhạy cảm. sensitive: Từ giờ trở đi, tất cả các media của bạn bạn tải lên sẽ được đánh dấu là nhạy cảm và ẩn đằng sau cảnh báo nhấp chuột. - silence: Bạn vẫn có thể sử dụng tài khoản của mình, nhưng chỉ những người đang theo dõi bạn mới thấy bài đăng của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác. Tuy nhiên, những người khác vẫn có thể theo dõi bạn. - suspend: Bạn không còn có thể sử dụng tài khoản của bạn, hồ sơ và các dữ liệu khác không còn có thể truy cập được. Trong vòng 30 ngày, bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để ngăn bạn thoát khỏi việc vô hiệu hóa. + silence: Bạn vẫn có thể sử dụng tài khoản của mình và người khác vẫn có thể theo dõi bạn, nhưng chỉ những người đã theo dõi bạn mới thấy tút của bạn. Bạn cũng bị loại khỏi các tính năng khám phá khác. + suspend: Tài khoản của bạn, hồ sơ và các dữ liệu khác sẽ không thể truy cập được nữa. Bạn vẫn có thể đăng nhập để yêu cầu bản sao dữ liệu của mình cho đến khi dữ liệu bị xóa hoàn toàn trong vòng 30 ngày, nhưng chúng tôi sẽ giữ lại một số dữ liệu cơ bản để phòng khi bạn được bỏ vô hiệu hóa. reason: 'Lý do:' statuses: 'Tút vi phạm:' subject: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index a73871115b..806024b110 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -10,21 +10,22 @@ zh-CN: followers: other: 关注者 following: 正在关注 - instance_actor_flash: 该账号用来代表虚拟角色,并不代表个人用户,仅代表服务器本身。该账号用于达成互联之目的,不应该被停用。 - last_active: 最近活动 - link_verified_on: 此链接的所有权已在 %{date} 检查 + instance_actor_flash: 该账号用来代表虚拟角色,并不代表个人用户,仅代表服务器本身。该账号用于联合目的,不应该被停用。 + last_active: 上次活跃 + link_verified_on: 此链接的所有权已在 %{date} 验证 nothing_here: 空空如也! pin_errors: following: 你必须关注你要推荐的人 posts: other: 嘟文 posts_tab_heading: 嘟文 + self_follow_error: 不可以关注自己 admin: account_actions: action: 执行操作 - already_silenced: 此账户已受限。 - already_suspended: 此帐户已被封禁。 - title: 在 %{acct} 上执行管理操作 + already_silenced: 此账号已受限。 + already_suspended: 此账号已被封禁。 + title: 对 %{acct} 执行管理操作 account_moderation_notes: create: 新建记录 created_msg: 管理记录创建成功! @@ -55,7 +56,7 @@ zh-CN: custom: 自定义 delete: 删除数据 deleted: 已删除 - demote: 降任 + demote: 取消管理员 destroyed_msg: "%{username} 的数据已被安排至删除队列" disable: 冻结 disable_sign_in_token_auth: 禁用邮件令牌身份验证 @@ -72,7 +73,7 @@ zh-CN: enabled_msg: 成功解冻 %{username} 的账号 followers: 粉丝 follows: 关注 - header: 个人资料页横幅图片 + header: 封面图 inbox_url: 收件箱(Inbox)URL invite_request_text: 加入理由 invited_by: 邀请者为 @@ -81,13 +82,13 @@ zh-CN: location: all: 全部 local: 本站 - remote: 远端实例 + remote: 外站 title: 位置 login_status: 登录状态 media_attachments: 媒体文件 - memorialize: 设置为追悼账户 - memorialized: 被悼念 - memorialized_msg: 成功将 %{username} 转换为悼念账号 + memorialize: 设为追悼账号 + memorialized: 已设为追悼账号 + memorialized_msg: 成功将 %{username} 转换为追悼账号 moderation: active: 活跃 all: 全部 @@ -97,31 +98,31 @@ zh-CN: suspended: 已封禁 title: 管理 moderation_notes: 管理记录 - most_recent_activity: 最后一次活跃的时间 - most_recent_ip: 最后一次活跃的 IP 地址 + most_recent_activity: 最后活跃时间 + most_recent_ip: 最后活跃IP no_account_selected: 因为没有选中任何账号,所以没有更改 no_limits_imposed: 无限制 - no_role_assigned: 未定角色 + no_role_assigned: 未指派角色 not_subscribed: 未订阅 pending: 待审核 perform_full_suspension: 封禁 previous_strikes: 既往处罚 previous_strikes_description_html: other: 此账号已有%{count}次处罚。 - promote: 升任 + promote: 设为管理员 protocol: 协议 public: 公开页面 push_subscription_expires: PuSH 订阅过期时间 - redownload: 刷新个人资料 - redownloaded_msg: 成功从来源处刷新 %{username} 的用户资料 + redownload: 刷新账号信息 + redownloaded_msg: 成功从来源站点刷新 %{username} 的账号信息 reject: 拒绝 rejected_msg: 已拒绝 %{username} 的注册申请 - remote_suspension_irreversible: 此账户的数据已被不可逆转地删除。 + remote_suspension_irreversible: 此账号的数据已被不可逆转地删除。 remote_suspension_reversible_hint_html: 账号已在他们的服务器上封禁,数据将在 %{date} 完全删除。 在此之前,远程服务器仍可恢复此账号,并且没有任何不良影响。 如果你想立即移除该账号的所有数据,可以在下面进行。 remove_avatar: 删除头像 - remove_header: 删除横幅图片 + remove_header: 移除封面图 removed_avatar_msg: 成功删除 %{username} 的头像 - removed_header_msg: 成功删除了 %{username} 的横幅图片 + removed_header_msg: 成功移除 %{username} 的封面图 resend_confirmation: already_confirmed: 该用户已被确认 send: 重新发送确认链接 @@ -141,8 +142,8 @@ zh-CN: sensitized: 已标记为敏感内容 shared_inbox_url: 公用收件箱(Shared Inbox)URL show: - created_reports: 这个账户提交的举报 - targeted_reports: 针对这个账户的举报 + created_reports: 这个账号提交的举报 + targeted_reports: 针对这个账号的举报 silence: 隐藏 silenced: 已隐藏 statuses: 嘟文 @@ -163,10 +164,10 @@ zh-CN: unsubscribe: 取消订阅 unsuspended_msg: 已成功取消封禁 %{username} 的账号 username: 用户名 - view_domain: 查看域名摘要 + view_domain: 查看站点摘要 warn: 警告 web: 站内页面 - whitelisted: 允许跨站交互 + whitelisted: 允许联合 action_logs: action_types: approve_appeal: 批准申诉 @@ -179,24 +180,24 @@ zh-CN: create_announcement: 创建公告 create_canonical_email_block: 封禁新的邮箱 create_custom_emoji: 创建自定义表情符号 - create_domain_allow: 允许新域名 - create_domain_block: 封禁新域名 + create_domain_allow: 允许联合 + create_domain_block: 屏蔽站点 create_email_domain_block: 封禁新的邮箱域名 create_ip_block: 新建 IP 规则 create_unavailable_domain: 创建不可用域名 create_user_role: 创建角色 - demote_user: 给用户降职 + demote_user: 取消管理员 destroy_announcement: 删除公告 destroy_canonical_email_block: 解除邮箱封禁 destroy_custom_emoji: 删除自定义表情符号 - destroy_domain_allow: 解除域名允许 - destroy_domain_block: 解除域名封禁 + destroy_domain_allow: 撤销联合许可 + destroy_domain_block: 撤销站点屏蔽 destroy_email_domain_block: 解除邮箱域名封禁 - destroy_instance: 删除实例 + destroy_instance: 清除实例 destroy_ip_block: 删除 IP 规则 destroy_status: 删除嘟文 destroy_unavailable_domain: 删除不可用域名 - destroy_user_role: 销毁角色 + destroy_user_role: 删除角色 disable_2fa_user: 停用双因素认证 disable_custom_emoji: 禁用自定义表情符号 disable_sign_in_token_auth_user: 为用户禁用邮件令牌身份验证 @@ -204,8 +205,8 @@ zh-CN: enable_custom_emoji: 启用自定义表情符号 enable_sign_in_token_auth_user: 为用户启用邮件令牌身份验证 enable_user: 启用用户 - memorialize_account: 将账户设为追悼模式 - promote_user: 给用户升任 + memorialize_account: 设为追悼账号 + promote_user: 指派管理员 reject_appeal: 驳回申诉 reject_user: 拒绝用户 remove_avatar_user: 移除头像 @@ -223,7 +224,7 @@ zh-CN: unsuspend_account: 解除账号封禁 update_announcement: 更新公告 update_custom_emoji: 更新自定义表情符号 - update_domain_block: 更新域名屏蔽 + update_domain_block: 更新站点屏蔽 update_ip_block: 编辑 IP 封禁规则 update_report: 更新举报 update_status: 更新嘟文 @@ -239,24 +240,24 @@ zh-CN: create_announcement_html: "%{name} 创建了新公告 %{target}" create_canonical_email_block_html: "%{name} 封禁了 hash 为 %{target} 的邮箱地址" create_custom_emoji_html: "%{name} 添加了新的自定义表情 %{target}" - create_domain_allow_html: "%{name} 允许了和域名 %{target} 的跨站交互" - create_domain_block_html: "%{name} 屏蔽了域名 %{target}" + create_domain_allow_html: "%{name} 允许了与站点 %{target} 的联合" + create_domain_block_html: "%{name} 屏蔽了站点 %{target}" create_email_domain_block_html: "%{name} 封禁了邮箱域名 %{target}" create_ip_block_html: "%{name} 为 IP %{target} 创建了规则" create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递" - create_user_role_html: "%{name} 创建了 %{target} 角色" - demote_user_html: "%{name} 对用户 %{target} 进行了降任操作" + create_user_role_html: "%{name} 创建了角色 %{target}" + demote_user_html: "%{name} 撤销了用户 %{target} 的管理权限" destroy_announcement_html: "%{name} 删除了公告 %{target}" destroy_canonical_email_block_html: "%{name} 解封了 hash 为 %{target} 的邮箱地址" destroy_custom_emoji_html: "%{name} 删除了自定义表情 %{target}" - destroy_domain_allow_html: "%{name} 拒绝了和 %{target} 跨站交互" - destroy_domain_block_html: "%{name} 解除了对域名 %{target} 的屏蔽" + destroy_domain_allow_html: "%{name} 拒绝了与站点 %{target} 的联合" + destroy_domain_block_html: "%{name} 解除了对站点 %{target} 的屏蔽" destroy_email_domain_block_html: "%{name} 解封了邮箱域名 %{target}" - destroy_instance_html: "%{name} 删除了实例 %{target}" + destroy_instance_html: "%{name} 清除了实例 %{target}" destroy_ip_block_html: "%{name} 删除了 IP %{target} 的规则" destroy_status_html: "%{name} 删除了 %{target} 的嘟文" destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递" - destroy_user_role_html: "%{name} 删除了 %{target} 角色" + destroy_user_role_html: "%{name} 删除了角色 %{target}" disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双因素认证" disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}" disable_sign_in_token_auth_user_html: "%{name} 为 %{target} 禁用了邮件令牌身份验证" @@ -264,8 +265,8 @@ zh-CN: enable_custom_emoji_html: "%{name} 启用了自定义表情 %{target}" enable_sign_in_token_auth_user_html: "%{name} 为 %{target} 启用了邮件令牌身份验证" enable_user_html: "%{name} 将用户 %{target} 设置为允许登录" - memorialize_account_html: "%{name} 将 %{target} 设置为追悼账户" - promote_user_html: "%{name} 对用户 %{target} 进行了升任操作" + 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} 的头像" @@ -287,12 +288,12 @@ zh-CN: update_ip_block_html: "%{name} 修改了对 IP %{target} 的规则" update_report_html: "%{name} 更新了举报 %{target}" update_status_html: "%{name} 刷新了 %{target} 的嘟文" - update_user_role_html: "%{name} 更改了 %{target} 角色" + update_user_role_html: "%{name} 更改了角色 %{target}" deleted_account: 账号已注销 empty: 没有找到日志 - filter_by_action: 根据行为过滤 - filter_by_user: 根据用户过滤 - title: 运营日志 + filter_by_action: 根据操作筛选 + filter_by_user: 根据用户筛选 + title: 审核日志 unavailable_instance: "(域名不可用)" announcements: destroyed_msg: 公告已删除! @@ -328,7 +329,7 @@ zh-CN: emoji: 表情 enable: 启用 enabled: 已启用 - enabled_msg: 表情启用成功 + enabled_msg: 已成功启用此表情 image_hint: 最大 %{size} 的 PNG 或 GIF list: 列表 listed: 已显示 @@ -341,7 +342,7 @@ zh-CN: shortcode_hint: 至少 2 个字符,只能使用字母、数字和下划线 title: 自定义表情 uncategorized: 未分类 - unlist: 不公开 + unlist: 隐藏 unlisted: 已隐藏 update_failed_msg: 表情更新失败 updated_msg: 表情更新成功! @@ -357,52 +358,52 @@ zh-CN: pending_reports_html: other: "%{count} 个待处理举报" pending_tags_html: - other: "%{count} 个待处理话题标签" + other: "%{count} 个待处理话题" pending_users_html: other: "%{count} 个待处理用户" resolved_reports: 已处理的举报 - software: 软件 + software: 软件信息 sources: 注册来源 space: 存储使用情况 title: 信息面板 top_languages: 最活跃的语言 top_servers: 最活跃的服务器 - website: 网页端 + website: 网站 disputes: appeals: - empty: 没有发现申诉。 + empty: 未找到申诉。 title: 申诉 domain_allows: - add_new: 允许和域名跨站交互 - created_msg: 域名已被允许跨站交互 - destroyed_msg: 域名已被禁止跨站交互 + add_new: 允许与此站点联合 + created_msg: 站点已被允许联合 + destroyed_msg: 站点已被禁止联合 export: 导出 import: 导入 - undo: 不允许和该域名跨站交互 + undo: 禁止与此站点联合 domain_blocks: - add_new: 添加新屏蔽域名 + add_new: 添加新站点屏蔽 confirm_suspension: cancel: 取消 confirm: 封禁 - permanent_action: 撤销暂停不会恢复任何数据或关系。 - preamble_html: 你将要暂停 %{domain} 及其子域。 - remove_all_data: 这将从你的实例上删除此域名下账户的所有内容、媒体和个人资料数据。 - stop_communication: 你的实例将停止与这些实例的通信。 - title: 确认对 %{domain} 的封锁 - undo_relationships: 这将解除你的实例与这些实例上账户之间的任何关注。 - created_msg: 正在进行域名屏蔽 - destroyed_msg: 域名屏蔽已撤销 + permanent_action: 撤销屏蔽不会恢复任何数据或关系。 + preamble_html: 你即将封禁 %{domain} 及其子域名上的站点。 + remove_all_data: 这将从你的站点上删除对方站点的账号的全部内容、媒体与个人资料数据。 + stop_communication: 你的站点将停止与这些站点的通信。 + title: 确认屏蔽 %{domain} + undo_relationships: 这将解除你的站点与对方站点的账号之间的任何关注。 + created_msg: 正在执行站点屏蔽 + destroyed_msg: 站点屏蔽已被撤销 domain: 域名 - edit: 编辑域名屏蔽 - existing_domain_block: 您已经对 %{name} 设置了更严格的限制。 + edit: 编辑站点屏蔽列表 + existing_domain_block: 你已经对 %{name} 设置了更严格的限制。 existing_domain_block_html: 你已经对 %{name} 施加了更严格的限制,你需要先 解封。 export: 导出 import: 导入 new: create: 添加屏蔽 - hint: 域名屏蔽不会阻止该域名下的帐户进入本站的数据库,但是会对来自这个域名的帐户自动进行预先设置的管理操作。 + hint: 域名屏蔽不会阻止该域名下的账号进入本站的数据库,但是会对来自这个域名的账号自动进行预先设置的管理操作。 severity: - desc_html: 选择隐藏会将该域名下帐户发送的嘟文设置为仅关注者可见;选择封禁会将该域名下帐户发送的嘟文、媒体文件以及个人资料数据从本实例上删除;如果你只是想拒绝接收来自该域名的任何媒体文件,请选择。 + desc_html: 选择隐藏会将该域名下账号发送的嘟文设置为仅关注者可见;选择封禁会将该域名下账号发送的嘟文、媒体文件以及个人资料数据从本实例上删除;如果你只是想拒绝接收来自该域名的任何媒体文件,请选择。 noop: 无 silence: 隐藏 suspend: 封禁 @@ -412,7 +413,7 @@ zh-CN: obfuscate: 混淆域名 obfuscate_hint: 如果启用了域名列表公开限制,就部分混淆列表中的域名 private_comment: 私密评论 - private_comment_hint: 给这一域名限制添加备注,供监察员内部使用 + private_comment_hint: 给这一域名限制添加备注,供管理员内部使用 public_comment: 公开评论 public_comment_hint: 给这一域名限制添加公开的评论,在公告域名限制列表开启时这些评论将会公开可见。 reject_media: 拒绝接收媒体文件 @@ -438,7 +439,7 @@ zh-CN: title: 封禁新的邮箱域名 no_email_domain_block_selected: 没有任何项目被选中,因此未更改邮箱域名屏蔽列表 not_permitted: 未允许 - resolved_dns_records_hint_html: 该域名解析的 MX 记录所指向的域名如下,这些域名被用于接收电子邮件。 即使电子邮件地址域名与 MX 域名不同,屏蔽一个 MX 域名意味着阻止任何使用相同 MX 域名的邮箱地址注册本站账户。 请谨慎操作,不要误屏蔽主要的邮箱提供商。 + resolved_dns_records_hint_html: 该域名解析的 MX 记录所指向的域名如下,这些域名被用于接收电子邮件。 即使电子邮件地址域名与 MX 域名不同,屏蔽一个 MX 域名意味着阻止任何使用相同 MX 域名的邮箱地址注册本站账号。 请谨慎操作,不要误屏蔽主要的邮箱提供商。 resolved_through_html: 通过 %{domain} 解析 title: 被封禁的邮箱域名 export_domain_allows: @@ -447,9 +448,9 @@ zh-CN: no_file: 没有选择文件 export_domain_blocks: import: - description_html: 您即将导入域名列表,如果您不是此域名列表的作者,请仔细检查核对。 + description_html: 你即将导入域名列表,如果你不是此域名列表的作者,请仔细检查核对。 existing_relationships_warning: 现有的关注关系 - private_comment_description_html: 为了帮助您追踪域名列表来源,导入的域名列表将被添加如下的私人注释:%{comment} + private_comment_description_html: 为了帮助你追踪域名列表来源,导入的域名列表将被添加如下的私人注释:%{comment} private_comment_template: 从 %{source} 导入 %{date} title: 导入域名列表 invalid_domain_block: 由于以下错误,一个或多个域名屏蔽被跳过: %{error} @@ -457,7 +458,7 @@ zh-CN: title: 导入域名列表 no_file: 没有选择文件 follow_recommendations: - description_html: "“关注推荐”可帮助新用户快速找到有趣的内容。 当用户与他人的互动不足以形成个性化的建议时,就会推荐关注这些账户。推荐会每日更新,基于选定语言的近期最高互动数和最多本站关注者数综合评估得出。" + description_html: "“关注推荐”可帮助新用户快速找到有趣的内容。 当用户与他人的互动不足以形成个性化的建议时,就会推荐关注这些账号。推荐会每日更新,基于选定语言的近期最高互动数和最多本站关注者数综合评估得出。" language: 选择语言 status: 嘟文 suppress: 禁用推荐关注 @@ -466,14 +467,14 @@ zh-CN: unsuppress: 恢复推荐关注 instances: audit_log: - title: 近期审计日志 - view_all: 查看完整审计日志 + title: 近期审核记录 + view_all: 查看完整审核记录 availability: description_html: - other: 如果连续 %{count} 天 均无法成功向该域名投递消息,则将不再尝试向其投递,直至收到来自该域名的消息。 + other: 若连续 %{count} 天 均无法成功向该站点投递消息,则将不再尝试向其投递,直至收到来自该站点的消息。 failure_threshold_reached: 于 %{date} 达到失败阈值。 failures_recorded: - other: 在 %{count} 天中尝试失败。 + other: 连续 %{count} 天投递失败。 no_failures_recorded: 没有失败记录。 title: 可用性 warning: 上一次尝试连接此服务器失败 @@ -481,11 +482,11 @@ zh-CN: back_to_limited: 受限 back_to_warning: 警告 by_domain: 域名 - confirm_purge: 你确认要从这个实例中永久地删除数据吗? + confirm_purge: 确定要删除此站点的全部数据吗? content_policies: comment: 内部备注 description_html: 你可以设置应用于此域名所有账号和其所有子域名的内容策略。 - limited_federation_mode_description_html: 您可以选择是否允许与该联邦联合。 + limited_federation_mode_description_html: 你可以选择是否允许与此实例联合。 policies: reject_media: 拒收媒体 reject_reports: 拒收举报 @@ -493,12 +494,12 @@ zh-CN: suspend: 封禁 policy: 策略 reason: 公开理由 - title: 本站点内容发布规则 + title: 内容策略 dashboard: instance_accounts_dimension: 被关注最多的账号 instance_accounts_measure: 存储的账号 - instance_followers_measure: 本站关注者 - instance_follows_measure: 对方关注者 + instance_followers_measure: 本站在对方站点的关注者 + instance_follows_measure: 对方在本站的关注者 instance_languages_dimension: 语言排行 instance_media_attachments_measure: 存储的媒体文件 instance_reports_measure: 关于对方的举报 @@ -506,39 +507,39 @@ zh-CN: delivery: all: 全部 clear: 清理投递错误 - failing: 发送失败 + failing: 投递失败 restart: 重新投递 stop: 停止投递 unavailable: 不可用 delivery_available: 可投递 delivery_error_days: 投递错误天数 delivery_error_hint: 如果投递已不可用 %{count} 天,它将被自动标记为无法投递。 - destroyed_msg: "%{domain} 中的数据现在正在排队等待被立刻删除。" + destroyed_msg: 来自 %{domain} 的数据已被加入删除队列,即将删除。 empty: 暂无域名。 known_accounts: other: "%{count} 个已知账号" moderation: all: 全部 limited: 受限的 - title: 运营 + title: 审核 private_comment: 私密评论 public_comment: 公开评论 - purge: 删除 + purge: 清除 purge_description_html: 如果你确认此域名已永久离线,可以从存储中删除此域名的所有账号记录和相关数据。这将会需要一段时间。 - title: 已知实例 - total_blocked_by_us: 被我站屏蔽的 + title: 联合 + total_blocked_by_us: 被本站屏蔽的 total_followed_by_them: 被对方关注的 - total_followed_by_us: 被我站关注的 + total_followed_by_us: 被本站关注的 total_reported: 关于对方的举报 total_storage: 媒体文件 totals_time_period_hint_html: 下方显示的总数来自全部历史数据。 - unknown_instance: 此服务器上目前没有此域名的记录。 + unknown_instance: 本站目前没有此站点的记录。 invites: - deactivate_all: 撤销所有邀请链接 + deactivate_all: 全部停用 filter: all: 全部 available: 可用 - expired: 已失效 + expired: 已过期 title: 筛选 title: 邀请用户 ip_blocks: @@ -554,7 +555,7 @@ zh-CN: '94670856': 3年 new: title: 创建新 IP 规则 - no_ip_block_selected: 因为没有 IP 规则被选中,所以没有更改 + no_ip_block_selected: 未选中任何 IP 规则,所以没有更改 title: IP 规则 relationships: title: "%{acct} 的关系" @@ -571,7 +572,7 @@ zh-CN: pending: 等待中继站的确认 save_and_enable: 保存并启用 setup: 设置中继连接 - signatures_not_enabled: 安全模式或限联模式启用时,中继将不会正常工作 + signatures_not_enabled: 安全模式或白名单模式启用时,中继站可能将不会正常工作 status: 状态 title: 中继站 report_notes: @@ -588,22 +589,22 @@ zh-CN: mark_as_sensitive_description_html: 被举报的嘟文将被标记为敏感,同时该账号将被标记一次处罚,以供未来同一账号再次违规时参考。 other_description_html: 查看更多控制该账号行为的选项,并自定义编写与被举报账号的通信。 resolve_description_html: 不会对被举报账号采取任何动作,举报将被关闭,也不会留下处罚记录。 - silence_description_html: 只有关注或手工搜索此账号才能查看其资料,将严重限制其触达范围。可随时撤销。关闭针对此帐户的所有举报。 - suspend_description_html: 该帐户及其所有内容将无法访问并最终被删除,且无法与该帐户进行互动。 在 30 天内可随时撤销。关闭针对此帐户的所有举报。 + silence_description_html: 只有关注或手工搜索此账号才能查看其资料,将严重限制其触达范围。可随时撤销。关闭针对此账号的所有举报。 + suspend_description_html: 该账号及其所有内容将无法访问并最终被删除,且无法与该账号进行互动。 在 30 天内可随时撤销。关闭针对此账号的所有举报。 actions_description_html: 决定采取何种措施处理此举报。如果对被举报账号采取惩罚性措施,将向其发送一封电子邮件通知。但若选中垃圾信息类别则不会发送通知。 - actions_description_remote_html: 决定采取何种行动来解决此举报。 这只会影响您的服务器如何与该远程帐户的通信并处理其内容。 + actions_description_remote_html: 决定采取何种行动来解决此举报。 这只会影响你的服务器如何与该远程账号的通信并处理其内容。 actions_no_posts: 该举报没有相关嘟文可供删除 - add_to_report: 增加更多举报内容 + add_to_report: 添加更多内容到举报 already_suspended_badges: - local: 已经在此服务器上暂停 + local: 已在此服务器上被封禁 remote: 已在其所属服务器被封禁 are_you_sure: 你确定吗? assign_to_self: 接管 - assigned: 已接管的监察员 - by_target_domain: 被举报账户的域名 + assigned: 已接管的管理员 + by_target_domain: 被举报账号的域名 cancel: 取消 category: 类别 - category_description_html: 在与被举报账户的通信时,将引用该账号和/或内容被举报的原因 + category_description_html: 在与被举报账号的通信时,将引用该账号和/或内容被举报的原因 comment: none: 没有 comment_description_html: "%{name} 补充道:" @@ -613,7 +614,7 @@ zh-CN: delete_and_resolve: 删除嘟文 forwarded: 已转发 forwarded_replies_explanation: 该举报来自外站用户,涉及外站内容。之所以转发给你,是因为被举报的内容是对你站点一位用户的回复。 - forwarded_to: 转发举报至 %{domain} + forwarded_to: 转发举报到 %{domain} mark_as_resolved: 标记为已处理 mark_as_sensitive: 标记为敏感内容 mark_as_unresolved: 标记为未处理 @@ -621,14 +622,14 @@ zh-CN: notes: create: 添加记录 create_and_resolve: 添加记录并标记为“已处理” - create_and_unresolve: 添加记录并重开 + create_and_unresolve: 添加备注并重新打开 delete: 删除 placeholder: 描述已经执行的操作,或其他任何相关的跟进情况… title: 备注 - notes_description_html: 查看备注或向其他监察员留言 + notes_description_html: 查看备注或向其他管理员留言 processed_msg: '举报 #%{id} 处理成功' quick_actions_description_html: 快捷选择操作或向下滚动以查看举报内容: - remote_user_placeholder: 来自 %{instance} 的远程实例用户 + remote_user_placeholder: 来自 %{instance} 的外站用户 reopen: 重开举报 report: '举报 #%{id}' reported_account: 举报用户 @@ -642,20 +643,20 @@ zh-CN: statuses_description_html: 在与该账号的通信中将引用违规内容 summary: action_preambles: - delete_html: 您即将删除 @%{acct} 的一些嘟文。 这将: - mark_as_sensitive_html: 您即将 标记 @%{acct} 的帖一些子为 敏感。这将: - silence_html: 您即将限制 @%{acct} 的帐户。 这将: - suspend_html: 您即将暂停 @%{acct} 的帐户。 这将: + delete_html: 你即将删除 @%{acct} 的一些嘟文。 这将: + mark_as_sensitive_html: 你即将 标记 @%{acct} 的帖一些子为 敏感。这将: + silence_html: 你即将限制 @%{acct} 的账号。 这将: + suspend_html: 你即将暂停 @%{acct} 的账号。 这将: actions: delete_html: 删除违规嘟文 mark_as_sensitive_html: 将违规嘟文的媒体标记为敏感 silence_html: 严格限制 @%{acct} 的影响力,方法是让他们的个人资料和内容仅对已经关注他们的人可见,或手动查找其个人资料时 suspend_html: 暂停 @%{acct},使他们的个人资料和内容无法访问,也无法与之互动 - close_report: '将报告 #%{id} 标记为已解决' - close_reports_html: 将针对 @%{acct}所有 报告标记为已解决 + close_report: '将举报 #%{id} 标记为已解决' + close_reports_html: 将针对 @%{acct}所有举报标记为已解决 delete_data_html: 从现在起 30 天后删除 @%{acct} 的个人资料和内容,除非他们同时解除暂停。 preview_preamble_html: "@%{acct} 将收到包含以下内容的警告:" - record_strike_html: 记录一次针对 @%{acct} 的警示,以帮助您在这个帐户上的未来违规事件中得到重视。 + record_strike_html: 记录一次针对 @%{acct} 的警示,以帮助你在这个账号上的未来违规事件中得到重视。 send_email_html: 向 @%{acct} 发送警告邮件 warning_placeholder: 可选的补充理由,以说明调整的情况。 target_origin: 被举报账号的来源 @@ -668,61 +669,61 @@ zh-CN: roles: add_new: 添加角色 assigned_users: - other: "%{count} 用户" + other: "%{count} 名用户" categories: administration: 管理 devops: 开发运维 invites: 邀请 - moderation: 监察 + moderation: 审核 special: 特殊 delete: 刪除 - description_html: 使用 用户角色,您可以自定义您的用户可以访问的功能和区域。 - edit: 编辑 '%{name}' 角色 + description_html: 使用 用户角色,你可以自定义你的用户可以访问的 Mastodon 功能和区域。 + edit: 编辑角色 '%{name}' everyone: 默认权限 - everyone_full_description_html: 这是影响到 所有用户基础角色,包括未指定角色的用户。 其他所有的角色都继承着它的权限。 + everyone_full_description_html: 该角色是基础角色,会影响所有用户,包括未指定角色的用户。 其他所有的角色都继承该角色的权限。 permissions_count: - other: "%{count} 权限" + other: "%{count} 个权限" privileges: administrator: 管理员 - administrator_description: 拥有此权限的用户将绕过每个权限 + administrator_description: 拥有此权限的用户将绕过所有权限限制。 delete_user_data: 删除用户数据 delete_user_data_description: 允许用户立即删除其他用户的数据 invite_users: 邀请用户 - invite_users_description: 允许用户邀请新人加入服务器 + invite_users_description: 允许用户邀请新人加入站点 manage_announcements: 管理公告 - manage_announcements_description: 允许用户管理服务器上的通知 + manage_announcements_description: 允许用户管理站点上的公告 manage_appeals: 管理申诉 - manage_appeals_description: 允许用户审阅针对管理操作的申诉 - manage_blocks: 管理地址段 - manage_blocks_description: 允许用户屏蔽邮箱提供商和IP地址 + manage_appeals_description: 允许用户复核针对管理操作的申诉 + manage_blocks: 管理地址屏蔽列表 + manage_blocks_description: 允许用户屏蔽邮箱域名与IP地址 manage_custom_emojis: 管理自定义表情 - manage_custom_emojis_description: 允许用户管理服务器上的自定义表情 - manage_federation: 管理邦联 - manage_federation_description: 允许用户屏蔽或允许同其他域名的邦联,并控制消息投递能力 + manage_custom_emojis_description: 允许用户管理站点上的自定义表情 + manage_federation: 管理联合 + manage_federation_description: 允许用户禁止或允许本站同其他站点的联合,并控制消息投递能力 manage_invites: 管理邀请 - manage_invites_description: 允许用户浏览和停用邀请链接 + manage_invites_description: 允许用户浏览与停用邀请链接 manage_reports: 管理举报 manage_reports_description: 允许用户审核举报并执行管理操作 manage_roles: 管理角色 - manage_roles_description: 允许用户管理和分配比他们权限低的角色 + manage_roles_description: 允许用户管理与指派比自己权限低的角色 manage_rules: 管理规则 - manage_rules_description: 允许用户更改服务器规则 + manage_rules_description: 允许用户修改站点规则 manage_settings: 管理设置 manage_settings_description: 允许用户更改站点设置 - manage_taxonomies: 管理分类 - manage_taxonomies_description: 允许用户查看热门内容并更新标签设置 - manage_user_access: 管理访问 - manage_user_access_description: 允许用户禁用其它用户的双因素身份验证,更改他们的邮箱地址,以及重置他们的密码。 + manage_taxonomies: 管理热门与话题 + manage_taxonomies_description: 允许用户审核热门内容并更新话题设置 + manage_user_access: 管理用户身份验证信息 + manage_user_access_description: 允许用户允许用户为其他用户关闭双因素身份验证、修改邮箱并重置密码。 manage_users: 管理用户 manage_users_description: 允许用户查看其他用户的信息并执行管理操作 manage_webhooks: 管理 Webhooks manage_webhooks_description: 允许用户为管理事件配置 Webhook view_audit_log: 查看审核日志 - view_audit_log_description: 允许用户查看此服务器上的管理操作记录 - view_dashboard: 查看仪表板 - view_dashboard_description: 允许用户访问仪表盘和各种指标 + view_audit_log_description: 允许用户查看此站点上的管理操作记录 + view_dashboard: 查看信息面板 + view_dashboard_description: 允许用户访问信息面板和各种指标 view_devops: 开发运维 - view_devops_description: 允许用户访问 Sidekiq 和 pgHero 仪表板 + view_devops_description: 允许用户访问 Sidekiq 和 pgHero 控制面板 title: 角色 rules: add_new: 添加规则 @@ -734,7 +735,7 @@ zh-CN: settings: about: manage_rules: 管理服务器规则 - preamble: 提供此服务器如何运营、资金状况等的深入信息。 + preamble: 提供此服务器如何运营、审核及资金状况等详细信息。 rules_hint: 有一个专门区域用于显示用户需要遵守的规则。 title: 关于本站 appearance: @@ -745,7 +746,7 @@ zh-CN: title: 招牌 captcha_enabled: desc_html: 这依赖于来自hCaptcha的外部脚本,可能会带来安全和隐私问题。此外,这可能使注册过程对某些人(尤其是残疾人)的注册简易程度大幅下降。出于这些原因,请考虑采取其他措施,如基于批准或邀请的注册方式。 - title: 要求新用户输入验证码以确认他们的账户 + title: 要求新用户输入验证码以确认他们的账号 content_retention: danger_zone: 危险操作区 preamble: 控制用户生成的内容在 Mastodon 中如何存储。 @@ -757,7 +758,7 @@ zh-CN: follow_recommendations: 关注推荐 preamble: 露出有趣的内容有助于新加入 Mastodon 的用户融入。可在这里控制多种发现功能如何在你的服务器上工作。 profile_directory: 个人资料目录 - public_timelines: 公共时间轴 + public_timelines: 公共时间线 publish_discovered_servers: 已公开实例的服务器 publish_statistics: 发布统计数据 title: 发现 @@ -765,7 +766,7 @@ zh-CN: domain_blocks: all: 对所有人 disabled: 不对任何人 - users: 对本地已登录用户 + users: 对已登录的本站用户 registrations: moderation_recommandation: 在向所有人开放注册之前,请确保你拥有一个人手足够且反应迅速的管理团队! preamble: 控制谁可以在你的服务器上创建账号。 @@ -777,10 +778,10 @@ zh-CN: open: 开放注册 warning_hint: 我们建议使用“注册必须经过批准”,除非你确信你的管理团队能够及时处理骚扰和恶意注册。 security: - authorized_fetch: 需要跨站认证 - authorized_fetch_hint: 要求外站请求通过验证能够使用户级别与服务器级别的封锁更为严格。然而,这将带来额外的性能负担、减少回复触达范围、并可能导致与一些联邦宇宙服务的兼容性问题。此外,这并不能阻止他人针对性地获取公开嘟文与账户。 + authorized_fetch: 与外站联合时要求身份验证 + authorized_fetch_hint: 要求外站请求通过验证能够使用户级别与服务器级别的封锁更为严格。然而,这将带来额外的性能负担、减少回复触达范围、并可能导致与一些联邦宇宙服务的兼容性问题。此外,这并不能阻止他人针对性地获取公开嘟文与账号。 authorized_fetch_overridden_hint: 由于此设置被环境变量覆盖,目前无法更改。 - federation_authentication: 强制跨站认证 + federation_authentication: 联合时强制要求身份验证 title: 服务器设置 site_uploads: delete: 删除已上传的文件 @@ -800,15 +801,15 @@ zh-CN: statuses: account: 作者 application: 应用 - back_to_account: 返回帐户信息页 + back_to_account: 返回账号信息页 back_to_report: 返回举报页 batch: - remove_from_report: 从报告中移除 + remove_from_report: 从举报中移除 report: 举报 deleted: 已删除 favourites: 喜欢 history: 版本历史记录 - in_reply_to: 回复给 + in_reply_to: 回复 language: 语言 media: title: 媒体文件 @@ -818,7 +819,7 @@ zh-CN: original_status: 原始嘟文 reblogs: 转发 status_changed: 嘟文已编辑 - title: 帐户嘟文 + title: 账号嘟文 trending: 当前热门 visibility: 可见性 with_media: 含有媒体文件 @@ -844,10 +845,10 @@ zh-CN: elasticsearch_index_mismatch: message_html: Elasticsearch索引映射已过时。请运行tootctl search deploy --only=%{value}。 elasticsearch_preset: - action: 查看文档 + action: 阅读文档 message_html: 你的Elasticsearch集群有多个节点,但Mastodon未配置好使用它们。 elasticsearch_preset_single_node: - action: 查看文档 + action: 阅读文档 message_html: 你的Elasticsearch集群只有一个节点,ES_PRESET应该设置为single_node_cluster。 elasticsearch_reset_chewy: message_html: 你的Elasticsearch系统索引已过时,可能是由于设置更改导致的。请运行tootctl search deploy --reset-chewy命令来更新它。 @@ -894,8 +895,8 @@ zh-CN: reset: 重置 review: 审核状态 search: 搜索 - title: 话题标签 - updated_msg: 话题标签设置更新成功 + title: 话题 + updated_msg: 话题设置更新成功 title: 管理 trends: allow: 允许 @@ -925,7 +926,7 @@ zh-CN: pending_review: 待审核 preview_card_providers: allowed: 来自此发布者的链接可进入流行列表 - description_html: 这些域名所属的链接经常在此服务器上被分享。在对应域名获得批准前链接不会公开显示在热门中。批准和拒绝操作也会对子域名生效。 + description_html: 以下域名是用户在本站分享的链接的常见来源。在对应域名获得批准前链接不会公开显示在热门中。批准和拒绝操作也会对子域名生效。 rejected: 来自此发布者的链接不会进入热门列表 title: 发布者 rejected: 已拒绝 @@ -933,9 +934,9 @@ zh-CN: allow: 允许嘟文 allow_account: 允许发布者 confirm_allow: 你确定要允许选中的嘟文吗? - confirm_allow_account: 你确定要允许选中的账户吗? + confirm_allow_account: 你确定要允许选中的账号吗? confirm_disallow: 你确定要禁止选中的嘟文吗? - confirm_disallow_account: 你确定要禁止选中的账户吗? + confirm_disallow_account: 你确定要禁止选中的账号吗? description_html: 这些是当前此服务器可见的被大量分享和喜欢的嘟文。这些嘟文可以帮助新老用户找到更多可关注的账号。批准发布者且发布者允许将其账号推荐给其他用户前,不会公开显示任何嘟文。你也可以批准或拒绝个别嘟文。 disallow: 禁止嘟文 disallow_account: 禁止发布者 @@ -951,7 +952,7 @@ zh-CN: tag_languages_dimension: 语言排行 tag_servers_dimension: 服务器排行 tag_servers_measure: 不同服务器 - tag_uses_measure: 总使用 + tag_uses_measure: 总使用次数 description_html: 这些是当前此服务器可见嘟文中大量出现的标签。它可以帮助用户发现其他人正关注的话题。在获得批准前不会公开显示任何标签。 listable: 可被推荐 no_tag_selected: 因为没有选中任何标签,所以没有更改 @@ -966,22 +967,22 @@ zh-CN: usage_comparison: 今日被使用 %{today} 次,前一日为 %{yesterday} 次 used_by_over_week: other: 过去一周内被 %{count} 个人使用过 - title: 建议与热门 + title: 推荐与热门 trending: 当前热门 warning_presets: add_new: 添加新条目 delete: 删除 - edit_preset: 编辑预置警告 + edit_preset: 编辑预设警告 empty: 你尚未定义任何警告预设。 title: 预设警告 webhooks: - add_new: 新增对端 + add_new: 新增端点 delete: 删除 description_html: "Webhook 使 Mastodon 能够推送 关于所选事件的实时通知 到你自己的应用程序,进而由你的应用程序自动触发反应。" disable: 禁用 disabled: 已禁用 edit: 编辑对端 - empty: 你尚未配置任何 Webhook 对端。 + empty: 你尚未配置任何 Webhook 端点。 enable: 启用 enabled: 活跃 enabled_events: @@ -1011,17 +1012,17 @@ zh-CN: subject: "%{username} 对 %{instance} 的审核结果提出了申诉" new_critical_software_updates: body: 新的紧急更新版本Mastodon已经发布,你可能希望尽快更新! - subject: 适用于 %{instance} 的Mastodon紧急更新已经可用。 + subject: "%{instance} 有 Mastodon 的紧急更新!" new_pending_account: - body: 新账户的详细信息如下。你可以批准或拒绝此申请。 - subject: 在 %{instance} 上有新账号 (%{username}) 需要审核 + body: 新账号的详细信息如下。你可以批准或拒绝此申请。 + subject: "%{instance} 上有新账号 (%{username}) 需要审核" new_report: body: "%{reporter} 举报了用户 %{target}" body_remote: 来自 %{domain} 的用户举报了用户 %{target} subject: 来自 %{instance} 的用户举报(#%{id}) new_software_updates: body: 新的 Mastodon 版本已发布,你可能想要更新! - subject: 适用于 %{instance} 的Mastodon版本更新已经可用! + subject: "%{instance} 有 Mastodon版本更新!" new_trends: body: 以下项目需要审核才能公开显示: new_trending_links: @@ -1033,15 +1034,15 @@ zh-CN: subject: "%{instance} 上有新热门等待审核" aliases: add_new: 创建别名 - created_msg: 成功创建了一个新别名。你现在可以从旧账户开始迁移了。 - deleted_msg: 成功移除别名。已经无法从该帐户移动到此帐户了。 - empty: 你没有设置别名 + created_msg: 成功创建了一个新别名。你现在可以从旧账号开始迁移了。 + deleted_msg: 成功移除别名。已经无法从该账号移动到此账号了。 + empty: 你没有设置别名。 hint_html: 如果你想从另一个账号迁移到这里,可以先在这里创建一个别名。要把旧账号的关注者迁移过来,这一步是必须的。设置别名的操作是无害且可撤销的账号迁移的操作会从旧账号发起。 remove: 取消关联别名 appearance: advanced_web_interface: 高级 Web 界面 - advanced_web_interface_hint: 如果你想使用整个屏幕宽度,高级 web 界面允许您配置多个不同的栏目,可以同时看到更多的信息:主页、通知、跨站时间轴、任意数量的列表和话题标签。 - animations_and_accessibility: 动画和访问选项 + advanced_web_interface_hint: 在高级网页界面支持自定义多栏显示,你可以利用整个屏幕的宽度,同时查看首页、通知、跨站时间线及任意数量的列表和话题。 + animations_and_accessibility: 动画与可访问性 confirmation_dialogs: 确认对话框 discovery: 发现 localization: @@ -1055,7 +1056,7 @@ zh-CN: settings: 更改邮件偏好: %{link} unsubscribe: 取消订阅 view: 点此链接查看详情: - view_profile: 查看个人资料页 + view_profile: 查看个人资料 view_status: 查看嘟文 applications: created: 应用创建成功 @@ -1072,20 +1073,20 @@ zh-CN: hint_html: 只剩最后一件事了!我们需要确认你是一个人类(这样我们才能阻止恶意访问!)。请输入下面的验证码,然后点击“继续”。 title: 安全检查 confirmations: - awaiting_review: 你的邮箱地址已确认!%{domain} 的工作人员正在审核你的注册信息。如果他们批准了你的账户,你将收到一封邮件通知! + awaiting_review: 邮箱确认成功!%{domain} 的工作人员正在审核你的注册信息。如果他们批准了你的账号,你将收到一封邮件通知! awaiting_review_title: 你的注册申请正在审核中 clicking_this_link: 点击此链接 login_link: 登录 - proceed_to_login_html: 现在你可以继续前往 %{login_link} 。 - redirect_to_app_html: 你应该已被重定向到 %{app_name} 应用程序。如果没有,请尝试 %{clicking_this_link} 或手动返回应用程序。 + proceed_to_login_html: 你现在可以继续 %{login_link} 。 + redirect_to_app_html: 你应该已经跳转到 %{app_name}。如果没有,请尝试 %{clicking_this_link} 或手动返回 App。 registration_complete: 你在 %{domain} 上的注册现已完成! welcome_title: 欢迎你,%{name}! - wrong_email_hint: 如果该邮箱地址不正确,你可以在账户设置中进行更改。 - delete_account: 删除帐户 - delete_account_html: 如果你想删除你的帐户,请点击这里继续。你需要确认你的操作。 + wrong_email_hint: 如果这个邮箱地址不正确,你可以在账号设置中更改。 + delete_account: 删除账号 + delete_account_html: 如果你想删除你的账号,请点击此处继续。你需要确认你的操作。 description: prefix_invited_by_user: "@%{name} 邀请你加入这个Mastodon服务器!" - prefix_sign_up: 现在就注册 Mastodon! + prefix_sign_up: 现在就注册 Mastodon 吧! suffix: 注册一个账号,你就可以关注他人、发布嘟文、并和其它任何 Mastodon 服务器上的用户交流,而且还有其它更多功能! didnt_get_confirmation: 没有收到确认链接? dont_have_your_security_key: 没有你的安全密钥? @@ -1096,14 +1097,14 @@ zh-CN: log_in_with: 通过外部服务登录 login: 登录 logout: 退出登录 - migrate_account: 迁移到另一个账户 + migrate_account: 迁移到另一个账号 migrate_account_html: 如果你希望引导他人关注另一个账号,请点击这里进行设置。 or_log_in_with: 或通过外部服务登录 privacy_policy_agreement_html: 我已阅读并同意 隐私政策 progress: confirm: 确认邮箱 - details: 您的详情 - review: 我们的复审 + details: 你的详细信息 + review: 我们的审核 rules: 接受规则 providers: cas: CAS @@ -1115,41 +1116,43 @@ zh-CN: rules: accept: 接受 back: 返回 - invited_by: 你可以加入%{domain},这是由于你收到了他人的邀请,邀请来自: - preamble: 这些由 %{domain} 监察员设置和执行。 - preamble_invited: 在你继续之前,请考虑 %{domain} 的管理员设定的基本规则。 + invited_by: 欢迎加入%{domain},你是通过以下用户的邀请加入的: + preamble: 以下规则由 %{domain} 的管理员设定并执行。 + preamble_invited: 在继续操作前,请先阅读并同意 %{domain} 管理员设置的基本规则。 title: 一些基本规则。 - title_invited: 您已经被邀请。 - security: 账户安全 + title_invited: 通过邀请加入 + security: 账号安全 set_new_password: 设置新密码 setup: - email_below_hint_html: 请检查你的垃圾邮件文件夹,或请求再发送一次。如果你的邮箱地址不正确,你可以更正它。 - email_settings_hint_html: 请点击我们发送给 %{email} 地址中的确认链接。我在这儿等着您。 + email_below_hint_html: 请检查你的垃圾邮件文件夹,或请求重新发送邮件。如果你填写的邮箱地址有误,请更正。 + email_settings_hint_html: 请点击我们发送给 %{email} 地址中的确认链接。我在这儿等着你。 link_not_received: 没有收到链接? new_confirmation_instructions_sent: 你将在几分钟内收到一封带有确认链接的新邮件! title: 请检查你的收件箱 sign_in: - preamble_html: 使用您在 %{domain} 的账户和密码登录。如果您的账户托管在其他的服务器上,您将无法在此登录。 + preamble_html: 使用你在 %{domain} 的账号和密码登录。如果你的账号是在其他站点上注册的,你将无法在此登录。 title: 登录到 %{domain} sign_up: - manual_review: 您在 %{domain} 上的注册需要经由管理人员手动审核。 为了帮助我们处理您的注册,请稍微介绍一下您为什么想在 %{domain} 上注册。 - preamble: 有了这个Mastodon服务器上的账户,您就可以关注Mastodon网络上的任何其他人,无论他们的账户在哪里。 + manual_review: 你在 %{domain} 上的注册需要经由管理人员手动审核。 为了帮助我们处理你的注册,请简要说明你为什么想在 %{domain} 上注册。 + preamble: 有了这个Mastodon服务器上的账号,你就可以关注Mastodon网络上的任何其他人,无论他们的账号在哪里。 title: 让我们在 %{domain} 上开始。 status: - account_status: 账户状态 + account_status: 账号状态 confirming: 等待完成邮箱地址确认 functional: 你的账号可以正常使用了。 pending: 站务人员正在审核你的申请。这需要花点时间。在申请被批准后,你将收到一封邮件。 - redirecting_to: 你的账户无效,因为它已被设置为跳转到 %{acct} - self_destruct: 由于 %{domain} 即将关闭,你只能获得对你本人账号的有限访问权限。 - view_strikes: 查看针对你账号的记录 + redirecting_to: 你的账号无效,因为它已被设置为跳转到 %{acct} + self_destruct: "%{domain} 即将关闭,你只能获得对你自己的账号的有限访问权限。" + view_strikes: 查看针对你账号的处罚记录 too_fast: 表单提交过快,请重试。 use_security_key: 使用安全密钥 author_attribution: example_title: 示例文本 - hint_html: 控制在 Mastodon 上分享的链接如何显示你的署名。 + hint_html: 你是否在 Mastodon 之外撰写新闻或博客文章?控制它们被分享到 Mastodon 时的署名方式。 + instructions: 请确保将这段代码放在你文章的 HTML 中: more_from_html: 来自 %{name} 的更多内容 s_blog: "%{name} 的博客" + then_instructions: 然后,在下面的文本框中添加你用于发布文章的域名。 title: 作者归属 challenge: confirm: 继续 @@ -1181,8 +1184,8 @@ zh-CN: challenge_not_passed: 你输入的信息不正确 confirm_password: 输入你当前的密码来验证身份 confirm_username: 输入你的用户名以继续 - proceed: 删除账户 - success_msg: 你的账户已成功删除 + proceed: 删除账号 + success_msg: 你的账号已成功删除 warning: before: 在删除前,请仔细阅读下列说明: caches: 已被其他服务器缓存的内容可能还会保留 @@ -1190,7 +1193,7 @@ zh-CN: email_change_html: 你可以 更改邮箱地址,而无需删除账号 email_contact_html: 如果它还未送达,你可以发邮件给 %{email} 寻求帮助。 email_reconfirmation_html: 如果你没有收到确认邮件,请点击 重新发送 。 - irreversible: 你将无法恢复或重新激活你的账户 + irreversible: 你将无法恢复或重新激活你的账号 more_details_html: 更多细节,请查看 隐私政策 。 username_available: 你的用户名现在又可以使用了 username_unavailable: 你的用户名仍将无法使用 @@ -1200,14 +1203,14 @@ zh-CN: appeal: 申诉 appeal_approved: 此次处罚已申诉成功并不再生效 appeal_rejected: 此次申诉已被驳回 - appeal_submitted_at: 已提出申诉 + appeal_submitted_at: 已提交申诉 appealed_msg: 你的申诉已经提交。如果申诉通过,你将收到通知。 appeals: submit: 提交申诉 approve_appeal: 批准申诉 associated_report: 相关举报 created_at: 日期 - description_html: 这些是针对您的账户采取的行动和警告,已经由 %{instance} 的工作人员发送给您。 + description_html: 以下是针对你的账号采取的行动和警告,已经由 %{instance} 的工作人员发送给你。 recipient: 发送至 reject_appeal: 驳回申诉 status: '嘟文 #%{id}' @@ -1222,26 +1225,26 @@ zh-CN: silence: 账号限制 suspend: 账号封禁 your_appeal_approved: 你的申诉已被批准 - your_appeal_pending: 你已提交申诉 + your_appeal_pending: 你已经提交了一次申诉 your_appeal_rejected: 你的申诉已被驳回 edit_profile: basic_information: 基本信息 - hint_html: "自定义公开资料和嘟文旁边显示的内容。当您填写完整的个人资料并设置了头像时,其他人更有可能关注您并与您互动。" + hint_html: "自定义公开资料和嘟文旁边显示的内容。当你填写完整的个人资料并设置了头像时,其他人更有可能关注你并与你互动。" other: 其他 errors: '400': 你提交的请求无效或格式不正确。 - '403': 你没有访问这个页面的权限。 - '404': 无法找到你所要访问的页面。 - '406': 页面无法处理请求。 - '410': 你所要访问的页面此处已不存在。 + '403': 你没有访问此页面的权限。 + '404': 无法找到你访问的页面。 + '406': 无法以要求的格式显示此页面。 + '410': 你要查看的页面已不存在。 '422': - content: 无法确认登录信息。你是不是屏蔽了 Cookie? - title: 无法确认登录信息 - '429': 请求被限制 + content: 安全验证未通过。请检查是否禁用了 Cookie。 + title: 安全验证未通过 + '429': 请求过于频繁 '500': - content: 抱歉,我们的后台出错了。 - title: 这个页面有问题 - '503': 服务暂时不可用,无法请求该页面。 + content: 抱歉,服务器出现了一些故障。 + title: 页面无法正确加载 + '503': 服务器出现临时故障,无法加载页面。 noscript_html: 使用 Mastodon 网页版应用需要启用 JavaScript。你也可以选择适用于你的平台的 Mastodon 应用。 existing_username_validator: not_found: 在本站找不到此用户 @@ -1250,67 +1253,67 @@ zh-CN: archive_takeout: date: 日期 download: 下载你的存档 - hint_html: 你可以请求一份账户数据存档,其中包含你的嘟文和已上传的媒体文件。导出的数据为 ActivityPub 格式,因而可以被兼容的软件读取。每次允许请求存档的间隔至少为 7 天。 + hint_html: 你可以请求一份账号数据存档,其中包含你的嘟文和已上传的媒体文件。导出的数据为 ActivityPub 格式,因而可以被兼容的软件读取。每次允许请求存档的间隔至少为 7 天。 in_progress: 正在准备你的存档…… request: 请求你的存档 size: 大小 blocks: 屏蔽的用户 bookmarks: 书签 csv: CSV - domain_blocks: 域名屏蔽 + domain_blocks: 站点屏蔽列表 lists: 列表 mutes: 已被你隐藏的 storage: 媒体文件存储 featured_tags: add_new: 添加新条目 errors: - limit: 您所推荐的话题标签数已达上限 - hint_html: "什么是精选话题标签? 它们被显示在你的公开个人资料中的突出位置,人们可以在这些标签下浏览你的公共嘟文。 它们是跟踪创作或长期项目的进度的重要工具。" + limit: 你所推荐的话题数已达上限 + hint_html: "什么是精选话题? 它们被显示在你的公开个人资料中的突出位置,人们可以在这些标签下浏览你的公共嘟文。 它们是跟踪创作或长期项目的进度的重要工具。" filters: contexts: account: 个人资料 - home: 主页时间轴 + home: 主页与列表 notifications: 通知 - public: 公共时间轴 + public: 公共时间线 thread: 对话 edit: add_keyword: 添加关键词 keywords: 关键词 statuses: 个别嘟文 - statuses_hint_html: 无论是否匹配下列关键词,此过滤器适用于选用个别嘟文。从过滤器中审核嘟文或移除嘟文。 - title: 编辑过滤器 + statuses_hint_html: 无论是否匹配下列关键词,此过滤规则均适用于选中的个别嘟文。在过滤规则页面检查或移除这些嘟文 + title: 编辑过滤规则 errors: - deprecated_api_multiple_keywords: 这些参数不能从此应用程序更改,因为它们应用于一个以上的过滤关键字。 使用较新的应用程序或网页界面。 - invalid_context: 提供的过滤器环境没有或无效 + deprecated_api_multiple_keywords: 不能在此应用中更改这些参数,因为它们应用于不止一个过滤关键词。请使用较新的应用程序或网页界面。 + invalid_context: 过滤规则生效场景为空或无效 index: - contexts: 在 %{contexts} 中的过滤器 + contexts: 过滤 %{contexts} delete: 删除 - empty: 你没有过滤器。 - expires_in: 在 %{distance} 后过期 - expires_on: "%{date} 后到期" + empty: 你没有过滤规则。 + expires_in: "%{distance} 后到期" + expires_on: 在 %{date} 到期 keywords: - other: "%{count} 关键词" + other: "%{count} 个关键词" statuses: other: "%{count} 条嘟文" statuses_long: - other: "%{count} 条个别嘟文已隐藏" - title: 过滤器 + other: 已隐藏 %{count} 条个别嘟文 + title: 过滤规则 new: - save: 保存新过滤器 - title: 添加新的过滤器 + save: 保存过滤规则 + title: 新建过滤规则 statuses: - back_to_filter: 返回过滤器 + back_to_filter: 返回过滤规则 batch: - remove: 从过滤器中移除 + remove: 从过滤规则中移除 index: - hint: 无论其他条件如何,此过滤器适用于选用个别嘟文。你可以从网页界面中向此过滤器加入更多嘟文。 + hint: 此过滤规则适用于选中的个别嘟文,不受其它条件限制。你可以通过网页界面向此过滤规则添加更多嘟文。 title: 过滤的嘟文 generic: all: 全部 all_items_on_page_selected_html: other: 此页面上的所有 %{count} 项目已被选中。 all_matching_items_selected_html: - other: 所有 %{count} 匹配您搜索的项目都已被选中。 + other: 所有 %{count} 匹配你搜索的项目都已被选中。 cancel: 取消 changes_saved_msg: 更改保存成功! confirm: 确认 @@ -1321,7 +1324,7 @@ zh-CN: order_by: 排序方式 save_changes: 保存更改 select_all_matching_items: - other: 选择匹配您搜索的所有 %{count} 个项目。 + other: 选择匹配你搜索的所有 %{count} 个项目。 today: 今天 validation_errors: other: 出错啦!检查一下下面 %{count} 处出错的地方吧 @@ -1341,19 +1344,19 @@ zh-CN: overwrite: 覆盖 overwrite_long: 将当前记录替换为新记录 overwrite_preambles: - blocking_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个账户替换你的屏蔽列表。 - bookmarks_html: 你即将使用来自 %{filename} %{total_items} 篇嘟文替换你的书签。 - domain_blocking_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个域名替换你的域名屏蔽列表。 - following_html: 你即将从 %{filename} 关注 %{total_items} 个账户,并停止关注其他任何人。 - lists_html: 你即将用 %{filename} 的内容替换你的列表。新列表中将添加 %{total_items} 个账户。 - muting_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个账户替换你已隐藏的账户列表。 + blocking_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个账号替换你的屏蔽列表。 + bookmarks_html: 你即将使用来自 %{filename} %{total_items} 篇嘟文替换你的收藏夹。 + domain_blocking_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个站点域名替换你的站点屏蔽列表。 + following_html: 你即将从 %{filename} 关注 %{total_items} 个账号,并停止关注其他任何人。 + lists_html: 你即将用 %{filename} 的内容替换你的列表。新列表中将添加 %{total_items} 个账号。 + muting_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个账号替换你已隐藏的账号列表。 preambles: - blocking_html: 你即将从 %{filename} 封锁多达 %{total_items} 个账户。 + blocking_html: 你即将从 %{filename} 封锁多达 %{total_items} 个账号。 bookmarks_html: 你即将把来自 %{filename} %{total_items} 篇嘟文添加到你的书签中。 - domain_blocking_html: 你即将从 %{filename} 屏蔽 %{total_items} 个域名。 - following_html: 你即将从 %{filename} 关注最多 %{total_items} 个账户。 - lists_html: 你即将从 %{filename} 中添加最多 %{total_items} 个账户到你的列表中。如果没有可用列表,将创建新的列表。 - muting_html: 你即将从 %{filename} 隐藏 %{total_items} 个账户。 + domain_blocking_html: 你即将屏蔽 %{filename} 列出的 %{total_items} 个站点域名。 + following_html: 你即将从 %{filename} 关注最多 %{total_items} 个账号。 + lists_html: 你即将从 %{filename} 中添加最多 %{total_items} 个账号到你的列表中。如果没有可用列表,将创建新的列表。 + muting_html: 你即将从 %{filename} 隐藏 %{total_items} 个账号。 preface: 你可以在此导入你在其他实例导出的数据,比如你所关注或屏蔽的用户列表。 recent_imports: 最近导入 states: @@ -1365,20 +1368,20 @@ zh-CN: success: 数据上传成功,正在处理中 time_started: 开始于 titles: - blocking: 正在导入被屏蔽的账户 + blocking: 正在导入被屏蔽的账号 bookmarks: 正在导入书签 - domain_blocking: 正在导入被屏蔽的域名 - following: 正在导入关注的账户 + domain_blocking: 正在导入站点屏蔽列表 + following: 正在导入关注的账号 lists: 导入列表 - muting: 正在导入隐藏的账户 + muting: 正在导入隐藏的账号 type: 导入类型 type_groups: constructive: 关注和书签 - destructive: 屏蔽和隐藏 + destructive: 屏蔽与隐藏 types: blocking: 屏蔽列表 bookmarks: 书签 - domain_blocking: 域名屏蔽列表 + domain_blocking: 站点屏蔽列表 following: 关注列表 lists: 列表 muting: 隐藏列表 @@ -1407,14 +1410,14 @@ zh-CN: title: 邀请用户 lists: errors: - limit: 您已达到列表数量的上限 + limit: 你已达到列表数量的上限 login_activities: authentication_methods: otp: 双因素认证应用 password: 密码 sign_in_token: 邮件安全码 webauthn: 安全密钥 - description_html: 如有您无法识别的活动,请考虑更改密码并启用双因素认证。 + description_html: 如有你无法识别的活动,请考虑更改密码并启用双因素认证。 empty: 没有可用的认证记录 failed_sign_in_html: 失败的 %{method} 登录尝试,来自 %{ip} (%{browser}) successful_sign_in_html: 通过 %{method} 成功登录,来自 %{ip} (%{browser}) @@ -1427,9 +1430,9 @@ zh-CN: emails: notification_emails: favourite: 嘟文被喜欢邮件通知 - follow: 账户被关注邮件通知 + follow: 账号被关注邮件通知 follow_request: 关注请求邮件通知 - mention: 账户被提及邮件通知 + mention: 账号被提及邮件通知 reblog: 嘟文被转嘟邮件通知 resubscribe_html: 如果你不小心取消了订阅,可以在你的邮件通知设置中重新订阅。 success_html: 你将不会在你的邮箱 %{email} 中收到 %{domain} 上的 Mastodon的 %{type} @@ -1441,14 +1444,14 @@ zh-CN: not_ready: 不能附加还在处理中的文件。请稍后再试! too_many: 最多只能添加 4 张图片 migrations: - acct: 新账户的 用户名@域名 + acct: 新账号的 用户名@域名 cancel: 取消跳转 cancel_explanation: 取消跳转将会重新激活你当前的账号,但是已经迁移到新账号的关注者不会回来。 cancelled_msg: 成功取消跳转 errors: already_moved: 和你已经迁移过的账号相同 missing_also_known_as: 没有引用此账号 - move_to_self: 不能是当前账户 + move_to_self: 不能是当前账号 not_found: 找不到 on_cooldown: 你正处于冷却状态 followers_count: 迁移时的关注者 @@ -1460,19 +1463,19 @@ zh-CN: past_migrations: 迁移记录 proceed_with_move: 移动关注者 redirected_msg: 你的账号现在会跳转至 %{acct} - redirecting_to: 你的账户正在跳转到 %{acct}。 + redirecting_to: 你的账号正在跳转到 %{acct}。 set_redirect: 设置跳转 warning: backreference_required: 新账号必须先引用当前账号 before: 在继续前,请仔细阅读下列说明: cooldown: 移动后会有一个冷却期,在此期间你将无法再次移动 - disabled_account: 此后,你的当前账户将无法使用。但是,你仍然有权导出数据或者重新激活。 - followers: 这步操作将把所有关注者从当前账户移动到新账户 + disabled_account: 此后,你的当前账号将无法使用。但是,你仍然有权导出数据或者重新激活。 + followers: 这步操作将把所有关注者从当前账号移动到新账号 only_redirect_html: 或者,你可以只在你的账号资料上设置一个跳转。 other_data: 不会自动移动其它数据 redirect: 在收到一个跳转通知后,你当前的账号资料将会更新,并被排除在搜索范围外 moderation: - title: 运营 + title: 审核 move_handler: carry_blocks_over_text: 这个用户迁移自你屏蔽过的 %{acct} carry_mutes_over_text: 这个用户由你隐藏过的 %{acct} 迁移而来 @@ -1500,7 +1503,7 @@ zh-CN: title: 新的关注请求 mention: action: 回复 - body: "%{name} 在嘟文中提到了你:" + body: "%{name} 提到了你:" subject: "%{name} 提到了你" title: 新的提及 poll: @@ -1556,13 +1559,13 @@ zh-CN: preferences: other: 其他 posting_defaults: 发布默认值 - public_timelines: 公共时间轴 + public_timelines: 公共时间线 privacy: hint_html: "自定义你希望如何找到你的个人资料和嘟文。启用Mastodon中的各种功能可以帮助你扩大受众范围。请花点时间查看这些设置,确保它们适合你的使用情况。" privacy: 隐私 privacy_hint_html: 控制你愿意向他人透露多少信息。通过浏览他人的关注列表和查看他们发嘟所用的应用,人们可以发现有趣的用户和酷炫的应用,但你可能更喜欢将其隐藏起来。 reach: 范围 - reach_hint_html: 控制您是否希望被新人发现和关注。您是否希望您的嘟文出现在“探索”页面上?您是否希望其他人在关注推荐中看到您?您是想自动接受所有新粉丝,还是对每个粉丝都进行仔细的筛选? + reach_hint_html: 控制你是否希望被新人发现和关注。你是否希望你的嘟文出现在“探索”页面上?你是否希望其他人在关注推荐中看到你?你是想自动接受所有新粉丝,还是对每个粉丝都进行仔细的筛选? search: 搜索 search_hint_html: 控制你希望被找到的方式。你想让人们通过你公开发布的内容来找到你吗?当在网络上搜索时,你是否希望Mastodon之外的人能够找到你的个人资料?请注意,我们无法保证完全排除所有搜索引擎对公开信息的索引。 title: 隐私与可达性 @@ -1570,18 +1573,18 @@ zh-CN: title: 隐私政策 reactions: errors: - limit_reached: 互动种类的限制 - unrecognized_emoji: 不是一个可识别的表情 + limit_reached: 回应种类个数超过限制 + unrecognized_emoji: 不是一个可被识别的表情 redirects: prompt: 如果你信任此链接,请单击以继续跳转。 title: 你正在离开 %{instance} 。 relationships: activity: 账号活动 - confirm_follow_selected_followers: 您确定想要关注所选的关注者吗? - confirm_remove_selected_followers: 您确定想要取关所选的关注者吗? - confirm_remove_selected_follows: 您确定要删除选定的关注着吗? + confirm_follow_selected_followers: 你确定想要关注所选的关注者吗? + confirm_remove_selected_followers: 你确定想要取关所选的关注者吗? + confirm_remove_selected_follows: 您确定要删除选定的关注者吗? dormant: 休眠 - follow_failure: 无法关注选中的部分账户。 + follow_failure: 无法关注选中的部分账号。 follow_selected_followers: 关注选中的关注者 followers: 关注者 following: 正在关注 @@ -1592,12 +1595,12 @@ zh-CN: mutual: 互相关注 primary: 主要 relationship: 关系 - remove_selected_domains: 从选定的域名中删除所有关注者 + remove_selected_domains: 删除在选定站点中的所有关注者 remove_selected_followers: 移除选中的关注者 remove_selected_follows: 取消关注所选用户 - status: 账户状态 + status: 账号状态 remote_follow: - missing_resource: 无法确定你的账户的跳转 URL + missing_resource: 无法确定你的账号的跳转 URL reports: errors: invalid_rules: 没有引用有效的规则 @@ -1626,12 +1629,12 @@ zh-CN: generic: 未知浏览器 huawei_browser: 华为浏览器 ie: IE 浏览器 - micro_messenger: 微信 + micro_messenger: MicroMessenger nokia: Nokia S40 Ovi 浏览器 opera: 欧朋浏览器 otter: Otter phantom_js: PhantomJS - qq: QQ浏览器 + qq: QQ 浏览器 safari: Safari uc_browser: UC 浏览器 unknown_browser: 未知浏览器 @@ -1639,7 +1642,7 @@ zh-CN: current_session: 当前会话 date: 日期 description: "%{platform} 上的 %{browser}" - explanation: 你的 Mastodon 账户目前已在这些浏览器上登录。 + explanation: 你的 Mastodon 账号目前已在这些浏览器上登录。 ip: IP 地址 platforms: adobe_air: Adobe Air @@ -1650,7 +1653,7 @@ zh-CN: ios: iOS kai_os: KaiOS linux: Linux - mac: Mac + mac: macOS unknown_platform: 未知平台 windows: Windows windows_mobile: Windows Mobile @@ -1658,40 +1661,40 @@ zh-CN: revoke: 注销 revoke_success: 会话注销成功 title: 会话 - view_authentication_history: 查看账户的认证历史 + view_authentication_history: 查看账号的认证历史 settings: account: 账号 - account_settings: 账户设置 + account_settings: 账号设置 aliases: 账号别名 appearance: 外观 authorized_apps: 已授权的应用 back: 返回 Mastodon - delete: 删除账户 + delete: 删除账号 development: 开发 edit_profile: 更改个人资料 export: 导出 - featured_tags: 精选的话题标签 + featured_tags: 精选话题 import: 导入 - import_and_export: 导入和导出 - migrate: 账户迁移 + import_and_export: 导入与导出 + migrate: 账号迁移 notifications: 邮件通知 - preferences: 首选项 + preferences: 偏好设置 profile: 个人资料 relationships: 关注管理 severed_relationships: 已断开的关系 statuses_cleanup: 自动删除嘟文 - strikes: 操作记录 + strikes: 管理处罚记录 two_factor_authentication: 双因素认证 webauthn_authentication: 安全密钥 severed_relationships: download: 下载 (%{count}) event_type: - account_suspension: 账户被封禁 (%{target_name}) - domain_block: 服务器被封禁 (%{target_name}) + account_suspension: 封禁账号 (%{target_name}) + domain_block: 封禁服务器 (%{target_name}) user_domain_block: 你屏蔽了 %{target_name} lost_followers: 失去的关注者 lost_follows: 失去的关注 - preamble: 当你屏蔽一个域名或你的管理员决定封禁一个外站服务器时,你可能会失去关注和粉丝。在这种情况下,你可以下载被切断的关系的列表,进行检查以便导入另一个服务器。 + preamble: 如果你屏蔽了某个站点,或者管理员封禁了某个站点,你可能会丢失一部分关注和关注者。你可以下载联系被中断的账号列表,进行检查并导入到其他站点。 purged: 关于此服务器的信息已被你所在服务器的管理员清除。 type: 事件 statuses: @@ -1707,14 +1710,14 @@ zh-CN: content_warning: 内容警告:%{warning} default_language: 与界面显示语言相同 disallowed_hashtags: - other: 包含了这些禁止的话题标签:%{tags} + other: 包含以下被禁止的话题:%{tags} edited_at_html: 编辑于 %{date} errors: in_reply_not_found: 你回复的嘟文似乎不存在 over_character_limit: 超过了 %{max} 字的限制 pin_errors: direct: 仅对被提及的用户可见的帖子不能被置顶 - limit: 你所固定的嘟文数量已达到上限 + limit: 你置顶的嘟文数量已达上限 ownership: 不能置顶别人的嘟文 reblog: 不能置顶转嘟 title: "%{name}:“%{quote}”" @@ -1723,29 +1726,29 @@ zh-CN: private: 仅关注者 private_long: 只有关注你的用户能看到 public: 公开 - public_long: 所有人可见,并会出现在公共时间轴上 - unlisted: 不公开 - unlisted_long: 所有人可见,但不会出现在公共时间轴上 + public_long: 主页与列表 + unlisted: 悄悄公开 + unlisted_long: 对所有人可见,但不出现在公共时间线上 statuses_cleanup: enabled: 自动删除旧嘟文 - enabled_hint: 达到指定过期时间后自动删除您的嘟文,除非满足下列条件之一 + enabled_hint: 自动删除你发布的超过指定期限的嘟文,除非满足下列条件之一 exceptions: 例外 - explanation: 删除嘟文是一个消耗系统资源的耗时操作,所以这个操作会在服务器空闲时完成。因此,您的嘟文可能会在达到过期阈值之后一段时间才会被删除。 - ignore_favs: 取消喜欢 - ignore_reblogs: 忽略转嘟 + explanation: 删除嘟文会占用大量服务器资源,所以这个操作将在服务器空闲时完成。因此,你的嘟文可能会在达到删除期限之后一段时间才会被删除。 + ignore_favs: 喜欢数阈值 + ignore_reblogs: 转嘟数阈值 interaction_exceptions: 基于互动的例外 - interaction_exceptions_explanation: 请注意,如果嘟文超出转嘟和喜欢的阈值之后,又降到阈值以下,则可能不会被删除。 + interaction_exceptions_explanation: 请注意,如果嘟文的转嘟数和喜欢数超过保留阈值之后,又降到阈值以下,则可能不会被删除。 keep_direct: 保留私信 - keep_direct_hint: 不会删除你的任何私信 + keep_direct_hint: 不删除你的任何私信 keep_media: 保留带媒体附件的嘟文 - keep_media_hint: 不会删除任何包含媒体附件的嘟文 + keep_media_hint: 不删除任何包含媒体附件的嘟文 keep_pinned: 保留置顶嘟文 keep_pinned_hint: 不会删除你的任何置顶嘟文 keep_polls: 保留投票 - keep_polls_hint: 不会删除你的任何投票 - keep_self_bookmark: 保存被你加入书签的嘟文 - keep_self_bookmark_hint: 如果你已将自己的嘟文添加书签,就不会删除这些嘟文 - keep_self_fav: 保留你点赞的嘟文 + keep_polls_hint: 不删除你的任何投票 + keep_self_bookmark: 保留你加入书签的嘟文 + keep_self_bookmark_hint: 不删除书签中你自己的嘟文 + keep_self_fav: 保留你喜欢的嘟文 keep_self_fav_hint: 如果你喜欢了自己的嘟文,则不会删除这些嘟文 min_age: '1209600': 2周 @@ -1757,8 +1760,8 @@ zh-CN: '63113904': 两年 '7889238': 3个月 min_age_label: 过期阈值 - min_favs: 保留如下嘟文:点赞数超过 - min_favs_hint: 点赞数超过该阈值的的嘟文都不会被删除。如果留空,则无论嘟文获得多少点赞,都将被删除。 + min_favs: 保留如下嘟文:喜欢数超过 + min_favs_hint: 获得喜欢数超过该阈值的的嘟文都不会被删除。如果留空,则无论嘟文获得多少点赞,都将被删除。 min_reblogs: 保留如下嘟文:转嘟数超过 min_reblogs_hint: 转嘟数超过该阈值的的嘟文不会被删除。如果留空,则无论嘟文获得多少转嘟,都将被删除。 stream_entries: @@ -1791,19 +1794,19 @@ zh-CN: enabled: 已启用双因素认证 enabled_success: 已成功启用双因素认证 generate_recovery_codes: 生成恢复代码 - lost_recovery_codes: 如果你的手机不慎丢失,你可以使用恢复代码来重新获得对账户的访问权。如果你遗失了恢复代码,可以在此处重新生成。之前使用的恢复代码将会失效。 + lost_recovery_codes: 如果你的手机不慎丢失,你可以使用恢复代码来重新获得对账号的访问权。如果你遗失了恢复代码,可以在此处重新生成。之前使用的恢复代码将会失效。 methods: 双因素认证方式 otp: 身份验证应用 recovery_codes: 备份恢复代码 recovery_codes_regenerated: 恢复代码重新生成成功 - recovery_instructions_html: 如果你的手机无法使用,你可以使用下列任意一个恢复代码来重新获得对账户的访问权。请妥善保管好你的恢复代码(例如,你可以将它们打印出来,然后和其他重要的文件放在一起)。 + recovery_instructions_html: 如果你的手机无法使用,你可以使用下列任意一个恢复代码来重新获得对账号的访问权。请妥善保管好你的恢复代码(例如,你可以将它们打印出来,然后和其他重要的文件放在一起)。 webauthn: 安全密钥 user_mailer: appeal_approved: - action: 账户设置 + action: 账号设置 explanation: 你于 %{appeal_date} 对 %{strike_date} 在你账号上做出的处罚提出的申诉已被批准,你的账号已回到正常状态。 subject: 你于 %{date} 提出的申诉已被批准 - subtitle: 你的账户已再次回到良好状态。 + subtitle: 你的账号已再次回到良好状态。 title: 申诉已批准 appeal_rejected: explanation: 你于 %{appeal_date} 对 %{strike_date} 在你账号上做出的处罚提出的申诉已被驳回。 @@ -1811,23 +1814,23 @@ zh-CN: subtitle: 你的申诉已被驳回。 title: 申诉已驳回 backup_ready: - explanation: 你之前请求为你的 Mastodon 账户创建一份完整的备份。 + explanation: 你之前请求为你的 Mastodon 账号创建一份完整的备份。 extra: 现在它可以下载了! subject: 你的存档已经准备完毕 title: 存档导出 failed_2fa: details: 以下是该次登录尝试的详情: - explanation: 有人试图登录到你的账户,但提供了无效的辅助认证因子。 + explanation: 有人试图登录到你的账号,但提供了无效的辅助认证因子。 further_actions_html: 如果这不是你所为,你的密码可能已经泄露,建议你立即 %{action} 。 subject: 辅助认证失败 title: 辅助认证失败 suspicious_sign_in: change_password: 更改密码 details: 以下是该次登录的详细信息: - explanation: 我们检测到有新 IP 地址登录了您的账号。 - further_actions_html: 如果不是您本人操作,我们建议您立即 %{action} 并启用双因素认证,以确保账号安全。 - subject: 已有新 IP 地址访问了您的账号 - title: 新登录 + explanation: 我们检测到有新 IP 地址登录了你的账号。 + further_actions_html: 如果不是你本人操作,我们建议你立即 %{action} 并启用双因素认证,以确保账号安全。 + subject: 已有新 IP 地址访问了你的账号 + title: 一次新登录 warning: appeal: 提交申诉 appeal_description: 如果你认为此结果有误,可以向 %{instance} 的工作人员提交申诉。 @@ -1835,78 +1838,78 @@ zh-CN: spam: 垃圾信息 violation: 内容违反了以下社区准则 explanation: - delete_statuses: 你的一些嘟文被发现违反了一条或多条社区准则,并已被 %{instance} 的监察员删除。 - disable: 你不能再使用你的账户,但你的个人资料和其他数据保持不变。你可以请求数据备份,更改账户设置或删除账户。 - mark_statuses_as_sensitive: 你的一些嘟文已经被 %{instance} 检察员标记为敏感内容。这意味着别人需要在嘟文中点击媒体,才能显示媒体预览。你可以在今后发布嘟文时自行将媒体标记为敏感内容。 + delete_statuses: 你的一些嘟文被发现违反了一条或多条社区准则,并已被 %{instance} 的管理员删除。 + disable: 你不能再使用你的账号,但你的个人资料和其他数据保持不变。你可以请求数据备份,更改账号设置或删除账号。 + mark_statuses_as_sensitive: 你的一些嘟文已经被 %{instance} 管理员标记为敏感内容。这意味着别人需要在嘟文中点击媒体,才能显示媒体预览。你可以在今后发布嘟文时自行将媒体标记为敏感内容。 sensitive: 即刻起,你上传的所有媒体文件都将被标记为敏感内容并隐藏,在点击警告后才能查看。 silence: 你可以继续使用你的账号,但只有已关注你的人才能在看到你在此服务器上的嘟文,并且你会被排除在各类公共列表之外。其他用户仍可以手动关注你。 - suspend: 你不能再使用你的账户,并且你的个人资料和其他数据都将无法访问。在大约30天内,你仍可以登录并请求数据备份,之后相关数据将被完全删除。我们会保留一些基础数据以避免封禁失效。 + suspend: 你不能再使用你的账号,并且你的个人资料和其他数据都将无法访问。在大约30天内,你仍可以登录并请求数据备份,之后相关数据将被完全删除。我们会保留一些基础数据以避免封禁失效。 reason: 理由: statuses: 被引用的嘟文: subject: delete_statuses: 你在 %{acct} 的嘟文已被删除 - disable: 你的账户 %{acct} 已被冻结 + disable: 你的账号 %{acct} 已被冻结 mark_statuses_as_sensitive: 你在 %{acct} 的嘟文已被标记为敏感内容 none: 对 %{acct} 的警告 sensitive: 你在 %{acct} 的嘟文今后将被标记为敏感内容 - silence: 你的账户 %{acct} 已被隐藏 - suspend: 你的账户 %{acct} 已被封禁 + silence: 你的账号 %{acct} 已被隐藏 + suspend: 你的账号 %{acct} 已被封禁 title: delete_statuses: 嘟文已删除 disable: 账号已冻结 mark_statuses_as_sensitive: 嘟文已被标记为敏感内容 none: 警示 - sensitive: 账户已被标记为敏感内容 - silence: 账户被隐藏 + sensitive: 账号已被标记为敏感内容 + silence: 账号被隐藏 suspend: 账号被封禁 welcome: apps_android_action: 从 Google Play 下载 apps_ios_action: 从 App Store 下载 apps_step: 下载我们的官方应用。 - apps_title: Mastodon应用 + apps_title: Mastodon 应用 checklist_subtitle: 让我们带你开启这片社交新天地: checklist_title: 欢迎清单 edit_profile_action: 个性化 edit_profile_step: 完善个人资料,提升你的互动体验。 edit_profile_title: 个性化你的个人资料 explanation: 下面是几个小贴士,希望它们能帮到你 - feature_action: 了解更多 - feature_audience: Mastodon为你提供了无需中间商即可管理受众的独特可能。Mastodon可被部署在你自己的基础设施上,允许你关注其它任何Mastodon在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。 - feature_audience_title: 放手去建立起你的受众 + feature_action: 详细了解 + feature_audience: Mastodon 为你提供了无需中间商即可管理受众的独特可能。Mastodon 可被部署在你自己的基础设施上,允许你关注其它任何 Mastodon 在线服务器的用户,或被任何其他在线 Mastodon 服务器的用户关注,并且不受你之外的任何人控制。 + feature_audience_title: 自由吸引你的受众 feature_control: 你最清楚你想在你自己的主页中看到什么动态。没有算法或广告浪费你的时间。你可以用一个账号关注任何 Mastodon 服务器上的任何人,并按时间顺序获得他们发布的嘟文,让你的互联网的角落更合自己的心意。 feature_control_title: 掌控自己的时间线 - feature_creativity: Mastodon支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。 - feature_creativity_title: 无与伦比的创造力 - feature_moderation: Mastodon将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。 + feature_creativity: Mastodon 支持音频、视频和图片、无障碍描述、投票、内容警告, 动画头像、自定义表情包、缩略图裁剪控制等功能,帮助你在网上尽情表达自己。无论你是要发布你的艺术作品、音乐还是播客,Mastodon 都能为你服务。 + feature_creativity_title: 尽情发挥创造力 + feature_moderation: Mastodon 将决策权交还给你。每个服务器都会创建自己的规则和条例,并在站点内施行,而不是像企业社交媒体那样居高临下,这使得它可以最灵活地响应不同人群的需求。加入一个你认同其规则的服务器,或托管你自己的服务器。 feature_moderation_title: 管理,本应如此 follow_action: 关注 - follow_step: 关注有趣的人,这就是Mastodon的意义所在。 - follow_title: 个性化你的首页动态 - follows_subtitle: 关注知名账户 + follow_step: 关注有趣的人,这就是 Mastodon 的意义所在。 + follow_title: 个性化你的主页动态 + follows_subtitle: 关注知名账号 follows_title: 推荐关注 follows_view_more: 查看更多可关注的人 hashtags_recent_count: other: 过去2天内有 %{people} 人 hashtags_subtitle: 探索过去2天以来的热门内容 - hashtags_title: 热门话题标签 - hashtags_view_more: 查看更多热门话题标签 + hashtags_title: 热门话题 + hashtags_view_more: 查看更多热门话题 post_action: 撰写 post_step: 向世界打个招呼吧。 post_title: 发布你的第一条嘟文 share_action: 分享 - share_step: 让你的朋友知道如何在Mastodon找到你。 - share_title: 分享你的Mastodon个人资料 + share_step: 让你的朋友知道如何在 Mastodon 找到你。 + share_title: 分享你的 Mastodon 个人资料 sign_in_action: 登录 subject: 欢迎来到 Mastodon title: "%{name},欢迎你的加入!" users: follow_limit_reached: 你不能关注超过 %{limit} 个人 - go_to_sso_account_settings: 转到您的身份提供商进行账户设置 + go_to_sso_account_settings: 转到您的身份提供商进行账号设置 invalid_otp_token: 输入的双因素认证代码无效 otp_lost_help_html: 如果你不慎丢失了所有的代码,请联系 %{email} 寻求帮助 rate_limited: 验证尝试次数过多,请稍后再试。 seamless_external_login: 你通过外部服务登录,因此密码和邮件设置不可用。 - signed_in_as: 当前登录的账户: + signed_in_as: 当前登录的账号: verification: extra_instructions_html: 提示:你网站上的链接可能是不可见的。重要的部分是 rel="me",它可以防止在具有用户生成内容的网站上冒充身份。你甚至可以在页面头部使用 link 标签而不是 a,但 HTML 必须能够在不执行 JavaScript 的情况下访问。 here_is_how: 具体方法如下: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 4079f68a50..14b727cf1d 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -19,6 +19,7 @@ zh-TW: posts: other: 嘟文 posts_tab_heading: 嘟文 + self_follow_error: 無法跟隨您自己的帳號 admin: account_actions: action: 執行動作 @@ -559,7 +560,7 @@ zh-TW: relationships: title: "%{acct} 的關係" relays: - add_new: 新增中繼站 + add_new: 新增中繼 delete: 刪除 description_html: "聯邦中繼站 是種中繼伺服器,會於訂閱並推送至此中繼站的伺服器之間交換大量的公開嘟文。中繼站也能協助小型或中型伺服器自聯邦宇宙中探索內容,而無須本地使用者手動跟隨遠端伺服器的其他使用者。" disable: 停用 @@ -1149,9 +1150,11 @@ zh-TW: use_security_key: 使用安全金鑰 author_attribution: example_title: 範例文字 - hint_html: 控制如何於 Mastodon 上分享連結時註明您的貢獻。 + hint_html: 您是否正於 Mastodon 之外撰寫新聞或部落格文章?控制當它們於 Mastodon 上分享時您如何獲得信譽。 + instructions: 確認您文章 HTML 內容中包含此份程式碼: more_from_html: 來自 %{name} 之更多內容 s_blog: "%{name} 的部落格" + then_instructions: 接著,將發表處網域加入以下欄位中。 title: 作者署名 challenge: confirm: 繼續 @@ -1875,7 +1878,7 @@ zh-TW: feature_action: 了解更多 feature_audience: Mastodon 為您打開了一扇獨特的門,使您不受平台干擾,自由地管理您的受眾。只需將 Mastodon 部署於您自己的基礎設施上,您便能與線上任何 Mastodon 伺服器互動,而且控制權只在您手中。 feature_audience_title: 自信地建立您的受眾 - feature_control: 您最清楚自己想於首頁動態看到什麼內容,別讓演算法與廣告浪費您寶貴的時間。自同一帳號跟隨任何 Mastodon 伺服器上的任何一個人,依時間順序接收他們的嘟文,建立屬於自己的網路小角落。 + feature_control: 您最清楚自己想於首頁時間軸看到什麼內容,別讓演算法與廣告浪費您寶貴的時間。自同一帳號跟隨任何 Mastodon 伺服器上的任何一個人,依時間順序接收他們的嘟文,建立屬於自己的網路小角落。 feature_control_title: 掌控自己的時間軸 feature_creativity: Mastodon 支援音訊、影片及圖片嘟文、無障礙說明文字、投票、內容警告、動畫大頭貼、自訂 emoji 表情符號、縮圖裁剪控制等等,協助您表達自我。無論是發佈藝術作品、音樂,或是 podcast,Mastodon 將隨時陪伴著您。 feature_creativity_title: 無與倫比的創意 diff --git a/config/navigation.rb b/config/navigation.rb index 87d6d7dbec..ebcbf10275 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -30,18 +30,18 @@ SimpleNavigation::Configuration.run do |navigation| n.item :filters, safe_join([material_symbol('filter_alt'), t('filters.index.title')]), filters_path, highlights_on: %r{/filters}, if: -> { current_user.functional? && !self_destruct } n.item :statuses_cleanup, safe_join([material_symbol('history'), t('settings.statuses_cleanup')]), statuses_cleanup_path, if: -> { current_user.functional_or_moved? && !self_destruct } - n.item :security, safe_join([material_symbol('lock'), t('settings.account')]), edit_user_registration_path do |s| - s.item :password, safe_join([material_symbol('lock'), t('settings.account_settings')]), edit_user_registration_path, highlights_on: %r{/auth/edit|/settings/delete|/settings/migration|/settings/aliases|/settings/login_activities|^/disputes} + n.item :security, safe_join([material_symbol('account_circle'), t('settings.account')]), edit_user_registration_path do |s| + s.item :password, safe_join([material_symbol('lock'), t('settings.account_settings')]), edit_user_registration_path, highlights_on: %r{^/auth|/settings/delete|/settings/migration|/settings/aliases|/settings/login_activities|^/disputes} s.item :two_factor_authentication, safe_join([material_symbol('safety_check'), t('settings.two_factor_authentication')]), settings_two_factor_authentication_methods_path, highlights_on: %r{/settings/two_factor_authentication|/settings/otp_authentication|/settings/security_keys} s.item :authorized_apps, safe_join([material_symbol('list_alt'), t('settings.authorized_apps')]), oauth_authorized_applications_path, if: -> { !self_destruct } end n.item :data, safe_join([material_symbol('cloud_sync'), t('settings.import_and_export')]), settings_export_path do |s| - s.item :import, safe_join([material_symbol('cloud_upload'), t('settings.import')]), settings_imports_path, if: -> { current_user.functional? && !self_destruct } + s.item :import, safe_join([material_symbol('cloud_upload'), t('settings.import')]), settings_imports_path, highlights_on: %r{/settings/imports}, if: -> { current_user.functional? && !self_destruct } s.item :export, safe_join([material_symbol('cloud_download'), t('settings.export')]), settings_export_path end - n.item :invites, safe_join([material_symbol('person_add'), t('invites.title')]), invites_path, if: -> { current_user.can?(:invite_users) && current_user.functional? && !self_destruct } + n.item :user_invites, safe_join([material_symbol('person_add'), t('invites.title')]), invites_path, if: -> { current_user.can?(:invite_users) && current_user.functional? && !self_destruct } n.item :development, safe_join([material_symbol('code'), t('settings.development')]), settings_applications_path, highlights_on: %r{/settings/applications}, if: -> { current_user.functional? && !self_destruct } n.item :trends, safe_join([material_symbol('trending_up'), t('admin.trends.title')]), admin_trends_statuses_path, if: -> { current_user.can?(:manage_taxonomies) && !self_destruct } do |s| @@ -62,7 +62,9 @@ SimpleNavigation::Configuration.run do |navigation| s.item :ng_rules, safe_join([material_symbol('edit'), t('admin.ng_rules.title')]), admin_ng_rules_path, highlights_on: %r{/admin/(ng_rules|ng_rule_histories)}, if: -> { current_user.can?(:manage_ng_words) } s.item :sensitive_words, safe_join([material_symbol('list'), t('admin.sensitive_words.title')]), admin_sensitive_words_path, highlights_on: %r{/admin/sensitive_words}, if: -> { current_user.can?(:manage_sensitive_words) } s.item :invites, safe_join([material_symbol('person_add'), t('admin.invites.title')]), admin_invites_path, if: -> { current_user.can?(:manage_invites) } - s.item :instances, safe_join([material_symbol('cloud'), t('admin.instances.title')]), admin_instances_path(limited: limited_federation_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows}, if: -> { current_user.can?(:manage_federation) } + s.item :instances, safe_join([material_symbol('cloud'), t('admin.instances.title')]), admin_instances_path(limited: limited_federation_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows|/admin/export_domain_blocks}, if: lambda { + current_user.can?(:manage_federation) + } s.item :special_instances, safe_join([material_symbol('list'), t('admin.special_instances.title')]), admin_special_instances_path, highlights_on: %r{/admin/special_instances}, if: -> { current_user.can?(:manage_federation) } s.item :special_domains, safe_join([material_symbol('link'), t('admin.special_domains.title')]), admin_special_domains_path, highlights_on: %r{/admin/special_domains}, if: -> { current_user.can?(:manage_federation) } s.item :email_domain_blocks, safe_join([material_symbol('mail'), t('admin.email_domain_blocks.title')]), admin_email_domain_blocks_path, highlights_on: %r{/admin/email_domain_blocks}, if: -> { current_user.can?(:manage_blocks) } diff --git a/config/roles.yml b/config/roles.yml index 0439c9f741..30e7d60be6 100644 --- a/config/roles.yml +++ b/config/roles.yml @@ -29,6 +29,8 @@ admin: - manage_webhooks - manage_roles - invite_users + - manage_ng_words + - manage_sensitive_words owner: name: Owner position: 1000 diff --git a/config/routes.rb b/config/routes.rb index 9cf512b8fb..f6d362c772 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -74,7 +74,7 @@ Rails.application.routes.draw do scope path: '.well-known' do scope module: :well_known do get 'oauth-authorization-server', to: 'oauth_metadata#show', as: :oauth_metadata, defaults: { format: 'json' } - get 'host-meta', to: 'host_meta#show', as: :host_meta, defaults: { format: 'xml' } + get 'host-meta', to: 'host_meta#show', as: :host_meta get 'nodeinfo', to: 'node_info#index', as: :nodeinfo, defaults: { format: 'json' } get 'webfinger', to: 'webfinger#show', as: :webfinger end diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 9c858087c4..9f6da976dd 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -178,8 +178,10 @@ namespace :admin do end resources :users, only: [] do - resource :two_factor_authentication, only: [:destroy], controller: 'users/two_factor_authentications' - resource :role, only: [:show, :update], controller: 'users/roles' + scope module: :users do + resource :two_factor_authentication, only: [:destroy] + resource :role, only: [:show, :update] + end end resources :custom_emojis, only: [:index, :new, :create, :edit, :update] do diff --git a/config/routes/api.rb b/config/routes/api.rb index d0ca47f389..23868652dd 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -197,7 +197,7 @@ namespace :api, format: false do resources :lists, only: :index resources :antennas, only: :index resources :exclude_antennas, only: :index - resources :circlues, only: :index + resources :circles, only: :index resources :identity_proofs, only: :index resources :featured_tags, only: :index end diff --git a/db/migrate/.rubocop.yml b/db/migrate/.rubocop.yml index 4e23800dd1..6f8b6cc60d 100644 --- a/db/migrate/.rubocop.yml +++ b/db/migrate/.rubocop.yml @@ -2,3 +2,8 @@ inherit_from: ../../.rubocop.yml Naming/VariableNumber: CheckSymbols: false + +# Enabled here as workaround for https://docs.rubocop.org/rubocop/configuration.html#path-relativity +Rails/CreateTableWithTimestamps: + Include: + - '*.rb' diff --git a/db/migrate/20170508230434_create_conversation_mutes.rb b/db/migrate/20170508230434_create_conversation_mutes.rb index 01122c4516..4beba9dfa3 100644 --- a/db/migrate/20170508230434_create_conversation_mutes.rb +++ b/db/migrate/20170508230434_create_conversation_mutes.rb @@ -2,7 +2,7 @@ class CreateConversationMutes < ActiveRecord::Migration[5.0] def change - create_table :conversation_mutes do |t| + create_table :conversation_mutes do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.integer :account_id, null: false t.bigint :conversation_id, null: false end diff --git a/db/migrate/20170823162448_create_status_pins.rb b/db/migrate/20170823162448_create_status_pins.rb index c8d3fab3a5..2cf3a85ca9 100644 --- a/db/migrate/20170823162448_create_status_pins.rb +++ b/db/migrate/20170823162448_create_status_pins.rb @@ -2,7 +2,7 @@ class CreateStatusPins < ActiveRecord::Migration[5.1] def change - create_table :status_pins do |t| + create_table :status_pins do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.belongs_to :account, foreign_key: { on_delete: :cascade }, null: false t.belongs_to :status, foreign_key: { on_delete: :cascade }, null: false end diff --git a/db/migrate/20171116161857_create_list_accounts.rb b/db/migrate/20171116161857_create_list_accounts.rb index ff9ab3faad..b0371e4c88 100644 --- a/db/migrate/20171116161857_create_list_accounts.rb +++ b/db/migrate/20171116161857_create_list_accounts.rb @@ -2,7 +2,7 @@ class CreateListAccounts < ActiveRecord::Migration[5.2] def change - create_table :list_accounts do |t| + create_table :list_accounts do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.belongs_to :list, foreign_key: { on_delete: :cascade }, null: false t.belongs_to :account, foreign_key: { on_delete: :cascade }, null: false t.belongs_to :follow, foreign_key: { on_delete: :cascade }, null: false diff --git a/db/migrate/20180929222014_create_account_conversations.rb b/db/migrate/20180929222014_create_account_conversations.rb index 9386b86e7c..4e85e68d47 100644 --- a/db/migrate/20180929222014_create_account_conversations.rb +++ b/db/migrate/20180929222014_create_account_conversations.rb @@ -2,7 +2,7 @@ class CreateAccountConversations < ActiveRecord::Migration[5.2] def change - create_table :account_conversations do |t| + create_table :account_conversations do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.belongs_to :account, foreign_key: { on_delete: :cascade } t.belongs_to :conversation, foreign_key: { on_delete: :cascade } t.bigint :participant_account_ids, array: true, null: false, default: [] diff --git a/db/migrate/20181007025445_create_pghero_space_stats.rb b/db/migrate/20181007025445_create_pghero_space_stats.rb index ddaf4aef31..696b53d8d7 100644 --- a/db/migrate/20181007025445_create_pghero_space_stats.rb +++ b/db/migrate/20181007025445_create_pghero_space_stats.rb @@ -2,7 +2,7 @@ class CreatePgheroSpaceStats < ActiveRecord::Migration[5.2] def change - create_table :pghero_space_stats do |t| + create_table :pghero_space_stats do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.text :database t.text :schema t.text :relation diff --git a/db/migrate/20190103124649_create_scheduled_statuses.rb b/db/migrate/20190103124649_create_scheduled_statuses.rb index a66546187e..02b4916be8 100644 --- a/db/migrate/20190103124649_create_scheduled_statuses.rb +++ b/db/migrate/20190103124649_create_scheduled_statuses.rb @@ -2,7 +2,7 @@ class CreateScheduledStatuses < ActiveRecord::Migration[5.2] def change - create_table :scheduled_statuses do |t| + create_table :scheduled_statuses do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.belongs_to :account, foreign_key: { on_delete: :cascade } t.datetime :scheduled_at, index: true t.jsonb :params diff --git a/db/migrate/20220824233535_create_status_trends.rb b/db/migrate/20220824233535_create_status_trends.rb index 52dcbf8f38..e68e5b7c11 100644 --- a/db/migrate/20220824233535_create_status_trends.rb +++ b/db/migrate/20220824233535_create_status_trends.rb @@ -2,7 +2,7 @@ class CreateStatusTrends < ActiveRecord::Migration[6.1] def change - create_table :status_trends do |t| + create_table :status_trends do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.references :status, null: false, foreign_key: { on_delete: :cascade }, index: { unique: true } t.references :account, null: false, foreign_key: { on_delete: :cascade } t.float :score, null: false, default: 0 diff --git a/db/migrate/20221006061337_create_preview_card_trends.rb b/db/migrate/20221006061337_create_preview_card_trends.rb index 934a06e24d..266f644023 100644 --- a/db/migrate/20221006061337_create_preview_card_trends.rb +++ b/db/migrate/20221006061337_create_preview_card_trends.rb @@ -2,7 +2,7 @@ class CreatePreviewCardTrends < ActiveRecord::Migration[6.1] def change - create_table :preview_card_trends do |t| + create_table :preview_card_trends do |t| # rubocop:disable Rails/CreateTableWithTimestamps t.references :preview_card, null: false, foreign_key: { on_delete: :cascade }, index: { unique: true } t.float :score, null: false, default: 0 t.integer :rank, null: false, default: 0 diff --git a/db/migrate/20240808124338_migrate_notifications_policy_v2.rb b/db/migrate/20240808124338_migrate_notifications_policy_v2.rb index 2e0684826a..ed1642d6b8 100644 --- a/db/migrate/20240808124338_migrate_notifications_policy_v2.rb +++ b/db/migrate/20240808124338_migrate_notifications_policy_v2.rb @@ -9,7 +9,7 @@ class MigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1] def up NotificationPolicy.in_batches.update_all(<<~SQL.squish) for_not_following = CASE filter_not_following WHEN true THEN 1 ELSE 0 END, - for_not_followers = CASE filter_not_following WHEN true THEN 1 ELSE 0 END, + for_not_followers = CASE filter_not_followers WHEN true THEN 1 ELSE 0 END, for_new_accounts = CASE filter_new_accounts WHEN true THEN 1 ELSE 0 END, for_private_mentions = CASE filter_private_mentions WHEN true THEN 1 ELSE 0 END SQL @@ -18,7 +18,7 @@ class MigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1] def down NotificationPolicy.in_batches.update_all(<<~SQL.squish) filter_not_following = CASE for_not_following WHEN 0 THEN false ELSE true END, - filter_not_following = CASE for_not_followers WHEN 0 THEN false ELSE true END, + filter_not_followers = CASE for_not_followers WHEN 0 THEN false ELSE true END, filter_new_accounts = CASE for_new_accounts WHEN 0 THEN false ELSE true END, filter_private_mentions = CASE for_private_mentions WHEN 0 THEN false ELSE true END SQL diff --git a/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb b/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb new file mode 100644 index 0000000000..11b82de8a6 --- /dev/null +++ b/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +class FixNotificationPermissionForeignKeys < ActiveRecord::Migration[7.1] + def up + safety_assured do + execute <<~SQL.squish + ALTER TABLE notification_permissions + DROP CONSTRAINT fk_rails_7c0bed08df, + ADD CONSTRAINT fk_rails_7c0bed08df + FOREIGN KEY (account_id) + REFERENCES accounts(id) + ON DELETE CASCADE, + + DROP CONSTRAINT fk_rails_e3e0aaad70, + ADD CONSTRAINT fk_rails_e3e0aaad70 + FOREIGN KEY (from_account_id) + REFERENCES accounts(id) + ON DELETE CASCADE + SQL + end + end + + def down + safety_assured do + execute <<~SQL.squish + ALTER TABLE notification_permissions + DROP CONSTRAINT fk_rails_7c0bed08df, + ADD CONSTRAINT fk_rails_7c0bed08df + FOREIGN KEY (account_id) + REFERENCES accounts(id), + + DROP CONSTRAINT fk_rails_e3e0aaad70, + ADD CONSTRAINT fk_rails_e3e0aaad70 + FOREIGN KEY (from_account_id) + REFERENCES accounts(id) + SQL + end + end +end diff --git a/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb b/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb index eb0c909729..5daf646643 100644 --- a/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb +++ b/db/post_migrate/20240808124339_post_deployment_migrate_notifications_policy_v2.rb @@ -9,7 +9,7 @@ class PostDeploymentMigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1] def up NotificationPolicy.in_batches.update_all(<<~SQL.squish) for_not_following = CASE filter_not_following WHEN true THEN 1 ELSE 0 END, - for_not_followers = CASE filter_not_following WHEN true THEN 1 ELSE 0 END, + for_not_followers = CASE filter_not_followers WHEN true THEN 1 ELSE 0 END, for_new_accounts = CASE filter_new_accounts WHEN true THEN 1 ELSE 0 END, for_private_mentions = CASE filter_private_mentions WHEN true THEN 1 ELSE 0 END SQL @@ -18,7 +18,7 @@ class PostDeploymentMigrateNotificationsPolicyV2 < ActiveRecord::Migration[7.1] def down NotificationPolicy.in_batches.update_all(<<~SQL.squish) filter_not_following = CASE for_not_following WHEN 0 THEN false ELSE true END, - filter_not_following = CASE for_not_followers WHEN 0 THEN false ELSE true END, + filter_not_followers = CASE for_not_followers WHEN 0 THEN false ELSE true END, filter_new_accounts = CASE for_new_accounts WHEN 0 THEN false ELSE true END, filter_private_mentions = CASE for_private_mentions WHEN 0 THEN false ELSE true END SQL diff --git a/db/schema.rb b/db/schema.rb index 8fcf136f9e..76a8fb7568 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.1].define(version: 2024_09_16_190140) do +ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1684,8 +1684,8 @@ ActiveRecord::Schema[7.1].define(version: 2024_09_16_190140) do add_foreign_key "mutes", "accounts", name: "fk_b8d8daf315", on_delete: :cascade add_foreign_key "ng_rule_histories", "accounts" add_foreign_key "ng_rule_histories", "ng_rules" - add_foreign_key "notification_permissions", "accounts" - add_foreign_key "notification_permissions", "accounts", column: "from_account_id" + add_foreign_key "notification_permissions", "accounts", column: "from_account_id", on_delete: :cascade + add_foreign_key "notification_permissions", "accounts", on_delete: :cascade add_foreign_key "notification_policies", "accounts", on_delete: :cascade add_foreign_key "notification_requests", "accounts", column: "from_account_id", on_delete: :cascade add_foreign_key "notification_requests", "accounts", on_delete: :cascade diff --git a/docker-compose.yml b/docker-compose.yml index 41876d26f9..0aea38746f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -58,8 +58,8 @@ services: web: # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes - # build: . - image: ghcr.io/mastodon/mastodon:v4.3.0-rc.1 + build: . + image: kmyblue:15.13-lts restart: always env_file: .env.production command: bundle exec puma -C config/puma.rb @@ -80,10 +80,10 @@ services: streaming: # You can uncomment the following lines if you want to not use the prebuilt image, for example if you have local code changes - # build: - # dockerfile: ./streaming/Dockerfile - # context: . - image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-rc.1 + build: + dockerfile: ./streaming/Dockerfile + context: . + image: kmyblue-streaming:15.13-lts restart: always env_file: .env.production command: node ./streaming/index.js @@ -101,7 +101,7 @@ services: sidekiq: build: . - image: ghcr.io/mastodon/mastodon:v4.3.0-rc.1 + image: kmyblue:15.13-lts restart: always env_file: .env.production command: bundle exec sidekiq diff --git a/lib/exceptions.rb b/lib/exceptions.rb index c2ff162a6e..d3b92f4a09 100644 --- a/lib/exceptions.rb +++ b/lib/exceptions.rb @@ -8,7 +8,6 @@ module Mastodon class LengthValidationError < ValidationError; end class DimensionsValidationError < ValidationError; end class StreamValidationError < ValidationError; end - class FilterValidationError < ValidationError; end class RaceConditionError < Error; end class RateLimitExceededError < Error; end class SyntaxError < Error; end diff --git a/lib/mastodon/cli/email_domain_blocks.rb b/lib/mastodon/cli/email_domain_blocks.rb index 6b9107c8ad..1e90a7c283 100644 --- a/lib/mastodon/cli/email_domain_blocks.rb +++ b/lib/mastodon/cli/email_domain_blocks.rb @@ -46,7 +46,7 @@ module Mastodon::CLI if options[:with_dns_records] Resolv::DNS.open do |dns| dns.timeouts = 5 - other_domains = dns.getresources(@email_domain_block.domain, Resolv::DNS::Resource::IN::MX).to_a + other_domains = dns.getresources(domain, Resolv::DNS::Resource::IN::MX).to_a.map { |e| e.exchange.to_s }.compact_blank end end diff --git a/lib/mastodon/cli/feeds.rb b/lib/mastodon/cli/feeds.rb index 9d25cd7859..c0635bbcde 100644 --- a/lib/mastodon/cli/feeds.rb +++ b/lib/mastodon/cli/feeds.rb @@ -5,6 +5,7 @@ require_relative 'base' module Mastodon::CLI class Feeds < Base include Redisable + include DatabaseHelper option :all, type: :boolean, default: false option :concurrency, type: :numeric, default: 5, aliases: [:c] @@ -59,6 +60,38 @@ module Mastodon::CLI say('OK', :green) end + desc 'vacuum', 'Remove home feeds of inactive users from Redis' + long_desc <<-LONG_DESC + Running this task should not be needed in most cases, as Mastodon will + automatically clean up feeds from inactive accounts every day. + + However, this task is more aggressive in order to clean up feeds that + may have been missed because of bugs or database mishaps. + LONG_DESC + def vacuum + with_read_replica do + say('Deleting orphaned home feeds…') + redis.scan_each(match: 'feed:home:*').each_slice(1000) do |keys| + ids = keys.map { |key| key.split(':')[2] }.compact_blank + + known_ids = User.confirmed.signed_in_recently.where(account_id: ids).pluck(:account_id) + + keys_to_delete = keys.filter { |key| known_ids.exclude?(key.split(':')[2]&.to_i) } + redis.del(keys_to_delete) + end + + say('Deleting orphaned list feeds…') + redis.scan_each(match: 'feed:list:*').each_slice(1000) do |keys| + ids = keys.map { |key| key.split(':')[2] }.compact_blank + + known_ids = List.where(account_id: User.confirmed.signed_in_recently.select(:account_id)).where(id: ids).pluck(:id) + + keys_to_delete = keys.filter { |key| known_ids.exclude?(key.split(':')[2]&.to_i) } + redis.del(keys_to_delete) + end + end + end + private def active_user_accounts diff --git a/lib/mastodon/cli/ip_blocks.rb b/lib/mastodon/cli/ip_blocks.rb index 3c5fdb275c..ef24f2e047 100644 --- a/lib/mastodon/cli/ip_blocks.rb +++ b/lib/mastodon/cli/ip_blocks.rb @@ -5,7 +5,7 @@ require_relative 'base' module Mastodon::CLI class IpBlocks < Base - option :severity, required: true, enum: %w(no_access sign_up_requires_approval sign_up_block), desc: 'Severity of the block' + option :severity, required: true, enum: IpBlock.severities.keys, desc: 'Severity of the block' option :comment, aliases: [:c], desc: 'Optional comment' option :duration, aliases: [:d], type: :numeric, desc: 'Duration of the block in seconds' option :force, type: :boolean, aliases: [:f], desc: 'Overwrite existing blocks' diff --git a/lib/mastodon/cli/maintenance.rb b/lib/mastodon/cli/maintenance.rb index 0b84047a1c..532fbc328a 100644 --- a/lib/mastodon/cli/maintenance.rb +++ b/lib/mastodon/cli/maintenance.rb @@ -43,6 +43,7 @@ module Mastodon::CLI class BulkImport < ApplicationRecord; end class SoftwareUpdate < ApplicationRecord; end class SeveredRelationship < ApplicationRecord; end + class TagFollow < ApplicationRecord; end class DomainBlock < ApplicationRecord enum :severity, { silence: 0, suspend: 1, noop: 2 } @@ -102,6 +103,7 @@ module Mastodon::CLI owned_classes << AccountIdentityProof if db_table_exists?(:account_identity_proofs) owned_classes << Appeal if db_table_exists?(:appeals) owned_classes << BulkImport if db_table_exists?(:bulk_imports) + owned_classes << TagFollow if db_table_exists?(:tag_follows) owned_classes.each do |klass| klass.where(account_id: other_account.id).find_each do |record| diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index 9753be02a0..0c997bae6c 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -6,17 +6,19 @@ module Mastodon module_function + # If you change the version number, also change the image version in docker-compose.yml. + def kmyblue_major 15 end def kmyblue_minor - 0 + 13 end def kmyblue_flag - # 'LTS' - 'dev' + 'LTS' + # 'dev' # nil end @@ -29,11 +31,11 @@ module Mastodon end def patch - 0 + 8 end def default_prerelease - 'rc.1' + '' end def prerelease @@ -53,12 +55,11 @@ module Mastodon def to_s_of_mastodon components = [to_a.join('.')] components << "-#{prerelease}" if prerelease.present? - components << "+#{build_metadata_of_mastodon}" if build_metadata_of_mastodon.present? components.join end def build_metadata - ['kmyblue', to_s_of_kmyblue, build_metadata_of_mastodon].compact.join('.') + ['kmyblue', to_s_of_kmyblue].compact.join('.') end def build_metadata_of_mastodon @@ -73,6 +74,7 @@ module Mastodon components = [to_a.join('.')] components << "-#{prerelease}" if prerelease.present? components << "+#{build_metadata}" if build_metadata.present? + components << "+#{build_metadata_of_mastodon}" if build_metadata_of_mastodon.present? components.join end diff --git a/lib/paperclip/vips_lazy_thumbnail.rb b/lib/paperclip/vips_lazy_thumbnail.rb index 4764b04af8..528d5604dc 100644 --- a/lib/paperclip/vips_lazy_thumbnail.rb +++ b/lib/paperclip/vips_lazy_thumbnail.rb @@ -52,6 +52,7 @@ module Paperclip # implement. If cropping ever becomes necessary for other situations, this will # need to be expanded. crop_width = crop_height = [target_width, target_height].min if @target_geometry&.square? + crop_width = crop_height = "'min(iw,ih)'" if crop_width == 'ih' filter = begin if @crop @@ -122,7 +123,14 @@ module Paperclip end def needs_convert? - needs_different_geometry? || needs_different_format? || needs_metadata_stripping? + strip_animations? || needs_different_geometry? || needs_different_format? || needs_metadata_stripping? + end + + def strip_animations? + # Detecting whether the source image is animated across all our supported + # input file formats is not trivial, and converting unconditionally is just + # as simple for now + options[:style] == :static end def needs_different_geometry? diff --git a/lib/redis/namespace_extensions.rb b/lib/redis/namespace_extensions.rb index 9af59c296e..2be738b04d 100644 --- a/lib/redis/namespace_extensions.rb +++ b/lib/redis/namespace_extensions.rb @@ -5,6 +5,10 @@ class Redis def exists?(...) call_with_namespace('exists?', ...) end + + def with + yield self + end end end diff --git a/lib/sanitize_ext/sanitize_config.rb b/lib/sanitize_ext/sanitize_config.rb index 29c53c1bab..368e2b3bfa 100644 --- a/lib/sanitize_ext/sanitize_config.rb +++ b/lib/sanitize_ext/sanitize_config.rb @@ -116,18 +116,16 @@ class Sanitize ) MASTODON_OEMBED = freeze_config( - elements: %w(audio embed iframe source video), + elements: %w(audio iframe source video), attributes: { 'audio' => %w(controls), - 'embed' => %w(height src type width), 'iframe' => %w(allowfullscreen frameborder height scrolling src width), 'source' => %w(src type), 'video' => %w(controls height loop width), }, protocols: { - 'embed' => { 'src' => HTTP_PROTOCOLS }, 'iframe' => { 'src' => HTTP_PROTOCOLS }, 'source' => { 'src' => HTTP_PROTOCOLS }, }, diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index d8bc927bc4..e5a58ae3d5 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -7,9 +7,39 @@ namespace :db do namespace :encryption do desc 'Generate a set of keys for configuring Active Record encryption in a given environment' task :init do # rubocop:disable Rails/RakeEnvironment - puts <<~MSG - Add these secret environment variables to your Mastodon environment (e.g. .env.production):#{' '} + if %w( + ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY + ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT + ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY + ).any? { |key| ENV[key].present? } + unless ENV['IGNORE_ALREADY_SET_SECRETS'] == 'true' + puts <<~MSG + Secrets for this server have already been set, this step can likely be ignored! + In the unlikely event you need to generate new secrets, re-run this command with `IGNORE_ALREADY_SET_SECRETS=true`. + MSG + next + end + + pastel = Pastel.new + puts pastel.red(<<~MSG) + WARNING: It looks like encryption secrets have already been set. + WARNING: Ensure you are not changing secrets for a Mastodon installation that already uses them, as this will cause data loss and other issues that are difficult to recover from. + WARNING: Only proceed if you are absolutely sure of what you are doing! + MSG + + puts <<~MSG + If you are sure of what you are doing, add the following secret environment variables to your Mastodon environment (e.g. .env.production), ensure they are shared across all your nodes and do not change them after they are set:#{' '} + MSG + else + puts <<~MSG + Add the following secret environment variables to your Mastodon environment (e.g. .env.production), ensure they are shared across all your nodes and do not change them after they are set:#{' '} + MSG + end + + puts <<~MSG + + # Do NOT change these variables once they are set ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=#{SecureRandom.alphanumeric(32)} ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=#{SecureRandom.alphanumeric(32)} ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=#{SecureRandom.alphanumeric(32)} diff --git a/lib/tasks/icons.rake b/lib/tasks/icons.rake index 96e0a14315..9a05cf3499 100644 --- a/lib/tasks/icons.rake +++ b/lib/tasks/icons.rake @@ -38,6 +38,20 @@ def find_used_icons end end + Rails.root.join('config', 'navigation.rb').open('r') do |file| + pattern = /material_symbol\('(?[^']*)'\)/ + file.each_line do |line| + match = pattern.match(line) + next if match.blank? + + # navigation.rb only uses 400x24 icons, per material_symbol() in + # app/helpers/application_helper.rb + icons_by_weight_and_size[400] ||= {} + icons_by_weight_and_size[400][24] ||= Set.new + icons_by_weight_and_size[400][24] << match['icon'] + end + end + icons_by_weight_and_size end diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index b5d4861328..eac99321e7 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -8,16 +8,16 @@ namespace :mastodon do prompt = TTY::Prompt.new env = {} - # When the application code gets loaded, it runs `lib/mastodon/redis_configuration.rb`. - # This happens before application environment configuration and sets REDIS_URL etc. - # These variables are then used even when REDIS_HOST etc. are changed, so clear them - # out so they don't interfere with our new configuration. - ENV.delete('REDIS_URL') - ENV.delete('CACHE_REDIS_URL') - ENV.delete('SIDEKIQ_REDIS_URL') + if ENV['LOCAL_DOMAIN'] + prompt.warn "It looks like you already configured Mastodon for domain '#{ENV['LOCAL_DOMAIN']}'." + prompt.warn 'Never re-run this task on an already-configured running server.' + next prompt.warn 'Nothing saved. Bye!' if prompt.no?('Continue anyway?') + end + + clear_environment! begin - errors = false + errors = [] prompt.say('Your instance is identified by its domain name. Changing it afterward will break things.') env['LOCAL_DOMAIN'] = prompt.ask('Domain name:') do |q| @@ -109,7 +109,7 @@ namespace :mastodon do unless prompt.yes?('Try again?') return prompt.warn 'Nothing saved. Bye!' unless prompt.yes?('Continue anyway?') - errors = true + errors << 'Database connection could not be established.' break end end @@ -155,7 +155,7 @@ namespace :mastodon do unless prompt.yes?('Try again?') return prompt.warn 'Nothing saved. Bye!' unless prompt.yes?('Continue anyway?') - errors = true + errors << 'Redis connection could not be established.' break end end @@ -450,7 +450,7 @@ namespace :mastodon do unless prompt.yes?('Try again?') return prompt.warn 'Nothing saved. Bye!' unless prompt.yes?('Continue anyway?') - errors = true + errors << 'E-email was not sent successfully.' break end end @@ -498,7 +498,7 @@ namespace :mastodon do prompt.ok 'Done!' else prompt.error 'That failed! Perhaps your configuration is not right' - errors = true + errors << 'Preparing the database failed' end end @@ -515,14 +515,15 @@ namespace :mastodon do prompt.say 'Done!' else prompt.error 'That failed! Maybe you need swap space?' - errors = true + errors << 'Compiling assets failed.' end end end prompt.say "\n" - if errors - prompt.warn 'Your Mastodon server is set up, but there were some errors along the way, you may have to fix them.' + if errors.any? + prompt.warn 'Your Mastodon server is set up, but there were some errors along the way, you may have to fix them:' + errors.each { |error| prompt.warn "- #{error}" } else prompt.ok 'All done! You can now power on the Mastodon server 🐘' end @@ -579,6 +580,17 @@ namespace :mastodon do private + def clear_environment! + # When the application code gets loaded, it runs `lib/mastodon/redis_configuration.rb`. + # This happens before application environment configuration and sets REDIS_URL etc. + # These variables are then used even when REDIS_HOST etc. are changed, so clear them + # out so they don't interfere with our new configuration. + + ENV.delete('REDIS_URL') + ENV.delete('CACHE_REDIS_URL') + ENV.delete('SIDEKIQ_REDIS_URL') + end + def generate_header(include_warning) default_message = "# Generated with mastodon:setup on #{Time.now.utc}\n\n" diff --git a/package.json b/package.json index b6ab6f87ff..5fa2f9f4ad 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^2.1.1", "@hello-pangea/dnd": "^17.0.0", - "@rails/ujs": "7.1.400", + "@rails/ujs": "7.1.401", "@reduxjs/toolkit": "^2.0.1", "@svgr/webpack": "^5.5.0", "arrow-key-navigation": "^1.2.0", diff --git a/public/embed.js b/public/embed.js index 53372a3890..bc1fac3864 100644 --- a/public/embed.js +++ b/public/embed.js @@ -1,8 +1,5 @@ // @ts-check - -const allowedPrefixes = (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT' && document.currentScript.dataset.allowedPrefixes) ? document.currentScript.dataset.allowedPrefixes.split(' ') : []; - -(function () { +(function (allowedPrefixes) { 'use strict'; /** @@ -127,4 +124,4 @@ const allowedPrefixes = (document.currentScript && document.currentScript.tagNam container.appendChild(iframe); }); }); -})(); +})((document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT' && document.currentScript.dataset.allowedPrefixes) ? document.currentScript.dataset.allowedPrefixes.split(' ') : []); diff --git a/spec/controllers/admin/invites_controller_spec.rb b/spec/controllers/admin/invites_controller_spec.rb deleted file mode 100644 index b6471e80b2..0000000000 --- a/spec/controllers/admin/invites_controller_spec.rb +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::InvitesController do - render_views - - let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - subject { get :index, params: { available: true } } - - let!(:invite) { Fabricate(:invite) } - - it 'renders index page' do - expect(subject).to render_template :index - expect(response.body) - .to include(invite.code) - end - end - - describe 'POST #create' do - subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } } - - it 'succeeds to create a invite' do - expect { subject }.to change(Invite, :count).by(1) - expect(subject).to redirect_to admin_invites_path - expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10) - end - end - - describe 'DELETE #destroy' do - subject { delete :destroy, params: { id: invite.id } } - - let!(:invite) { Fabricate(:invite, expires_at: nil) } - - it 'expires invite' do - expect(subject).to redirect_to admin_invites_path - expect(invite.reload).to be_expired - end - end - - describe 'POST #deactivate_all' do - before { Fabricate(:invite, expires_at: nil) } - - it 'expires all invites, then redirects to admin_invites_path' do - expect { post :deactivate_all } - .to change { Invite.exists?(expires_at: nil) } - .from(true) - .to(false) - - expect(response).to redirect_to admin_invites_path - end - end -end diff --git a/spec/controllers/admin/tags_controller_spec.rb b/spec/controllers/admin/tags_controller_spec.rb deleted file mode 100644 index 1df2bc4003..0000000000 --- a/spec/controllers/admin/tags_controller_spec.rb +++ /dev/null @@ -1,82 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::TagsController do - render_views - - before do - sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) - end - - describe 'GET #index' do - before do - Fabricate(:tag) - - tag_filter = instance_double(Admin::TagFilter, results: Tag.all) - allow(Admin::TagFilter).to receive(:new).and_return(tag_filter) - end - - let(:params) { { order: 'newest' } } - - it 'returns http success' do - get :index - - expect(response).to have_http_status(200) - expect(response).to render_template(:index) - - expect(Admin::TagFilter) - .to have_received(:new) - .with(hash_including(params)) - end - - describe 'with filters' do - let(:params) { { order: 'newest', name: 'test' } } - - it 'returns http success' do - get :index, params: { name: 'test' } - - expect(response).to have_http_status(200) - expect(response).to render_template(:index) - - expect(Admin::TagFilter) - .to have_received(:new) - .with(hash_including(params)) - end - end - end - - describe 'GET #show' do - let!(:tag) { Fabricate(:tag) } - - before do - get :show, params: { id: tag.id } - end - - it 'returns status 200' do - expect(response).to have_http_status(200) - end - end - - describe 'PUT #update' do - let!(:tag) { Fabricate(:tag, listable: false) } - - context 'with valid params' do - it 'updates the tag' do - put :update, params: { id: tag.id, tag: { listable: '1' } } - - expect(response).to redirect_to(admin_tag_path(tag.id)) - expect(tag.reload).to be_listable - end - end - - context 'with invalid params' do - it 'does not update the tag' do - put :update, params: { id: tag.id, tag: { name: 'cant-change-name' } } - - expect(response).to have_http_status(200) - expect(response).to render_template(:show) - end - end - end -end diff --git a/spec/controllers/auth/registrations_controller_spec.rb b/spec/controllers/auth/registrations_controller_spec.rb index eed13d10d4..cecfa7b5be 100644 --- a/spec/controllers/auth/registrations_controller_spec.rb +++ b/spec/controllers/auth/registrations_controller_spec.rb @@ -233,17 +233,7 @@ RSpec.describe Auth::RegistrationsController do Setting.registrations_mode = 'open' Fabricate(:email_domain_block, allow_with_approval: true, domain: 'mail.example.com') allow(User).to receive(:skip_mx_check?).and_return(false) - - resolver = instance_double(Resolv::DNS, :timeouts= => nil) - - allow(resolver).to receive(:getresources) - .with('example.com', Resolv::DNS::Resource::IN::MX) - .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'mail.example.com')]) - allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::A).and_return([]) - allow(resolver).to receive(:getresources).with('example.com', Resolv::DNS::Resource::IN::AAAA).and_return([]) - allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')]) - allow(resolver).to receive(:getresources).with('mail.example.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')]) - allow(Resolv::DNS).to receive(:open).and_yield(resolver) + configure_mx(domain: 'example.com', exchange: 'mail.example.com') end it 'creates unapproved user and redirects to setup' do diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb index ddb6f3633c..d4769a4722 100644 --- a/spec/controllers/auth/sessions_controller_spec.rb +++ b/spec/controllers/auth/sessions_controller_spec.rb @@ -247,7 +247,7 @@ RSpec.describe Auth::SessionsController do context 'when using two-factor authentication' do context 'with OTP enabled as second factor' do let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) end let!(:recovery_codes) do @@ -269,7 +269,7 @@ RSpec.describe Auth::SessionsController do context 'when using email and password after an unfinished log-in attempt to a 2FA-protected account' do let!(:other_user) do - Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + Fabricate(:user, email: 'z@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) end before do @@ -381,7 +381,7 @@ RSpec.describe Auth::SessionsController do context 'with WebAuthn and OTP enabled as second factor' do let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) end let!(:webauthn_credential) do diff --git a/spec/controllers/settings/privacy_controller_spec.rb b/spec/controllers/settings/privacy_controller_spec.rb index 59fd342199..9dcabd1d54 100644 --- a/spec/controllers/settings/privacy_controller_spec.rb +++ b/spec/controllers/settings/privacy_controller_spec.rb @@ -31,7 +31,7 @@ RSpec.describe Settings::PrivacyController do describe 'PUT #update' do context 'when update succeeds' do before do - allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) + allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in) end it 'updates the user profile' do @@ -44,14 +44,14 @@ RSpec.describe Settings::PrivacyController do .to redirect_to(settings_privacy_path) expect(ActivityPub::UpdateDistributionWorker) - .to have_received(:perform_async).with(account.id) + .to have_received(:perform_in).with(anything, account.id) end end context 'when update fails' do before do allow(UpdateAccountService).to receive(:new).and_return(failing_update_service) - allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) + allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in) end it 'updates the user profile' do @@ -61,7 +61,7 @@ RSpec.describe Settings::PrivacyController do .to render_template(:show) expect(ActivityPub::UpdateDistributionWorker) - .to_not have_received(:perform_async) + .to_not have_received(:perform_in) end private diff --git a/spec/controllers/settings/profiles_controller_spec.rb b/spec/controllers/settings/profiles_controller_spec.rb index e3197f0a6d..7447049751 100644 --- a/spec/controllers/settings/profiles_controller_spec.rb +++ b/spec/controllers/settings/profiles_controller_spec.rb @@ -29,23 +29,23 @@ RSpec.describe Settings::ProfilesController do end it 'updates the user profile' do - allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) + allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in) put :update, params: { account: { display_name: 'New name' } } expect(account.reload.display_name).to eq 'New name' expect(response).to redirect_to(settings_profile_path) - expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) + expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_in).with(anything, account.id) end end describe 'PUT #update with new profile image' do it 'updates profile image' do - allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) + allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_in) expect(account.avatar.instance.avatar_file_name).to be_nil put :update, params: { account: { avatar: fixture_file_upload('avatar.gif', 'image/gif') } } expect(response).to redirect_to(settings_profile_path) expect(account.reload.avatar.instance.avatar_file_name).to_not be_nil - expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) + expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_in).with(anything, account.id) end end end diff --git a/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb b/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb index 34eaacdf49..224310b7ef 100644 --- a/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb +++ b/spec/controllers/settings/two_factor_authentication/confirmations_controller_spec.rb @@ -18,7 +18,7 @@ RSpec.describe Settings::TwoFactorAuthentication::ConfirmationsController do def qr_code_markup RQRCode::QRCode.new( 'otpauth://totp/cb6e6126.ngrok.io:local-part%40domain?secret=thisisasecretforthespecofnewview&issuer=cb6e6126.ngrok.io' - ).as_svg(padding: 0, module_size: 4) + ).as_svg(padding: 0, module_size: 4, use_path: true) end end diff --git a/spec/controllers/statuses_controller_spec.rb b/spec/controllers/statuses_controller_spec.rb index d9702251f4..121e4aa6c6 100644 --- a/spec/controllers/statuses_controller_spec.rb +++ b/spec/controllers/statuses_controller_spec.rb @@ -736,76 +736,4 @@ RSpec.describe StatusesController do end end end - - describe 'GET #embed' do - let(:account) { Fabricate(:account) } - let(:status) { Fabricate(:status, account: account) } - - context 'when account is suspended' do - let(:account) { Fabricate(:account, suspended: true) } - - before do - get :embed, params: { account_username: account.username, id: status.id } - end - - it 'returns http gone' do - expect(response).to have_http_status(410) - end - end - - context 'when status is a reblog' do - let(:original_account) { Fabricate(:account, domain: 'example.com') } - let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') } - let(:status) { Fabricate(:status, account: account, reblog: original_status) } - - before do - get :embed, params: { account_username: status.account.username, id: status.id } - end - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - end - - context 'when status is public' do - before do - get :embed, params: { account_username: status.account.username, id: status.id } - end - - it 'renders status successfully', :aggregate_failures do - expect(response) - .to have_http_status(200) - .and render_template(:embed) - expect(response.headers).to include( - 'Vary' => 'Accept, Accept-Language, Cookie', - 'Cache-Control' => include('public'), - 'Link' => include('activity+json') - ) - end - end - - context 'when status is private' do - let(:status) { Fabricate(:status, account: account, visibility: :private) } - - before do - get :embed, params: { account_username: status.account.username, id: status.id } - end - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - end - - context 'when status is direct' do - let(:status) { Fabricate(:status, account: account, visibility: :direct) } - - before do - get :embed, params: { account_username: status.account.username, id: status.id } - end - - it 'returns http not found' do - expect(response).to have_http_status(404) - end - end - end end diff --git a/spec/fabricators/account_domain_block_fabricator.rb b/spec/fabricators/account_domain_block_fabricator.rb index 83df509da2..a211b7c666 100644 --- a/spec/fabricators/account_domain_block_fabricator.rb +++ b/spec/fabricators/account_domain_block_fabricator.rb @@ -2,5 +2,5 @@ Fabricator(:account_domain_block) do account { Fabricate.build(:account) } - domain 'example.com' + domain { sequence { |n| "host-#{n}.example" } } end diff --git a/spec/fabricators/ip_block_fabricator.rb b/spec/fabricators/ip_block_fabricator.rb new file mode 100644 index 0000000000..30c48b90c6 --- /dev/null +++ b/spec/fabricators/ip_block_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:ip_block) do + severity { :sign_up_requires_approval } + ip { sequence(:ip) { |n| "10.0.0.#{n}" } } +end diff --git a/spec/fixtures/files/avatar-high.gif b/spec/fixtures/files/avatar-high.gif new file mode 100644 index 0000000000..7639f2c507 Binary files /dev/null and b/spec/fixtures/files/avatar-high.gif differ diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index fbc01e00cf..bf46c16c79 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -283,11 +283,11 @@ RSpec.describe ApplicationHelper do expect(helper.html_title).to be_html_safe end - it 'removes extra new lines' do + it 'does not escape twice' do Setting.site_title = 'Site Title' - helper.content_for(:page_title, "Test Value\n") + helper.content_for(:page_title, '"Test Value"'.html_safe) - expect(helper.html_title).to eq 'Test Value - Site Title' + expect(helper.html_title).to eq '"Test Value" - Site Title' expect(helper.html_title).to be_html_safe end end diff --git a/spec/lib/account_reach_finder_spec.rb b/spec/lib/account_reach_finder_spec.rb index e5d85656a2..ed16c07c22 100644 --- a/spec/lib/account_reach_finder_spec.rb +++ b/spec/lib/account_reach_finder_spec.rb @@ -13,13 +13,28 @@ RSpec.describe AccountReachFinder do let(:ap_mentioned_example_com) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.com/inbox-3', domain: 'example.com') } let(:ap_mentioned_example_org) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.org/inbox-4', domain: 'example.org') } + let(:ap_followed_example_com) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.com/inbox-5', domain: 'example.com') } + let(:ap_followed_example_org) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.com/inbox-6', domain: 'example.org') } + + let(:ap_requested_example_com) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.com/inbox-7', domain: 'example.com') } + let(:ap_requested_example_org) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.com/inbox-8', domain: 'example.org') } + let(:unrelated_account) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.com/unrelated-inbox', domain: 'example.com') } + let(:old_followed_account) { Fabricate(:account, protocol: :activitypub, inbox_url: 'https://example.com/old-followed-inbox', domain: 'example.com') } before do + travel_to(2.months.ago) { account.follow!(old_followed_account) } + ap_follower_example_com.follow!(account) ap_follower_example_org.follow!(account) ap_follower_with_shared.follow!(account) + account.follow!(ap_followed_example_com) + account.follow!(ap_followed_example_org) + + account.request_follow!(ap_requested_example_com) + account.request_follow!(ap_requested_example_org) + Fabricate(:status, account: account).tap do |status| status.mentions << Mention.new(account: ap_follower_example_com) status.mentions << Mention.new(account: ap_mentioned_with_shared) @@ -38,16 +53,36 @@ RSpec.describe AccountReachFinder do end describe '#inboxes' do - it 'includes the preferred inbox URL of followers' do - expect(described_class.new(account).inboxes).to include(*[ap_follower_example_com, ap_follower_example_org, ap_follower_with_shared].map(&:preferred_inbox_url)) + subject { described_class.new(account).inboxes } + + it 'includes the preferred inbox URL of followers and recently mentioned accounts but not unrelated users' do + expect(subject) + .to include(*follower_inbox_urls) + .and include(*mentioned_account_inbox_urls) + .and include(*recently_followed_inbox_urls) + .and include(*recently_requested_inbox_urls) + .and not_include(unrelated_account.preferred_inbox_url) + .and not_include(old_followed_account.preferred_inbox_url) end - it 'includes the preferred inbox URL of recently-mentioned accounts' do - expect(described_class.new(account).inboxes).to include(*[ap_mentioned_with_shared, ap_mentioned_example_com, ap_mentioned_example_org].map(&:preferred_inbox_url)) + def follower_inbox_urls + [ap_follower_example_com, ap_follower_example_org, ap_follower_with_shared] + .map(&:preferred_inbox_url) end - it 'does not include the inbox of unrelated users' do - expect(described_class.new(account).inboxes).to_not include(unrelated_account.preferred_inbox_url) + def mentioned_account_inbox_urls + [ap_mentioned_with_shared, ap_mentioned_example_com, ap_mentioned_example_org] + .map(&:preferred_inbox_url) + end + + def recently_followed_inbox_urls + [ap_followed_example_com, ap_followed_example_org] + .map(&:preferred_inbox_url) + end + + def recently_requested_inbox_urls + [ap_requested_example_com, ap_requested_example_org] + .map(&:preferred_inbox_url) end end end diff --git a/spec/lib/activitypub/activity/block_spec.rb b/spec/lib/activitypub/activity/block_spec.rb index 6f68984018..385628852b 100644 --- a/spec/lib/activitypub/activity/block_spec.rb +++ b/spec/lib/activitypub/activity/block_spec.rb @@ -3,6 +3,8 @@ require 'rails_helper' RSpec.describe ActivityPub::Activity::Block do + subject { described_class.new(json, sender) } + let(:sender) { Fabricate(:account) } let(:recipient) { Fabricate(:account) } @@ -16,93 +18,65 @@ RSpec.describe ActivityPub::Activity::Block do }.with_indifferent_access end - context 'when the recipient does not follow the sender' do - describe '#perform' do - subject { described_class.new(json, sender) } - - before do - subject.perform - end - + describe '#perform' do + context 'when the recipient does not follow the sender' do it 'creates a block from sender to recipient' do - expect(sender.blocking?(recipient)).to be true + subject.perform + + expect(sender) + .to be_blocking(recipient) end end - end - context 'when the recipient is already blocked' do - before do - sender.block!(recipient, uri: 'old') + context 'when the recipient is already blocked' do + before { sender.block!(recipient, uri: 'old') } + + it 'creates a block from sender to recipient and sets uri to last received block activity' do + subject.perform + + expect(sender) + .to be_blocking(recipient) + expect(sender.block_relationships.find_by(target_account: recipient).uri) + .to eq 'foo' + end end - describe '#perform' do - subject { described_class.new(json, sender) } + context 'when the recipient follows the sender' do + before { recipient.follow!(sender) } + + it 'creates a block from sender to recipient and ensures recipient not following sender' do + subject.perform + + expect(sender) + .to be_blocking(recipient) + expect(recipient) + .to_not be_following(sender) + end + end + + context 'when a matching undo has been received first' do + let(:undo_json) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + id: 'bar', + type: 'Undo', + actor: ActivityPub::TagManager.instance.uri_for(sender), + object: json, + }.with_indifferent_access + end before do + recipient.follow!(sender) + ActivityPub::Activity::Undo.new(undo_json, sender).perform + end + + it 'does not create a block from sender to recipient and ensures recipient not following sender' do subject.perform - end - it 'creates a block from sender to recipient' do - expect(sender.blocking?(recipient)).to be true - end - - it 'sets the uri to that of last received block activity' do - expect(sender.block_relationships.find_by(target_account: recipient).uri).to eq 'foo' - end - end - end - - context 'when the recipient follows the sender' do - before do - recipient.follow!(sender) - end - - describe '#perform' do - subject { described_class.new(json, sender) } - - before do - subject.perform - end - - it 'creates a block from sender to recipient' do - expect(sender.blocking?(recipient)).to be true - end - - it 'ensures recipient is not following sender' do - expect(recipient.following?(sender)).to be false - end - end - end - - context 'when a matching undo has been received first' do - let(:undo_json) do - { - '@context': 'https://www.w3.org/ns/activitystreams', - id: 'bar', - type: 'Undo', - actor: ActivityPub::TagManager.instance.uri_for(sender), - object: json, - }.with_indifferent_access - end - - before do - recipient.follow!(sender) - ActivityPub::Activity::Undo.new(undo_json, sender).perform - end - - describe '#perform' do - subject { described_class.new(json, sender) } - - before do - subject.perform - end - - it 'does not create a block from sender to recipient' do - expect(sender.blocking?(recipient)).to be false - end - - it 'ensures recipient is not following sender' do - expect(recipient.following?(sender)).to be false + expect(sender) + .to_not be_blocking(recipient) + expect(recipient) + .to_not be_following(sender) end end end diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index fad45d3cb7..a2067357fa 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -48,10 +48,16 @@ RSpec.describe ActivityPub::Activity::Create do content: '@bob lorem ipsum', published: 1.hour.ago.utc.iso8601, updated: 1.hour.ago.utc.iso8601, - tag: { - type: 'Mention', - href: ActivityPub::TagManager.instance.uri_for(follower), - }, + tag: [ + { + type: 'Mention', + href: ActivityPub::TagManager.instance.uri_for(follower), + }, + { + type: 'Mention', + href: ActivityPub::TagManager.instance.uri_for(follower), + }, + ], } end @@ -74,6 +80,24 @@ RSpec.describe ActivityPub::Activity::Create do } end + let(:invalid_mention_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), 'post2'].join('/'), + type: 'Note', + to: [ + 'https://www.w3.org/ns/activitystreams#Public', + ActivityPub::TagManager.instance.uri_for(follower), + ], + content: '@bob lorem ipsum', + published: 1.hour.ago.utc.iso8601, + updated: 1.hour.ago.utc.iso8601, + tag: { + type: 'Mention', + href: 'http://notexisting.dontexistingtld/actor', + }, + } + end + def activity_for_object(json) { '@context': 'https://www.w3.org/ns/activitystreams', @@ -128,6 +152,25 @@ RSpec.describe ActivityPub::Activity::Create do # Creates two notifications expect(Notification.count).to eq 2 end + + it 'ignores unprocessable mention', :aggregate_failures do + stub_request(:get, invalid_mention_json[:tag][:href]).to_raise(HTTP::ConnectionError) + # When receiving the post that contains an invalid mention… + described_class.new(activity_for_object(invalid_mention_json), sender, delivery: true).perform + + # NOTE: Refering explicitly to the workers is a bit awkward + DistributionWorker.drain + FeedInsertWorker.drain + + # …it creates a status + status = Status.find_by(uri: invalid_mention_json[:id]) + + # Check the process did not crash + expect(status.nil?).to be false + + # It has queued a mention resolve job + expect(MentionResolveWorker).to have_enqueued_sidekiq_job(status.id, invalid_mention_json[:tag][:href], anything) + end end describe '#perform' do @@ -135,27 +178,24 @@ RSpec.describe ActivityPub::Activity::Create do subject { delivered_to_account_id ? described_class.new(json, sender, delivered_to_account_id: delivered_to_account_id) : described_class.new(json, sender) } let(:sender_software) { 'mastodon' } - let(:custom_before) { false } let(:active_friend) { false } let(:delivered_to_account_id) { nil } 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 context 'when object publication date is below ISO8601 range' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - published: '-0977-11-03T08:31:22Z', - } + build_object( + published: '-0977-11-03T08:31:22Z' + ) end it 'creates status with a valid creation date', :aggregate_failures do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -167,15 +207,14 @@ RSpec.describe ActivityPub::Activity::Create do context 'when object publication date is above ISO8601 range' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - published: '10000-11-03T08:31:22Z', - } + build_object( + published: '10000-11-03T08:31:22Z' + ) end it 'creates status with a valid creation date', :aggregate_failures do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -187,16 +226,15 @@ RSpec.describe ActivityPub::Activity::Create do context 'when object has been edited' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( published: '2022-01-22T15:00:00Z', - updated: '2022-01-22T16:00:00Z', - } + updated: '2022-01-22T16:00:00Z' + ) end it 'creates status with appropriate creation and edition dates', :aggregate_failures do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -211,54 +249,41 @@ RSpec.describe ActivityPub::Activity::Create do context 'when object has update date equal to creation date' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( published: '2022-01-22T15:00:00Z', - updated: '2022-01-22T15:00:00Z', - } + updated: '2022-01-22T15:00:00Z' + ) end - it 'creates status' do + it 'creates status and does not mark it as edited' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil expect(status.text).to eq 'Lorem ipsum' - end - - it 'does not mark status as edited' do - status = sender.statuses.first - - expect(status).to_not be_nil expect(status.edited?).to be false end end context 'with an unknown object type' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Banana', - content: 'Lorem ipsum', - } + build_object( + type: 'Banana' + ) end it 'does not create a status' do - expect(sender.statuses.count).to be_zero + expect { subject.perform }.to_not change(sender.statuses, :count) end end context 'with a standalone' do - let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - } - end + let(:object_json) { build_object } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -266,6 +291,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'missing to/cc defaults to direct privacy' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -275,15 +302,14 @@ RSpec.describe ActivityPub::Activity::Create do context 'when public with explicit public address' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - to: 'https://www.w3.org/ns/activitystreams#Public', - } + build_object( + to: 'https://www.w3.org/ns/activitystreams#Public' + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -293,15 +319,14 @@ RSpec.describe ActivityPub::Activity::Create do context 'when public with as:Public' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - to: 'as:Public', - } + build_object( + to: 'as:Public' + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -311,15 +336,14 @@ RSpec.describe ActivityPub::Activity::Create do context 'when public with Public' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - to: 'Public', - } + build_object( + to: 'Public' + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -329,15 +353,14 @@ RSpec.describe ActivityPub::Activity::Create do context 'when unlisted with explicit public address' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - cc: 'https://www.w3.org/ns/activitystreams#Public', - } + build_object( + cc: 'https://www.w3.org/ns/activitystreams#Public' + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -347,15 +370,14 @@ RSpec.describe ActivityPub::Activity::Create do context 'when unlisted with as:Public' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - cc: 'as:Public', - } + build_object( + cc: 'as:Public' + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -365,15 +387,14 @@ RSpec.describe ActivityPub::Activity::Create do context 'when unlisted with Public' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - cc: 'Public', - } + build_object( + cc: 'Public' + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -393,6 +414,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -413,6 +436,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:active_friend) { true } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -422,15 +447,14 @@ RSpec.describe ActivityPub::Activity::Create do context 'when private' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - to: 'http://example.com/followers', - } + build_object( + to: 'http://example.com/followers' + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -440,19 +464,18 @@ RSpec.describe ActivityPub::Activity::Create do context 'when private with inlined Collection in audience' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( to: { type: 'OrderedCollection', id: 'http://example.com/followers', first: 'http://example.com/followers?page=true', - }, - } + } + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -464,24 +487,19 @@ RSpec.describe ActivityPub::Activity::Create do let(:recipient) { Fabricate(:account) } let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - to: ActivityPub::TagManager.instance.uri_for(recipient), - } + build_object( + to: ActivityPub::TagManager.instance.uri_for(recipient) + ) end - it 'creates status' do + it 'creates status with a silent mention' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil expect(status.visibility).to eq 'limited' expect(status.limited_scope).to eq 'none' - end - - it 'creates silent mention' do - status = sender.statuses.first expect(status.mentions.first).to be_silent end end @@ -500,6 +518,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -522,6 +542,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -534,19 +556,18 @@ RSpec.describe ActivityPub::Activity::Create do let(:recipient) { Fabricate(:account) } let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( to: ActivityPub::TagManager.instance.uri_for(recipient), tag: { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(recipient), - }, - } + } + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -568,6 +589,8 @@ RSpec.describe ActivityPub::Activity::Create do context 'with explicit public address' do it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -579,6 +602,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { 'as:Public' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -590,6 +615,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { 'Public' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -601,6 +628,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { ['http://example.com/followers', 'kmyblue:LocalPublic'] } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -613,6 +642,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:active_friend) { true } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -624,6 +655,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { 'http://example.com/followers' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -635,6 +668,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { 'https://example.com/actor' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -646,6 +681,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { '' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -657,6 +694,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { 'ohagi' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -668,6 +707,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { nil } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -679,6 +720,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { 'kmyblue:Limited' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -693,6 +736,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:sender_bio) { '#searchable_by_all_users' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -704,6 +749,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:sender_bio) { '#searchable_by_followers_only' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -715,6 +762,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:sender_bio) { '#searchable_by_reacted_users_only' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -726,6 +775,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:sender_bio) { '#searchable_by_nobody' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -737,6 +788,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:sender_bio) { '' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -760,6 +813,8 @@ RSpec.describe ActivityPub::Activity::Create do context 'without specify searchability from misskey' do it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -771,6 +826,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:to) { 'http://example.com/followers' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -793,6 +850,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -804,6 +863,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:searchable_by) { 'kmyblue:Limited' } it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -816,15 +877,14 @@ RSpec.describe ActivityPub::Activity::Create do let(:original_status) { Fabricate(:status) } let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - inReplyTo: ActivityPub::TagManager.instance.uri_for(original_status), - } + build_object( + inReplyTo: ActivityPub::TagManager.instance.uri_for(original_status) + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -839,20 +899,19 @@ RSpec.describe ActivityPub::Activity::Create do let(:recipient) { Fabricate(:account) } let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( tag: [ { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(recipient), }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -862,19 +921,18 @@ RSpec.describe ActivityPub::Activity::Create do context 'with mentions missing href' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( tag: [ { type: 'Mention', }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil end @@ -884,10 +942,8 @@ RSpec.describe ActivityPub::Activity::Create do before do Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_reply_exclude_followers: true) recipient.follow!(sender) if follow - subject.perform end - let(:custom_before) { true } let(:follow) { false } let(:recipient) { Fabricate(:account) } @@ -909,6 +965,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:follow) { true } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -917,6 +975,8 @@ RSpec.describe ActivityPub::Activity::Create do context 'when not follower' do it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + status = sender.statuses.first expect(status).to be_nil @@ -935,6 +995,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -944,14 +1006,11 @@ RSpec.describe ActivityPub::Activity::Create do end context 'when existing' do - let(:custom_before) { true } let!(:existing) { Fabricate(:conversation, uri: 'http://example.com/conversation', inbox_url: 'http://example.com/actor/invalid') } - before do - subject.perform - end - it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -973,6 +1032,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -995,6 +1056,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:existing) { Fabricate(:conversation, id: 3500) } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1005,8 +1068,6 @@ RSpec.describe ActivityPub::Activity::Create do end context 'with a context as a reply' do - let(:custom_before) { true } - let(:custom_before_sub) { false } let(:ancestor_account) { Fabricate(:account, domain: 'or.example.com', inbox_url: 'http://or.example.com/actor/inbox') } let(:mentioned_account) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/bob', inbox_url: 'http://example.com/bob/inbox', shared_inbox_url: 'http://exmaple.com/inbox') } let(:local_mentioned_account) { Fabricate(:account, domain: nil) } @@ -1044,11 +1105,11 @@ RSpec.describe ActivityPub::Activity::Create do stub_request(:post, 'http://or.example.com/actor/inbox').to_return(status: 200) stub_request(:post, 'http://example.com/bob/inbox').to_return(status: 200) - - subject.perform unless custom_before_sub end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1058,13 +1119,13 @@ RSpec.describe ActivityPub::Activity::Create do end it 'forwards to observers', :inline_jobs do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(a_request(:post, 'http://or.example.com/actor/inbox')).to have_been_made.once expect(a_request(:post, 'http://example.com/bob/inbox')).to have_been_made.once end context 'when new mention is added' do - let(:custom_before_sub) { true } - let(:new_mentioned_account) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/alice', inbox_url: 'http://example.com/alice/inbox', shared_inbox_url: 'http://exmaple.com/inbox') } let(:new_local_mentioned_account) { Fabricate(:account, domain: nil) } @@ -1090,10 +1151,11 @@ RSpec.describe ActivityPub::Activity::Create do before do stub_request(:post, 'http://example.com/alice/inbox').to_return(status: 200) - subject.perform end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1101,6 +1163,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'forwards to observers', :inline_jobs do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(a_request(:post, 'http://or.example.com/actor/inbox')).to have_been_made.once expect(a_request(:post, 'http://example.com/bob/inbox')).to have_been_made.once expect(a_request(:post, 'http://example.com/alice/inbox')).to have_been_made.once @@ -1108,8 +1172,6 @@ RSpec.describe ActivityPub::Activity::Create do end context 'when unknown mentioned account' do - let(:custom_before_sub) { true } - let(:actor_json) do { '@context': 'https://www.w3.org/ns/activitystreams', @@ -1143,10 +1205,11 @@ RSpec.describe ActivityPub::Activity::Create do stub_request(:get, 'https://foo.test/.well-known/webfinger?resource=acct:actor@foo.test').to_return(status: 200, body: Oj.dump(webfinger), headers: { 'Content-Type': 'application/jrd+json' }) stub_request(:post, 'https://foo.test/inbox').to_return(status: 200) stub_request(:get, 'https://foo.test/.well-known/nodeinfo').to_return(status: 200, headers: { 'Content-Type': 'application/activity+json' }) - subject.perform end it 'creates status', :inline_jobs do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1154,6 +1217,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'forwards to observers', :inline_jobs do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(a_request(:post, 'https://foo.test/inbox')).to have_been_made.once end end @@ -1162,6 +1227,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:conversation) { Fabricate(:conversation, uri: 'http://example.com/conversation', inbox_url: 'http://example.com/actor/inbox') } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1171,6 +1238,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'do not forward to observers', :inline_jobs do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(a_request(:post, 'http://or.example.com/actor/inbox')).to_not have_been_made expect(a_request(:post, 'http://example.com/bob/inbox')).to_not have_been_made end @@ -1179,10 +1248,7 @@ RSpec.describe ActivityPub::Activity::Create do context 'with media attachments' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( attachment: [ { type: 'Document', @@ -1194,11 +1260,13 @@ RSpec.describe ActivityPub::Activity::Create do mediaType: 'image/png', url: 'http://example.com/emoji.png', }, - ], - } + ] + ) end it 'creates status with correctly-ordered media attachments' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1209,60 +1277,55 @@ RSpec.describe ActivityPub::Activity::Create do context 'with media attachments with long description' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( attachment: [ { type: 'Document', mediaType: 'image/png', url: 'http://example.com/attachment.png', - name: '*' * 1500, + name: '*' * MediaAttachment::MAX_DESCRIPTION_LENGTH, }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil - expect(status.media_attachments.map(&:description)).to include('*' * 1500) + expect(status.media_attachments.map(&:description)).to include('*' * MediaAttachment::MAX_DESCRIPTION_LENGTH) end end context 'with media attachments with long description as summary' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( attachment: [ { type: 'Document', mediaType: 'image/png', url: 'http://example.com/attachment.png', - summary: '*' * 1500, + summary: '*' * MediaAttachment::MAX_DESCRIPTION_LENGTH, }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil - expect(status.media_attachments.map(&:description)).to include('*' * 1500) + expect(status.media_attachments.map(&:description)).to include('*' * MediaAttachment::MAX_DESCRIPTION_LENGTH) end end context 'with media attachments with focal points' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( attachment: [ { type: 'Document', @@ -1270,11 +1333,13 @@ RSpec.describe ActivityPub::Activity::Create do url: 'http://example.com/attachment.png', focalPoint: [0.5, -0.7], }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1284,20 +1349,19 @@ RSpec.describe ActivityPub::Activity::Create do context 'with media attachments missing url' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( attachment: [ { type: 'Document', mediaType: 'image/png', }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil end @@ -1305,21 +1369,51 @@ RSpec.describe ActivityPub::Activity::Create do context 'with hashtags' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( tag: [ { type: 'Hashtag', href: 'http://example.com/blah', name: '#test', }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.tags.map(&:name)).to include('test') + end + end + + context 'with featured hashtags' do + let(:object_json) do + build_object( + to: 'https://www.w3.org/ns/activitystreams#Public', + tag: [ + { + type: 'Hashtag', + href: 'http://example.com/blah', + name: '#test', + }, + ] + ) + end + + before do + sender.featured_tags.create!(name: 'test') + end + + it 'creates status and updates featured tag' do + expect { subject.perform } + .to change(sender.statuses, :count).by(1) + .and change { sender.featured_tags.first.reload.statuses_count }.by(1) + .and change { sender.featured_tags.first.reload.last_status_at }.from(nil).to(be_present) + status = sender.statuses.first expect(status).to_not be_nil @@ -1327,14 +1421,13 @@ RSpec.describe ActivityPub::Activity::Create do end context 'with domain-block' do - let(:custom_before) { true } - before do Fabricate(:domain_block, domain: 'example.com', severity: :noop, reject_hashtag: true) - subject.perform end it 'does not create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1345,20 +1438,19 @@ RSpec.describe ActivityPub::Activity::Create do context 'with hashtags missing name' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( tag: [ { type: 'Hashtag', href: 'http://example.com/blah', }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil end @@ -1366,21 +1458,20 @@ RSpec.describe ActivityPub::Activity::Create do context 'with hashtags invalid name' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', + build_object( tag: [ { type: 'Hashtag', href: 'http://example.com/blah', name: 'foo, #eh !', }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil end @@ -1388,9 +1479,7 @@ RSpec.describe ActivityPub::Activity::Create do context 'with emojis' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', + build_object( content: 'Lorem ipsum :tinking:', tag: [ { @@ -1400,11 +1489,13 @@ RSpec.describe ActivityPub::Activity::Create do }, name: 'tinking', }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1414,9 +1505,7 @@ RSpec.describe ActivityPub::Activity::Create do context 'with emojis served with invalid content-type' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', + build_object( content: 'Lorem ipsum :tinkong:', tag: [ { @@ -1426,11 +1515,13 @@ RSpec.describe ActivityPub::Activity::Create do }, name: 'tinkong', }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1440,9 +1531,7 @@ RSpec.describe ActivityPub::Activity::Create do context 'with emojis missing name' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', + build_object( content: 'Lorem ipsum :tinking:', tag: [ { @@ -1451,11 +1540,13 @@ RSpec.describe ActivityPub::Activity::Create do url: 'http://example.com/emoji.png', }, }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil end @@ -1463,20 +1554,20 @@ RSpec.describe ActivityPub::Activity::Create do context 'with emojis missing icon' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', + build_object( content: 'Lorem ipsum :tinking:', tag: [ { type: 'Emoji', name: 'tinking', }, - ], - } + ] + ) end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil end @@ -1484,8 +1575,7 @@ RSpec.describe ActivityPub::Activity::Create do context 'with poll' do let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + build_object( type: 'Question', content: 'Which color was the submarine?', oneOf: [ @@ -1503,17 +1593,17 @@ RSpec.describe ActivityPub::Activity::Create do totalItems: 3, }, }, - ], - } + ] + ) end - it 'creates status' do + it 'creates status with a poll' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil expect(status.poll).to_not be_nil - end - it 'creates a poll' do poll = sender.polls.first expect(poll).to_not be_nil expect(poll.status).to_not be_nil @@ -1527,15 +1617,15 @@ RSpec.describe ActivityPub::Activity::Create do let!(:local_status) { Fabricate(:status, poll: poll) } let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', + build_object( name: 'Yellow', - inReplyTo: ActivityPub::TagManager.instance.uri_for(local_status), - } + inReplyTo: ActivityPub::TagManager.instance.uri_for(local_status) + ).except(:content) end it 'adds a vote to the poll with correct uri' do + expect { subject.perform }.to change(poll.votes, :count).by(1) + vote = poll.votes.first expect(vote).to_not be_nil expect(vote.uri).to eq object_json[:id] @@ -1543,15 +1633,14 @@ RSpec.describe ActivityPub::Activity::Create do end context 'when ng rule is existing' do - let(:custom_before) { true } - context 'when ng rule is match' do before do Fabricate(:ng_rule, account_domain: 'example.com', reaction_type: ['vote']) - subject.perform end it 'does not create a reblog by sender of status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(poll.votes.first).to be_nil end end @@ -1559,10 +1648,11 @@ RSpec.describe ActivityPub::Activity::Create do context 'when ng rule is not match' do before do Fabricate(:ng_rule, account_domain: 'foo.bar', reaction_type: ['vote']) - subject.perform end it 'creates a reblog by sender of status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(poll.votes.first).to_not be_nil end end @@ -1571,22 +1661,22 @@ RSpec.describe ActivityPub::Activity::Create do context 'when a vote to an expired local poll' do let(:poll) do - poll = Fabricate.build(:poll, options: %w(Yellow Blue), expires_at: 1.day.ago) - poll.save(validate: false) - poll + travel_to 2.days.ago do + Fabricate(:poll, options: %w(Yellow Blue), expires_at: 1.day.from_now) + end end let!(:local_status) { Fabricate(:status, poll: poll) } let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', + build_object( name: 'Yellow', - inReplyTo: ActivityPub::TagManager.instance.uri_for(local_status), - } + inReplyTo: ActivityPub::TagManager.instance.uri_for(local_status) + ).except(:content) end it 'does not add a vote to the poll' do + expect { subject.perform }.to_not change(poll.votes, :count) + expect(poll.votes.first).to be_nil end end @@ -1616,6 +1706,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1638,6 +1730,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1667,6 +1761,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1702,6 +1798,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1724,6 +1822,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1743,6 +1843,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1763,6 +1865,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1784,6 +1888,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'create status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -1792,8 +1898,6 @@ RSpec.describe ActivityPub::Activity::Create do end context 'when ng word is set' do - let(:custom_before) { true } - let(:custom_before_sub) { false } let(:content) { 'Lorem ipsum' } let(:ng_word) { 'hello' } let(:ng_word_for_stranger_mention) { 'ohagi' } @@ -1809,13 +1913,14 @@ RSpec.describe ActivityPub::Activity::Create do before do Fabricate(:ng_word, keyword: ng_word, stranger: false) Fabricate(:ng_word, keyword: ng_word_for_stranger_mention, stranger: true) - subject.perform unless custom_before_sub end context 'when not contains ng words' do let(:content) { 'ohagi, world! OH GOOD' } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil end end @@ -1824,10 +1929,14 @@ RSpec.describe ActivityPub::Activity::Create do let(:content) { 'hello, world!' } it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil end it 'records history' do + expect { subject.perform }.to_not change(sender.statuses, :count) + history = NgwordHistory.find_by(uri: object_json[:id]) expect(history).to_not be_nil expect(history.status_blocked?).to be true @@ -1847,6 +1956,8 @@ RSpec.describe ActivityPub::Activity::Create do end it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil end end @@ -1873,6 +1984,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:content) { 'among us' } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil end end @@ -1881,27 +1994,28 @@ RSpec.describe ActivityPub::Activity::Create do let(:content) { 'oh, ohagi!' } it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil end end context 'with using ng words for stranger but receiver is following him' do let(:content) { 'oh, ohagi!' } - let(:custom_before_sub) { true } before do recipient.follow!(sender) - subject.perform end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil end end context 'with using ng words for stranger but multiple receivers are partically following him' do let(:content) { 'oh, ohagi' } - let(:custom_before_sub) { true } let(:object_json) do { @@ -1924,10 +2038,11 @@ RSpec.describe ActivityPub::Activity::Create do before do recipient.follow!(sender) - subject.perform end it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil end end @@ -1949,19 +2064,20 @@ RSpec.describe ActivityPub::Activity::Create do context 'with a simple case' do it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil end end context 'with following' do - let(:custom_before_sub) { true } - before do recipient.follow!(sender) - subject.perform end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil end end @@ -1993,19 +2109,20 @@ RSpec.describe ActivityPub::Activity::Create do context 'with a simple case' do it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil end end context 'with following' do - let(:custom_before_sub) { true } - before do recipient.follow!(sender) - subject.perform end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil end end @@ -2013,7 +2130,6 @@ RSpec.describe ActivityPub::Activity::Create do end context 'when ng rule is set' do - let(:custom_before) { true } let(:content) { 'Lorem ipsum GOOD LINK' } let(:object_json) do { @@ -2027,10 +2143,11 @@ RSpec.describe ActivityPub::Activity::Create do context 'when rule hits' do before do Fabricate(:ng_rule, status_text: 'ipsum', status_allow_follower_mention: false) - subject.perform end it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + status = sender.statuses.first expect(status).to be_nil end @@ -2039,10 +2156,11 @@ RSpec.describe ActivityPub::Activity::Create do context 'when rule does not hit' do before do Fabricate(:ng_rule, status_text: 'amely', status_allow_follower_mention: false) - subject.perform end it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil end @@ -2050,7 +2168,6 @@ RSpec.describe ActivityPub::Activity::Create do end context 'when sensitive word is set' do - let(:custom_before) { true } let(:content) { 'Lorem ipsum' } let(:sensitive_words_all) { 'hello' } let(:object_json) do @@ -2065,11 +2182,12 @@ RSpec.describe ActivityPub::Activity::Create do before do Fabricate(:sensitive_word, keyword: sensitive_words_all, remote: true, spoiler: false) if sensitive_words_all.present? Fabricate(:sensitive_word, keyword: 'ipsum') - subject.perform end context 'when not contains sensitive words' do it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -2081,6 +2199,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:content) { 'hello world' } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + status = sender.statuses.first expect(status).to_not be_nil @@ -2091,7 +2211,6 @@ RSpec.describe ActivityPub::Activity::Create do context 'when hashtags limit is set' do let(:post_hash_tags_max) { 2 } - let(:custom_before) { true } let(:object_json) do { id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, @@ -2115,11 +2234,12 @@ RSpec.describe ActivityPub::Activity::Create do before do Form::AdminSettings.new(post_hash_tags_max: post_hash_tags_max).save - subject.perform end context 'when limit is enough' do it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil history = NgwordHistory.find_by(uri: object_json[:id]) @@ -2131,6 +2251,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:post_hash_tags_max) { 1 } it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil history = NgwordHistory.find_by(uri: object_json[:id]) @@ -2146,7 +2268,6 @@ RSpec.describe ActivityPub::Activity::Create do context 'when mentions limit is set' do let(:post_mentions_max) { 3 } let(:post_stranger_mentions_max) { 0 } - let(:custom_before) { true } let(:mention_recipient_alice) { Fabricate(:account) } let(:mention_recipient_bob) { Fabricate(:account) } let(:mention_recipient_ohagi) { Fabricate(:account) } @@ -2180,12 +2301,12 @@ RSpec.describe ActivityPub::Activity::Create do mention_recipient_alice.follow!(sender) mention_recipient_bob.follow!(sender) mention_recipient_ohagi.follow!(sender) if mention_recipient_ohagi_follow - - subject.perform end context 'when limit is enough' do it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil history = NgwordHistory.find_by(uri: object_json[:id]) @@ -2197,6 +2318,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:post_mentions_max) { 1 } it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil history = NgwordHistory.find_by(uri: object_json[:id]) @@ -2211,6 +2334,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:post_stranger_mentions_max) { 1 } it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil history = NgwordHistory.find_by(uri: object_json[:id]) @@ -2223,6 +2348,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:mention_recipient_ohagi_follow) { false } it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil history = NgwordHistory.find_by(uri: object_json[:id]) @@ -2236,7 +2363,6 @@ RSpec.describe ActivityPub::Activity::Create do context 'when mentions limit for stranger is set' do let(:post_stranger_mentions_max) { 2 } - let(:custom_before) { true } let(:object_json) do { id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, @@ -2258,11 +2384,12 @@ RSpec.describe ActivityPub::Activity::Create do before do Form::AdminSettings.new(post_stranger_mentions_max: post_stranger_mentions_max).save - subject.perform end context 'when limit is enough' do it 'creates status' do + expect { subject.perform }.to change(sender.statuses, :count).by(1) + expect(sender.statuses.first).to_not be_nil history = NgwordHistory.find_by(uri: object_json[:id]) @@ -2274,6 +2401,8 @@ RSpec.describe ActivityPub::Activity::Create do let(:post_stranger_mentions_max) { 1 } it 'creates status' do + expect { subject.perform }.to_not change(sender.statuses, :count) + expect(sender.statuses.first).to be_nil history = NgwordHistory.find_by(uri: object_json[:id]) @@ -2302,12 +2431,9 @@ RSpec.describe ActivityPub::Activity::Create do end let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - to: 'https://www.w3.org/ns/activitystreams#Public', - } + build_object( + to: 'https://www.w3.org/ns/activitystreams#Public' + ) end before do @@ -2344,16 +2470,18 @@ RSpec.describe ActivityPub::Activity::Create do before do sender.update(suspended_at: Time.now.utc, suspension_origin: :local, remote_pending: true) - subject.perform end it 'does not create a status' do - status = sender.statuses.first + expect { subject.perform }.to_not change(sender.statuses, :count) + status = sender.statuses.first expect(status).to be_nil end it 'pending data is created' do + expect { subject.perform }.to_not change(sender.statuses, :count) + pending = PendingStatus.find_by(account: sender) expect(pending).to_not be_nil @@ -2371,13 +2499,7 @@ RSpec.describe ActivityPub::Activity::Create do subject.perform end - let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - } - end + let(:object_json) { build_object } it 'creates status' do status = sender.statuses.first @@ -2392,12 +2514,9 @@ RSpec.describe ActivityPub::Activity::Create do let!(:local_status) { Fabricate(:status) } let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - inReplyTo: ActivityPub::TagManager.instance.uri_for(local_status), - } + build_object( + inReplyTo: ActivityPub::TagManager.instance.uri_for(local_status) + ) end before do @@ -2463,13 +2582,11 @@ RSpec.describe ActivityPub::Activity::Create do subject { described_class.new(json, sender, delivery: true) } let!(:local_account) { Fabricate(:account) } + let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - to: ActivityPub::TagManager.instance.uri_for(local_account), - } + build_object( + to: ActivityPub::TagManager.instance.uri_for(local_account) + ) end before do @@ -2489,12 +2606,9 @@ RSpec.describe ActivityPub::Activity::Create do let!(:local_account) { Fabricate(:account) } let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - cc: ActivityPub::TagManager.instance.uri_for(local_account), - } + build_object( + cc: ActivityPub::TagManager.instance.uri_for(local_account) + ) end before do @@ -2545,17 +2659,19 @@ RSpec.describe ActivityPub::Activity::Create do subject.perform end - let(:object_json) do - { - id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, - type: 'Note', - content: 'Lorem ipsum', - } - end + let(:object_json) { build_object } it 'does not create anything' do expect(sender.statuses.count).to eq 0 end end + + def build_object(options = {}) + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + }.merge(options) + end end end diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb index ec0e5e4eef..12c30feb28 100644 --- a/spec/lib/activitypub/activity/follow_spec.rb +++ b/spec/lib/activitypub/activity/follow_spec.rb @@ -380,11 +380,10 @@ RSpec.describe ActivityPub::Activity::Follow do 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(:sender) { Fabricate(:account, domain: 'abc.com', url: 'https://abc.com/#actor', shared_inbox_url: 'https://abc.com/shared_inbox') } let!(:friend) { Fabricate(:friend_domain, domain: 'abc.com', inbox_url: 'https://example.com/inbox', 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(:inbox_url) { nil } let(:json) do { @@ -393,7 +392,6 @@ RSpec.describe ActivityPub::Activity::Follow do type: 'Follow', actor: ActivityPub::TagManager.instance.uri_for(sender), object: 'https://www.w3.org/ns/activitystreams#Public', - inboxUrl: inbox_url, }.with_indifferent_access end @@ -415,25 +413,34 @@ 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' + expect(friend.inbox_url).to eq 'https://abc.com/shared_inbox' end end - context 'when no record and inbox_url is specified' do - let(:inbox_url) { 'https://ohagi.com/inbox' } + context 'when old spec which no record and inbox_url is specified' do + 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', + inboxUrl: 'https://evil.org/bad_inbox', + }.with_indifferent_access + end before do friend.destroy! end - it 'marks the friend as pending' do + it 'marks the friend as pending but inboxUrl is not working' 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' - expect(friend.inbox_url).to eq 'https://ohagi.com/inbox' + expect(friend.inbox_url).to eq 'https://abc.com/shared_inbox' end end diff --git a/spec/lib/activitypub/linked_data_signature_spec.rb b/spec/lib/activitypub/linked_data_signature_spec.rb index b1a8dc5c49..8128fdd070 100644 --- a/spec/lib/activitypub/linked_data_signature_spec.rb +++ b/spec/lib/activitypub/linked_data_signature_spec.rb @@ -13,10 +13,13 @@ RSpec.describe ActivityPub::LinkedDataSignature do { '@context' => 'https://www.w3.org/ns/activitystreams', 'id' => 'http://example.com/hello-world', + 'type' => 'Note', + 'content' => 'Hello world', } end - let(:json) { raw_json.merge('signature' => signature) } + let(:signed_json) { raw_json.merge('signature' => signature) } + let(:json) { signed_json } describe '#verify_actor!' do context 'when signature matches' do @@ -90,6 +93,54 @@ RSpec.describe ActivityPub::LinkedDataSignature do expect(subject.verify_actor!).to be_nil end end + + context 'when an attribute has been removed from the document' do + let(:signature) { raw_signature.merge('type' => 'RsaSignature2017', 'signatureValue' => sign(sender, raw_signature, raw_json)) } + let(:json) { signed_json.without('content') } + + let(:raw_signature) do + { + 'creator' => 'http://example.com/alice', + 'created' => '2017-09-23T20:21:34Z', + } + end + + it 'returns nil' do + expect(subject.verify_actor!).to be_nil + end + end + + context 'when an attribute has been added to the document' do + let(:signature) { raw_signature.merge('type' => 'RsaSignature2017', 'signatureValue' => sign(sender, raw_signature, raw_json)) } + let(:json) { signed_json.merge('attributedTo' => 'http://example.com/bob') } + + let(:raw_signature) do + { + 'creator' => 'http://example.com/alice', + 'created' => '2017-09-23T20:21:34Z', + } + end + + it 'returns nil' do + expect(subject.verify_actor!).to be_nil + end + end + + context 'when an existing attribute has been changed' do + let(:signature) { raw_signature.merge('type' => 'RsaSignature2017', 'signatureValue' => sign(sender, raw_signature, raw_json)) } + let(:json) { signed_json.merge('content' => 'oops') } + + let(:raw_signature) do + { + 'creator' => 'http://example.com/alice', + 'created' => '2017-09-23T20:21:34Z', + } + end + + it 'returns nil' do + expect(subject.verify_actor!).to be_nil + end + end end describe '#sign!' do diff --git a/spec/lib/delivery_failure_tracker_spec.rb b/spec/lib/delivery_failure_tracker_spec.rb index 40c8adc4c8..34912c8133 100644 --- a/spec/lib/delivery_failure_tracker_spec.rb +++ b/spec/lib/delivery_failure_tracker_spec.rb @@ -42,8 +42,8 @@ RSpec.describe DeliveryFailureTracker do Fabricate(:unavailable_domain, domain: 'foo.bar') end - it 'removes URLs that are unavailable' do - results = described_class.without_unavailable(['http://example.com/good/inbox', 'http://foo.bar/unavailable/inbox']) + it 'removes URLs that are bogus or unavailable' do + results = described_class.without_unavailable(['http://example.com/good/inbox', 'http://foo.bar/unavailable/inbox', '{foo:']) expect(results).to include('http://example.com/good/inbox') expect(results).to_not include('http://foo.bar/unavailable/inbox') diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index da6d416bf4..5ea0ba29a9 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -163,6 +163,7 @@ RSpec.describe FeedManager do allow(List).to receive(:where).and_return(list) status = Fabricate(:status, text: 'I post a lot', account: bob) expect(described_class.instance.filter?(:home, status, alice)).to be true + expect(described_class.instance.filter(:home, status, alice)).to be :skip_home end it 'returns true for reblog from followee on exclusive list' do @@ -173,6 +174,7 @@ RSpec.describe FeedManager do status = Fabricate(:status, text: 'I post a lot', account: bob) reblog = Fabricate(:status, reblog: status, account: jeff) expect(described_class.instance.filter?(:home, reblog, alice)).to be true + expect(described_class.instance.filter(:home, reblog, alice)).to be :skip_home end it 'returns false for post from followee on non-exclusive list' do @@ -229,6 +231,28 @@ RSpec.describe FeedManager do end end + context 'with list feed' do + let(:list) { Fabricate(:list, account: bob) } + + before do + bob.follow!(alice) + list.list_accounts.create!(account: alice) + end + + it "returns false for followee's status" do + status = Fabricate(:status, text: 'Hello world', account: alice) + + expect(described_class.instance.filter?(:list, status, list)).to be false + end + + it 'returns false for reblog by followee' do + status = Fabricate(:status, text: 'Hello world', account: jeff) + reblog = Fabricate(:status, reblog: status, account: alice) + + expect(described_class.instance.filter?(:list, reblog, list)).to be false + end + end + context 'with mentions feed' do it 'returns true for status that mentions blocked account' do bob.block!(jeff) diff --git a/spec/lib/mastodon/cli/email_domain_blocks_spec.rb b/spec/lib/mastodon/cli/email_domain_blocks_spec.rb index a5fbd23e65..6ce1a7c5f3 100644 --- a/spec/lib/mastodon/cli/email_domain_blocks_spec.rb +++ b/spec/lib/mastodon/cli/email_domain_blocks_spec.rb @@ -63,6 +63,22 @@ RSpec.describe Mastodon::CLI::EmailDomainBlocks do .and(change(EmailDomainBlock, :count).by(1)) end end + + context 'with --with-dns-records true' do + let(:domain) { 'host.example' } + let(:arguments) { [domain] } + let(:options) { { with_dns_records: true } } + + before do + configure_mx(domain: domain, exchange: 'other.host') + end + + it 'adds a new block for parent and children' do + expect { subject } + .to output_results('Added 2') + .and(change(EmailDomainBlock, :count).by(2)) + end + end end describe '#remove' do diff --git a/spec/lib/request_spec.rb b/spec/lib/request_spec.rb index c600a48ee2..549362d1bf 100644 --- a/spec/lib/request_spec.rb +++ b/spec/lib/request_spec.rb @@ -58,16 +58,12 @@ RSpec.describe Request do expect(a_request(:get, 'http://example.com')).to have_been_made.once end - it 'sets headers' do - expect { |block| subject.perform(&block) }.to yield_control - expect(a_request(:get, 'http://example.com').with(headers: subject.headers)).to have_been_made - end - - it 'closes underlying connection' do + it 'makes a request with expected headers, yields, and closes the underlying connection' do allow(subject.send(:http_client)).to receive(:close) expect { |block| subject.perform(&block) }.to yield_control + expect(a_request(:get, 'http://example.com').with(headers: subject.headers)).to have_been_made expect(subject.send(:http_client)).to have_received(:close) end @@ -78,6 +74,29 @@ RSpec.describe Request do end end + context 'with a redirect and HTTP signatures' do + let(:account) { Fabricate(:account) } + + before do + stub_request(:get, 'http://example.com').to_return(status: 301, headers: { Location: 'http://redirected.example.com/foo' }) + stub_request(:get, 'http://redirected.example.com/foo').to_return(body: 'lorem ipsum') + end + + it 'makes a request with expected headers and follows redirects' do + expect { |block| subject.on_behalf_of(account).perform(&block) }.to yield_control + + # request.headers includes the `Signature` sent for the first request + expect(a_request(:get, 'http://example.com').with(headers: subject.headers)).to have_been_made.once + + # request.headers includes the `Signature`, but it has changed + expect(a_request(:get, 'http://redirected.example.com/foo').with(headers: subject.headers.merge({ 'Host' => 'redirected.example.com' }))).to_not have_been_made + + # `with(headers: )` matching tests for inclusion, so strip `Signature` + # This doesn't actually test that there is a signature, but it tests that the original signature is not passed + expect(a_request(:get, 'http://redirected.example.com/foo').with(headers: subject.headers.without('Signature').merge({ 'Host' => 'redirected.example.com' }))).to have_been_made.once + end + end + context 'with private host' do around do |example| WebMock.disable! diff --git a/spec/lib/search_query_transformer_spec.rb b/spec/lib/search_query_transformer_spec.rb index 843577179a..cfc3ad14be 100644 --- a/spec/lib/search_query_transformer_spec.rb +++ b/spec/lib/search_query_transformer_spec.rb @@ -34,7 +34,7 @@ RSpec.describe SearchQueryTransformer do let(:query) { "#{operator}:\"abc\"" } it 'raises an exception' do - expect { subject }.to raise_error(Mastodon::FilterValidationError, 'Invalid date abc') + expect { subject }.to raise_error(Date::Error) end end end diff --git a/spec/lib/vacuum/access_tokens_vacuum_spec.rb b/spec/lib/vacuum/access_tokens_vacuum_spec.rb index 54760c41bd..8768f6b2dc 100644 --- a/spec/lib/vacuum/access_tokens_vacuum_spec.rb +++ b/spec/lib/vacuum/access_tokens_vacuum_spec.rb @@ -14,32 +14,24 @@ RSpec.describe Vacuum::AccessTokensVacuum do let!(:expired_access_grant) { Fabricate(:access_grant, expires_in: 59.minutes.to_i, created_at: 1.hour.ago) } let!(:active_access_grant) { Fabricate(:access_grant) } - before do + it 'deletes revoked/expired access tokens and revoked/expired grants, but preserves active tokens/grants' do subject.perform - end - it 'deletes revoked access tokens' do - expect { revoked_access_token.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { revoked_access_token.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { expired_access_token.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'deletes expired access tokens' do - expect { expired_access_token.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { revoked_access_grant.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { expired_access_grant.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'deletes revoked access grants' do - expect { revoked_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { active_access_token.reload } + .to_not raise_error - it 'deletes expired access grants' do - expect { expired_access_grant.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'does not delete active access tokens' do - expect { active_access_token.reload }.to_not raise_error - end - - it 'does not delete active access grants' do - expect { active_access_grant.reload }.to_not raise_error + expect { active_access_grant.reload } + .to_not raise_error end end end diff --git a/spec/lib/vacuum/backups_vacuum_spec.rb b/spec/lib/vacuum/backups_vacuum_spec.rb index 867dbe4020..4a025352cb 100644 --- a/spec/lib/vacuum/backups_vacuum_spec.rb +++ b/spec/lib/vacuum/backups_vacuum_spec.rb @@ -11,16 +11,13 @@ RSpec.describe Vacuum::BackupsVacuum do let!(:expired_backup) { Fabricate(:backup, created_at: (retention_period + 1.day).ago) } let!(:current_backup) { Fabricate(:backup) } - before do + it 'deletes backups past the retention period but preserves those within the period' do subject.perform - end - it 'deletes backups past the retention period' do - expect { expired_backup.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'does not delete backups within the retention period' do - expect { current_backup.reload }.to_not raise_error + expect { expired_backup.reload } + .to raise_error ActiveRecord::RecordNotFound + expect { current_backup.reload } + .to_not raise_error end end end diff --git a/spec/lib/vacuum/feeds_vacuum_spec.rb b/spec/lib/vacuum/feeds_vacuum_spec.rb index fa5381c8ae..66c43bec5f 100644 --- a/spec/lib/vacuum/feeds_vacuum_spec.rb +++ b/spec/lib/vacuum/feeds_vacuum_spec.rb @@ -18,11 +18,11 @@ RSpec.describe Vacuum::FeedsVacuum do redis.sadd(feed_key_for(inactive_user, 'reblogs:2'), 3) redis.zadd(list_key_for(list), 1, 1) redis.zadd(antenna_key_for(antenna), 1, 1) - - subject.perform end it 'clears feeds of inactive users and lists' do + subject.perform + expect(redis.zcard(feed_key_for(inactive_user))).to eq 0 expect(redis.zcard(feed_key_for(active_user))).to eq 1 expect(redis.exists?(feed_key_for(inactive_user, 'reblogs'))).to be false diff --git a/spec/lib/vacuum/media_attachments_vacuum_spec.rb b/spec/lib/vacuum/media_attachments_vacuum_spec.rb index 1039c36cea..f7749038cb 100644 --- a/spec/lib/vacuum/media_attachments_vacuum_spec.rb +++ b/spec/lib/vacuum/media_attachments_vacuum_spec.rb @@ -17,9 +17,9 @@ RSpec.describe Vacuum::MediaAttachmentsVacuum do let!(:old_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 10.days.ago) } let!(:new_unattached_media) { Fabricate(:media_attachment, account_id: nil, created_at: 1.hour.ago) } - before { subject.perform } - it 'handles attachments based on metadata details' do + subject.perform + expect(old_remote_media.reload.file) # Remote and past retention period .to be_blank expect(old_local_media.reload.file) # Local and past retention diff --git a/spec/lib/vacuum/preview_cards_vacuum_spec.rb b/spec/lib/vacuum/preview_cards_vacuum_spec.rb index 9dbdf0bc2f..caeedd3269 100644 --- a/spec/lib/vacuum/preview_cards_vacuum_spec.rb +++ b/spec/lib/vacuum/preview_cards_vacuum_spec.rb @@ -15,24 +15,22 @@ RSpec.describe Vacuum::PreviewCardsVacuum do before do old_preview_card.statuses << Fabricate(:status) new_preview_card.statuses << Fabricate(:status) + end + it 'handles preview card cleanup' do subject.perform - end - it 'deletes cache of preview cards last updated before the retention period' do - expect(old_preview_card.reload.image).to be_blank - end + expect(old_preview_card.reload.image) # last updated before retention period + .to be_blank - it 'does not delete cache of preview cards last updated within the retention period' do - expect(new_preview_card.reload.image).to_not be_blank - end + expect(new_preview_card.reload.image) # last updated within the retention period + .to_not be_blank - it 'does not delete attached preview cards' do - expect(new_preview_card.reload).to be_persisted - end + expect(new_preview_card.reload) # Keep attached preview cards + .to be_persisted - it 'does not delete orphaned preview cards in the retention period' do - expect(orphaned_preview_card.reload).to be_persisted + expect(orphaned_preview_card.reload) # keep orphaned cards in the retention period + .to be_persisted end end end diff --git a/spec/lib/vacuum/statuses_vacuum_spec.rb b/spec/lib/vacuum/statuses_vacuum_spec.rb index 5bdf9fecb0..2e9f13c435 100644 --- a/spec/lib/vacuum/statuses_vacuum_spec.rb +++ b/spec/lib/vacuum/statuses_vacuum_spec.rb @@ -16,24 +16,20 @@ RSpec.describe Vacuum::StatusesVacuum do let!(:local_status_old) { Fabricate(:status, created_at: (retention_period + 2.days).ago) } let!(:local_status_recent) { Fabricate(:status, created_at: (retention_period - 2.days).ago) } - before do + it 'deletes remote statuses past the retention period and keeps others' do subject.perform - end - it 'deletes remote statuses past the retention period' do - expect { remote_status_old.reload }.to raise_error ActiveRecord::RecordNotFound - end + expect { remote_status_old.reload } + .to raise_error ActiveRecord::RecordNotFound - it 'does not delete local statuses past the retention period' do - expect { local_status_old.reload }.to_not raise_error - end + expect { local_status_old.reload } + .to_not raise_error - it 'does not delete remote statuses within the retention period' do - expect { remote_status_recent.reload }.to_not raise_error - end + expect { remote_status_recent.reload } + .to_not raise_error - it 'does not delete local statuses within the retention period' do - expect { local_status_recent.reload }.to_not raise_error + expect { local_status_recent.reload } + .to_not raise_error end end diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb index 4c6107d9f7..d97c01858d 100644 --- a/spec/mailers/notification_mailer_spec.rb +++ b/spec/mailers/notification_mailer_spec.rb @@ -14,6 +14,17 @@ RSpec.describe NotificationMailer do end end + shared_examples 'delivery without status' do + context 'when notification target_status is missing' do + before { allow(notification).to receive(:target_status).and_return(nil) } + + it 'does not deliver mail' do + emails = capture_emails { mail.deliver_now } + expect(emails).to be_empty + end + end + end + let(:receiver) { Fabricate(:user, account_attributes: { username: 'alice' }) } let(:sender) { Fabricate(:account, username: 'bob') } let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') } @@ -37,6 +48,7 @@ RSpec.describe NotificationMailer do end include_examples 'delivery to non functional user' + include_examples 'delivery without status' end describe 'follow' do @@ -75,6 +87,7 @@ RSpec.describe NotificationMailer do end include_examples 'delivery to non functional user' + include_examples 'delivery without status' end describe 'reblog' do @@ -95,6 +108,7 @@ RSpec.describe NotificationMailer do end include_examples 'delivery to non functional user' + include_examples 'delivery without status' end describe 'follow_request' do diff --git a/spec/models/account_statuses_cleanup_policy_spec.rb b/spec/models/account_statuses_cleanup_policy_spec.rb index a08fd723a4..c142a0359a 100644 --- a/spec/models/account_statuses_cleanup_policy_spec.rb +++ b/spec/models/account_statuses_cleanup_policy_spec.rb @@ -16,6 +16,8 @@ RSpec.describe AccountStatusesCleanupPolicy do describe 'save hooks' do context 'when widening a policy' do + subject { account_statuses_cleanup_policy.last_inspected } + let!(:account_statuses_cleanup_policy) do Fabricate(:account_statuses_cleanup_policy, account: account, @@ -33,64 +35,64 @@ RSpec.describe AccountStatusesCleanupPolicy do account_statuses_cleanup_policy.record_last_inspected(42) end - it 'invalidates last_inspected when widened because of keep_direct' do - account_statuses_cleanup_policy.keep_direct = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_direct' do + before { account_statuses_cleanup_policy.update(keep_direct: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_pinned' do - account_statuses_cleanup_policy.keep_pinned = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_pinned' do + before { account_statuses_cleanup_policy.update(keep_pinned: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_polls' do - account_statuses_cleanup_policy.keep_polls = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_polls' do + before { account_statuses_cleanup_policy.update(keep_polls: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_media' do - account_statuses_cleanup_policy.keep_media = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_media' do + before { account_statuses_cleanup_policy.update(keep_media: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_self_fav' do - account_statuses_cleanup_policy.keep_self_fav = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_self_fav' do + before { account_statuses_cleanup_policy.update(keep_self_fav: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of keep_self_bookmark' do - account_statuses_cleanup_policy.keep_self_bookmark = false - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of keep_self_bookmark' do + before { account_statuses_cleanup_policy.update(keep_self_bookmark: false) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of higher min_favs' do - account_statuses_cleanup_policy.min_favs = 5 - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of higher min_favs' do + before { account_statuses_cleanup_policy.update(min_favs: 5) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of disabled min_favs' do - account_statuses_cleanup_policy.min_favs = nil - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of disabled min_favs' do + before { account_statuses_cleanup_policy.update(min_favs: nil) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of higher min_reblogs' do - account_statuses_cleanup_policy.min_reblogs = 5 - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of higher min_reblogs' do + before { account_statuses_cleanup_policy.update(min_reblogs: 5) } + + it { is_expected.to be_nil } end - it 'invalidates last_inspected when widened because of disable min_reblogs' do - account_statuses_cleanup_policy.min_reblogs = nil - account_statuses_cleanup_policy.save - expect(account_statuses_cleanup_policy.last_inspected).to be_nil + context 'when widened because of disable min_reblogs' do + before { account_statuses_cleanup_policy.update(min_reblogs: nil) } + + it { is_expected.to be_nil } end end diff --git a/spec/models/admin/ng_rule_spec.rb b/spec/models/admin/ng_rule_spec.rb index fb85e6e9bb..ccae8403b4 100644 --- a/spec/models/admin/ng_rule_spec.rb +++ b/spec/models/admin/ng_rule_spec.rb @@ -278,5 +278,35 @@ RSpec.describe Admin::NgRule do it_behaves_like 'matches rule', 'reaction' end + + context 'with emoji reaction origin domain' do + let(:account) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/actor') } + let(:ng_rule) { Fabricate(:ng_rule, reaction_type: ['emoji_reaction'], emoji_reaction_origin_domain: 'ohagi.com') } + + context 'when remote emoji matches domain' do + let(:options) { { uri: uri, recipient: Fabricate(:account), reaction_type: 'emoji_reaction', emoji_reaction_origin_domain: 'ohagi.com' } } + + it_behaves_like 'matches rule', 'reaction' + end + + context 'when remote emoji does not match domain' do + let(:options) { { uri: uri, recipient: Fabricate(:account), reaction_type: 'emoji_reaction', emoji_reaction_origin_domain: 'test.com' } } + + it_behaves_like 'does not match rule' + end + + context 'when local emoji' do + let(:options) { { uri: uri, recipient: Fabricate(:account), reaction_type: 'emoji_reaction', emoji_reaction_origin_domain: nil } } + + it_behaves_like 'does not match rule' + end + + context 'when local emoji but all options match' do + let(:ng_rule) { Fabricate(:ng_rule, reaction_type: ['emoji_reaction']) } + let(:options) { { uri: uri, recipient: Fabricate(:account), reaction_type: 'emoji_reaction', emoji_reaction_origin_domain: nil } } + + it_behaves_like 'matches rule', 'reaction' + end + end end end diff --git a/spec/models/block_spec.rb b/spec/models/block_spec.rb index 84f0f318f4..62d7e40e28 100644 --- a/spec/models/block_spec.rb +++ b/spec/models/block_spec.rb @@ -3,11 +3,37 @@ require 'rails_helper' RSpec.describe Block do - describe 'validations' do + describe 'Associations' do it { is_expected.to belong_to(:account).required } it { is_expected.to belong_to(:target_account).required } end + describe '#local?' do + it { is_expected.to_not be_local } + end + + describe 'Callbacks' do + describe 'Setting a URI' do + context 'when URI exists' do + subject { Fabricate.build :block, uri: 'https://uri/value' } + + it 'does not change' do + expect { subject.save } + .to not_change(subject, :uri) + end + end + + context 'when URI is blank' do + subject { Fabricate.build :follow, uri: nil } + + it 'populates the value' do + expect { subject.save } + .to change(subject, :uri).to(be_present) + end + end + end + end + it 'removes blocking cache after creation' do account = Fabricate(:account) target_account = Fabricate(:account) diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb index 06bf07ed78..48e78830dd 100644 --- a/spec/models/export_spec.rb +++ b/spec/models/export_spec.rb @@ -3,66 +3,175 @@ require 'rails_helper' RSpec.describe Export do + subject { described_class.new(account) } + let(:account) { Fabricate(:account) } let(:target_accounts) do - [{}, { username: 'one', domain: 'local.host' }].map(&method(:Fabricate).curry(2).call(:account)) + [ + Fabricate(:account), + Fabricate(:account, username: 'one', domain: 'local.host'), + ] end - describe 'to_csv' do - it 'returns a csv of the blocked accounts' do - target_accounts.each { |target_account| account.block!(target_account) } + describe '#to_bookmarks_csv' do + before { Fabricate.times(2, :bookmark, account: account) } - export = described_class.new(account).to_blocked_accounts_csv - results = export.strip.split + let(:export) { CSV.parse(subject.to_bookmarks_csv) } - expect(results.size).to eq 2 - expect(results.first).to eq 'one@local.host' + it 'returns a csv of bookmarks' do + expect(export) + .to contain_exactly( + include(/statuses/), + include(/statuses/) + ) end + end + + describe '#to_blocked_accounts_csv' do + before { target_accounts.each { |target_account| account.block!(target_account) } } + + let(:export) { CSV.parse(subject.to_blocked_accounts_csv) } + + it 'returns a csv of the blocked accounts' do + expect(export) + .to contain_exactly( + include('one@local.host'), + include(be_present) + ) + end + end + + describe '#to_muted_accounts_csv' do + before { target_accounts.each { |target_account| account.mute!(target_account) } } + + let(:export) { CSV.parse(subject.to_muted_accounts_csv) } it 'returns a csv of the muted accounts' do - target_accounts.each { |target_account| account.mute!(target_account) } - - export = described_class.new(account).to_muted_accounts_csv - results = export.strip.split("\n") - - expect(results.size).to eq 3 - expect(results.first).to eq 'Account address,Hide notifications' - expect(results.second).to eq 'one@local.host,true' + expect(export) + .to contain_exactly( + contain_exactly('Account address', 'Hide notifications'), + include('one@local.host', 'true'), + include(be_present) + ) end + end + + describe '#to_following_accounts_csv' do + before { target_accounts.each { |target_account| account.follow!(target_account) } } + + let(:export) { CSV.parse(subject.to_following_accounts_csv) } it 'returns a csv of the following accounts' do - target_accounts.each { |target_account| account.follow!(target_account) } - - export = described_class.new(account).to_following_accounts_csv - results = export.strip.split("\n") - - expect(results.size).to eq 3 - expect(results.first).to eq 'Account address,Show boosts,Notify on new posts,Languages' - expect(results.second).to eq 'one@local.host,true,false,' + expect(export) + .to contain_exactly( + contain_exactly('Account address', 'Show boosts', 'Notify on new posts', 'Languages'), + include('one@local.host', 'true', 'false', be_blank), + include(be_present) + ) end end - describe 'total_storage' do + describe '#to_lists_csv' do + before do + target_accounts.each do |target_account| + account.follow!(target_account) + Fabricate(:list, account: account).accounts << target_account + end + end + + let(:export) { CSV.parse(subject.to_lists_csv) } + + it 'returns a csv of the lists' do + expect(export) + .to contain_exactly( + include('one@local.host'), + include(be_present) + ) + end + end + + describe '#to_blocked_domains_csv' do + before { Fabricate.times(2, :account_domain_block, account: account) } + + let(:export) { CSV.parse(subject.to_blocked_domains_csv) } + + it 'returns a csv of the blocked domains' do + expect(export) + .to contain_exactly( + include(/example/), + include(/example/) + ) + end + end + + describe '#total_storage' do it 'returns the total size of the media attachments' do media_attachment = Fabricate(:media_attachment, account: account) - expect(described_class.new(account).total_storage).to eq media_attachment.file_file_size || 0 + expect(subject.total_storage).to eq media_attachment.file_file_size || 0 end end - describe 'total_follows' do - it 'returns the total number of the followed accounts' do - target_accounts.each { |target_account| account.follow!(target_account) } - expect(described_class.new(account.reload).total_follows).to eq 2 + describe '#total_statuses' do + before { Fabricate.times(2, :status, account: account) } + + it 'returns the total number of statuses' do + expect(subject.total_statuses).to eq(2) end + end + + describe '#total_bookmarks' do + before { Fabricate.times(2, :bookmark, account: account) } + + it 'returns the total number of bookmarks' do + expect(subject.total_bookmarks).to eq(2) + end + end + + describe '#total_follows' do + before { target_accounts.each { |target_account| account.follow!(target_account) } } + + it 'returns the total number of the followed accounts' do + expect(subject.total_follows).to eq(2) + end + end + + describe '#total_lists' do + before { Fabricate.times(2, :list, account: account) } + + it 'returns the total number of lists' do + expect(subject.total_lists).to eq(2) + end + end + + describe '#total_followers' do + before { target_accounts.each { |target_account| target_account.follow!(account) } } + + it 'returns the total number of the follower accounts' do + expect(subject.total_followers).to eq(2) + end + end + + describe '#total_blocks' do + before { target_accounts.each { |target_account| account.block!(target_account) } } it 'returns the total number of the blocked accounts' do - target_accounts.each { |target_account| account.block!(target_account) } - expect(described_class.new(account.reload).total_blocks).to eq 2 + expect(subject.total_blocks).to eq(2) end + end + + describe '#total_mutes' do + before { target_accounts.each { |target_account| account.mute!(target_account) } } it 'returns the total number of the muted accounts' do - target_accounts.each { |target_account| account.mute!(target_account) } - expect(described_class.new(account.reload).total_mutes).to eq 2 + expect(subject.total_mutes).to eq(2) + end + end + + describe '#total_domain_blocks' do + before { Fabricate.times(2, :account_domain_block, account: account) } + + it 'returns the total number of account domain blocks' do + expect(subject.total_domain_blocks).to eq(2) end end end diff --git a/spec/models/featured_tag_spec.rb b/spec/models/featured_tag_spec.rb index 0f5ead8f97..20059cfba4 100644 --- a/spec/models/featured_tag_spec.rb +++ b/spec/models/featured_tag_spec.rb @@ -126,16 +126,54 @@ RSpec.describe FeaturedTag do end describe '#decrement' do - it 'decreases the count and updates the last_status_at timestamp' do - tag = Fabricate :tag, name: 'test' - status = Fabricate :status, visibility: :public, created_at: 10.days.ago - status.tags << tag + let(:tag) { Fabricate(:tag, name: 'test') } + let(:account) { Fabricate(:account) } + let(:featured_tag) { Fabricate(:featured_tag, name: 'test', account: account) } - featured_tag = Fabricate :featured_tag, name: 'test', account: status.account + context 'when removing the last status using the tag' do + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } - expect { featured_tag.decrement(status.id) } - .to change(featured_tag, :statuses_count).from(1).to(0) - .and change(featured_tag, :last_status_at).to(nil) + before do + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(status) } + .to change(featured_tag, :statuses_count).from(1).to(0) + .and change(featured_tag, :last_status_at).to(nil) + end + end + + context 'when removing a previous status using the tag' do + let(:previous_status) { Fabricate(:status, visibility: :public, account: account, created_at: 1.month.ago) } + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } + + before do + previous_status.tags << tag + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(previous_status) } + .to change(featured_tag, :statuses_count).from(2).to(1) + .and not_change(featured_tag, :last_status_at) + end + end + + context 'when removing the most recent use of the tag' do + let(:previous_status) { Fabricate(:status, visibility: :public, account: account, created_at: 1.month.ago) } + let(:status) { Fabricate(:status, visibility: :public, account: account, created_at: 10.days.ago) } + + before do + previous_status.tags << tag + status.tags << tag + end + + it 'decreases the count and updates the last_status_at timestamp' do + expect { featured_tag.decrement(status) } + .to change(featured_tag, :statuses_count).from(2).to(1) + .and change(featured_tag, :last_status_at) + end end end end diff --git a/spec/models/friend_domain_spec.rb b/spec/models/friend_domain_spec.rb index 336f921ebd..d3992ed149 100644 --- a/spec/models/friend_domain_spec.rb +++ b/spec/models/friend_domain_spec.rb @@ -21,7 +21,6 @@ RSpec.describe FriendDomain do type: 'Follow', actor: 'https://cb6e6126.ngrok.io/actor', object: 'https://www.w3.org/ns/activitystreams#Public', - inboxUrl: 'https://cb6e6126.ngrok.io/inbox', }))).to have_been_made.once end end diff --git a/spec/models/list_spec.rb b/spec/models/list_spec.rb index 62a84dfebf..48c273d3ec 100644 --- a/spec/models/list_spec.rb +++ b/spec/models/list_spec.rb @@ -11,7 +11,11 @@ RSpec.describe List do context 'when account has hit max list limit' do let(:account) { Fabricate :account } - before { stub_const 'List::PER_ACCOUNT_LIMIT', 0 } + before do + stub_const 'List::PER_ACCOUNT_LIMIT', 1 + + Fabricate(:list, account: account) + end context 'when creating a new list' do it { is_expected.to_not allow_value(account).for(:account).against(:base).with_message(I18n.t('lists.errors.limit')) } diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb index 5f91ae0967..43e9ed087b 100644 --- a/spec/models/media_attachment_spec.rb +++ b/spec/models/media_attachment_spec.rb @@ -295,12 +295,21 @@ RSpec.describe MediaAttachment, :attachment_processing do end it 'queues CacheBusterWorker jobs' do - original_path = media.file.path(:original) - small_path = media.file.path(:small) + original_url = media.file.url(:original) + small_url = media.file.url(:small) expect { media.destroy } - .to enqueue_sidekiq_job(CacheBusterWorker).with(original_path) - .and enqueue_sidekiq_job(CacheBusterWorker).with(small_path) + .to enqueue_sidekiq_job(CacheBusterWorker).with(original_url) + .and enqueue_sidekiq_job(CacheBusterWorker).with(small_url) + end + + context 'with a missing remote attachment' do + let(:media) { Fabricate(:media_attachment, remote_url: 'https://example.com/foo.png', file: nil) } + + it 'does not queue CacheBusterWorker jobs' do + expect { media.destroy } + .to_not enqueue_sidekiq_job(CacheBusterWorker) + end end end diff --git a/spec/models/notification_policy_spec.rb b/spec/models/notification_policy_spec.rb index 02a582bb08..7d1b494dd5 100644 --- a/spec/models/notification_policy_spec.rb +++ b/spec/models/notification_policy_spec.rb @@ -7,19 +7,25 @@ RSpec.describe NotificationPolicy do subject { Fabricate(:notification_policy) } let(:sender) { Fabricate(:account) } + let(:suspended_sender) { Fabricate(:account) } before do Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender), filtered: true, type: :mention) Fabricate(:notification_request, account: subject.account, from_account: sender) + + Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: suspended_sender), filtered: true, type: :mention) + Fabricate(:notification_request, account: subject.account, from_account: suspended_sender) + + suspended_sender.suspend! + subject.summarize! end - it 'sets pending_requests_count' do - expect(subject.pending_requests_count).to eq 1 - end - - it 'sets pending_notifications_count' do - expect(subject.pending_notifications_count).to eq 2 + it 'sets pending_requests_count and pending_notifications_count' do + expect(subject).to have_attributes( + pending_requests_count: 1, + pending_notifications_count: 2 + ) end end end diff --git a/spec/models/poll_spec.rb b/spec/models/poll_spec.rb index 736f3615d0..66f521ab3f 100644 --- a/spec/models/poll_spec.rb +++ b/spec/models/poll_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' RSpec.describe Poll do - describe 'scopes' do + describe 'Scopes' do let(:status) { Fabricate(:status) } let(:attached_poll) { Fabricate(:poll, status: status) } let(:not_attached_poll) do @@ -13,7 +13,7 @@ RSpec.describe Poll do end end - describe 'attached' do + describe '.attached' do it 'finds the correct records' do results = described_class.attached @@ -21,7 +21,7 @@ RSpec.describe Poll do end end - describe 'unattached' do + describe '.unattached' do it 'finds the correct records' do results = described_class.unattached @@ -30,11 +30,23 @@ RSpec.describe Poll do end end - describe 'validations' do - context 'when not valid' do - subject { Fabricate.build(:poll) } + describe '#reset_votes!' do + let(:poll) { Fabricate :poll, cached_tallies: [2, 3], votes_count: 5, voters_count: 5 } + let!(:vote) { Fabricate :poll_vote, poll: } - it { is_expected.to validate_presence_of(:expires_at) } + it 'resets vote data and deletes votes' do + expect { poll.reset_votes! } + .to change(poll, :cached_tallies).to([0, 0]) + .and change(poll, :votes_count).to(0) + .and(change(poll, :voters_count).to(0)) + expect { vote.reload } + .to raise_error(ActiveRecord::RecordNotFound) end end + + describe 'Validations' do + subject { Fabricate.build(:poll) } + + it { is_expected.to validate_presence_of(:expires_at) } + end end diff --git a/spec/models/public_feed_spec.rb b/spec/models/public_feed_spec.rb index d948b958d6..63878d563e 100644 --- a/spec/models/public_feed_spec.rb +++ b/spec/models/public_feed_spec.rb @@ -80,12 +80,10 @@ RSpec.describe PublicFeed do context 'without a viewer' do let(:viewer) { nil } - it 'includes remote instances statuses' do - expect(subject).to include(remote_status.id) - end - - it 'includes local statuses' do - expect(subject).to include(local_status.id) + it 'includes remote instances statuses and local statuses' do + expect(subject) + .to include(remote_status.id) + .and include(local_status.id) end it 'includes public_unlisted statuses' do @@ -108,12 +106,10 @@ RSpec.describe PublicFeed do context 'with a viewer' do let(:viewer) { Fabricate(:account, username: 'viewer') } - it 'includes remote instances statuses' do - expect(subject).to include(remote_status.id) - end - - it 'includes local statuses' do - expect(subject).to include(local_status.id) + it 'includes remote instances statuses and local statuses' do + expect(subject) + .to include(remote_status.id) + .and include(local_status.id) end it 'excludes public_unlisted statuses' do diff --git a/spec/models/report_filter_spec.rb b/spec/models/report_filter_spec.rb index 8668eb3d10..51933e475a 100644 --- a/spec/models/report_filter_spec.rb +++ b/spec/models/report_filter_spec.rb @@ -30,4 +30,17 @@ RSpec.describe ReportFilter do expect(Report).to have_received(:resolved) end end + + context 'when given remote target_origin and also by_target_domain' do + let!(:matching_report) { Fabricate :report, target_account: Fabricate(:account, domain: 'match.example') } + let!(:non_matching_report) { Fabricate :report, target_account: Fabricate(:account, domain: 'other.example') } + + it 'preserves the domain value' do + filter = described_class.new(by_target_domain: 'match.example', target_origin: 'remote') + + expect(filter.results) + .to include(matching_report) + .and not_include(non_matching_report) + end + end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 7a29e51d08..be9a5a76eb 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -419,23 +419,43 @@ RSpec.describe User do end end - describe 'token_for_app' do + describe '#token_for_app' do let(:user) { Fabricate(:user) } - let(:app) { Fabricate(:application, owner: user) } - it 'returns a token' do - expect(user.token_for_app(app)).to be_a(Doorkeeper::AccessToken) + context 'when user owns app but does not have tokens' do + let(:app) { Fabricate(:application, owner: user) } + + it 'creates and returns a persisted token' do + expect { user.token_for_app(app) } + .to change(Doorkeeper::AccessToken.where(resource_owner_id: user.id, application: app), :count).by(1) + end end - it 'persists a token' do - t = user.token_for_app(app) - expect(user.token_for_app(app)).to eql(t) + context 'when user owns app and already has tokens' do + let(:app) { Fabricate(:application, owner: user) } + let!(:token) { Fabricate :access_token, application: app, resource_owner_id: user.id } + + it 'returns a persisted token' do + expect(user.token_for_app(app)) + .to be_a(Doorkeeper::AccessToken) + .and eq(token) + end end - it 'is nil if user does not own app' do - app.update!(owner: nil) + context 'when user does not own app' do + let(:app) { Fabricate(:application) } - expect(user.token_for_app(app)).to be_nil + it 'returns nil' do + expect(user.token_for_app(app)) + .to be_nil + end + end + + context 'when app is nil' do + it 'returns nil' do + expect(user.token_for_app(nil)) + .to be_nil + end end end diff --git a/spec/policies/account_moderation_note_policy_spec.rb b/spec/policies/account_moderation_note_policy_spec.rb index 8c37acc39f..8b33a71012 100644 --- a/spec/policies/account_moderation_note_policy_spec.rb +++ b/spec/policies/account_moderation_note_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountModerationNotePolicy do subject { described_class } @@ -12,13 +11,13 @@ RSpec.describe AccountModerationNotePolicy do permissions :create? do context 'when staff' do it 'grants to create' do - expect(subject).to permit(admin, described_class) + expect(subject).to permit(admin, AccountModerationNote) end end context 'when not staff' do it 'denies to create' do - expect(subject).to_not permit(john, described_class) + expect(subject).to_not permit(john, AccountModerationNote) end end end diff --git a/spec/policies/account_policy_spec.rb b/spec/policies/account_policy_spec.rb index d7a21d8e39..75724e831b 100644 --- a/spec/policies/account_policy_spec.rb +++ b/spec/policies/account_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountPolicy do subject { described_class } @@ -24,7 +23,7 @@ RSpec.describe AccountPolicy do end end - permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header? do + permissions :show?, :unsilence?, :unsensitive?, :remove_avatar?, :remove_header?, :sensitive?, :warn? do context 'when staff' do it 'permits' do expect(subject).to permit(admin, alice) diff --git a/spec/policies/account_warning_policy_spec.rb b/spec/policies/account_warning_policy_spec.rb new file mode 100644 index 0000000000..9abc9d35d6 --- /dev/null +++ b/spec/policies/account_warning_policy_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountWarningPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :show? do + context 'with an admin' do + it { is_expected.to permit(admin, AccountWarning.new) } + end + + context 'with a non-admin' do + context 'when account is not target' do + it { is_expected.to_not permit(account, AccountWarning.new) } + end + + context 'when account is target' do + it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id)) } + end + end + end + + permissions :appeal? do + context 'when account is not target' do + it { is_expected.to_not permit(account, AccountWarning.new) } + end + + context 'when account is target' do + context 'when record is appealable' do + it { is_expected.to permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago + 1.hour)) } + end + + context 'when record is not appealable' do + it { is_expected.to_not permit(account, AccountWarning.new(target_account_id: account.id, created_at: Appeal::MAX_STRIKE_AGE.ago - 1.hour)) } + end + end + end +end diff --git a/spec/policies/account_warning_preset_policy_spec.rb b/spec/policies/account_warning_preset_policy_spec.rb index 53e224f19f..33f2fb1187 100644 --- a/spec/policies/account_warning_preset_policy_spec.rb +++ b/spec/policies/account_warning_preset_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AccountWarningPresetPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe AccountWarningPresetPolicy do permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, AccountWarningPreset) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, AccountWarningPreset) end end end diff --git a/spec/policies/admin/status_policy_spec.rb b/spec/policies/admin/status_policy_spec.rb index 07af425516..4df29393e3 100644 --- a/spec/policies/admin/status_policy_spec.rb +++ b/spec/policies/admin/status_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe Admin::StatusPolicy do let(:policy) { described_class } @@ -13,13 +12,13 @@ RSpec.describe Admin::StatusPolicy do permissions :index?, :update?, :review?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Status) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Status) end end end diff --git a/spec/policies/announcement_policy_spec.rb b/spec/policies/announcement_policy_spec.rb index 503ffca6dc..ab0c1dbaf5 100644 --- a/spec/policies/announcement_policy_spec.rb +++ b/spec/policies/announcement_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AnnouncementPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe AnnouncementPolicy do permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Announcement) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Announcement) end end end diff --git a/spec/policies/appeal_policy_spec.rb b/spec/policies/appeal_policy_spec.rb index 1bf8ce0a0d..cdb93bf56c 100644 --- a/spec/policies/appeal_policy_spec.rb +++ b/spec/policies/appeal_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe AppealPolicy do let(:policy) { described_class } @@ -12,18 +11,18 @@ RSpec.describe AppealPolicy do permissions :index? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Appeal) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Appeal) end end end - permissions :reject? do + permissions :reject?, :approve? do context 'with an admin' do context 'with a pending appeal' do before { allow(appeal).to receive(:pending?).and_return(true) } diff --git a/spec/policies/audit_log_policy_spec.rb b/spec/policies/audit_log_policy_spec.rb new file mode 100644 index 0000000000..d9d9359433 --- /dev/null +++ b/spec/policies/audit_log_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AuditLogPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index? do + context 'with an admin' do + it { is_expected.to permit(admin, nil) } + end + + context 'with a non-admin' do + it { is_expected.to_not permit(account, nil) } + end + end +end diff --git a/spec/policies/backup_policy_spec.rb b/spec/policies/backup_policy_spec.rb index 28cb65d789..031021d91d 100644 --- a/spec/policies/backup_policy_spec.rb +++ b/spec/policies/backup_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe BackupPolicy do subject { described_class } diff --git a/spec/policies/canonical_email_block_policy_spec.rb b/spec/policies/canonical_email_block_policy_spec.rb index f5029d9e6b..b253b439a6 100644 --- a/spec/policies/canonical_email_block_policy_spec.rb +++ b/spec/policies/canonical_email_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe CanonicalEmailBlockPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe CanonicalEmailBlockPolicy do permissions :index?, :show?, :test?, :create?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, CanonicalEmailBlock) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, CanonicalEmailBlock) end end end diff --git a/spec/policies/custom_emoji_policy_spec.rb b/spec/policies/custom_emoji_policy_spec.rb index cb869c7d9a..189885938c 100644 --- a/spec/policies/custom_emoji_policy_spec.rb +++ b/spec/policies/custom_emoji_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe CustomEmojiPolicy do subject { described_class } diff --git a/spec/policies/dashboard_policy_spec.rb b/spec/policies/dashboard_policy_spec.rb new file mode 100644 index 0000000000..90c71db381 --- /dev/null +++ b/spec/policies/dashboard_policy_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DashboardPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index? do + context 'with an admin' do + it { is_expected.to permit(admin, nil) } + end + + context 'with a non-admin' do + it { is_expected.to_not permit(account, nil) } + end + end +end diff --git a/spec/policies/delivery_policy_spec.rb b/spec/policies/delivery_policy_spec.rb index bb82389eec..8bc200159a 100644 --- a/spec/policies/delivery_policy_spec.rb +++ b/spec/policies/delivery_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe DeliveryPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe DeliveryPolicy do permissions :clear_delivery_errors?, :restart_delivery?, :stop_delivery? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, nil) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, nil) end end end diff --git a/spec/policies/domain_allow_policy_spec.rb b/spec/policies/domain_allow_policy_spec.rb new file mode 100644 index 0000000000..1d285065b8 --- /dev/null +++ b/spec/policies/domain_allow_policy_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe DomainAllowPolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:john) { Fabricate(:account) } + + permissions :index?, :show?, :create?, :destroy? do + context 'when admin' do + it 'permits' do + expect(subject).to permit(admin, DomainAllow) + end + end + + context 'when not admin' do + it 'denies' do + expect(subject).to_not permit(john, DomainAllow) + end + end + end +end diff --git a/spec/policies/domain_block_policy_spec.rb b/spec/policies/domain_block_policy_spec.rb index 4c89f3f374..7c77d1870d 100644 --- a/spec/policies/domain_block_policy_spec.rb +++ b/spec/policies/domain_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe DomainBlockPolicy do subject { described_class } @@ -9,7 +8,7 @@ RSpec.describe DomainBlockPolicy do let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } let(:john) { Fabricate(:account) } - permissions :index?, :show?, :create?, :destroy? do + permissions :index?, :show?, :create?, :destroy?, :update? do context 'when admin' do it 'permits' do expect(subject).to permit(admin, DomainBlock) diff --git a/spec/policies/email_domain_block_policy_spec.rb b/spec/policies/email_domain_block_policy_spec.rb index 7ecff4be49..e98d65a3c7 100644 --- a/spec/policies/email_domain_block_policy_spec.rb +++ b/spec/policies/email_domain_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe EmailDomainBlockPolicy do subject { described_class } diff --git a/spec/policies/follow_recommendation_policy_spec.rb b/spec/policies/follow_recommendation_policy_spec.rb index ae74d5c3a8..665ed9b059 100644 --- a/spec/policies/follow_recommendation_policy_spec.rb +++ b/spec/policies/follow_recommendation_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe FollowRecommendationPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe FollowRecommendationPolicy do permissions :show?, :suppress?, :unsuppress? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, FollowRecommendation) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, FollowRecommendation) end end end diff --git a/spec/policies/instance_policy_spec.rb b/spec/policies/instance_policy_spec.rb index a0d9a008b7..6cdc738022 100644 --- a/spec/policies/instance_policy_spec.rb +++ b/spec/policies/instance_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe InstancePolicy do subject { described_class } diff --git a/spec/policies/invite_policy_spec.rb b/spec/policies/invite_policy_spec.rb index cbe3735d80..3717a44999 100644 --- a/spec/policies/invite_policy_spec.rb +++ b/spec/policies/invite_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe InvitePolicy do subject { described_class } diff --git a/spec/policies/ip_block_policy_spec.rb b/spec/policies/ip_block_policy_spec.rb index 97bc239e9a..33ea342c10 100644 --- a/spec/policies/ip_block_policy_spec.rb +++ b/spec/policies/ip_block_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe IpBlockPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe IpBlockPolicy do permissions :index?, :show?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, IpBlock) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, IpBlock) end end end diff --git a/spec/policies/poll_policy_spec.rb b/spec/policies/poll_policy_spec.rb new file mode 100644 index 0000000000..aa1701cb06 --- /dev/null +++ b/spec/policies/poll_policy_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe PollPolicy do + subject { described_class } + + let(:account) { Fabricate(:account) } + let(:poll) { Fabricate :poll } + + permissions :vote? do + context 'when account cannot view status' do + before { poll.status.update(visibility: :private) } + + it { is_expected.to_not permit(account, poll) } + end + + context 'when account can view status' do + context 'when accounts do not block each other' do + it { is_expected.to permit(account, poll) } + end + + context 'when view blocks poll creator' do + before { Fabricate :block, account: account, target_account: poll.account } + + it { is_expected.to_not permit(account, poll) } + end + + context 'when poll creator blocks viewer' do + before { Fabricate :block, account: poll.account, target_account: account } + + it { is_expected.to_not permit(account, poll) } + end + end + end +end diff --git a/spec/policies/preview_card_policy_spec.rb b/spec/policies/preview_card_policy_spec.rb index a1944303e1..d02a6016cd 100644 --- a/spec/policies/preview_card_policy_spec.rb +++ b/spec/policies/preview_card_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe PreviewCardPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe PreviewCardPolicy do permissions :index?, :review? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, PreviewCard) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, PreviewCard) end end end diff --git a/spec/policies/preview_card_provider_policy_spec.rb b/spec/policies/preview_card_provider_policy_spec.rb index 676039a1b7..5e25b364a4 100644 --- a/spec/policies/preview_card_provider_policy_spec.rb +++ b/spec/policies/preview_card_provider_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe PreviewCardProviderPolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe PreviewCardProviderPolicy do permissions :index?, :review? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, PreviewCardProvider) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, PreviewCardProvider) end end end diff --git a/spec/policies/relay_policy_spec.rb b/spec/policies/relay_policy_spec.rb index 29ba02c26a..5983b2d2ff 100644 --- a/spec/policies/relay_policy_spec.rb +++ b/spec/policies/relay_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe RelayPolicy do subject { described_class } diff --git a/spec/policies/report_note_policy_spec.rb b/spec/policies/report_note_policy_spec.rb index b40a878887..02317f763a 100644 --- a/spec/policies/report_note_policy_spec.rb +++ b/spec/policies/report_note_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe ReportNotePolicy do subject { described_class } diff --git a/spec/policies/report_policy_spec.rb b/spec/policies/report_policy_spec.rb index 4fc4178075..67f40b5188 100644 --- a/spec/policies/report_policy_spec.rb +++ b/spec/policies/report_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe ReportPolicy do subject { described_class } diff --git a/spec/policies/rule_policy_spec.rb b/spec/policies/rule_policy_spec.rb index 5d435e38c1..3086f30446 100644 --- a/spec/policies/rule_policy_spec.rb +++ b/spec/policies/rule_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe RulePolicy do let(:policy) { described_class } @@ -11,13 +10,13 @@ RSpec.describe RulePolicy do permissions :index?, :create?, :update?, :destroy? do context 'with an admin' do it 'permits' do - expect(policy).to permit(admin, Tag) + expect(policy).to permit(admin, Rule) end end context 'with a non-admin' do it 'denies' do - expect(policy).to_not permit(john, Tag) + expect(policy).to_not permit(john, Rule) end end end diff --git a/spec/policies/settings_policy_spec.rb b/spec/policies/settings_policy_spec.rb index 4a99314905..48821c706a 100644 --- a/spec/policies/settings_policy_spec.rb +++ b/spec/policies/settings_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe SettingsPolicy do subject { described_class } diff --git a/spec/policies/software_update_policy_spec.rb b/spec/policies/software_update_policy_spec.rb index e19ba61612..2bda84cce9 100644 --- a/spec/policies/software_update_policy_spec.rb +++ b/spec/policies/software_update_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe SoftwareUpdatePolicy do subject { described_class } diff --git a/spec/policies/status_policy_spec.rb b/spec/policies/status_policy_spec.rb index a6c71e0cb0..2d386e829f 100644 --- a/spec/policies/status_policy_spec.rb +++ b/spec/policies/status_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe StatusPolicy, type: :model do subject { described_class } diff --git a/spec/policies/tag_policy_spec.rb b/spec/policies/tag_policy_spec.rb index 35da3cc62a..23166e4669 100644 --- a/spec/policies/tag_policy_spec.rb +++ b/spec/policies/tag_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe TagPolicy do subject { described_class } diff --git a/spec/policies/user_policy_spec.rb b/spec/policies/user_policy_spec.rb index 7854547d26..11a166a24e 100644 --- a/spec/policies/user_policy_spec.rb +++ b/spec/policies/user_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe UserPolicy do subject { described_class } @@ -112,4 +111,42 @@ RSpec.describe UserPolicy do end end end + + permissions :approve?, :reject? do + context 'when admin' do + context 'when user is approved' do + it { is_expected.to_not permit(admin, User.new(approved: true)) } + end + + context 'when user is not approved' do + it { is_expected.to permit(admin, User.new(approved: false)) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(john, User.new) } + end + end + + permissions :change_role? do + context 'when not admin' do + it { is_expected.to_not permit(john, User.new) } + end + + context 'when admin' do + let(:user) { User.new(role: role) } + + context 'when role of admin overrides user role' do + let(:role) { UserRole.new(position: admin.user.role.position - 10, id: 123) } + + it { is_expected.to permit(admin, user) } + end + + context 'when role of admin does not override user role' do + let(:role) { UserRole.new(position: admin.user.role.position + 10, id: 123) } + + it { is_expected.to_not permit(admin, user) } + end + end + end end diff --git a/spec/policies/user_role_policy_spec.rb b/spec/policies/user_role_policy_spec.rb new file mode 100644 index 0000000000..c48b345d68 --- /dev/null +++ b/spec/policies/user_role_policy_spec.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe UserRolePolicy do + subject { described_class } + + let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account } + let(:account) { Fabricate(:account) } + + permissions :index?, :create? do + context 'when admin' do + it { is_expected.to permit(admin, UserRole.new) } + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end + + permissions :update? do + context 'when admin' do + context 'when role of admin overrides relevant role' do + it { is_expected.to permit(admin, UserRole.new(position: admin.user.role.position - 10, id: 123)) } + end + + context 'when role of admin does not override relevant role' do + it { is_expected.to_not permit(admin, UserRole.new(position: admin.user.role.position + 10, id: 123)) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end + + permissions :destroy? do + context 'when admin' do + context 'when role of admin overrides relevant role' do + it { is_expected.to permit(admin, UserRole.new(position: admin.user.role.position - 10)) } + end + + context 'when role of admin does not override relevant role' do + it { is_expected.to_not permit(admin, UserRole.new(position: admin.user.role.position + 10)) } + end + + context 'when everyone role' do + it { is_expected.to_not permit(admin, UserRole.everyone) } + end + end + + context 'when not admin' do + it { is_expected.to_not permit(account, UserRole.new) } + end + end +end diff --git a/spec/policies/webhook_policy_spec.rb b/spec/policies/webhook_policy_spec.rb index 96aaae2c30..9899235d83 100644 --- a/spec/policies/webhook_policy_spec.rb +++ b/spec/policies/webhook_policy_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'rails_helper' -require 'pundit/rspec' RSpec.describe WebhookPolicy do let(:policy) { described_class } diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index ee03b49bc6..d2ad40be73 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -43,6 +43,7 @@ require 'paperclip/matchers' require 'capybara/rspec' require 'chewy/rspec' require 'email_spec/rspec' +require 'pundit/rspec' require 'test_prof/recipes/rspec/before_all' Rails.root.glob('spec/support/**/*.rb').each { |f| require f } @@ -112,6 +113,7 @@ RSpec.configure do |config| config.include ActiveSupport::Testing::TimeHelpers config.include Chewy::Rspec::Helpers config.include Redisable + config.include DomainHelpers config.include ThreadingHelpers config.include SignedRequestHelpers, type: :request config.include CommandLineHelpers, type: :cli @@ -161,6 +163,11 @@ RSpec.configure do |config| host! Rails.configuration.x.local_domain end + config.before :each, type: :system do + # Align with capybara config so that rails helpers called from rspec use matching host + host! 'localhost:3000' + end + config.after do Rails.cache.clear redis.del(redis.keys) diff --git a/spec/requests/api/v1/accounts/credentials_spec.rb b/spec/requests/api/v1/accounts/credentials_spec.rb index 0bd3ace132..91a4721eca 100644 --- a/spec/requests/api/v1/accounts/credentials_spec.rb +++ b/spec/requests/api/v1/accounts/credentials_spec.rb @@ -53,8 +53,6 @@ RSpec.describe 'credentials API' do patch '/api/v1/accounts/update_credentials', headers: headers, params: params end - before { allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) } - let(:params) do { avatar: fixture_file_upload('avatar.gif', 'image/gif'), @@ -112,7 +110,7 @@ RSpec.describe 'credentials API' do }) expect(ActivityPub::UpdateDistributionWorker) - .to have_received(:perform_async).with(user.account_id) + .to have_enqueued_sidekiq_job(user.account_id) end def expect_account_updates diff --git a/spec/requests/api/v1/accounts_spec.rb b/spec/requests/api/v1/accounts_spec.rb index b4e6a07973..d423a08f12 100644 --- a/spec/requests/api/v1/accounts_spec.rb +++ b/spec/requests/api/v1/accounts_spec.rb @@ -200,6 +200,26 @@ RSpec.describe '/api/v1/accounts' do end end + context 'when user tries to follow their own account' do + subject do + post "/api/v1/accounts/#{other_account.id}/follow", headers: headers + end + + let(:locked) { false } + let(:other_account) { user.account } + + it 'returns http forbidden and error message' do + subject + + error_msg = I18n.t('accounts.self_follow_error') + + expect(response).to have_http_status(403) + expect(response.parsed_body[:error]).to eq(error_msg) + end + + it_behaves_like 'forbidden for wrong scope', 'read:accounts' + end + context 'when modifying follow options' do let(:locked) { false } diff --git a/spec/requests/api/v1/antennas_spec.rb b/spec/requests/api/v1/antennas_spec.rb index 3b4846bf06..913789fe99 100644 --- a/spec/requests/api/v1/antennas_spec.rb +++ b/spec/requests/api/v1/antennas_spec.rb @@ -120,6 +120,20 @@ RSpec.describe 'Antennas' do expect(Antenna.where(account: user.account).count).to eq(1) end + context 'when specify a list when create new' do + let(:list) { Fabricate(:list, account: user.account, title: 'ohagi') } + let(:params) { { title: 'my antenna', list_id: list.id.to_s, insert_feeds: 'true' } } + + it 'returns the new antenna with list', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(response.parsed_body).to match(a_hash_including(title: 'my antenna', insert_feeds: true)) + expect(response.parsed_body['list']).to match(a_hash_including(id: list.id.to_s, title: list.title)) + expect(Antenna.where(account: user.account).count).to eq(1) + end + end + context 'when a title is not given' do let(:params) { { title: '' } } diff --git a/spec/requests/api/v1/apps/credentials_spec.rb b/spec/requests/api/v1/apps/credentials_spec.rb index 8e5fa14b7e..3aca53ed0a 100644 --- a/spec/requests/api/v1/apps/credentials_spec.rb +++ b/spec/requests/api/v1/apps/credentials_spec.rb @@ -44,6 +44,7 @@ RSpec.describe 'Credentials' do expect(response.parsed_body) .to not_include(client_id: be_present) .and not_include(client_secret: be_present) + .and not_include(client_secret_expires_at: be_present) end end diff --git a/spec/requests/api/v1/apps_spec.rb b/spec/requests/api/v1/apps_spec.rb index cf43e14d62..4e9147ba32 100644 --- a/spec/requests/api/v1/apps_spec.rb +++ b/spec/requests/api/v1/apps_spec.rb @@ -42,6 +42,7 @@ RSpec.describe 'Apps' do id: app.id.to_s, client_id: app.uid, client_secret: app.secret, + client_secret_expires_at: 0, name: client_name, website: website, scopes: ['read', 'write'], diff --git a/spec/requests/api/v1/instances/domain_blocks_spec.rb b/spec/requests/api/v1/instances/domain_blocks_spec.rb index d0707d784c..40b79c9691 100644 --- a/spec/requests/api/v1/instances/domain_blocks_spec.rb +++ b/spec/requests/api/v1/instances/domain_blocks_spec.rb @@ -4,14 +4,15 @@ require 'rails_helper' RSpec.describe 'Domain Blocks' do let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes).token } let(:scopes) { 'read' } - let(:headers) { { Authorization: "Bearer #{token.token}" } } + let(:headers) { { Authorization: "Bearer #{token}" } } describe 'GET /api/v1/instance/domain_blocks' do - before do - Fabricate(:domain_block) - end + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id).token } + + before { Fabricate(:domain_block) } context 'with domain blocks set to all' do before { Setting.show_domain_blocks = 'all' } @@ -45,11 +46,95 @@ RSpec.describe 'Domain Blocks' do context 'with domain blocks set to users' do before { Setting.show_domain_blocks = 'users' } - it 'returns http not found' do - get api_v1_instance_domain_blocks_path + context 'without authentication token' do + it 'returns http not found' do + get api_v1_instance_domain_blocks_path - expect(response) - .to have_http_status(404) + expect(response) + .to have_http_status(404) + end + end + + context 'with authentication token' do + context 'with unapproved user' do + before { user.update(approved: false) } + + it 'returns http not found' do + get api_v1_instance_domain_blocks_path, headers: { 'Authorization' => "Bearer #{token}" } + + expect(response) + .to have_http_status(404) + end + end + + context 'with unconfirmed user' do + before { user.update(confirmed_at: nil) } + + it 'returns http not found' do + get api_v1_instance_domain_blocks_path, headers: { 'Authorization' => "Bearer #{token}" } + + expect(response) + .to have_http_status(404) + end + end + + context 'with disabled user' do + before { user.update(disabled: true) } + + it 'returns http not found' do + get api_v1_instance_domain_blocks_path, headers: { 'Authorization' => "Bearer #{token}" } + + expect(response) + .to have_http_status(404) + end + end + + context 'with suspended user' do + before { user.account.update(suspended_at: Time.zone.now) } + + it 'returns http not found' do + get api_v1_instance_domain_blocks_path, headers: { 'Authorization' => "Bearer #{token}" } + + expect(response) + .to have_http_status(403) + end + end + + context 'with moved user' do + before { user.account.update(moved_to_account_id: Fabricate(:account).id) } + + it 'returns http success' do + get api_v1_instance_domain_blocks_path, headers: { 'Authorization' => "Bearer #{token}" } + + expect(response) + .to have_http_status(200) + + expect(response.content_type) + .to start_with('application/json') + + expect(response.parsed_body) + .to be_present + .and(be_an(Array)) + .and(have_attributes(size: 1)) + end + end + + context 'with normal user' do + it 'returns http success' do + get api_v1_instance_domain_blocks_path, headers: { 'Authorization' => "Bearer #{token}" } + + expect(response) + .to have_http_status(200) + + expect(response.content_type) + .to start_with('application/json') + + expect(response.parsed_body) + .to be_present + .and(be_an(Array)) + .and(have_attributes(size: 1)) + end + end end end diff --git a/spec/requests/api/v1/profiles_spec.rb b/spec/requests/api/v1/profiles_spec.rb index fd3ab4bf58..de7a20b133 100644 --- a/spec/requests/api/v1/profiles_spec.rb +++ b/spec/requests/api/v1/profiles_spec.rb @@ -15,10 +15,6 @@ RSpec.describe 'Deleting profile images' do let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } describe 'DELETE /api/v1/profile' do - before do - allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) - end - context 'when deleting an avatar' do context 'with wrong scope' do before do @@ -38,7 +34,8 @@ RSpec.describe 'Deleting profile images' do account.reload expect(account.avatar).to_not exist expect(account.header).to exist - expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) + expect(ActivityPub::UpdateDistributionWorker) + .to have_enqueued_sidekiq_job(account.id) end end @@ -61,7 +58,8 @@ RSpec.describe 'Deleting profile images' do account.reload expect(account.avatar).to exist expect(account.header).to_not exist - expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(account.id) + expect(ActivityPub::UpdateDistributionWorker) + .to have_enqueued_sidekiq_job(account.id) end end end diff --git a/spec/requests/api/v2/instance_spec.rb b/spec/requests/api/v2/instance_spec.rb index fae92b7391..f6a670cc24 100644 --- a/spec/requests/api/v2/instance_spec.rb +++ b/spec/requests/api/v2/instance_spec.rb @@ -56,7 +56,7 @@ RSpec.describe 'Instances' do max_media_attachments: Status::MEDIA_ATTACHMENTS_LIMIT ), polls: include( - max_options: PollValidator::MAX_OPTIONS + max_options: PollOptionsValidator::MAX_OPTIONS ) ) ) diff --git a/spec/requests/api/v2/notifications_spec.rb b/spec/requests/api/v2/notifications_spec.rb index ffa0a71c77..72df063d49 100644 --- a/spec/requests/api/v2/notifications_spec.rb +++ b/spec/requests/api/v2/notifications_spec.rb @@ -143,6 +143,55 @@ RSpec.describe 'Notifications' do end end + context 'when there are numerous notifications for the same final group' do + before do + user.account.notifications.destroy_all + 5.times.each { FavouriteService.new.call(Fabricate(:account), user.account.statuses.first) } + end + + context 'with no options' do + it 'returns a notification group covering all notifications' do + subject + + notification_ids = user.account.notifications.order(id: :asc).pluck(:id) + + expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body[:notification_groups]).to contain_exactly( + a_hash_including( + type: 'favourite', + sample_account_ids: have_attributes(size: 5), + page_min_id: notification_ids.first.to_s, + page_max_id: notification_ids.last.to_s + ) + ) + end + end + + context 'with min_id param' do + let(:params) { { min_id: user.account.notifications.order(id: :asc).first.id - 1 } } + + it 'returns a notification group covering all notifications' do + subject + + notification_ids = user.account.notifications.order(id: :asc).pluck(:id) + + expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body[:notification_groups]).to contain_exactly( + a_hash_including( + type: 'favourite', + sample_account_ids: have_attributes(size: 5), + page_min_id: notification_ids.first.to_s, + page_max_id: notification_ids.last.to_s + ) + ) + end + end + end + context 'with no options' do it 'returns expected notification types', :aggregate_failures do subject @@ -316,6 +365,18 @@ RSpec.describe 'Notifications' do .to start_with('application/json') end + context 'with an ungrouped notification' do + let(:notification) { Fabricate(:notification, account: user.account, type: :favourite) } + + it 'returns http success' do + get "/api/v2/notifications/ungrouped-#{notification.id}", headers: headers + + expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + end + end + context 'when notification belongs to someone else' do let(:notification) { Fabricate(:notification, group_key: 'foobar') } @@ -347,6 +408,19 @@ RSpec.describe 'Notifications' do expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound) end + context 'with an ungrouped notification' do + let(:notification) { Fabricate(:notification, account: user.account, type: :favourite) } + + it 'destroys the notification' do + post "/api/v2/notifications/ungrouped-#{notification.id}/dismiss", headers: headers + + expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound) + end + end + context 'when notification belongs to someone else' do let(:notification) { Fabricate(:notification, group_key: 'foobar') } diff --git a/spec/requests/auth/sessions/security_key_options_spec.rb b/spec/requests/auth/sessions/security_key_options_spec.rb index 6246e4beb3..e53b9802b4 100644 --- a/spec/requests/auth/sessions/security_key_options_spec.rb +++ b/spec/requests/auth/sessions/security_key_options_spec.rb @@ -6,7 +6,7 @@ require 'webauthn/fake_client' RSpec.describe 'Security Key Options' do describe 'GET /auth/sessions/security_key_options' do let!(:user) do - Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) + Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret) end context 'with WebAuthn and OTP enabled as second factor' do diff --git a/spec/requests/statuses/embed_spec.rb b/spec/requests/statuses/embed_spec.rb new file mode 100644 index 0000000000..33c7ea192c --- /dev/null +++ b/spec/requests/statuses/embed_spec.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Status embed' do + describe 'GET /users/:account_username/statuses/:id/embed' do + subject { get "/users/#{account.username}/statuses/#{status.id}/embed" } + + let(:account) { Fabricate(:account) } + let(:status) { Fabricate(:status, account: account) } + + context 'when account is suspended' do + let(:account) { Fabricate(:account, suspended: true) } + + it 'returns http gone' do + subject + + expect(response) + .to have_http_status(410) + end + end + + context 'when status is a reblog' do + let(:original_account) { Fabricate(:account, domain: 'example.com') } + let(:original_status) { Fabricate(:status, account: original_account, url: 'https://example.com/123') } + let(:status) { Fabricate(:status, account: account, reblog: original_status) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + + context 'when status is public' do + it 'renders status successfully', :aggregate_failures do + subject + + expect(response) + .to have_http_status(200) + expect(response.parsed_body.at('body.embed')) + .to be_present + expect(response.headers).to include( + 'Vary' => 'Accept, Accept-Language, Cookie', + 'Cache-Control' => include('public'), + 'Link' => include('activity+json') + ) + end + end + + context 'when status is private' do + let(:status) { Fabricate(:status, account: account, visibility: :private) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + + context 'when status is direct' do + let(:status) { Fabricate(:status, account: account, visibility: :direct) } + + it 'returns http not found' do + subject + + expect(response) + .to have_http_status(404) + end + end + end +end diff --git a/spec/requests/well_known/host_meta_spec.rb b/spec/requests/well_known/host_meta_spec.rb index 09f17baa89..726911dda1 100644 --- a/spec/requests/well_known/host_meta_spec.rb +++ b/spec/requests/well_known/host_meta_spec.rb @@ -9,19 +9,39 @@ RSpec.describe 'The /.well-known/host-meta request' do expect(response) .to have_http_status(200) .and have_attributes( - media_type: 'application/xrd+xml', - body: host_meta_xml_template + media_type: 'application/xrd+xml' + ) + + doc = Nokogiri::XML(response.parsed_body) + expect(doc.at_xpath('/xrd:XRD/xrd:Link[@rel="lrdd"]/@template', 'xrd' => 'http://docs.oasis-open.org/ns/xri/xrd-1.0').value) + .to eq 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}' + end + + it 'returns http success with valid JSON response with .json extension' do + get '/.well-known/host-meta.json' + + expect(response) + .to have_http_status(200) + .and have_attributes( + media_type: 'application/json' + ) + + expect(response.parsed_body) + .to include( + links: [ + 'rel' => 'lrdd', + 'template' => 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}', + ] ) end - private + it 'returns http success with valid JSON response with Accept header' do + get '/.well-known/host-meta', headers: { 'Accept' => 'application/json' } - def host_meta_xml_template - <<~XML - - - - - XML + expect(response) + .to have_http_status(200) + .and have_attributes( + media_type: 'application/json' + ) end end diff --git a/spec/routing/well_known_routes_spec.rb b/spec/routing/well_known_routes_spec.rb index 6578e939ae..84081059bb 100644 --- a/spec/routing/well_known_routes_spec.rb +++ b/spec/routing/well_known_routes_spec.rb @@ -4,9 +4,14 @@ require 'rails_helper' RSpec.describe 'Well Known routes' do describe 'the host-meta route' do - it 'routes to correct place with xml format' do + it 'routes to correct place' do expect(get('/.well-known/host-meta')) - .to route_to('well_known/host_meta#show', format: 'xml') + .to route_to('well_known/host_meta#show') + end + + it 'routes to correct place with json format' do + expect(get('/.well-known/host-meta.json')) + .to route_to('well_known/host_meta#show', format: 'json') end end diff --git a/spec/serializers/activitypub/note_serializer_spec.rb b/spec/serializers/activitypub/note_serializer_spec.rb index 963dd6afb5..c89bb47af6 100644 --- a/spec/serializers/activitypub/note_serializer_spec.rb +++ b/spec/serializers/activitypub/note_serializer_spec.rb @@ -26,7 +26,7 @@ RSpec.describe ActivityPub::NoteSerializer do end end - it 'has the expected shape' do + it 'has the expected shape and replies collection' do expect(subject).to include({ '@context' => include('https://www.w3.org/ns/activitystreams'), 'type' => 'Note', @@ -34,27 +34,24 @@ RSpec.describe ActivityPub::NoteSerializer do 'contentMap' => include({ 'zh-TW' => a_kind_of(String), }), + 'replies' => replies_collection_values, }) end - it 'has a replies collection' do - expect(subject['replies']['type']).to eql('Collection') + def replies_collection_values + include( + 'type' => eql('Collection'), + 'first' => include( + 'type' => eql('CollectionPage'), + 'items' => reply_items + ) + ) end - it 'has a replies collection with a first Page' do - expect(subject['replies']['first']['type']).to eql('CollectionPage') - end - - it 'includes public self-replies in its replies collection' do - expect(subject['replies']['first']['items']).to include(reply_by_account_first.uri, reply_by_account_next.uri, reply_by_account_third.uri) - end - - it 'does not include replies from others in its replies collection' do - expect(subject['replies']['first']['items']).to_not include(reply_by_other_first.uri) - end - - it 'does not include replies with direct visibility in its replies collection' do - expect(subject['replies']['first']['items']).to_not include(reply_by_account_visibility_direct.uri) + def reply_items + include(reply_by_account_first.uri, reply_by_account_next.uri, reply_by_account_third.uri) # Public self replies + .and(not_include(reply_by_other_first.uri)) # Replies from others + .and(not_include(reply_by_account_visibility_direct.uri)) # Replies with direct visibility end it 'send as public visibility' do diff --git a/spec/serializers/rest/preview_card_serializer_spec.rb b/spec/serializers/rest/preview_card_serializer_spec.rb new file mode 100644 index 0000000000..41ba305b7c --- /dev/null +++ b/spec/serializers/rest/preview_card_serializer_spec.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe REST::PreviewCardSerializer do + subject do + serialized_record_json( + preview_card, + described_class + ) + end + + context 'when preview card does not have author data' do + let(:preview_card) { Fabricate.build :preview_card } + + it 'includes empty authors array' do + expect(subject.deep_symbolize_keys) + .to include( + authors: be_an(Array).and(be_empty) + ) + end + end + + context 'when preview card has fediverse author data' do + let(:preview_card) { Fabricate.build :preview_card, author_account: Fabricate(:account) } + + it 'includes populated authors array' do + expect(subject.deep_symbolize_keys) + .to include( + authors: be_an(Array).and( + contain_exactly( + include( + account: be_present + ) + ) + ) + ) + end + end + + context 'when preview card has non-fediverse author data' do + let(:preview_card) { Fabricate.build :preview_card, author_name: 'Name', author_url: 'https://host.example/123' } + + it 'includes populated authors array' do + expect(subject.deep_symbolize_keys) + .to include( + authors: be_an(Array).and( + contain_exactly( + include( + name: 'Name', + url: 'https://host.example/123' + ) + ) + ) + ) + end + end +end diff --git a/spec/services/account_statuses_cleanup_service_spec.rb b/spec/services/account_statuses_cleanup_service_spec.rb index 857bd4fda4..553d20029a 100644 --- a/spec/services/account_statuses_cleanup_service_spec.rb +++ b/spec/services/account_statuses_cleanup_service_spec.rb @@ -27,39 +27,35 @@ RSpec.describe AccountStatusesCleanupService do end context 'when given a normal budget of 10' do - it 'reports 3 deleted statuses' do - expect(subject.call(account_policy, 10)).to eq 3 - end + it 'reports 3 deleted statuses and records last deleted id, deletes statuses, preserves recent unrelated statuses' do + expect(subject.call(account_policy, 10)) + .to eq(3) - it 'records the last deleted id' do - subject.call(account_policy, 10) - expect(account_policy.last_inspected).to eq [old_status.id, another_old_status.id].max - end + expect(account_policy.last_inspected) + .to eq [old_status.id, another_old_status.id].max - it 'actually deletes the statuses' do - subject.call(account_policy, 10) - expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])).to be_nil - expect { recent_status.reload }.to_not raise_error - end - - it 'preserves recent and unrelated statuses' do - subject.call(account_policy, 10) - expect { unrelated_status.reload }.to_not raise_error - expect { recent_status.reload }.to_not raise_error + expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])) + .to be_nil + expect { recent_status.reload } + .to_not raise_error + expect { unrelated_status.reload } + .to_not raise_error + expect { recent_status.reload } + .to_not raise_error end end context 'when called repeatedly with a budget of 2' do - it 'reports 2 then 1 deleted statuses' do - expect(subject.call(account_policy, 2)).to eq 2 - expect(subject.call(account_policy, 2)).to eq 1 - end + it 'reports 2 then 1 deleted statuses and deletes in expected order' do + expect(subject.call(account_policy, 2)) + .to eq(2) + expect(Status.find_by(id: very_old_status.id)) + .to be_nil - it 'actually deletes the statuses in the expected order' do - subject.call(account_policy, 2) - expect(Status.find_by(id: very_old_status.id)).to be_nil - subject.call(account_policy, 2) - expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])).to be_nil + expect(subject.call(account_policy, 2)) + .to eq(1) + expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])) + .to be_nil end end @@ -90,19 +86,24 @@ RSpec.describe AccountStatusesCleanupService do end end - it 'reports 0 deleted statuses then 0 then 3 then 0 again' do - expect(subject.call(account_policy, 10)).to eq 0 - expect(subject.call(account_policy, 10)).to eq 0 - expect(subject.call(account_policy, 10)).to eq 3 - expect(subject.call(account_policy, 10)).to eq 0 + it 'reports 0 deleted statuses then 0 then 3 then 0 again, and keeps id under oldest deletable record' do + expect(subject.call(account_policy, 10)) + .to eq(0) + expect(subject.call(account_policy, 10)) + .to eq(0) + expect(subject.call(account_policy, 10)) + .to eq(3) + expect(subject.call(account_policy, 10)) + .to eq(0) + expect(account_policy.last_inspected) + .to be < oldest_deletable_record_id end - it 'never causes the recorded id to get higher than oldest deletable toot' do - subject.call(account_policy, 10) - subject.call(account_policy, 10) - subject.call(account_policy, 10) - subject.call(account_policy, 10) - expect(account_policy.last_inspected).to be < Mastodon::Snowflake.id_at(account_policy.min_status_age.seconds.ago, with_random: false) + def oldest_deletable_record_id + Mastodon::Snowflake.id_at( + account_policy.min_status_age.seconds.ago, + with_random: false + ) end end end diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index 37be11e662..b55483b016 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -2,10 +2,6 @@ require 'rails_helper' -def poll_option_json(name, votes) - { type: 'Note', name: name, replies: { type: 'Collection', totalItems: votes } } -end - RSpec.describe ActivityPub::ProcessStatusUpdateService do subject { described_class.new } @@ -15,9 +11,12 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do [ { type: 'Hashtag', name: 'hoge' }, { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + { type: 'Mention', href: ActivityPub::TagManager.instance.uri_for(alice) }, + { type: 'Mention', href: bogus_mention }, ] end let(:content) { 'Hello universe' } + let(:bogus_mention) { 'https://example.com/users/erroringuser' } let(:payload) do { '@context': 'https://www.w3.org/ns/activitystreams', @@ -40,19 +39,21 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do let(:media_attachments) { [] } before do - mentions.each { |a| Fabricate(:mention, status: status, account: a) } + mentions.each { |(account, silent)| Fabricate(:mention, status: status, account: account, silent: silent) } tags.each { |t| status.tags << t } media_attachments.each { |m| status.media_attachments << m } + stub_request(:get, bogus_mention).to_raise(HTTP::ConnectionError) end describe '#call' do - it 'updates text and content warning' do + it 'updates text and content warning, and schedules re-fetching broken mention' do subject.call(status, json, json) expect(status.reload) .to have_attributes( text: eq('Hello universe'), spoiler_text: eq('Show more') ) + expect(MentionResolveWorker).to have_enqueued_sidekiq_job(status.id, bogus_mention, anything) end context 'when the changes are only in sanitized-out HTML' do @@ -262,16 +263,22 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do updated: '2021-09-08T22:39:25Z', tag: [ { type: 'Hashtag', name: 'foo' }, + { type: 'Hashtag', name: 'bar' }, ], } end before do - subject.call(status, json, json) + status.account.featured_tags.create!(name: 'bar') + status.account.featured_tags.create!(name: 'test') end - it 'updates tags' do - expect(status.tags.reload.map(&:name)).to eq %w(foo) + it 'updates tags and featured tags' do + expect { subject.call(status, json, json) } + .to change { status.tags.reload.pluck(:name) }.from(%w(test foo)).to(%w(foo bar)) + .and change { status.account.featured_tags.find_by(name: 'test').statuses_count }.by(-1) + .and change { status.account.featured_tags.find_by(name: 'bar').statuses_count }.by(1) + .and change { status.account.featured_tags.find_by(name: 'bar').last_status_at }.from(nil).to(be_present) end end @@ -324,7 +331,19 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do end context 'when originally with mentions' do - let(:mentions) { [alice, bob] } + let(:mentions) { [[alice, false], [bob, false]] } + + before do + subject.call(status, json, json) + end + + it 'updates mentions' do + expect(status.active_mentions.reload.map(&:account_id)).to eq [alice.id] + end + end + + context 'when originally with silent mentions' do + let(:mentions) { [[alice, true], [bob, true]] } before do subject.call(status, json, json) @@ -338,7 +357,6 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do context 'when originally without media attachments' do before do stub_request(:get, 'https://example.com/foo.png').to_return(body: attachment_fixture('emojo.png')) - subject.call(status, json, json) end let(:payload) do @@ -354,19 +372,18 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do } end - it 'updates media attachments' do - media_attachment = status.reload.ordered_media_attachments.first + it 'updates media attachments, fetches attachment, records media change in edit' do + subject.call(status, json, json) - expect(media_attachment).to_not be_nil - expect(media_attachment.remote_url).to eq 'https://example.com/foo.png' - end + expect(status.reload.ordered_media_attachments.first) + .to be_present + .and(have_attributes(remote_url: 'https://example.com/foo.png')) - it 'fetches the attachment' do - expect(a_request(:get, 'https://example.com/foo.png')).to have_been_made - end + expect(a_request(:get, 'https://example.com/foo.png')) + .to have_been_made - it 'records media change in edit' do - expect(status.edits.reload.last.ordered_media_attachment_ids).to_not be_empty + expect(status.edits.reload.last.ordered_media_attachment_ids) + .to_not be_empty end end @@ -388,27 +405,26 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do before do allow(RedownloadMediaWorker).to receive(:perform_async) + end + + it 'updates the existing media attachment in-place, does not queue redownload, updates media, records media change' do subject.call(status, json, json) - end - it 'updates the existing media attachment in-place' do - media_attachment = status.media_attachments.ordered.reload.first + expect(status.media_attachments.ordered.reload.first) + .to be_present + .and have_attributes( + remote_url: 'https://example.com/foo.png', + description: 'A picture' + ) - expect(media_attachment).to_not be_nil - expect(media_attachment.remote_url).to eq 'https://example.com/foo.png' - expect(media_attachment.description).to eq 'A picture' - end + expect(RedownloadMediaWorker) + .to_not have_received(:perform_async) - it 'does not queue redownload for the existing media attachment' do - expect(RedownloadMediaWorker).to_not have_received(:perform_async) - end + expect(status.ordered_media_attachments.map(&:remote_url)) + .to eq %w(https://example.com/foo.png) - it 'updates media attachments' do - expect(status.ordered_media_attachments.map(&:remote_url)).to eq %w(https://example.com/foo.png) - end - - it 'records media change in edit' do - expect(status.edits.reload.last.ordered_media_attachment_ids).to_not be_empty + expect(status.edits.reload.last.ordered_media_attachment_ids) + .to_not be_empty end end @@ -416,10 +432,11 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do before do poll = Fabricate(:poll, status: status) status.update(preloadable_poll: poll) - subject.call(status, json, json) end it 'removes poll and records media change in edit' do + subject.call(status, json, json) + expect(status.reload.poll).to be_nil expect(status.edits.reload.last.poll_options).to be_nil end @@ -442,15 +459,13 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do } end - before do - subject.call(status, json, json) - end - it 'creates a poll and records media change in edit' do - poll = status.reload.poll + subject.call(status, json, json) + + expect(status.reload.poll) + .to be_present + .and have_attributes(options: %w(Foo Bar Baz)) - expect(poll).to_not be_nil - expect(poll.options).to eq %w(Foo Bar Baz) expect(status.edits.reload.last.poll_options).to eq %w(Foo Bar Baz) end end @@ -738,4 +753,8 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do end end end + + def poll_option_json(name, votes) + { type: 'Note', name: name, replies: { type: 'Collection', totalItems: votes } } + end end diff --git a/spec/services/activitypub/synchronize_followers_service_spec.rb b/spec/services/activitypub/synchronize_followers_service_spec.rb index 974368b7d7..70f27627e1 100644 --- a/spec/services/activitypub/synchronize_followers_service_spec.rb +++ b/spec/services/activitypub/synchronize_followers_service_spec.rb @@ -10,7 +10,7 @@ RSpec.describe ActivityPub::SynchronizeFollowersService do let(:bob) { Fabricate(:account, username: 'bob') } let(:eve) { Fabricate(:account, username: 'eve') } let(:mallory) { Fabricate(:account, username: 'mallory') } - let(:collection_uri) { 'http://example.com/partial-followers' } + let(:collection_uri) { 'https://example.com/partial-followers' } let(:items) do [alice, eve, mallory].map do |account| @@ -27,14 +27,14 @@ RSpec.describe ActivityPub::SynchronizeFollowersService do }.with_indifferent_access end + before do + alice.follow!(actor) + bob.follow!(actor) + mallory.request_follow!(actor) + end + shared_examples 'synchronizes followers' do before do - alice.follow!(actor) - bob.follow!(actor) - mallory.request_follow!(actor) - - allow(ActivityPub::DeliveryWorker).to receive(:perform_async) - subject.call(actor, collection_uri) end @@ -46,7 +46,7 @@ RSpec.describe ActivityPub::SynchronizeFollowersService do expect(mallory) .to be_following(actor) # Convert follow request to follow when accepted expect(ActivityPub::DeliveryWorker) - .to have_received(:perform_async).with(anything, eve.id, actor.inbox_url) # Send Undo Follow to actor + .to have_enqueued_sidekiq_job(anything, eve.id, actor.inbox_url) # Send Undo Follow to actor end end @@ -76,7 +76,7 @@ RSpec.describe ActivityPub::SynchronizeFollowersService do it_behaves_like 'synchronizes followers' end - context 'when the endpoint is a paginated Collection of actor URIs' do + context 'when the endpoint is a single-page paginated Collection of actor URIs' do let(:payload) do { '@context': 'https://www.w3.org/ns/activitystreams', @@ -96,5 +96,106 @@ RSpec.describe ActivityPub::SynchronizeFollowersService do it_behaves_like 'synchronizes followers' end + + context 'when the endpoint is a paginated Collection of actor URIs split across multiple pages' do + before do + stub_request(:get, 'https://example.com/partial-followers') + .to_return(status: 200, headers: { 'Content-Type': 'application/activity+json' }, body: Oj.dump({ + '@context': 'https://www.w3.org/ns/activitystreams', + type: 'Collection', + id: 'https://example.com/partial-followers', + first: 'https://example.com/partial-followers/1', + })) + + stub_request(:get, 'https://example.com/partial-followers/1') + .to_return(status: 200, headers: { 'Content-Type': 'application/activity+json' }, body: Oj.dump({ + '@context': 'https://www.w3.org/ns/activitystreams', + type: 'CollectionPage', + id: 'https://example.com/partial-followers/1', + partOf: 'https://example.com/partial-followers', + next: 'https://example.com/partial-followers/2', + items: [alice, eve].map { |account| ActivityPub::TagManager.instance.uri_for(account) }, + })) + + stub_request(:get, 'https://example.com/partial-followers/2') + .to_return(status: 200, headers: { 'Content-Type': 'application/activity+json' }, body: Oj.dump({ + '@context': 'https://www.w3.org/ns/activitystreams', + type: 'CollectionPage', + id: 'https://example.com/partial-followers/2', + partOf: 'https://example.com/partial-followers', + items: ActivityPub::TagManager.instance.uri_for(mallory), + })) + end + + it_behaves_like 'synchronizes followers' + end + + context 'when the endpoint is a paginated Collection of actor URIs split across, but one page errors out' do + before do + stub_request(:get, 'https://example.com/partial-followers') + .to_return(status: 200, headers: { 'Content-Type': 'application/activity+json' }, body: Oj.dump({ + '@context': 'https://www.w3.org/ns/activitystreams', + type: 'Collection', + id: 'https://example.com/partial-followers', + first: 'https://example.com/partial-followers/1', + })) + + stub_request(:get, 'https://example.com/partial-followers/1') + .to_return(status: 200, headers: { 'Content-Type': 'application/activity+json' }, body: Oj.dump({ + '@context': 'https://www.w3.org/ns/activitystreams', + type: 'CollectionPage', + id: 'https://example.com/partial-followers/1', + partOf: 'https://example.com/partial-followers', + next: 'https://example.com/partial-followers/2', + items: [mallory].map { |account| ActivityPub::TagManager.instance.uri_for(account) }, + })) + + stub_request(:get, 'https://example.com/partial-followers/2') + .to_return(status: 404) + end + + it 'confirms pending follow request but does not remove extra followers' do + previous_follower_ids = actor.followers.pluck(:id) + + subject.call(actor, collection_uri) + + expect(previous_follower_ids - actor.followers.reload.pluck(:id)) + .to be_empty + expect(mallory) + .to be_following(actor) + end + end + + context 'when the endpoint is a paginated Collection of actor URIs with more pages than we allow' do + let(:payload) do + { + '@context': 'https://www.w3.org/ns/activitystreams', + type: 'Collection', + id: collection_uri, + first: { + type: 'CollectionPage', + partOf: collection_uri, + items: items, + next: "#{collection_uri}/page2", + }, + }.with_indifferent_access + end + + before do + stub_const('ActivityPub::SynchronizeFollowersService::MAX_COLLECTION_PAGES', 1) + stub_request(:get, collection_uri).to_return(status: 200, body: Oj.dump(payload), headers: { 'Content-Type': 'application/activity+json' }) + end + + it 'confirms pending follow request but does not remove extra followers' do + previous_follower_ids = actor.followers.pluck(:id) + + subject.call(actor, collection_uri) + + expect(previous_follower_ids - actor.followers.reload.pluck(:id)) + .to be_empty + expect(mallory) + .to be_following(actor) + end + end end end diff --git a/spec/services/app_sign_up_service_spec.rb b/spec/services/app_sign_up_service_spec.rb index ec7b7516f9..b78868db49 100644 --- a/spec/services/app_sign_up_service_spec.rb +++ b/spec/services/app_sign_up_service_spec.rb @@ -53,17 +53,7 @@ RSpec.describe AppSignUpService do Setting.registrations_mode = 'open' Fabricate(:email_domain_block, allow_with_approval: true, domain: 'smtp.email.com') allow(User).to receive(:skip_mx_check?).and_return(false) - - resolver = instance_double(Resolv::DNS, :timeouts= => nil) - - allow(resolver).to receive(:getresources) - .with('email.com', Resolv::DNS::Resource::IN::MX) - .and_return([instance_double(Resolv::DNS::Resource::MX, exchange: 'smtp.email.com')]) - allow(resolver).to receive(:getresources).with('email.com', Resolv::DNS::Resource::IN::A).and_return([]) - allow(resolver).to receive(:getresources).with('email.com', Resolv::DNS::Resource::IN::AAAA).and_return([]) - allow(resolver).to receive(:getresources).with('smtp.email.com', Resolv::DNS::Resource::IN::A).and_return([instance_double(Resolv::DNS::Resource::IN::A, address: '2.3.4.5')]) - allow(resolver).to receive(:getresources).with('smtp.email.com', Resolv::DNS::Resource::IN::AAAA).and_return([instance_double(Resolv::DNS::Resource::IN::AAAA, address: 'fd00::2')]) - allow(Resolv::DNS).to receive(:open).and_yield(resolver) + configure_mx(domain: 'email.com', exchange: 'smtp.email.com') end it 'creates an unapproved user', :aggregate_failures do diff --git a/spec/services/authorize_follow_service_spec.rb b/spec/services/authorize_follow_service_spec.rb index 533b791fb7..de28572802 100644 --- a/spec/services/authorize_follow_service_spec.rb +++ b/spec/services/authorize_follow_service_spec.rb @@ -12,15 +12,15 @@ RSpec.describe AuthorizeFollowService do before do FollowRequest.create(account: bob, target_account: sender) + end + + it 'removes follow request and creates follow relation' do subject.call(bob, sender) - end - it 'removes follow request' do - expect(bob.requested?(sender)).to be false - end - - it 'creates follow relation' do - expect(bob.following?(sender)).to be true + expect(bob) + .to_not be_requested(sender) + expect(bob) + .to be_following(sender) end end @@ -30,19 +30,17 @@ RSpec.describe AuthorizeFollowService do before do FollowRequest.create(account: bob, target_account: sender) stub_request(:post, bob.inbox_url).to_return(status: 200) + end + + it 'removes follow request, creates follow relation, send accept activity', :inline_jobs do subject.call(bob, sender) - end - it 'removes follow request' do - expect(bob.requested?(sender)).to be false - end - - it 'creates follow relation' do - expect(bob.following?(sender)).to be true - end - - it 'sends an accept activity', :inline_jobs do - expect(a_request(:post, bob.inbox_url)).to have_been_made.once + expect(bob) + .to_not be_requested(sender) + expect(bob) + .to be_following(sender) + expect(a_request(:post, bob.inbox_url)) + .to have_been_made.once end end end diff --git a/spec/services/batched_remove_status_service_spec.rb b/spec/services/batched_remove_status_service_spec.rb index 628bb198ef..1ff73a633b 100644 --- a/spec/services/batched_remove_status_service_spec.rb +++ b/spec/services/batched_remove_status_service_spec.rb @@ -24,32 +24,38 @@ RSpec.describe BatchedRemoveStatusService, :inline_jobs do status_alice_hello status_alice_other + end + it 'removes status records, removes from author and local follower feeds, notifies stream, sends delete' do subject.call([status_alice_hello, status_alice_other]) + + expect { Status.find(status_alice_hello.id) } + .to raise_error ActiveRecord::RecordNotFound + expect { Status.find(status_alice_other.id) } + .to raise_error ActiveRecord::RecordNotFound + + expect(feed_ids_for(alice)) + .to_not include(status_alice_hello.id, status_alice_other.id) + + expect(feed_ids_for(jeff)) + .to_not include(status_alice_hello.id, status_alice_other.id) + + expect(redis) + .to have_received(:publish) + .with("timeline:#{jeff.id}", any_args).at_least(:once) + + expect(redis) + .to have_received(:publish) + .with('timeline:public', any_args).at_least(:once) + + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.at_least_once end - it 'removes statuses' do - expect { Status.find(status_alice_hello.id) }.to raise_error ActiveRecord::RecordNotFound - expect { Status.find(status_alice_other.id) }.to raise_error ActiveRecord::RecordNotFound - end - - it 'removes statuses from author\'s home feed' do - expect(HomeFeed.new(alice).get(10).pluck(:id)).to_not include(status_alice_hello.id, status_alice_other.id) - end - - it 'removes statuses from local follower\'s home feed' do - expect(HomeFeed.new(jeff).get(10).pluck(:id)).to_not include(status_alice_hello.id, status_alice_other.id) - end - - it 'notifies streaming API of followers' do - expect(redis).to have_received(:publish).with("timeline:#{jeff.id}", any_args).at_least(:once) - end - - it 'notifies streaming API of public timeline' do - expect(redis).to have_received(:publish).with('timeline:public', any_args).at_least(:once) - end - - it 'sends delete activity to followers' do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.at_least_once + def feed_ids_for(account) + HomeFeed + .new(account) + .get(10) + .pluck(:id) end end diff --git a/spec/services/block_service_spec.rb b/spec/services/block_service_spec.rb index 46dd691986..d9687a5404 100644 --- a/spec/services/block_service_spec.rb +++ b/spec/services/block_service_spec.rb @@ -26,15 +26,16 @@ RSpec.describe BlockService do before do stub_request(:post, 'http://example.com/inbox').to_return(status: 200) + end + + it 'creates a blocking relation and send block activity', :inline_jobs do subject.call(sender, bob) - end - it 'creates a blocking relation' do - expect(sender.blocking?(bob)).to be true - end + expect(sender) + .to be_blocking(bob) - it 'sends a block activity', :inline_jobs do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end end diff --git a/spec/services/bulk_import_service_spec.rb b/spec/services/bulk_import_service_spec.rb index 0197f81a44..f52fc4d7d5 100644 --- a/spec/services/bulk_import_service_spec.rb +++ b/spec/services/bulk_import_service_spec.rb @@ -24,30 +24,19 @@ RSpec.describe BulkImportService do ].map { |data| import.rows.create!(data: data) } end - before do - account.follow!(Fabricate(:account)) - end + before { account.follow!(Fabricate(:account)) } - it 'does not immediately change who the account follows' do - expect { subject.call(import) }.to_not(change { account.reload.active_relationships.to_a }) - end + it 'does not immediately change who the account follows, enqueues workers, sends follow requests after worker run' do + expect { subject.call(import) } + .to_not(change { account.reload.active_relationships.to_a }) - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - it 'requests to follow all the listed users once the workers have run' do - subject.call(import) + stub_resolve_account_and_drain_workers - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } - - Import::RowWorker.drain - - expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }).to contain_exactly('user@foo.bar', 'unknown@unknown.bar') + expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }) + .to contain_exactly('user@foo.bar', 'unknown@unknown.bar') end end @@ -71,31 +60,20 @@ RSpec.describe BulkImportService do account.follow!(to_be_unfollowed) end - it 'unfollows user not present on list' do - subject.call(import) - expect(account.following?(to_be_unfollowed)).to be false - end + it 'updates the existing follow relationship as expected and unfollows user not on list, enqueues workers, sends follow reqs after worker run' do + expect { subject.call(import) } + .to change { Follow.where(account: account, target_account: followed).pick(:show_reblogs, :notify, :languages) }.from([true, false, nil]).to([false, true, ['en']]) - it 'updates the existing follow relationship as expected' do - expect { subject.call(import) }.to change { Follow.where(account: account, target_account: followed).pick(:show_reblogs, :notify, :languages) }.from([true, false, nil]).to([false, true, ['en']]) - end + expect(account) + .to_not be_following(to_be_unfollowed) - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id)) - end + expect(row_worker_job_args) + .to match_array(rows[1..].map(&:id)) - it 'requests to follow all the expected users once the workers have run' do - subject.call(import) + stub_resolve_account_and_drain_workers - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } - - Import::RowWorker.drain - - expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }).to contain_exactly('user@foo.bar', 'unknown@unknown.bar') + expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }) + .to contain_exactly('user@foo.bar', 'unknown@unknown.bar') end end @@ -110,30 +88,19 @@ RSpec.describe BulkImportService do ].map { |data| import.rows.create!(data: data) } end - before do - account.block!(Fabricate(:account, username: 'already_blocked', domain: 'remote.org')) - end + before { account.block!(Fabricate(:account, username: 'already_blocked', domain: 'remote.org')) } - it 'does not immediately change who the account blocks' do - expect { subject.call(import) }.to_not(change { account.reload.blocking.to_a }) - end + it 'does not immediately change who the account blocks, enqueues worker, blocks after run' do + expect { subject.call(import) } + .to_not(change { account.reload.blocking.to_a }) - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - it 'blocks all the listed users once the workers have run' do - subject.call(import) + stub_resolve_account_and_drain_workers - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } - - Import::RowWorker.drain - - expect(account.blocking.map(&:acct)).to contain_exactly('already_blocked@remote.org', 'user@foo.bar', 'unknown@unknown.bar') + expect(account.reload.blocking.map(&:acct)) + .to contain_exactly('already_blocked@remote.org', 'user@foo.bar', 'unknown@unknown.bar') end end @@ -157,27 +124,18 @@ RSpec.describe BulkImportService do account.block!(to_be_unblocked) end - it 'unblocks user not present on list' do + it 'unblocks user not present on list, enqueues worker, requests follow after run' do subject.call(import) + expect(account.blocking?(to_be_unblocked)).to be false - end - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id)) - end + expect(row_worker_job_args) + .to match_array(rows[1..].map(&:id)) - it 'requests to follow all the expected users once the workers have run' do - subject.call(import) + stub_resolve_account_and_drain_workers - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } - - Import::RowWorker.drain - - expect(account.blocking.map(&:acct)).to contain_exactly('blocked@foo.bar', 'user@foo.bar', 'unknown@unknown.bar') + expect(account.blocking.map(&:acct)) + .to contain_exactly('blocked@foo.bar', 'user@foo.bar', 'unknown@unknown.bar') end end @@ -192,30 +150,19 @@ RSpec.describe BulkImportService do ].map { |data| import.rows.create!(data: data) } end - before do - account.mute!(Fabricate(:account, username: 'already_muted', domain: 'remote.org')) - end + before { account.mute!(Fabricate(:account, username: 'already_muted', domain: 'remote.org')) } - it 'does not immediately change who the account blocks' do - expect { subject.call(import) }.to_not(change { account.reload.muting.to_a }) - end + it 'does not immediately change who the account blocks, enqueures worker, mutes users after worker run' do + expect { subject.call(import) } + .to_not(change { account.reload.muting.to_a }) - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - it 'mutes all the listed users once the workers have run' do - subject.call(import) + stub_resolve_account_and_drain_workers - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } - - Import::RowWorker.drain - - expect(account.muting.map(&:acct)).to contain_exactly('already_muted@remote.org', 'user@foo.bar', 'unknown@unknown.bar') + expect(account.reload.muting.map(&:acct)) + .to contain_exactly('already_muted@remote.org', 'user@foo.bar', 'unknown@unknown.bar') end end @@ -239,31 +186,19 @@ RSpec.describe BulkImportService do account.mute!(to_be_unmuted) end - it 'updates the existing mute as expected' do - expect { subject.call(import) }.to change { Mute.where(account: account, target_account: muted).pick(:hide_notifications) }.from(false).to(true) - end + it 'updates the existing mute as expected and unblocks user not on list, and enqueues worker, and requests follow after worker run' do + expect { subject.call(import) } + .to change { Mute.where(account: account, target_account: muted).pick(:hide_notifications) }.from(false).to(true) - it 'unblocks user not present on list' do - subject.call(import) expect(account.muting?(to_be_unmuted)).to be false - end - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id)) - end + expect(row_worker_job_args) + .to match_array(rows[1..].map(&:id)) - it 'requests to follow all the expected users once the workers have run' do - subject.call(import) + stub_resolve_account_and_drain_workers - resolve_account_service_double = instance_double(ResolveAccountService) - allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double) - allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } - allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } - - Import::RowWorker.drain - - expect(account.muting.map(&:acct)).to contain_exactly('muted@foo.bar', 'user@foo.bar', 'unknown@unknown.bar') + expect(account.muting.map(&:acct)) + .to contain_exactly('muted@foo.bar', 'user@foo.bar', 'unknown@unknown.bar') end end @@ -284,13 +219,11 @@ RSpec.describe BulkImportService do account.block_domain!('blocked.com') end - it 'blocks all the new domains' do + it 'blocks all the new domains and marks import finished' do subject.call(import) - expect(account.domain_blocks.pluck(:domain)).to contain_exactly('alreadyblocked.com', 'blocked.com', 'to-block.com') - end - it 'marks the import as finished' do - subject.call(import) + expect(account.domain_blocks.pluck(:domain)) + .to contain_exactly('alreadyblocked.com', 'blocked.com', 'to-block.com') expect(import.reload.state_finished?).to be true end end @@ -312,14 +245,13 @@ RSpec.describe BulkImportService do account.block_domain!('blocked.com') end - it 'blocks all the new domains' do + it 'blocks all the new domains and marks import finished' do subject.call(import) - expect(account.domain_blocks.pluck(:domain)).to contain_exactly('blocked.com', 'to-block.com') - end - it 'marks the import as finished' do - subject.call(import) - expect(import.reload.state_finished?).to be true + expect(account.domain_blocks.pluck(:domain)) + .to contain_exactly('blocked.com', 'to-block.com') + expect(import.reload.state_finished?) + .to be true end end @@ -347,22 +279,16 @@ RSpec.describe BulkImportService do account.bookmarks.create!(status: bookmarked) end - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end - - it 'updates the bookmarks as expected once the workers have run' do + it 'enqueues workers for the expected rows and updates bookmarks after worker run' do subject.call(import) - service_double = instance_double(ActivityPub::FetchRemoteStatusService) - allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double) - allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') } - allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) } + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - Import::RowWorker.drain + stub_fetch_remote_and_drain_workers - expect(account.bookmarks.map { |bookmark| bookmark.status.uri }).to contain_exactly(already_bookmarked.uri, status.uri, bookmarked.uri, 'https://domain.unknown/foo') + expect(account.bookmarks.map { |bookmark| bookmark.status.uri }) + .to contain_exactly(already_bookmarked.uri, status.uri, bookmarked.uri, 'https://domain.unknown/foo') end end @@ -390,23 +316,48 @@ RSpec.describe BulkImportService do account.bookmarks.create!(status: bookmarked) end - it 'enqueues workers for the expected rows' do - subject.call(import) - expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id)) - end - - it 'updates the bookmarks as expected once the workers have run' do + it 'enqueues workers for the expected rows and updates bookmarks' do subject.call(import) - service_double = instance_double(ActivityPub::FetchRemoteStatusService) - allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double) - allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') } - allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) } + expect(row_worker_job_args) + .to match_array(rows.map(&:id)) - Import::RowWorker.drain + stub_fetch_remote_and_drain_workers - expect(account.bookmarks.map { |bookmark| bookmark.status.uri }).to contain_exactly(status.uri, bookmarked.uri, 'https://domain.unknown/foo') + expect(account.bookmarks.map { |bookmark| bookmark.status.uri }) + .to contain_exactly(status.uri, bookmarked.uri, 'https://domain.unknown/foo') end end + + def row_worker_job_args + Import::RowWorker + .jobs + .pluck('args') + .flatten + end + + def stub_resolve_account_and_drain_workers + resolve_account_service_double = instance_double(ResolveAccountService) + allow(ResolveAccountService) + .to receive(:new) + .and_return(resolve_account_service_double) + allow(resolve_account_service_double) + .to receive(:call) + .with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) } + allow(resolve_account_service_double) + .to receive(:call) + .with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) } + + Import::RowWorker.drain + end + + def stub_fetch_remote_and_drain_workers + service_double = instance_double(ActivityPub::FetchRemoteStatusService) + allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double) + allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') } + allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) } + + Import::RowWorker.drain + end end end diff --git a/spec/services/favourite_service_spec.rb b/spec/services/favourite_service_spec.rb index fb27494de5..6a9a5a810a 100644 --- a/spec/services/favourite_service_spec.rb +++ b/spec/services/favourite_service_spec.rb @@ -11,11 +11,9 @@ RSpec.describe FavouriteService do let(:bob) { Fabricate(:account) } let(:status) { Fabricate(:status, account: bob) } - before do - subject.call(sender, status) - end - it 'creates a favourite' do + subject.call(sender, status) + expect(status.favourites.first).to_not be_nil end end @@ -26,15 +24,16 @@ RSpec.describe FavouriteService do before do stub_request(:post, 'http://example.com/inbox').to_return(status: 200, body: '', headers: {}) + end + + it 'creates a favourite and sends like activity', :inline_jobs do subject.call(sender, status) - end - it 'creates a favourite' do - expect(status.favourites.first).to_not be_nil - end + expect(status.favourites.first) + .to_not be_nil - it 'sends a like activity', :inline_jobs do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb index a0b3b7fec4..b7643ccc7c 100644 --- a/spec/services/follow_service_spec.rb +++ b/spec/services/follow_service_spec.rb @@ -143,15 +143,16 @@ RSpec.describe FollowService do before do stub_request(:post, 'http://example.com/inbox').to_return(status: 200, body: '', headers: {}) + end + + it 'creates follow request and sends an activity to inbox', :inline_jobs do subject.call(sender, bob) - end - it 'creates follow request' do - expect(FollowRequest.find_by(account: sender, target_account: bob)).to_not be_nil - end + expect(FollowRequest.find_by(account: sender, target_account: bob)) + .to_not be_nil - it 'sends a follow activity to the inbox', :inline_jobs do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end diff --git a/spec/services/notify_service_spec.rb b/spec/services/notify_service_spec.rb index 935b94c709..9d9d4eed3d 100644 --- a/spec/services/notify_service_spec.rb +++ b/spec/services/notify_service_spec.rb @@ -319,6 +319,16 @@ RSpec.describe NotifyService do end end + context 'when sender is a moderator' do + let(:sender_role) { Fabricate(:user_role, highlighted: true, permissions: UserRole::FLAGS[:manage_users]) } + let(:sender) { Fabricate(:user, role: sender_role).account } + let(:activity) { Fabricate(:mention, status: Fabricate(:status, account: sender)) } + + it 'returns false' do + expect(subject.filter?).to be false + end + end + context 'when sender is followed by recipient' do before do notification.account.follow!(notification.from_account) diff --git a/spec/services/precompute_feed_service_spec.rb b/spec/services/precompute_feed_service_spec.rb index 9b2c6c280f..858c0c2d3c 100644 --- a/spec/services/precompute_feed_service_spec.rb +++ b/spec/services/precompute_feed_service_spec.rb @@ -7,31 +7,69 @@ RSpec.describe PrecomputeFeedService do describe 'call' do let(:account) { Fabricate(:account) } + let!(:list) { Fabricate(:list, account: account, exclusive: false) } - it 'fills a user timeline with statuses' do - account = Fabricate(:account) - status = Fabricate(:status, account: account) + context 'when no eligible status exist' do + it 'raises no error and results in an empty timeline' do + expect { subject.call(account) }.to_not raise_error - subject.call(account) - - expect(redis.zscore(FeedManager.instance.key(:home, account.id), status.id)).to be_within(0.1).of(status.id.to_f) + expect(redis.zcard(FeedManager.instance.key(:home, account.id))).to eq(0) + end end - it 'does not raise an error even if it could not find any status' do - account = Fabricate(:account) - expect { subject.call(account) }.to_not raise_error - end + context 'with eligible statuses' do + let(:muted_account) { Fabricate(:account) } + let!(:followed_account) { Fabricate(:account) } + let!(:requested_account) { Fabricate(:account) } + let!(:own_status) { Fabricate(:status, account: account) } + let!(:followed_status) { Fabricate(:status, account: followed_account) } + let!(:unreadable_dm_from_followed) { Fabricate(:status, account: followed_account, visibility: :direct) } + let!(:requested_status) { Fabricate(:status, account: requested_account) } + let!(:muted_status) { Fabricate(:status, account: muted_account) } + let!(:muted_reblog) { Fabricate(:status, account: followed_account, reblog: muted_status) } + let!(:known_reply) { Fabricate(:status, account: followed_account, in_reply_to_id: own_status.id) } + let!(:unknown_reply) { Fabricate(:status, account: followed_account, in_reply_to_id: requested_status.id) } - it 'filters statuses' do - account = Fabricate(:account) - muted_account = Fabricate(:account) - Fabricate(:mute, account: account, target_account: muted_account) - reblog = Fabricate(:status, account: muted_account) - Fabricate(:status, account: account, reblog: reblog) + before do + account.follow!(followed_account) + account.request_follow!(requested_account) + account.mute!(muted_account) - subject.call(account) + list.accounts << followed_account + end - expect(redis.zscore(FeedManager.instance.key(:home, account.id), reblog.id)).to be_nil + it "fills a user's home and list timelines with the expected posts" do + subject.call(account) + + home_timeline_ids = redis.zrevrangebyscore(FeedManager.instance.key(:home, account.id), '(+inf', '(-inf', limit: [0, 30], with_scores: true).map { |id| id.first.to_i } + list_timeline_ids = redis.zrevrangebyscore(FeedManager.instance.key(:list, list.id), '(+inf', '(-inf', limit: [0, 30], with_scores: true).map { |id| id.first.to_i } + + expect(home_timeline_ids).to include( + own_status.id, + followed_status.id, + known_reply.id + ) + + expect(list_timeline_ids).to include( + followed_status.id + ) + + expect(home_timeline_ids).to_not include( + requested_status.id, + unknown_reply.id, + unreadable_dm_from_followed.id, + muted_status.id, + muted_reblog.id + ) + + expect(list_timeline_ids).to_not include( + requested_status.id, + unknown_reply.id, + unreadable_dm_from_followed.id, + muted_status.id, + muted_reblog.id + ) + end end end end diff --git a/spec/services/process_mentions_service_spec.rb b/spec/services/process_mentions_service_spec.rb index 7a318faa1e..9add51523e 100644 --- a/spec/services/process_mentions_service_spec.rb +++ b/spec/services/process_mentions_service_spec.rb @@ -16,20 +16,25 @@ RSpec.describe ProcessMentionsService do before do account.block!(individually_blocked_account) account.domain_blocks.create!(domain: domain_blocked_account.domain) - - subject.call(status) end - it 'creates a mention to the non-blocked account' do - expect(non_blocked_account.mentions.where(status: status).count).to eq 1 + it 'creates a mention to the non-blocked account but not the individually or domain blocked accounts' do + expect { subject.call(status) } + .to create_mention_for_non_blocked + .and skip_mention_for_individual + .and skip_mention_for_domain_blocked end - it 'does not create a mention to the individually blocked account' do - expect(individually_blocked_account.mentions.where(status: status).count).to eq 0 + def create_mention_for_non_blocked + change { non_blocked_account.mentions.where(status: status).count }.to(1) end - it 'does not create a mention to the domain-blocked account' do - expect(domain_blocked_account.mentions.where(status: status).count).to eq 0 + def skip_mention_for_individual + not_change { individually_blocked_account.mentions.where(status: status).count }.from(0) + end + + def skip_mention_for_domain_blocked + not_change { domain_blocked_account.mentions.where(status: status).count }.from(0) end end @@ -40,11 +45,9 @@ RSpec.describe ProcessMentionsService do context 'with a valid remote user' do let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } - before do - subject.call(status) - end - it 'creates a mention' do + subject.call(status) + expect(remote_user.mentions.where(status: status).count).to eq 1 end end @@ -53,11 +56,9 @@ RSpec.describe ProcessMentionsService do let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') } let(:status) { Fabricate(:status, account: account, text: "Hello @#{remote_user.acct} @#{remote_user.acct} @#{remote_user.acct}", visibility: :public) } - before do - subject.call(status, save_records: false) - end - it 'creates exactly one mention' do + subject.call(status, save_records: false) + expect(status.mentions.size).to eq 1 end end @@ -66,11 +67,9 @@ RSpec.describe ProcessMentionsService do let!(:remote_user) { Fabricate(:account, username: 'sneak', protocol: :activitypub, domain: 'xn--hresiar-mxa.ch', inbox_url: 'http://example.com/inbox') } let!(:status) { Fabricate(:status, account: account, text: 'Hello @sneak@hæresiar.ch') } - before do - subject.call(status) - end - it 'creates a mention' do + subject.call(status) + expect(remote_user.mentions.where(status: status).count).to eq 1 end end @@ -79,11 +78,9 @@ RSpec.describe ProcessMentionsService do let!(:remote_user) { Fabricate(:account, username: 'foo', protocol: :activitypub, domain: 'xn--y9a3aq.xn--y9a3aq', inbox_url: 'http://example.com/inbox') } let!(:status) { Fabricate(:status, account: account, text: 'Hello @foo@հայ.հայ') } - before do - subject.call(status) - end - it 'creates a mention' do + subject.call(status) + expect(remote_user.mentions.where(status: status).count).to eq 1 end end @@ -95,10 +92,11 @@ RSpec.describe ProcessMentionsService do before do stub_request(:get, 'https://example.com/.well-known/host-meta').to_return(status: 404) stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:remote_user@example.com').to_return(status: 500) - subject.call(status) end it 'creates a mention' do + subject.call(status) + expect(remote_user.mentions.where(status: status).count).to eq 1 end end diff --git a/spec/services/reject_follow_service_spec.rb b/spec/services/reject_follow_service_spec.rb index d2c7a00206..eec0d6c1e0 100644 --- a/spec/services/reject_follow_service_spec.rb +++ b/spec/services/reject_follow_service_spec.rb @@ -10,17 +10,15 @@ RSpec.describe RejectFollowService do describe 'local' do let(:bob) { Fabricate(:account) } - before do - FollowRequest.create(account: bob, target_account: sender) + before { FollowRequest.create(account: bob, target_account: sender) } + + it 'removes follow request and does not create relation' do subject.call(bob, sender) - end - it 'removes follow request' do - expect(bob.requested?(sender)).to be false - end - - it 'does not create follow relation' do - expect(bob.following?(sender)).to be false + expect(bob) + .to_not be_requested(sender) + expect(bob) + .to_not be_following(sender) end end @@ -30,19 +28,17 @@ RSpec.describe RejectFollowService do before do FollowRequest.create(account: bob, target_account: sender) stub_request(:post, bob.inbox_url).to_return(status: 200) + end + + it 'removes follow request, does not create relation, sends reject activity', :inline_jobs do subject.call(bob, sender) - end - it 'removes follow request' do - expect(bob.requested?(sender)).to be false - end - - it 'does not create follow relation' do - expect(bob.following?(sender)).to be false - end - - it 'sends a reject activity', :inline_jobs do - expect(a_request(:post, bob.inbox_url)).to have_been_made.once + expect(bob) + .to_not be_requested(sender) + expect(bob) + .to_not be_following(sender) + expect(a_request(:post, bob.inbox_url)) + .to have_been_made.once end end end diff --git a/spec/services/remove_from_followers_service_spec.rb b/spec/services/remove_from_followers_service_spec.rb index 515600096c..381daf1a59 100644 --- a/spec/services/remove_from_followers_service_spec.rb +++ b/spec/services/remove_from_followers_service_spec.rb @@ -10,13 +10,13 @@ RSpec.describe RemoveFromFollowersService do describe 'local' do let(:sender) { Fabricate(:account, username: 'alice') } - before do - Follow.create(account: sender, target_account: bob) - subject.call(bob, sender) - end + before { Follow.create(account: sender, target_account: bob) } it 'does not create follow relation' do - expect(bob.followed_by?(sender)).to be false + subject.call(bob, sender) + + expect(bob) + .to_not be_followed_by(sender) end end @@ -26,15 +26,16 @@ RSpec.describe RemoveFromFollowersService do before do Follow.create(account: sender, target_account: bob) stub_request(:post, sender.inbox_url).to_return(status: 200) + end + + it 'does not create follow relation and sends reject activity', :inline_jobs do subject.call(bob, sender) - end - it 'does not create follow relation' do - expect(bob.followed_by?(sender)).to be false - end + expect(bob) + .to_not be_followed_by(sender) - it 'sends a reject activity', :inline_jobs do - expect(a_request(:post, sender.inbox_url)).to have_been_made.once + expect(a_request(:post, sender.inbox_url)) + .to have_been_made.once end end end diff --git a/spec/services/remove_status_service_spec.rb b/spec/services/remove_status_service_spec.rb index da77144458..48d45c1b9a 100644 --- a/spec/services/remove_status_service_spec.rb +++ b/spec/services/remove_status_service_spec.rb @@ -30,42 +30,38 @@ RSpec.describe RemoveStatusService, :inline_jobs do Fabricate(:status, account: bill, reblog: status, uri: 'hoge') end - it 'removes status from author\'s home feed' do - subject.call(status) - expect(HomeFeed.new(alice).get(10).pluck(:id)).to_not include(status.id) - end - - it 'removes status from local follower\'s home feed' do - subject.call(status) - expect(HomeFeed.new(jeff).get(10).pluck(:id)).to_not include(status.id) - end - - it 'publishes to public media timeline' do + it 'removes status from notifications and from author and local follower home feeds, publishes to media timeline, sends delete activities' do allow(redis).to receive(:publish).with(any_args) - subject.call(status) + expect { subject.call(status) } + .to remove_status_from_notifications - expect(redis).to have_received(:publish).with('timeline:public:media', Oj.dump(event: :delete, payload: status.id.to_s)) - end + expect(home_feed_ids(alice)) + .to_not include(status.id) + expect(home_feed_ids(jeff)) + .to_not include(status.id) - it 'sends Delete activity to followers' do - subject.call(status) + expect(redis) + .to have_received(:publish).with('timeline:public:media', Oj.dump(event: :delete, payload: status.id.to_s)) expect(delete_delivery(hank, status)) .to have_been_made.once - end - - it 'sends Delete activity to rebloggers' do - subject.call(status) expect(delete_delivery(bill, status)) .to have_been_made.once end - it 'remove status from notifications' do - expect { subject.call(status) }.to change { - Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count - }.from(1).to(0) + def home_feed_ids(personage) + HomeFeed + .new(personage) + .get(10) + .pluck(:id) + end + + def remove_status_from_notifications + change { Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count } + .from(1) + .to(0) end def delete_delivery(target, status) diff --git a/spec/services/report_service_spec.rb b/spec/services/report_service_spec.rb index 24fffcce63..4e20c536a4 100644 --- a/spec/services/report_service_spec.rb +++ b/spec/services/report_service_spec.rb @@ -31,14 +31,13 @@ RSpec.describe ReportService do context 'when forward is true', :inline_jobs do let(:forward) { true } - it 'sends ActivityPub payload when forward is true' do - subject.call(source_account, remote_account, forward: forward) - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made - end - - it 'has an uri' do + it 'has a URI and sends ActivityPub payload' do report = subject.call(source_account, remote_account, forward: forward) - expect(report.uri).to_not be_nil + + expect(report.uri) + .to_not be_nil + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made end context 'when reporting a reply on a different remote server' do @@ -122,13 +121,12 @@ RSpec.describe ReportService do status.mentions.create(account: source_account) end - it 'creates a report' do - expect { subject.call }.to change { target_account.targeted_reports.count }.from(0).to(1) - end + it 'creates a report and attaches the DM to the report' do + expect { subject.call } + .to change { target_account.targeted_reports.count }.from(0).to(1) - it 'attaches the DM to the report' do - subject.call - expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[status.id]] + expect(target_account.targeted_reports.pluck(:status_ids)) + .to eq [[status.id]] end end @@ -146,13 +144,12 @@ RSpec.describe ReportService do status.mentions.create(account: source_account) end - it 'creates a report' do - expect { subject.call }.to change { target_account.targeted_reports.count }.from(0).to(1) - end + it 'creates a report and attaches DM to report' do + expect { subject.call } + .to change { target_account.targeted_reports.count }.from(0).to(1) - it 'attaches the DM to the report' do - subject.call - expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[status.id]] + expect(target_account.targeted_reports.pluck(:status_ids)) + .to eq [[status.id]] end end diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb index cbbbdf5ed8..a3fe2e8729 100644 --- a/spec/services/resolve_account_service_spec.rb +++ b/spec/services/resolve_account_service_spec.rb @@ -24,37 +24,38 @@ RSpec.describe ResolveAccountService do context 'when domain is banned' do before { Fabricate(:domain_block, domain: 'ap.example.com', severity: :suspend) } - it 'does not return an account' do - expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to be_nil - end - - it 'does not make a webfinger query' do - subject.call('foo@ap.example.com', skip_webfinger: true) - expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made + it 'does not return an account or make a webfinger query' do + expect(subject.call('foo@ap.example.com', skip_webfinger: true)) + .to be_nil + expect(webfinger_discovery_request) + .to_not have_been_made end end context 'when domain is not banned' do - it 'returns the expected account' do - expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to eq remote_account - end - - it 'does not make a webfinger query' do - subject.call('foo@ap.example.com', skip_webfinger: true) - expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made + it 'returns the expected account and does not make a webfinger query' do + expect(subject.call('foo@ap.example.com', skip_webfinger: true)) + .to eq remote_account + expect(webfinger_discovery_request) + .to_not have_been_made end end end context 'when account is not known' do - it 'does not return an account' do - expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to be_nil + it 'does not return an account and does not make webfinger query' do + expect(subject.call('foo@ap.example.com', skip_webfinger: true)) + .to be_nil + expect(webfinger_discovery_request) + .to_not have_been_made end + end - it 'does not make a webfinger query' do - subject.call('foo@ap.example.com', skip_webfinger: true) - expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made - end + def webfinger_discovery_request + a_request( + :get, + 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com' + ) end end @@ -86,13 +87,11 @@ RSpec.describe ResolveAccountService do allow(AccountDeletionWorker).to receive(:perform_async) end - it 'returns nil' do - expect(subject.call('hoge@example.com')).to be_nil - end - - it 'queues account deletion worker' do - subject.call('hoge@example.com') - expect(AccountDeletionWorker).to have_received(:perform_async) + it 'returns nil and queues deletion worker' do + expect(subject.call('hoge@example.com')) + .to be_nil + expect(AccountDeletionWorker) + .to have_received(:perform_async) end end @@ -112,9 +111,12 @@ RSpec.describe ResolveAccountService do it 'returns new remote account' do account = subject.call('Foo@redirected.example.com') - expect(account.activitypub?).to be true - expect(account.acct).to eq 'foo@ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + expect(account) + .to have_attributes( + activitypub?: true, + acct: 'foo@ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox' + ) end end @@ -127,9 +129,12 @@ RSpec.describe ResolveAccountService do it 'returns new remote account' do account = subject.call('Foo@redirected.example.com') - expect(account.activitypub?).to be true - expect(account.acct).to eq 'foo@ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + expect(account) + .to have_attributes( + activitypub?: true, + acct: 'foo@ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox' + ) end end @@ -165,9 +170,12 @@ RSpec.describe ResolveAccountService do it 'returns new remote account' do account = subject.call('foo@ap.example.com') - expect(account.activitypub?).to be true - expect(account.domain).to eq 'ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' + expect(account) + .to have_attributes( + activitypub?: true, + domain: 'ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox' + ) end context 'with multiple types' do @@ -178,10 +186,13 @@ RSpec.describe ResolveAccountService do it 'returns new remote account' do account = subject.call('foo@ap.example.com') - expect(account.activitypub?).to be true - expect(account.domain).to eq 'ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' - expect(account.actor_type).to eq 'Person' + expect(account) + .to have_attributes( + activitypub?: true, + domain: 'ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox', + actor_type: 'Person' + ) end end end @@ -190,20 +201,21 @@ RSpec.describe ResolveAccountService do let!(:duplicate) { Fabricate(:account, username: 'foo', domain: 'old.example.com', uri: 'https://ap.example.com/users/foo') } let!(:status) { Fabricate(:status, account: duplicate, text: 'foo') } - it 'returns new remote account' do + it 'returns new remote account and merges accounts', :inline_jobs do account = subject.call('foo@ap.example.com') - expect(account.activitypub?).to be true - expect(account.domain).to eq 'ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' - expect(account.uri).to eq 'https://ap.example.com/users/foo' - end + expect(account) + .to have_attributes( + activitypub?: true, + domain: 'ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox', + uri: 'https://ap.example.com/users/foo' + ) - it 'merges accounts', :inline_jobs do - account = subject.call('foo@ap.example.com') - - expect(status.reload.account_id).to eq account.id - expect(Account.where(uri: account.uri).count).to eq 1 + expect(status.reload.account_id) + .to eq account.id + expect(Account.where(uri: account.uri).count) + .to eq 1 end end @@ -214,11 +226,15 @@ RSpec.describe ResolveAccountService do it 'returns new remote account' do account = subject.call('foo@ap.example.com') - expect(account.activitypub?).to be true - expect(account.domain).to eq 'ap.example.com' - expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox' - expect(account.uri).to eq 'https://ap.example.com/users/foo' - expect(status.reload.account).to eq(account) + expect(account) + .to have_attributes( + activitypub?: true, + domain: 'ap.example.com', + inbox_url: 'https://ap.example.com/users/foo/inbox', + uri: 'https://ap.example.com/users/foo' + ) + expect(status.reload.account) + .to eq(account) end end diff --git a/spec/services/resolve_url_service_spec.rb b/spec/services/resolve_url_service_spec.rb index 80f2a5a4ba..eaf00c1ed8 100644 --- a/spec/services/resolve_url_service_spec.rb +++ b/spec/services/resolve_url_service_spec.rb @@ -51,12 +51,11 @@ RSpec.describe ResolveURLService do let(:url) { 'https://example.com/@foo/42' } let(:uri) { 'https://example.com/users/foo/statuses/42' } - it 'returns status by url' do - expect(subject.call(url, on_behalf_of: account)).to eq(status) - end - - it 'returns status by uri' do - expect(subject.call(uri, on_behalf_of: account)).to eq(status) + it 'returns status by URL or URI' do + expect(subject.call(url, on_behalf_of: account)) + .to eq(status) + expect(subject.call(uri, on_behalf_of: account)) + .to eq(status) end end @@ -75,12 +74,11 @@ RSpec.describe ResolveURLService do let(:url) { 'https://example.com/@foo/42' } let(:uri) { 'https://example.com/users/foo/statuses/42' } - it 'does not return the status by url' do - expect(subject.call(url, on_behalf_of: account)).to be_nil - end - - it 'does not return the status by uri' do - expect(subject.call(uri, on_behalf_of: account)).to be_nil + it 'does not return the status by URL or URI' do + expect(subject.call(url, on_behalf_of: account)) + .to be_nil + expect(subject.call(uri, on_behalf_of: account)) + .to be_nil end end @@ -107,22 +105,20 @@ RSpec.describe ResolveURLService do account.follow!(poster) end - it 'returns status by url' do - expect(subject.call(url, on_behalf_of: account)).to eq(status) - end - - it 'returns status by uri' do - expect(subject.call(uri, on_behalf_of: account)).to eq(status) + it 'returns status by URL or URI' do + expect(subject.call(url, on_behalf_of: account)) + .to eq(status) + expect(subject.call(uri, on_behalf_of: account)) + .to eq(status) end end context 'when the account does not follow the poster' do - it 'does not return the status by url' do - expect(subject.call(url, on_behalf_of: account)).to be_nil - end - - it 'does not return the status by uri' do - expect(subject.call(uri, on_behalf_of: account)).to be_nil + it 'does not return the status by URL or URI' do + expect(subject.call(url, on_behalf_of: account)) + .to be_nil + expect(subject.call(uri, on_behalf_of: account)) + .to be_nil end end end diff --git a/spec/services/suspend_account_service_spec.rb b/spec/services/suspend_account_service_spec.rb index 4a2f494e0c..c15c23ca30 100644 --- a/spec/services/suspend_account_service_spec.rb +++ b/spec/services/suspend_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe SuspendAccountService, :inline_jobs do +RSpec.describe SuspendAccountService do shared_examples 'common behavior' do subject { described_class.new.call(account) } @@ -11,6 +11,7 @@ RSpec.describe SuspendAccountService, :inline_jobs do before do allow(FeedManager.instance).to receive_messages(unmerge_from_home: nil, unmerge_from_list: nil) + allow(Rails.configuration.x).to receive(:cache_buster_enabled).and_return(true) local_follower.follow!(account) list.accounts << account @@ -23,6 +24,7 @@ RSpec.describe SuspendAccountService, :inline_jobs do it 'unmerges from feeds of local followers and changes file mode and preserves suspended flag' do expect { subject } .to change_file_mode + .and enqueue_sidekiq_job(CacheBusterWorker).with(account.media_attachments.first.file.url(:original)) .and not_change_suspended_flag expect(FeedManager.instance).to have_received(:unmerge_from_home).with(account, local_follower) expect(FeedManager.instance).to have_received(:unmerge_from_list).with(account, list) @@ -38,17 +40,12 @@ RSpec.describe SuspendAccountService, :inline_jobs do end describe 'suspending a local account' do - def match_update_actor_request(req, account) - json = JSON.parse(req.body) + def match_update_actor_request(json, account) + json = JSON.parse(json) actor_id = ActivityPub::TagManager.instance.uri_for(account) json['type'] == 'Update' && json['actor'] == actor_id && json['object']['id'] == actor_id && json['object']['suspended'] end - before do - stub_request(:post, 'https://alice.com/inbox').to_return(status: 201) - stub_request(:post, 'https://bob.com/inbox').to_return(status: 201) - end - include_examples 'common behavior' do let!(:account) { Fabricate(:account) } let!(:remote_follower) { Fabricate(:account, uri: 'https://alice.com', inbox_url: 'https://alice.com/inbox', protocol: :activitypub, domain: 'alice.com') } @@ -61,22 +58,20 @@ RSpec.describe SuspendAccountService, :inline_jobs do it 'sends an Update actor activity to followers and reporters' do subject - expect(a_request(:post, remote_follower.inbox_url).with { |req| match_update_actor_request(req, account) }).to have_been_made.once - expect(a_request(:post, remote_reporter.inbox_url).with { |req| match_update_actor_request(req, account) }).to have_been_made.once + + expect(ActivityPub::DeliveryWorker) + .to have_enqueued_sidekiq_job(satisfying { |json| match_update_actor_request(json, account) }, account.id, remote_follower.inbox_url).once + .and have_enqueued_sidekiq_job(satisfying { |json| match_update_actor_request(json, account) }, account.id, remote_reporter.inbox_url).once end end end describe 'suspending a remote account' do - def match_reject_follow_request(req, account, followee) - json = JSON.parse(req.body) + def match_reject_follow_request(json, account, followee) + json = JSON.parse(json) json['type'] == 'Reject' && json['actor'] == ActivityPub::TagManager.instance.uri_for(followee) && json['object']['actor'] == account.uri end - before do - stub_request(:post, 'https://bob.com/inbox').to_return(status: 201) - end - include_examples 'common behavior' do let!(:account) { Fabricate(:account, domain: 'bob.com', uri: 'https://bob.com', inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } let!(:local_followee) { Fabricate(:account) } @@ -88,7 +83,8 @@ RSpec.describe SuspendAccountService, :inline_jobs do it 'sends a Reject Follow activity', :aggregate_failures do subject - expect(a_request(:post, account.inbox_url).with { |req| match_reject_follow_request(req, account, local_followee) }).to have_been_made.once + expect(ActivityPub::DeliveryWorker) + .to have_enqueued_sidekiq_job(satisfying { |json| match_reject_follow_request(json, account, local_followee) }, local_followee.id, account.inbox_url).once end end end diff --git a/spec/services/translate_status_service_spec.rb b/spec/services/translate_status_service_spec.rb index 0779fbbe6c..ac7a43ff2a 100644 --- a/spec/services/translate_status_service_spec.rb +++ b/spec/services/translate_status_service_spec.rb @@ -18,7 +18,7 @@ RSpec.describe TranslateStatusService do describe '#call' do before do translation_service = TranslationService.new - allow(translation_service).to receive(:languages).and_return({ 'en' => ['es'] }) + allow(translation_service).to receive(:languages).and_return({ 'en' => ['es', 'es-MX'] }) allow(translation_service).to receive(:translate) do |texts| texts.map do |text| TranslationService::Translation.new( @@ -32,20 +32,15 @@ RSpec.describe TranslateStatusService do allow(TranslationService).to receive_messages(configured?: true, configured: translation_service) end - it 'returns translated status content' do - expect(service.call(status, 'es').content).to eq '

Hola

' - end - - it 'returns source language' do - expect(service.call(status, 'es').detected_source_language).to eq 'en' - end - - it 'returns translation provider' do - expect(service.call(status, 'es').provider).to eq 'Dummy' - end - - it 'returns original status' do - expect(service.call(status, 'es').status).to eq status + it 'returns translated status content and source language and provider and original status' do + expect(service.call(status, 'es')) + .to have_attributes( + content: '

Hola

', + detected_source_language: 'en', + language: 'es', + provider: 'Dummy', + status: status + ) end describe 'status has content with custom emoji' do @@ -107,6 +102,16 @@ RSpec.describe TranslateStatusService do expect(media_attachment.description).to eq 'Hola & :highfive:' end end + + describe 'target language is regional' do + it 'uses regional variant' do + expect(service.call(status, 'es-MX').language).to eq 'es-MX' + end + + it 'uses parent locale for unsupported regional variant' do + expect(service.call(status, 'es-XX').language).to eq 'es' + end + end end describe '#source_texts' do @@ -155,26 +160,16 @@ RSpec.describe TranslateStatusService do let!(:source_texts) { service.send(:source_texts) } it 'returns formatted poll options' do - expect(source_texts.size).to eq 3 - expect(source_texts.values).to eq %w(

Hello

Blue Green) - end - - it 'has a first key with content' do - expect(source_texts.keys.first).to eq :content - end - - it 'has the first option in the second key with correct options' do - option1 = source_texts.keys.second - expect(option1).to be_a Poll::Option - expect(option1.id).to eq '0' - expect(option1.title).to eq 'Blue' - end - - it 'has the second option in the third key with correct options' do - option2 = source_texts.keys.third - expect(option2).to be_a Poll::Option - expect(option2.id).to eq '1' - expect(option2.title).to eq 'Green' + expect(source_texts) + .to have_attributes( + size: 3, + values: %w(

Hello

Blue Green), + keys: contain_exactly( + eq(:content), + be_a(Poll::Option).and(have_attributes(id: '0', title: 'Blue')), + be_a(Poll::Option).and(have_attributes(id: '1', title: 'Green')) + ) + ) end end end diff --git a/spec/services/unblock_domain_service_spec.rb b/spec/services/unblock_domain_service_spec.rb index 405fe1cfd2..daa1d480a6 100644 --- a/spec/services/unblock_domain_service_spec.rb +++ b/spec/services/unblock_domain_service_spec.rb @@ -12,26 +12,32 @@ RSpec.describe UnblockDomainService do let!(:silenced) { Fabricate(:account, domain: 'example.com', silenced_at: domain_block.created_at) } let!(:suspended) { Fabricate(:account, domain: 'example.com', suspended_at: domain_block.created_at) } - it 'unsilences accounts and removes block' do - domain_block.update(severity: :silence) + context 'with severity of silence' do + before { domain_block.update(severity: :silence) } - subject.call(domain_block) - expect_deleted_domain_block - expect(silenced.reload.silenced?).to be false - expect(suspended.reload.suspended?).to be true - expect(independently_suspended.reload.suspended?).to be true - expect(independently_silenced.reload.silenced?).to be true + it 'unsilences accounts and removes block' do + subject.call(domain_block) + + expect_deleted_domain_block + expect(silenced.reload.silenced?).to be false + expect(suspended.reload.suspended?).to be true + expect(independently_suspended.reload.suspended?).to be true + expect(independently_silenced.reload.silenced?).to be true + end end - it 'unsuspends accounts and removes block' do - domain_block.update(severity: :suspend) + context 'with severity of suspend' do + before { domain_block.update(severity: :suspend) } - subject.call(domain_block) - expect_deleted_domain_block - expect(suspended.reload.suspended?).to be false - expect(silenced.reload.silenced?).to be false - expect(independently_suspended.reload.suspended?).to be true - expect(independently_silenced.reload.silenced?).to be true + it 'unsuspends accounts and removes block' do + subject.call(domain_block) + + expect_deleted_domain_block + expect(suspended.reload.suspended?).to be false + expect(silenced.reload.silenced?).to be false + expect(independently_suspended.reload.suspended?).to be true + expect(independently_silenced.reload.silenced?).to be true + end end end diff --git a/spec/services/unblock_service_spec.rb b/spec/services/unblock_service_spec.rb index 6132e74415..a2c5188f06 100644 --- a/spec/services/unblock_service_spec.rb +++ b/spec/services/unblock_service_spec.rb @@ -10,13 +10,13 @@ RSpec.describe UnblockService do describe 'local' do let(:bob) { Fabricate(:account) } - before do - sender.block!(bob) - subject.call(sender, bob) - end + before { sender.block!(bob) } it 'destroys the blocking relation' do - expect(sender.blocking?(bob)).to be false + subject.call(sender, bob) + + expect(sender) + .to_not be_blocking(bob) end end @@ -26,15 +26,15 @@ RSpec.describe UnblockService do before do sender.block!(bob) stub_request(:post, 'http://example.com/inbox').to_return(status: 200) + end + + it 'destroys the blocking relation and sends unblock activity', :inline_jobs do subject.call(sender, bob) - end - it 'destroys the blocking relation' do - expect(sender.blocking?(bob)).to be false - end - - it 'sends an unblock activity', :inline_jobs do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(sender) + .to_not be_blocking(bob) + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end end diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb index 0c206c4b98..6cf24ca5e1 100644 --- a/spec/services/unfollow_service_spec.rb +++ b/spec/services/unfollow_service_spec.rb @@ -10,13 +10,13 @@ RSpec.describe UnfollowService do describe 'local' do let(:bob) { Fabricate(:account, username: 'bob') } - before do - sender.follow!(bob) - subject.call(sender, bob) - end + before { sender.follow!(bob) } it 'destroys the following relation' do - expect(sender.following?(bob)).to be false + subject.call(sender, bob) + + expect(sender) + .to_not be_following(bob) end end @@ -26,15 +26,15 @@ RSpec.describe UnfollowService do before do sender.follow!(bob) stub_request(:post, 'http://example.com/inbox').to_return(status: 200) + end + + it 'destroys the following relation and sends unfollow activity' do subject.call(sender, bob) - end - it 'destroys the following relation' do - expect(sender.following?(bob)).to be false - end - - it 'sends an unfollow activity' do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(sender) + .to_not be_following(bob) + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end @@ -44,15 +44,15 @@ RSpec.describe UnfollowService do before do bob.follow!(sender) stub_request(:post, 'http://example.com/inbox').to_return(status: 200) + end + + it 'destroys the following relation and sends a reject activity' do subject.call(bob, sender) - end - it 'destroys the following relation' do - expect(bob.following?(sender)).to be false - end - - it 'sends a reject activity' do - expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once + expect(sender) + .to_not be_following(bob) + expect(a_request(:post, 'http://example.com/inbox')) + .to have_been_made.once end end end diff --git a/spec/services/update_account_service_spec.rb b/spec/services/update_account_service_spec.rb index 3720e85532..e10ec4e2a7 100644 --- a/spec/services/update_account_service_spec.rb +++ b/spec/services/update_account_service_spec.rb @@ -21,23 +21,19 @@ RSpec.describe UpdateAccountService do FollowService.new.call(bob, account) FollowService.new.call(eve, account) FollowService.new.call(ohagi, account) + end + it 'auto accepts pending follow requests from appropriate accounts' do subject.call(account, { locked: false }) - end - it 'auto-accepts pending follow requests' do - expect(alice.following?(account)).to be true - expect(alice.requested?(account)).to be false - end + expect(alice).to be_following(account) + expect(alice).to_not be_requested(account) - it 'does not auto-accept pending follow requests from silenced users' do - expect(bob.following?(account)).to be false - expect(bob.requested?(account)).to be true - end + expect(bob).to_not be_following(account) + expect(bob).to be_requested(account) - it 'auto-accepts pending follow requests from muted users so as to not leak mute' do - expect(eve.following?(account)).to be true - expect(eve.requested?(account)).to be false + expect(eve).to be_following(account) + expect(eve).to_not be_requested(account) end it 'does not auto-accept pending follow requests from blocking straight follow domains' do diff --git a/spec/services/update_status_service_spec.rb b/spec/services/update_status_service_spec.rb index 4df43461be..2a2bbd68b6 100644 --- a/spec/services/update_status_service_spec.rb +++ b/spec/services/update_status_service_spec.rb @@ -10,15 +10,15 @@ RSpec.describe UpdateStatusService do before do allow(ActivityPub::DistributionWorker).to receive(:perform_async) + end + + it 'does not create an edit or notify anyone' do subject.call(status, status.account_id, text: 'Foo') - end - it 'does not create an edit' do - expect(status.reload.edits).to be_empty - end - - it 'does not notify anyone' do - expect(ActivityPub::DistributionWorker).to_not have_received(:perform_async) + expect(status.reload.edits) + .to be_empty + expect(ActivityPub::DistributionWorker) + .to_not have_received(:perform_async) end end @@ -28,18 +28,16 @@ RSpec.describe UpdateStatusService do before do PreviewCardsStatus.create(status: status, preview_card: preview_card) + end + + it 'updates text, resets card, saves edit history' do subject.call(status, status.account_id, text: 'Bar') - end - it 'updates text' do - expect(status.reload.text).to eq 'Bar' - end - - it 'resets preview card' do - expect(status.reload.preview_card).to be_nil - end - - it 'saves edit history' do + expect(status.reload) + .to have_attributes( + text: 'Bar', + preview_card: be_nil + ) expect(status.edits.ordered.pluck(:text)).to eq %w(Foo Bar) end end @@ -50,15 +48,15 @@ RSpec.describe UpdateStatusService do before do PreviewCardsStatus.create(status: status, preview_card: preview_card) + end + + it 'updates content warning and saves history' do subject.call(status, status.account_id, text: 'Foo', spoiler_text: 'Bar') - end - it 'updates content warning' do - expect(status.reload.spoiler_text).to eq 'Bar' - end - - it 'saves edit history' do - expect(status.edits.ordered.pluck(:text, :spoiler_text)).to eq [['Foo', ''], ['Foo', 'Bar']] + expect(status.reload.spoiler_text) + .to eq 'Bar' + expect(status.edits.ordered.pluck(:text, :spoiler_text)) + .to eq [['Foo', ''], ['Foo', 'Bar']] end end @@ -118,23 +116,19 @@ RSpec.describe UpdateStatusService do before do status.media_attachments << detached_media_attachment + end + + it 'updates media attachments, handles attachments, saves history' do subject.call(status, status.account_id, text: 'Foo', media_ids: [attached_media_attachment.id.to_s]) - end - it 'updates media attachments' do - expect(status.ordered_media_attachments).to eq [attached_media_attachment] - end - - it 'does not detach detached media attachments' do - expect(detached_media_attachment.reload.status_id).to eq status.id - end - - it 'attaches attached media attachments' do - expect(attached_media_attachment.reload.status_id).to eq status.id - end - - it 'saves edit history' do - expect(status.edits.ordered.pluck(:ordered_media_attachment_ids)).to eq [[detached_media_attachment.id], [attached_media_attachment.id]] + expect(status.ordered_media_attachments) + .to eq [attached_media_attachment] + expect(detached_media_attachment.reload.status_id) + .to eq status.id + expect(attached_media_attachment.reload.status_id) + .to eq status.id + expect(status.edits.ordered.pluck(:ordered_media_attachment_ids)) + .to eq [[detached_media_attachment.id], [attached_media_attachment.id]] end end @@ -144,19 +138,18 @@ RSpec.describe UpdateStatusService do before do status.media_attachments << media_attachment + end + + it 'does not detach media attachment, updates description, and saves history' do subject.call(status, status.account_id, text: 'Foo', media_ids: [media_attachment.id.to_s], media_attributes: [{ id: media_attachment.id, description: 'New description' }]) - end - it 'does not detach media attachment' do - expect(media_attachment.reload.status_id).to eq status.id - end - - it 'updates the media attachment description' do - expect(media_attachment.reload.description).to eq 'New description' - end - - it 'saves edit history' do - expect(status.edits.ordered.map { |edit| edit.ordered_media_attachments.map(&:description) }).to eq [['Old description'], ['New description']] + expect(media_attachment.reload) + .to have_attributes( + status_id: status.id, + description: 'New description' + ) + expect(status.edits.ordered.map { |edit| edit.ordered_media_attachments.map(&:description) }) + .to eq [['Old description'], ['New description']] end end @@ -169,28 +162,27 @@ RSpec.describe UpdateStatusService do before do status.update(poll: poll) VoteService.new.call(voter, poll, [0]) + end + + it 'updates poll, resets votes, saves history, requeues notifications' do subject.call(status, status.account_id, text: 'Foo', poll: { options: %w(Bar Baz Foo), expires_in: 5.days.to_i }) - end - it 'updates poll' do poll = status.poll.reload - expect(poll.options).to eq %w(Bar Baz Foo) - end - it 'resets votes' do - poll = status.poll.reload - expect(poll.votes_count).to eq 0 - expect(poll.votes.count).to eq 0 - expect(poll.cached_tallies).to eq [0, 0, 0] - end + expect(poll) + .to have_attributes( + options: %w(Bar Baz Foo), + votes_count: 0, + cached_tallies: [0, 0, 0] + ) + expect(poll.votes.count) + .to eq(0) - it 'saves edit history' do - expect(status.edits.ordered.pluck(:poll_options)).to eq [%w(Foo Bar), %w(Bar Baz Foo)] - end + expect(status.edits.ordered.pluck(:poll_options)) + .to eq [%w(Foo Bar), %w(Bar Baz Foo)] - it 'requeues expiration notification' do - poll = status.poll.reload - expect(PollExpirationNotifyWorker).to have_enqueued_sidekiq_job(poll.id).at(poll.expires_at + 5.minutes) + expect(PollExpirationNotifyWorker) + .to have_enqueued_sidekiq_job(poll.id).at(poll.expires_at + 5.minutes) end end @@ -200,16 +192,21 @@ RSpec.describe UpdateStatusService do let!(:bob) { Fabricate(:account, username: 'bob') } let!(:status) { PostStatusService.new.call(account, text: 'Hello @alice') } - before do + it 'changes mentions and keeps old as silent' do subject.call(status, status.account_id, text: 'Hello @bob') - end - it 'changes mentions' do - expect(status.active_mentions.pluck(:account_id)).to eq [bob.id] - end + expect(status.active_mentions.pluck(:account_id)) + .to eq [bob.id] + expect(status.mentions.pluck(:account_id)) + .to contain_exactly(alice.id, bob.id) - it 'keeps old mentions as silent mentions' do - expect(status.mentions.pluck(:account_id)).to contain_exactly(alice.id, bob.id) + # Going back when a mention was switched to silence should still be possible + subject.call(status, status.account_id, text: 'Hello @alice') + + expect(status.active_mentions.pluck(:account_id)) + .to eq [alice.id] + expect(status.mentions.pluck(:account_id)) + .to contain_exactly(alice.id, bob.id) end end @@ -250,11 +247,9 @@ RSpec.describe UpdateStatusService do let!(:account) { Fabricate(:account) } let!(:status) { PostStatusService.new.call(account, text: 'Hello #foo') } - before do - subject.call(status, status.account_id, text: 'Hello #bar') - end - it 'changes tags' do + subject.call(status, status.account_id, text: 'Hello #bar') + expect(status.tags.pluck(:name)).to eq %w(bar) end end diff --git a/spec/support/domain_helpers.rb b/spec/support/domain_helpers.rb new file mode 100644 index 0000000000..9977702099 --- /dev/null +++ b/spec/support/domain_helpers.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module DomainHelpers + def configure_mx(domain:, exchange:, ip_v4_addr: '2.3.4.5', ip_v6_addr: 'fd00::2') + resolver = instance_double(Resolv::DNS, :timeouts= => nil) + + allow(resolver).to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::MX) + .and_return([double_mx(exchange)]) + allow(resolver) + .to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::A) + .and_return([]) + allow(resolver) + .to receive(:getresources) + .with(domain, Resolv::DNS::Resource::IN::AAAA) + .and_return([]) + allow(resolver) + .to receive(:getresources) + .with(exchange, Resolv::DNS::Resource::IN::A) + .and_return([double_resource_v4(ip_v4_addr)]) + allow(resolver) + .to receive(:getresources) + .with(exchange, Resolv::DNS::Resource::IN::AAAA) + .and_return([double_resource_v6(ip_v6_addr)]) + allow(Resolv::DNS) + .to receive(:open) + .and_yield(resolver) + end + + private + + def double_mx(exchange) + instance_double(Resolv::DNS::Resource::MX, exchange: exchange) + end + + def double_resource_v4(addr) + instance_double(Resolv::DNS::Resource::IN::A, address: addr) + end + + def double_resource_v6(addr) + instance_double(Resolv::DNS::Resource::IN::AAAA, address: addr) + end +end diff --git a/spec/support/examples/models/concerns/account_avatar.rb b/spec/support/examples/models/concerns/account_avatar.rb index 232f51fa3c..c6cc4e75a5 100644 --- a/spec/support/examples/models/concerns/account_avatar.rb +++ b/spec/support/examples/models/concerns/account_avatar.rb @@ -2,13 +2,20 @@ RSpec.shared_examples 'AccountAvatar' do |fabricator| describe 'static avatars', :attachment_processing do - describe 'when GIF' do + describe 'with a square GIF' do it 'creates a png static style' do account = Fabricate(fabricator, avatar: attachment_fixture('avatar.gif')) expect(account.avatar_static_url).to_not eq account.avatar_original_url end end + describe 'with a higher-than-wide GIF' do + it 'creates a png static style' do + account = Fabricate(fabricator, avatar: attachment_fixture('avatar-high.gif')) + expect(account.avatar_static_url).to_not eq account.avatar_original_url + end + end + describe 'when non-GIF' do it 'does not create extra static style' do account = Fabricate(fabricator, avatar: attachment_fixture('attachment.jpg')) diff --git a/spec/system/admin/invites_spec.rb b/spec/system/admin/invites_spec.rb new file mode 100644 index 0000000000..f2cee626c6 --- /dev/null +++ b/spec/system/admin/invites_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Invites' do + describe 'Invite interaction' do + let!(:invite) { Fabricate(:invite, expires_at: nil) } + + let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + before { sign_in user } + + it 'allows invite listing and creation' do + visit admin_invites_path + + expect(page) + .to have_title(I18n.t('admin.invites.title')) + for_invite(invite) do + expect(find('input').value) + .to include(invite.code) + end + + select I18n.t('invites.max_uses', count: 10), from: max_use_field + + expect { generate_invite } + .to change(Invite, :count).by(1) + expect(user.invites.last) + .to have_attributes(max_uses: 10) + end + + it 'allows invite expiration' do + visit admin_invites_path + + for_invite(invite) do + expect { expire_invite } + .to change { invite.reload.expired? }.from(false).to(true) + end + end + + it 'allows invite deactivation' do + visit admin_invites_path + + expect { click_on I18n.t('admin.invites.deactivate_all') } + .to change { Invite.exists?(expires_at: nil) }.from(true).to(false) + end + + def for_invite(invite, &block) + within("#invite_#{invite.id}", &block) + end + + def expire_invite + click_on I18n.t('invites.delete') + end + + def generate_invite + click_on I18n.t('invites.generate') + end + + def max_use_field + I18n.t('simple_form.labels.defaults.max_uses') + end + end +end diff --git a/spec/system/admin/tags_spec.rb b/spec/system/admin/tags_spec.rb new file mode 100644 index 0000000000..a3eca80d13 --- /dev/null +++ b/spec/system/admin/tags_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Tags' do + describe 'Tag interaction' do + let!(:tag) { Fabricate(:tag, name: 'test') } + + before { sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + it 'allows tags listing and editing' do + visit admin_tags_path + + expect(page) + .to have_title(I18n.t('admin.tags.title')) + + click_on '#test' + + fill_in display_name_field, with: 'NewTagName' + expect { click_on submit_button } + .to_not(change { tag.reload.display_name }) + expect(page) + .to have_content(match_error_text) + + fill_in display_name_field, with: 'TEST' + expect { click_on submit_button } + .to(change { tag.reload.display_name }.to('TEST')) + end + + def display_name_field + I18n.t('simple_form.labels.defaults.display_name') + end + + def match_error_text + I18n.t('tags.does_not_match_previous_name') + end + end +end diff --git a/spec/system/invites_spec.rb b/spec/system/invites_spec.rb index dbb5083c85..5a9b5afa2c 100644 --- a/spec/system/invites_spec.rb +++ b/spec/system/invites_spec.rb @@ -9,7 +9,6 @@ RSpec.describe 'Invites' do before do UserRole.everyone.update(permissions: UserRole::FLAGS[:invite_users]) - host! 'localhost:3000' # TODO: Move into before for all system specs? sign_in user end diff --git a/spec/system/oauth_spec.rb b/spec/system/oauth_spec.rb index 0f96a59675..64ac75879e 100644 --- a/spec/system/oauth_spec.rb +++ b/spec/system/oauth_spec.rb @@ -179,7 +179,7 @@ RSpec.describe 'Using OAuth from an external app' do end context 'when the user has set up TOTP' do - let(:user) { Fabricate(:user, email: email, password: password, otp_required_for_login: true, otp_secret: User.generate_otp_secret(32)) } + let(:user) { Fabricate(:user, email: email, password: password, otp_required_for_login: true, otp_secret: User.generate_otp_secret) } it 'when accepting the authorization request' do params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' } diff --git a/spec/validators/poll_validator_spec.rb b/spec/validators/poll_expiration_validator_spec.rb similarity index 64% rename from spec/validators/poll_validator_spec.rb rename to spec/validators/poll_expiration_validator_spec.rb index f2a2534898..41b8c96211 100644 --- a/spec/validators/poll_validator_spec.rb +++ b/spec/validators/poll_expiration_validator_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe PollValidator do +RSpec.describe PollExpirationValidator do describe '#validate' do before do validator.validate(poll) @@ -14,16 +14,24 @@ RSpec.describe PollValidator do let(:options) { %w(foo bar) } let(:expires_at) { 1.day.from_now } - it 'have no errors' do + it 'has no errors' do expect(errors).to_not have_received(:add) end - context 'when expires is just 5 min ago' do + context 'when the poll expires in 5 min from now' do let(:expires_at) { 5.minutes.from_now } - it 'not calls errors add' do + it 'has no errors' do expect(errors).to_not have_received(:add) end end + + context 'when the poll expires in the past' do + let(:expires_at) { 5.minutes.ago } + + it 'has errors' do + expect(errors).to have_received(:add) + end + end end end diff --git a/spec/validators/poll_options_validator_spec.rb b/spec/validators/poll_options_validator_spec.rb new file mode 100644 index 0000000000..9e4ec744db --- /dev/null +++ b/spec/validators/poll_options_validator_spec.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe PollOptionsValidator do + describe '#validate' do + before do + validator.validate(poll) + end + + let(:validator) { described_class.new } + let(:poll) { instance_double(Poll, options: options, expires_at: expires_at, errors: errors) } + let(:errors) { instance_double(ActiveModel::Errors, add: nil) } + let(:options) { %w(foo bar) } + let(:expires_at) { 1.day.from_now } + + it 'has no errors' do + expect(errors).to_not have_received(:add) + end + + context 'when the poll has duplicate options' do + let(:options) { %w(foo foo) } + + it 'adds errors' do + expect(errors).to have_received(:add) + end + end + + context 'when the poll has no options' do + let(:options) { [] } + + it 'adds errors' do + expect(errors).to have_received(:add) + end + end + + context 'when the poll has too many options' do + let(:options) { Array.new(described_class::MAX_OPTIONS + 1) { |i| "option #{i}" } } + + it 'adds errors' do + expect(errors).to have_received(:add) + end + end + end +end diff --git a/spec/views/statuses/show.html.haml_spec.rb b/spec/views/statuses/show.html.haml_spec.rb index 1afcb046d4..02b1fe7384 100644 --- a/spec/views/statuses/show.html.haml_spec.rb +++ b/spec/views/statuses/show.html.haml_spec.rb @@ -18,7 +18,7 @@ RSpec.describe 'statuses/show.html.haml' do assign(:descendant_threads, []) end - it 'has valid opengraph tags' do + it 'has valid opengraph tags and twitter player tags' do render expect(header_tags) @@ -26,10 +26,6 @@ RSpec.describe 'statuses/show.html.haml' do .and match(//) .and match(//) .and match(%r{}) - end - - it 'has twitter player tag' do - render expect(header_tags) .to match(%r{}) diff --git a/spec/workers/feed_insert_worker_spec.rb b/spec/workers/feed_insert_worker_spec.rb index 5c5dbeacf8..43810349b2 100644 --- a/spec/workers/feed_insert_worker_spec.rb +++ b/spec/workers/feed_insert_worker_spec.rb @@ -36,7 +36,7 @@ RSpec.describe FeedInsertWorker do context 'when there are real records' do it 'skips the push when there is a filter' do - instance = instance_double(FeedManager, push_to_home: nil, filter?: true) + instance = instance_double(FeedManager, push_to_home: nil, filter?: true, filter: :filter) allow(FeedManager).to receive(:instance).and_return(instance) result = subject.perform(status.id, follower.id) @@ -45,7 +45,7 @@ RSpec.describe FeedInsertWorker do end it 'pushes the status onto the home timeline without filter' do - instance = instance_double(FeedManager, push_to_home: nil, filter?: false) + instance = instance_double(FeedManager, push_to_home: nil, filter?: false, filter: nil) allow(FeedManager).to receive(:instance).and_return(instance) result = subject.perform(status.id, follower.id, :home) @@ -54,7 +54,7 @@ RSpec.describe FeedInsertWorker do end it 'pushes the status onto the tags timeline without filter' do - instance = instance_double(FeedManager, push_to_home: nil, filter?: false) + instance = instance_double(FeedManager, push_to_home: nil, filter?: false, filter: nil) allow(FeedManager).to receive(:instance).and_return(instance) result = subject.perform(status.id, follower.id, :tags) @@ -63,7 +63,7 @@ RSpec.describe FeedInsertWorker do end it 'pushes the status onto the list timeline without filter' do - instance = instance_double(FeedManager, push_to_list: nil, filter?: false) + instance = instance_double(FeedManager, push_to_list: nil, filter?: false, filter: nil) allow(FeedManager).to receive(:instance).and_return(instance) result = subject.perform(status.id, list.id, :list) diff --git a/spec/workers/mention_resolve_worker_spec.rb b/spec/workers/mention_resolve_worker_spec.rb new file mode 100644 index 0000000000..5e23876b4a --- /dev/null +++ b/spec/workers/mention_resolve_worker_spec.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe MentionResolveWorker do + let(:status_id) { -42 } + let(:uri) { 'https://example.com/users/unknown' } + + describe '#perform' do + subject { described_class.new.perform(status_id, uri, {}) } + + context 'with a non-existent status' do + it 'returns nil' do + expect(subject).to be_nil + end + end + + context 'with a valid user' do + let(:status) { Fabricate(:status) } + let(:status_id) { status.id } + + let(:service_double) { instance_double(ActivityPub::FetchRemoteAccountService) } + + before do + allow(ActivityPub::FetchRemoteAccountService).to receive(:new).and_return(service_double) + + allow(service_double).to receive(:call).with(uri, anything) { Fabricate(:account, domain: 'example.com', uri: uri) } + end + + it 'resolves the account and adds a new mention', :aggregate_failures do + expect { subject } + .to change { status.reload.mentions }.from([]).to(a_collection_including(having_attributes(account: having_attributes(uri: uri), silent: false))) + + expect(service_double).to have_received(:call).once + end + end + end +end diff --git a/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb b/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb index 7071fa6e98..98150aa5ef 100644 --- a/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb +++ b/spec/workers/scheduler/ip_cleanup_scheduler_spec.rb @@ -5,9 +5,50 @@ require 'rails_helper' RSpec.describe Scheduler::IpCleanupScheduler do let(:worker) { described_class.new } - describe 'perform' do - it 'runs without error' do - expect { worker.perform }.to_not raise_error + describe '#perform' do + context 'with IP-related data past retention times' do + let!(:future_ip_block) { Fabricate :ip_block, expires_at: 1.week.from_now } + let!(:old_ip_block) { Fabricate :ip_block, expires_at: 1.week.ago } + let!(:session_past_retention) { Fabricate :session_activation, ip: '10.0.0.0', updated_at: 18.months.ago } + let!(:inactive_user) { Fabricate :user, current_sign_in_at: 18.months.ago, sign_up_ip: '10.0.0.0' } + let!(:old_login_activity) { Fabricate :login_activity, created_at: 18.months.ago } + let!(:old_token) { Fabricate :access_token, last_used_at: 18.months.ago, last_used_ip: '10.0.0.0' } + + before { stub_const 'Scheduler::IpCleanupScheduler::SESSION_RETENTION_PERIOD', 10.years.to_i.seconds } + + it 'deletes the expired block' do + expect { worker.perform } + .to_not raise_error + expect { old_ip_block.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect { old_login_activity.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(session_past_retention.reload.ip) + .to be_nil + expect(inactive_user.reload.sign_up_ip) + .to be_nil + expect(old_token.reload.last_used_ip) + .to be_nil + expect(future_ip_block.reload) + .to be_present + end + end + + context 'with old session data' do + let!(:new_activation) { Fabricate :session_activation, updated_at: 1.week.ago } + let!(:old_activation) { Fabricate :session_activation, updated_at: 1.month.ago } + + before { stub_const 'Scheduler::IpCleanupScheduler::SESSION_RETENTION_PERIOD', 10.days.to_i.seconds } + + it 'clears old sessions' do + expect { worker.perform } + .to_not raise_error + + expect { old_activation.reload } + .to raise_error(ActiveRecord::RecordNotFound) + expect(new_activation.reload) + .to be_present + end end end end diff --git a/spec/workers/scheduler/user_cleanup_scheduler_spec.rb b/spec/workers/scheduler/user_cleanup_scheduler_spec.rb index b1be7c4611..604f528586 100644 --- a/spec/workers/scheduler/user_cleanup_scheduler_spec.rb +++ b/spec/workers/scheduler/user_cleanup_scheduler_spec.rb @@ -9,6 +9,7 @@ RSpec.describe Scheduler::UserCleanupScheduler do let!(:old_unconfirmed_user) { Fabricate(:user) } let!(:confirmed_user) { Fabricate(:user) } let!(:moderation_note) { Fabricate(:account_moderation_note, account: Fabricate(:account), target_account: old_unconfirmed_user.account) } + let!(:webauthn_credential) { Fabricate(:webauthn_credential, user_id: old_unconfirmed_user.id) } describe '#perform' do before do @@ -26,6 +27,8 @@ RSpec.describe Scheduler::UserCleanupScheduler do .from(true).to(false) expect { moderation_note.reload } .to raise_error(ActiveRecord::RecordNotFound) + expect { webauthn_credential.reload } + .to raise_error(ActiveRecord::RecordNotFound) expect_preservation_of(new_unconfirmed_user) expect_preservation_of(confirmed_user) end diff --git a/spec/workers/web/push_notification_worker_spec.rb b/spec/workers/web/push_notification_worker_spec.rb index ced21d5bf7..7f836d99e4 100644 --- a/spec/workers/web/push_notification_worker_spec.rb +++ b/spec/workers/web/push_notification_worker_spec.rb @@ -22,27 +22,48 @@ RSpec.describe Web::PushNotificationWorker do let(:payload) { { ciphertext: ciphertext, salt: salt, server_public_key: server_public_key, shared_secret: shared_secret } } describe 'perform' do + around do |example| + original_private = Rails.configuration.x.vapid_private_key + original_public = Rails.configuration.x.vapid_public_key + Rails.configuration.x.vapid_private_key = vapid_private_key + Rails.configuration.x.vapid_public_key = vapid_public_key + example.run + Rails.configuration.x.vapid_private_key = original_private + Rails.configuration.x.vapid_public_key = original_public + end + before do - allow(subscription).to receive_messages(contact_email: contact_email, vapid_key: vapid_key) - allow(Web::PushSubscription).to receive(:find).with(subscription.id).and_return(subscription) + Setting.site_contact_email = contact_email + allow(Webpush::Encryption).to receive(:encrypt).and_return(payload) allow(JWT).to receive(:encode).and_return('jwt.encoded.payload') stub_request(:post, endpoint).to_return(status: 201, body: '') - - subject.perform(subscription.id, notification.id) end it 'calls the relevant service with the correct headers' do - expect(a_request(:post, endpoint).with(headers: { - 'Content-Encoding' => 'aesgcm', - 'Content-Type' => 'application/octet-stream', - 'Crypto-Key' => "dh=BAgtUks5d90kFmxGevk9tH7GEmvz9DB0qcEMUsOBgKwMf-TMjsKIIG6LQvGcFAf6jcmAod15VVwmYwGIIxE4VWE;p256ecdsa=#{vapid_public_key.delete('=')}", - 'Encryption' => 'salt=WJeVM-RY-F9351SVxTFx_g', - 'Ttl' => '172800', - 'Urgency' => 'normal', - 'Authorization' => 'WebPush jwt.encoded.payload', - }, body: "+\xB8\xDBT}\u0013\xB6\xDD.\xF9\xB0\xA7\xC8Ҁ\xFD\x99#\xF7\xAC\x83\xA4\xDB,\u001F\xB5\xB9w\x85>\xF7\xADr")).to have_been_made + subject.perform(subscription.id, notification.id) + + expect(web_push_endpoint_request) + .to have_been_made + end + + def web_push_endpoint_request + a_request( + :post, + endpoint + ).with( + headers: { + 'Content-Encoding' => 'aesgcm', + 'Content-Type' => 'application/octet-stream', + 'Crypto-Key' => "dh=BAgtUks5d90kFmxGevk9tH7GEmvz9DB0qcEMUsOBgKwMf-TMjsKIIG6LQvGcFAf6jcmAod15VVwmYwGIIxE4VWE;p256ecdsa=#{vapid_public_key.delete('=')}", + 'Encryption' => 'salt=WJeVM-RY-F9351SVxTFx_g', + 'Ttl' => '172800', + 'Urgency' => 'normal', + 'Authorization' => 'WebPush jwt.encoded.payload', + }, + body: "+\xB8\xDBT}\u0013\xB6\xDD.\xF9\xB0\xA7\xC8Ҁ\xFD\x99#\xF7\xAC\x83\xA4\xDB,\u001F\xB5\xB9w\x85>\xF7\xADr" + ) end end end diff --git a/streaming/database.js b/streaming/database.js index 9f1d742143..d5caec4fca 100644 --- a/streaming/database.js +++ b/streaming/database.js @@ -49,7 +49,7 @@ export function configFromEnv(env, environment) { if (typeof parsedUrl.password === 'string') baseConfig.password = parsedUrl.password; if (typeof parsedUrl.host === 'string') baseConfig.host = parsedUrl.host; if (typeof parsedUrl.user === 'string') baseConfig.user = parsedUrl.user; - if (typeof parsedUrl.port === 'string') { + if (typeof parsedUrl.port === 'string' && parsedUrl.port) { const parsedPort = parseInt(parsedUrl.port, 10); if (isNaN(parsedPort)) { throw new Error('Invalid port specified in DATABASE_URL environment variable'); diff --git a/streaming/index.js b/streaming/index.js index 7ee22686b7..952e7da6d7 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -235,7 +235,7 @@ const startServer = async () => { app.get('/favicon.ico', (_req, res) => res.status(404).end()); app.get('/api/v1/streaming/health', (_req, res) => { - res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.writeHead(200, { 'Content-Type': 'text/plain', 'Cache-Control': 'private, no-store' }); res.end('OK'); }); @@ -688,7 +688,7 @@ const startServer = async () => { // filtering of statuses: // Filter based on language: - if (Array.isArray(req.chosenLanguages) && payload.language !== null && req.chosenLanguages.indexOf(payload.language) === -1) { + if (Array.isArray(req.chosenLanguages) && req.chosenLanguages.indexOf(payload.language) === -1) { log.debug(`Message ${payload.id} filtered by language (${payload.language})`); return; } @@ -918,7 +918,7 @@ const startServer = async () => { } res.setHeader('Content-Type', 'text/event-stream'); - res.setHeader('Cache-Control', 'no-store'); + res.setHeader('Cache-Control', 'private, no-store'); res.setHeader('Transfer-Encoding', 'chunked'); res.write(':)\n'); diff --git a/streaming/metrics.js b/streaming/metrics.js index bb6bce3f3c..263339a1ca 100644 --- a/streaming/metrics.js +++ b/streaming/metrics.js @@ -98,9 +98,11 @@ export function setupMetrics(channels, pgPool) { const requestHandler = (req, res) => { metrics.register.metrics().then((output) => { res.set('Content-Type', metrics.register.contentType); + res.set('Cache-Control', 'private, no-store'); res.end(output); }).catch((err) => { req.log.error(err, "Error collecting metrics"); + res.set('Cache-Control', 'private, no-store'); res.status(500).end(); }); }; diff --git a/streaming/redis.js b/streaming/redis.js index 2a36b89dc5..0b582ef2f5 100644 --- a/streaming/redis.js +++ b/streaming/redis.js @@ -50,9 +50,9 @@ function getSentinelConfiguration(env, commonOptions) { return { db: redisDatabase, name: env.REDIS_SENTINEL_MASTER, - username: env.REDIS_USERNAME, + username: env.REDIS_USER, password: env.REDIS_PASSWORD, - sentinelUsername: env.REDIS_SENTINEL_USERNAME ?? env.REDIS_USERNAME, + sentinelUsername: env.REDIS_SENTINEL_USERNAME ?? env.REDIS_USER, sentinelPassword: env.REDIS_SENTINEL_PASSWORD ?? env.REDIS_PASSWORD, sentinels, ...commonOptions, @@ -104,7 +104,7 @@ export function configFromEnv(env) { host: env.REDIS_HOST ?? '127.0.0.1', port: redisPort, db: redisDatabase, - username: env.REDIS_USERNAME, + username: env.REDIS_USER, password: env.REDIS_PASSWORD, ...commonOptions, }; diff --git a/yarn.lock b/yarn.lock index 7b6ddeefc3..65bba72fbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1763,9 +1763,9 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.2" +"@csstools/postcss-light-dark-function@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.4" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.1" "@csstools/css-tokenizer": "npm:^3.0.1" @@ -1773,7 +1773,7 @@ __metadata: "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f8973c435868998e5d6af1fc0c35b27bbf65fa9d0c35f5055c689b8ee2807a16802044e296f7def39a7253ae544fb49559e8273ee22eb4e21845aa980a1bc82b + checksum: 10c0/0176422ad9747953964b1ceff002df1ecb1952ebc481db6192070d68777135b582ea6fd32ae819b9c64c96cb9170bd6907c647c85b48daa4984b7ed3d7f9bccb languageName: node linkType: hard @@ -2828,7 +2828,7 @@ __metadata: "@gamestdio/websocket": "npm:^0.3.2" "@github/webauthn-json": "npm:^2.1.1" "@hello-pangea/dnd": "npm:^17.0.0" - "@rails/ujs": "npm:7.1.400" + "@rails/ujs": "npm:7.1.401" "@reduxjs/toolkit": "npm:^2.0.1" "@svgr/webpack": "npm:^5.5.0" "@testing-library/dom": "npm:^10.2.0" @@ -3127,10 +3127,10 @@ __metadata: languageName: node linkType: hard -"@rails/ujs@npm:7.1.400": - version: 7.1.400 - resolution: "@rails/ujs@npm:7.1.400" - checksum: 10c0/181329e731b925788a530dc5bc44eb4a07ae780e20b0309fd9140ebeeca30d9432ed50be0f25ae60f10beb3aa8883f6d662e4b9c6f6cd19a32c1f42ab2505c47 +"@rails/ujs@npm:7.1.401": + version: 7.1.401 + resolution: "@rails/ujs@npm:7.1.401" + checksum: 10c0/08eae084c80e837e47cc01d0be25a431495f7dea381dcaaa4ce39a3217fac46bf87d169b3dfcf304ae16e0714de7435c2b8c5eb8d5052e3ba70ef3050a72fa3c languageName: node linkType: hard @@ -13949,8 +13949,8 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.0.0": - version: 10.0.3 - resolution: "postcss-preset-env@npm:10.0.3" + version: 10.0.5 + resolution: "postcss-preset-env@npm:10.0.5" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" "@csstools/postcss-color-function": "npm:^4.0.2" @@ -13964,7 +13964,7 @@ __metadata: "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.2" + "@csstools/postcss-light-dark-function": "npm:^2.0.4" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" @@ -14015,7 +14015,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/da42caa2aab4d825fddfde00ebe2416d338c7b9a6f79a68840297888a8384f85991991c3fa10cf2d359fb230c885375f5cebd7bd63972725cd2a596d218f8b6a + checksum: 10c0/db5eb1175cb26bed3f1a4c47acc67935ffc784520321470520e59de366ac6f91be1e609fe36056af707ed20f7910721287cff0fae416c437dd3e944de13ffd05 languageName: node linkType: hard