mirror of
https://github.com/mastodon/mastodon.git
synced 2024-11-20 03:25:17 +01:00
Merge branch 'main' into add-image-remote-url-to-preview-cards
This commit is contained in:
commit
ef35ab9f36
15
.github/renovate.json5
vendored
15
.github/renovate.json5
vendored
@ -87,6 +87,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Update devDependencies every week, with one grouped PR
|
// Update devDependencies every week, with one grouped PR
|
||||||
|
matchManagers: ['npm'],
|
||||||
matchDepTypes: 'devDependencies',
|
matchDepTypes: 'devDependencies',
|
||||||
matchUpdateTypes: ['patch', 'minor'],
|
matchUpdateTypes: ['patch', 'minor'],
|
||||||
groupName: 'devDependencies (non-major)',
|
groupName: 'devDependencies (non-major)',
|
||||||
@ -95,8 +96,7 @@
|
|||||||
{
|
{
|
||||||
// Group all eslint-related packages with `eslint` in the same PR
|
// Group all eslint-related packages with `eslint` in the same PR
|
||||||
matchManagers: ['npm'],
|
matchManagers: ['npm'],
|
||||||
matchPackageNames: ['eslint'],
|
matchPackageNames: ['eslint', 'eslint-*', '@typescript-eslint/*'],
|
||||||
matchPackagePrefixes: ['eslint-', '@typescript-eslint/'],
|
|
||||||
matchUpdateTypes: ['patch', 'minor'],
|
matchUpdateTypes: ['patch', 'minor'],
|
||||||
groupName: 'eslint (non-major)',
|
groupName: 'eslint (non-major)',
|
||||||
},
|
},
|
||||||
@ -112,7 +112,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Update @types/* packages every week, with one grouped PR
|
// Update @types/* packages every week, with one grouped PR
|
||||||
matchPackagePrefixes: '@types/',
|
matchManagers: ['npm'],
|
||||||
|
matchPackageNames: '@types/*',
|
||||||
matchUpdateTypes: ['patch', 'minor'],
|
matchUpdateTypes: ['patch', 'minor'],
|
||||||
groupName: 'DefinitelyTyped types (non-major)',
|
groupName: 'DefinitelyTyped types (non-major)',
|
||||||
extends: ['schedule:weekly'],
|
extends: ['schedule:weekly'],
|
||||||
@ -129,23 +130,21 @@
|
|||||||
{
|
{
|
||||||
// Group all RuboCop packages with `rubocop` in the same PR
|
// Group all RuboCop packages with `rubocop` in the same PR
|
||||||
matchManagers: ['bundler'],
|
matchManagers: ['bundler'],
|
||||||
matchPackageNames: ['rubocop'],
|
matchPackageNames: ['rubocop', 'rubocop-*'],
|
||||||
matchPackagePrefixes: ['rubocop-'],
|
|
||||||
matchUpdateTypes: ['patch', 'minor'],
|
matchUpdateTypes: ['patch', 'minor'],
|
||||||
groupName: 'RuboCop (non-major)',
|
groupName: 'RuboCop (non-major)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Group all RSpec packages with `rspec` in the same PR
|
// Group all RSpec packages with `rspec` in the same PR
|
||||||
matchManagers: ['bundler'],
|
matchManagers: ['bundler'],
|
||||||
matchPackageNames: ['rspec'],
|
matchPackageNames: ['rspec', 'rspec-*'],
|
||||||
matchPackagePrefixes: ['rspec-'],
|
|
||||||
matchUpdateTypes: ['patch', 'minor'],
|
matchUpdateTypes: ['patch', 'minor'],
|
||||||
groupName: 'RSpec (non-major)',
|
groupName: 'RSpec (non-major)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Group all opentelemetry-ruby packages in the same PR
|
// Group all opentelemetry-ruby packages in the same PR
|
||||||
matchManagers: ['bundler'],
|
matchManagers: ['bundler'],
|
||||||
matchPackagePrefixes: ['opentelemetry-'],
|
matchPackageNames: ['opentelemetry-*'],
|
||||||
matchUpdateTypes: ['patch', 'minor'],
|
matchUpdateTypes: ['patch', 'minor'],
|
||||||
groupName: 'opentelemetry-ruby (non-major)',
|
groupName: 'opentelemetry-ruby (non-major)',
|
||||||
},
|
},
|
||||||
|
2
.github/workflows/build-container-image.yml
vendored
2
.github/workflows/build-container-image.yml
vendored
@ -85,7 +85,7 @@ jobs:
|
|||||||
tags: ${{ inputs.tags }}
|
tags: ${{ inputs.tags }}
|
||||||
labels: ${{ inputs.labels }}
|
labels: ${{ inputs.labels }}
|
||||||
|
|
||||||
- uses: docker/build-push-action@v5
|
- uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ${{ inputs.file_to_build }}
|
file: ${{ inputs.file_to_build }}
|
||||||
|
2
.github/workflows/crowdin-download.yml
vendored
2
.github/workflows/crowdin-download.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
|||||||
|
|
||||||
# Download the translation files from Crowdin
|
# Download the translation files from Crowdin
|
||||||
- name: crowdin action
|
- name: crowdin action
|
||||||
uses: crowdin/github-action@v1
|
uses: crowdin/github-action@v2
|
||||||
with:
|
with:
|
||||||
upload_sources: false
|
upload_sources: false
|
||||||
upload_translations: false
|
upload_translations: false
|
||||||
|
2
.github/workflows/crowdin-upload.yml
vendored
2
.github/workflows/crowdin-upload.yml
vendored
@ -26,7 +26,7 @@ jobs:
|
|||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: crowdin action
|
- name: crowdin action
|
||||||
uses: crowdin/github-action@v1
|
uses: crowdin/github-action@v2
|
||||||
with:
|
with:
|
||||||
upload_sources: true
|
upload_sources: true
|
||||||
upload_translations: false
|
upload_translations: false
|
||||||
|
1
.github/workflows/rebase-needed.yml
vendored
1
.github/workflows/rebase-needed.yml
vendored
@ -10,6 +10,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
label-rebase-needed:
|
label-rebase-needed:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
if: github.repository == 'mastodon/mastodon'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
32
.github/workflows/test-ruby.yml
vendored
32
.github/workflows/test-ruby.yml
vendored
@ -42,11 +42,24 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
onlyProduction: 'true'
|
onlyProduction: 'true'
|
||||||
|
|
||||||
|
- name: Cache assets from compilation
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
public/assets
|
||||||
|
public/packs
|
||||||
|
public/packs-test
|
||||||
|
tmp/cache/webpacker
|
||||||
|
key: ${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
|
||||||
|
${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}
|
||||||
|
${{ matrix.mode }}-assets-main
|
||||||
|
${{ matrix.mode }}-assets
|
||||||
|
|
||||||
- name: Precompile assets
|
- name: Precompile assets
|
||||||
# Previously had set this, but it's not supported
|
|
||||||
# export NODE_OPTIONS=--openssl-legacy-provider
|
|
||||||
run: |-
|
run: |-
|
||||||
./bin/rails assets:precompile
|
bin/rails assets:precompile
|
||||||
|
|
||||||
- name: Archive asset artifacts
|
- name: Archive asset artifacts
|
||||||
run: |
|
run: |
|
||||||
@ -137,6 +150,19 @@ jobs:
|
|||||||
bin/rails db:setup
|
bin/rails db:setup
|
||||||
bin/flatware fan bin/rails db:test:prepare
|
bin/flatware fan bin/rails db:test:prepare
|
||||||
|
|
||||||
|
- name: Cache RSpec persistence file
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
tmp/rspec/examples.txt
|
||||||
|
key: rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}-${{ matrix.ruby-version }}
|
||||||
|
rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
|
||||||
|
rspec-persistence-${{ github.head_ref || github.ref_name }}
|
||||||
|
rspec-persistence-main
|
||||||
|
rspec-persistence
|
||||||
|
|
||||||
- run: bin/flatware rspec -r ./spec/flatware_helper.rb
|
- run: bin/flatware rspec -r ./spec/flatware_helper.rb
|
||||||
|
|
||||||
- name: Upload coverage reports to Codecov
|
- name: Upload coverage reports to Codecov
|
||||||
|
@ -40,7 +40,6 @@ Style/FetchEnvVar:
|
|||||||
- 'config/environments/production.rb'
|
- 'config/environments/production.rb'
|
||||||
- 'config/initializers/2_limited_federation_mode.rb'
|
- 'config/initializers/2_limited_federation_mode.rb'
|
||||||
- 'config/initializers/3_omniauth.rb'
|
- 'config/initializers/3_omniauth.rb'
|
||||||
- 'config/initializers/blacklists.rb'
|
|
||||||
- 'config/initializers/cache_buster.rb'
|
- 'config/initializers/cache_buster.rb'
|
||||||
- 'config/initializers/devise.rb'
|
- 'config/initializers/devise.rb'
|
||||||
- 'config/initializers/paperclip.rb'
|
- 'config/initializers/paperclip.rb'
|
||||||
|
328
CHANGELOG.md
328
CHANGELOG.md
@ -2,6 +2,334 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [4.3.0] - UNRELEASED
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- **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.
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- **Add experimental 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, and #31513 by @ClearlyClaire, @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.\
|
||||||
|
This feature is intended to eventually replace the existing notifications column, but for this first beta, users will have to enable it in the “Experimental features” section of the notifications column settings.\
|
||||||
|
The API is not final yet, but it consists of:
|
||||||
|
- a new `group_key` attribute to `Notification` entities
|
||||||
|
- `GET /api/v2_alpha/notifications`: https://docs.joinmastodon.org/methods/notifications_alpha/#get-grouped
|
||||||
|
- `GET /api/v2_alpha/notifications/:group_key`: https://docs.joinmastodon.org/methods/notifications_alpha/#get-notification-group
|
||||||
|
- `POST /api/v2_alpha/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/notifications_alpha/#dismiss-group
|
||||||
|
- `GET /api/v2_alpha/notifications/:unread_count`: https://docs.joinmastodon.org/methods/notifications_alpha/#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, and #31541 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.\
|
||||||
|
This adds the following REST API endpoints:
|
||||||
|
|
||||||
|
- `GET /api/v2/notifications/policy`: https://docs.joinmastodon.org/methods/notifications/#get-policy
|
||||||
|
- `PATCH /api/v2/notifications/policy`: https://docs.joinmastodon.org/methods/notifications/#update-the-filtering-policy-for-notifications
|
||||||
|
- `GET /api/v1/notifications/requests`: https://docs.joinmastodon.org/methods/notifications/#get-requests
|
||||||
|
- `GET /api/v1/notifications/requests/:id`: https://docs.joinmastodon.org/methods/notifications/#get-one-request
|
||||||
|
- `POST /api/v1/notifications/requests/:id/accept`: https://docs.joinmastodon.org/methods/notifications/#accept-request
|
||||||
|
- `POST /api/v1/notifications/requests/:id/dismiss`: https://docs.joinmastodon.org/methods/notifications/#dismiss-request
|
||||||
|
- `POST /api/v1/notifications/requests/accept`: https://docs.joinmastodon.org/methods/notifications/#accept-multiple-requests
|
||||||
|
- `POST /api/v1/notifications/requests/dismiss`: https://docs.joinmastodon.org/methods/notifications/#dismiss-multiple-requests
|
||||||
|
- `GET /api/v1/notifications/requests/merged`: https://docs.joinmastodon.org/methods/notifications/#requests-merged
|
||||||
|
|
||||||
|
In addition, accepting one or more notification requests generates a new streaming event:
|
||||||
|
|
||||||
|
- `notifications_merged`: an event of this type indicates accepted notification requests have finished merging, and the notifications list should be refreshed
|
||||||
|
|
||||||
|
- **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).
|
||||||
|
- **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.
|
||||||
|
- **Add "system" theme setting (light/dark theme depending on user system preference)** (#29748, #29553, #29795, #29918, #30839, and #30861 by @nshki, @ErikUden, @mjankowski, @renchap, and @vmstan)\
|
||||||
|
Add a “system” theme that automatically switch between default dark and light themes depending on the user's system preferences.\
|
||||||
|
Also changes the default server theme to this new “system” theme so that automatic theme selection happens even when logged out.
|
||||||
|
- **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, and #30846 by @Gargron)\
|
||||||
|
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
|
||||||
|
<meta name="fediverse:creator" content="username@domain" />
|
||||||
|
```
|
||||||
|
On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors\
|
||||||
|
Note that this feature is still work in progress and the tagging format and verification mechanisms may change in future releases.
|
||||||
|
- **Add in-app notifications for moderation actions and warnings** (#30065, #30082, and #30081 by @ClearlyClaire)\
|
||||||
|
In addition to email notifications, also notify users of moderation actions or warnings against them directly within the app, so they are less likely to miss important communication from their moderators.\
|
||||||
|
This adds the `moderation_warning` notification type to the REST API and streaming, with a new [`moderation_warning` attribute](https://docs.joinmastodon.org/entities/Notification/#moderation_warning).
|
||||||
|
- **Add domain information to profiles in web UI** (#29602 by @Gargron)\
|
||||||
|
Clicking the domain of a user in their profile will now open a tooltip with a short explanation about servers and federation.
|
||||||
|
- Add ability to reorder uploaded media before posting in web UI (#28456 by @Gargron)
|
||||||
|
- Add moderation interface for searching hashtags (#30880 by @ThisIsMissEm)
|
||||||
|
- Add ability for admins to configure instance favicon and logo (#30040, #30208, #30259, #30375, #30734, #31016, and #30205 by @ClearlyClaire, @FawazFarid, @JasonPunyon, @mgmn, and @renchap)\
|
||||||
|
This is also exposed through the REST API: https://docs.joinmastodon.org/entities/Instance/#icon
|
||||||
|
- Add `api_versions` to `/api/v2/instance` (#31354 by @ClearlyClaire)\
|
||||||
|
Add API version number to make it easier for clients to detect compatible features going forward.\
|
||||||
|
See API documentation at https://docs.joinmastodon.org/entities/Instance/#api-versions
|
||||||
|
- Add recent audit log entries in federation moderation interface (#27386 by @ThisIsMissEm)
|
||||||
|
- Add profile setup to onboarding in web UI (#27829, #27876, and #28453 by @Gargron)
|
||||||
|
- Add prominent share/copy button on profiles in web UI (#27865 and #27889 by @ClearlyClaire and @Gargron)
|
||||||
|
- Add optional hints for server rules (#29539 and #29758 by @ClearlyClaire and @Gargron)\
|
||||||
|
Server rules can now be broken into a short rule name and a longer explanation of the rule.\
|
||||||
|
This adds a new [`hint` attribute](https://docs.joinmastodon.org/entities/Rule/#hint) to `Rule` entities in the REST API.
|
||||||
|
- Add support for PKCE in OAuth flow (#31129 by @ThisIsMissEm)
|
||||||
|
- Add CDN cache busting on media deletion (#31353 and #31414 by @ClearlyClaire and @tribela)
|
||||||
|
- Add the OAuth application used in local reports (#30539 by @ThisIsMissEm)
|
||||||
|
- Add hint to user that other remote statuses may be missing (#26910, #31387, and #31516 by @Gargron, @audiodude, and @renchap)
|
||||||
|
- Add lang attribute on preview card title (#31303 by @c960657)
|
||||||
|
- Add check for `Content-Length` in `ResponseWithLimitAdapter` (#31285 by @c960657)
|
||||||
|
- Add `Accept-Language` header to fetch preview cards in the server's default language (#31232 by @c960657)
|
||||||
|
- Add support for PKCE Extension in OmniAuth OIDC through the `OIDC_USE_PKCE` environment variable (#31131 by @ThisIsMissEm)
|
||||||
|
- Add API endpoints for unread notifications count (#31191 by @ClearlyClaire)\
|
||||||
|
This adds the following REST API endpoints:
|
||||||
|
- `GET /api/v1/notifications/unread_count`: https://docs.joinmastodon.org/methods/notifications/#unread-count
|
||||||
|
- Add `/` keyboard shortcut to focus the search field (#29921 by @ClearlyClaire)
|
||||||
|
- Add button to view the Hashtag on the instance from Hashtags in Moderation UI (#31533 by @ThisIsMissEm)
|
||||||
|
- Add list of pending releases directly in mail notifications for version updates (#29436 and #30035 by @ClearlyClaire)
|
||||||
|
- Add “Appeals” link under “Moderation” navigation category in moderation interface (#31071 by @ThisIsMissEm)
|
||||||
|
- Add badge on account card in report moderation interface when account is already suspended (#29592 by @ClearlyClaire)
|
||||||
|
- Add admin comments directly to the `admin/instances` page (#29240 by @tribela)
|
||||||
|
- Add ability to require approval when users sign up using specific email domains (#28468, #28732, #28607, and #28608 by @ClearlyClaire)
|
||||||
|
- Add banner for forwarded reports made by remote users about remote content (#27549 by @ClearlyClaire)
|
||||||
|
- Add support HTML ruby tags in remote posts for east-asian languages (#30897 by @ThisIsMissEm)
|
||||||
|
- Add link to manage warning presets in admin navigation (#26199 by @vmstan)
|
||||||
|
- Add volume saving/reuse to video player (#27488 by @thehydrogen)
|
||||||
|
- Add Elasticsearch index size, ffmpeg and ImageMagick versions to the admin dashboard (#27301, #30710, #31130, and #30845 by @vmstan)
|
||||||
|
- Add `MASTODON_SIDEKIQ_READY_FILENAME` environment variable to use a file for Sidekiq to signal it is ready to process jobs (#30971 and #30988 by @renchap)\
|
||||||
|
In the official Docker image, this is set to `sidekiq_process_has_started_and_will_begin_processing_jobs` so that Sidekiq will touch `tmp/sidekiq_process_has_started_and_will_begin_processing_jobs` to signal readiness.
|
||||||
|
- Add `S3_RETRY_LIMIT` environment variable to make S3 retries configurable (#23215 by @smiba)
|
||||||
|
- Add `S3_KEY_PREFIX` environment variable (#30181 by @S0yKaf)
|
||||||
|
- Add support for multiple `redirect_uris` when creating OAuth 2.0 Applications (#29192 by @ThisIsMissEm)
|
||||||
|
- Add Interlingue and Interlingua to interface languages (#28630 and #30828 by @Dhghomon and @renchap)
|
||||||
|
- Add Kashubian, Pennsylvania Dutch, Vai, Jawi Malay, Mohawk and Low German to posting languages (#26024, #26634, #27136, #29098, #27115, and #27434 by @EngineerDali, @HelgeKrueger, and @gunchleoc)
|
||||||
|
- Add validations to `Web::PushSubscription` (#30540 and #30542 by @ThisIsMissEm)
|
||||||
|
- Add option to use native Ruby driver for Redis through `REDIS_DRIVER=ruby` (#30717 by @vmstan)
|
||||||
|
- Add support for libvips in addition to ImageMagick (#30090, #30590, #30597, #30632, #30857, #30869, and #30858 by @ClearlyClaire, @Gargron, and @mjankowski)\
|
||||||
|
Server admins can now use libvips as a faster and lighter alternative to ImageMagick for processing user-uploaded images.\
|
||||||
|
This requires libvips 8.13 or newer, and needs to be enabled with `MASTODON_USE_LIBVIPS=true`.\
|
||||||
|
This is enabled by default in the official Docker images, and is intended to completely replace ImageMagick in the future.
|
||||||
|
- Add active animation to header settings button (#30221, #30307, and #30388 by @daudix)
|
||||||
|
- Add OpenTelemetry instrumentation (#30130, #30322, #30353, and #30350 by @julianocosta89, @renchap, and @robbkidd)\
|
||||||
|
See https://docs.joinmastodon.org/admin/config/#otel for documentation
|
||||||
|
- Add API to get multiple accounts and statuses (#27871 and #30465 by @ClearlyClaire)\
|
||||||
|
This adds `GET /api/v1/accounts` and `GET /api/v1/statuses` to the REST API, see https://docs.joinmastodon.org/methods/accounts/#index and https://docs.joinmastodon.org/methods/statuses/#index
|
||||||
|
- Add redirection back to previous page after site upload deletion (#30141 by @FawazFarid)
|
||||||
|
- Add RFC8414 OAuth 2.0 server metadata (#29191 by @ThisIsMissEm)
|
||||||
|
- Add loading indicator and empty result message to advanced interface search (#30085 by @ClearlyClaire)
|
||||||
|
- Add `profile` OAuth 2.0 scope, allowing more limited access to user data (#29087 and #30357 by @ThisIsMissEm)
|
||||||
|
- Add the role ID to the badge component (#29707 by @renchap)
|
||||||
|
- Add diagnostic message for failure during CLI search deploy (#29462 by @mjankowski)
|
||||||
|
- Add pagination `Link` headers on API accounts/statuses when pinned true (#29442 by @mjankowski)
|
||||||
|
- Add support for specifying custom CA cert for Elasticsearch through `ES_CA_FILE` (#29122 and #29147 by @ClearlyClaire)
|
||||||
|
- 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 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 `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)
|
||||||
|
- Add support for invite codes in the registration API (#27805 by @ClearlyClaire)
|
||||||
|
- Add HTML lang attribute to preview card descriptions (#27503 by @srapilly)
|
||||||
|
- Add display of relevant account warnings to report action logs (#27425 by @ClearlyClaire)
|
||||||
|
- Add validation of allowed schemes on preview card URLs (#27485 by @mjankowski)
|
||||||
|
- Add token introspection without read scope to `/api/v1/apps/verify_credentials` (#27142 by @ThisIsMissEm)
|
||||||
|
- Add support for cross-origin request to `/nodeinfo/2.0` (#27413 by @palant)
|
||||||
|
- Add variable delay before link verification of remote account links (#27351 by @ClearlyClaire)
|
||||||
|
- Add PWA shortcut to `/explore` page (#27235 by @jake-anto)
|
||||||
|
|
||||||
|
### 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)\
|
||||||
|
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, and #29659 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\
|
||||||
|
The compose form has been completely redesigned for a more modern and consistent look, as well as spelling out the chosen privacy setting and language name at all times.\
|
||||||
|
As part of this, the “Unlisted” privacy setting has been renamed to “Quiet public”.
|
||||||
|
- **Change design of confirmation modals in the web UI** (#29576, #29614, #29640, #29644, #30131, #30884, and #31399 by @ClearlyClaire, @Gargron, and @tribela)\
|
||||||
|
The mute, block, and domain block confirmation modals have been completely redesigned to be clearer and include more detailed information on the action to be performed.\
|
||||||
|
They also have a more modern and consistent design, along with other confirmation modals in the application.
|
||||||
|
- **Change colors throughout the web UI** (#29522, #29584, #29653, #29779, #29803, #29809, #29808, #29828, #31034, #31168, #31266, #31348, #31349, #31361, and #31510 by @ClearlyClaire, @Gargron, @renchap, and @vmstan)
|
||||||
|
- **Change onboarding prompt to follow suggestions carousel in web UI** (#28878 and #29272 by @Gargron)
|
||||||
|
- **Change email templates** (#28416, #28755, #28814, #29064, #28883, #29470, #29607, #29761, #29760, and #29879 by @ClearlyClaire, @Gargron, @hteumeuleu, and @mjankowski)\
|
||||||
|
All emails to end-users have been completely redesigned with a fresh new look, providing more information while making them easier to read and keeping maximum compatibility across mail clients.
|
||||||
|
- **Change follow recommendations algorithm** (#28314, #28433, #29017, #29108, #29306, #29550, #29619, and #31474 by @ClearlyClaire, @Gargron, @kernal053, @mjankowski, and @wheatear-dev)\
|
||||||
|
This replaces the “past interactions” recommendation algorithm with a “friends of friends” algorithm that suggests accounts followed by people you follow, and a “similar profiles” algorithm that suggests accounts with a profile similar to your most recent follows.\
|
||||||
|
In addition, the implementation has been significantly reworked, and all follow recommendations are now dismissable.\
|
||||||
|
This change deprecates the `source` attribute in `Suggestion` entities in the REST API, and replaces it with the new [`sources` attribute](https://docs.joinmastodon.org/entities/Suggestion/#sources).
|
||||||
|
- Change account search algorithm (#30803 by @Gargron)
|
||||||
|
- **Change streaming server to use its own dependencies and its own docker image** (#24702, #27967, #26850, #28112, #28115, #28137, #28138, #28497, #28548, and #30795 by @TheEssem, @ThisIsMissEm, @jippi, @timetinytim, and @vmstan)\
|
||||||
|
In order to reduce the amount of runtime dependencies, the streaming server has been moved into a separate package and Docker image.\
|
||||||
|
The `mastodon` image does not contain the streaming server anymore, as it has been moved to its own `mastodon-streaming` image.\
|
||||||
|
Administrators may need to update their setup accordingly.
|
||||||
|
- Change how content warnings and filters are displayed in web UI (#31365 by @Gargron)
|
||||||
|
- Change Web UI to allow viewing and severing relationships with suspended accounts (#27667 by @ClearlyClaire)\
|
||||||
|
This also adds a `with_suspended` parameter to `GET /api/v1/accounts/relationships` in the REST API.
|
||||||
|
- Change avatars border radius (#31390 by @renchap)
|
||||||
|
- Change counters to be displayed on profile timelines in web UI (#30525 by @Gargron)
|
||||||
|
- Change disabled buttons color in light mode to make the difference more visible (#30998 by @renchap)
|
||||||
|
- Change design of people tab on explore in web UI (#30059 by @Gargron)
|
||||||
|
- Change sidebar text in web UI (#30696 by @Gargron)
|
||||||
|
- Change "Follow" to "Follow back" and "Mutual" when appropriate in web UI (#28452 and #28465 by @Gargron and @renchap)
|
||||||
|
- Change media to be hidden/blurred by default in report modal (#28522 by @ClearlyClaire)
|
||||||
|
- Change order of the "muting" and "blocking" list options in “Data Exports” (#26088 by @fixermark)
|
||||||
|
- Change admin and moderation notes character limit from 500 to 2000 characters (#30288 by @ThisIsMissEm)
|
||||||
|
- Change mute options to be in dropdown on muted users list in web UI (#30049 and #31315 by @ClearlyClaire and @Gargron)
|
||||||
|
- Change out-of-band hashtags design in web UI (#29732 by @Gargron)
|
||||||
|
- Change design of metadata underneath detailed posts in web UI (#29585, #29605, and #29648 by @ClearlyClaire and @Gargron)
|
||||||
|
- Change action button to be last on profiles in web UI (#29533 and #29923 by @ClearlyClaire and @Gargron)
|
||||||
|
- Change confirmation prompts in trending moderation interface to be more specific (#19626 by @tribela)
|
||||||
|
- Change “Trends” moderation menu to “Recommendations & Trends” and move follow recommendations there (#31292 by @ThisIsMissEm)
|
||||||
|
- Change irrelevant fields in account cleanup settings to be disabled unless automatic cleanup is enabled (#26562 by @c960657)
|
||||||
|
- Change dropdown menu icon to not be replaced by close icon when open in web UI (#29532 by @Gargron)
|
||||||
|
- Change back button to always appear in advanced web UI (#29551 and #29669 by @Gargron)
|
||||||
|
- Change border of active compose field search inputs (#29832 and #29839 by @vmstan)
|
||||||
|
- Change link detection to allow `@` at the end of an URL (#31124 by @adamniedzielski)
|
||||||
|
- Change User-Agent to use Mastodon as the product, and http.rb as platform details (#31192 by @ClearlyClaire)
|
||||||
|
- Change layout and wording of the Content Retention server settings page (#27733 by @vmstan)
|
||||||
|
- Change unconfirmed users to be kept for one week instead of two days (#30285 by @renchap)
|
||||||
|
- Change maximum page size for Admin Domain Management APIs from 200 to 500 (#31253 by @ThisIsMissEm)
|
||||||
|
- Change database pool size to default to Sidekiq concurrency settings in Sidekiq processes (#26488 by @sinoru)
|
||||||
|
- Change alt text to empty string for avatars (#21875 by @jasminjohal)
|
||||||
|
- Change Docker images to use custom-built libvips and ffmpeg (#30571, #30569, and #31498 by @vmstan)
|
||||||
|
- Change external links in the admin audit log to plain text or local administration pages (#27139 and #27150 by @ClearlyClaire and @ThisIsMissEm)
|
||||||
|
- Change YJIT to be enabled when available (#30310 and #27283 by @ClearlyClaire and @mjankowski)\
|
||||||
|
Enable Ruby's built-in just-in-time compiler. This improves performances substantially, at the cost of a slightly increased memory usage.
|
||||||
|
- Change `.env` file loading from deprecated `dotenv-rails` gem to `dotenv` gem (#29173 and #30121 by @mjankowski)\
|
||||||
|
This should have no effect except in the unlikely case an environment variable included a newline.
|
||||||
|
- Change “Panjabi” language name to the more common spelling “Punjabi” (#27117 by @gunchleoc)
|
||||||
|
- Change encryption of OTP secrets to use ActiveRecord Encryption (#29831, #28325, #30151, #30202, #30340, and #30344 by @ClearlyClaire and @mjankowski)\
|
||||||
|
This requires a manual step from administrators of existing servers. Indeed, they need to generate new secrets, which can be done using `bundle exec rails db:encryption:init`.\
|
||||||
|
Furthermore, there is a risk that the introduced migration fails if the server was misconfigured in the past. If that happens, the migration error will include the relevant information.
|
||||||
|
- Change `/api/v1/announcements` to return regular `Status` entities (#26736 by @ClearlyClaire)
|
||||||
|
- Change imports to convert case-insensitive fields to lowercase (#29739 and #29740 by @ThisIsMissEm)
|
||||||
|
- Change stats in the admin interface to be inclusive of the full selected range, from beginning of day to end of day (#29416 and #29841 by @mjankowski)
|
||||||
|
- Change materialized views to be refreshed concurrently to avoid locks (#29015 by @Gargron)
|
||||||
|
- Change compose form to use server-provided post character and poll options limits (#28928 and #29490 by @ClearlyClaire and @renchap)
|
||||||
|
- Change streaming server logging from `npmlog` to `pino` and `pino-http` (#27828 by @ThisIsMissEm)\
|
||||||
|
This changes the Mastodon streaming server log format, so this might be considered a breaking change if you were parsing the logs.
|
||||||
|
- Change media “ALT” label to use a specific CSS class (#28777 by @ClearlyClaire)
|
||||||
|
- Change streaming API host to not be overridden to localhost in development mode (#28557 by @ClearlyClaire)
|
||||||
|
- Change cookie rotator to use SHA1 digest for new cookies (#27392 by @ClearlyClaire)\
|
||||||
|
Note that this requires that no pre-4.2.0 Mastodon web server is running when this code is deployed, as those would not understand the new cookies.\
|
||||||
|
Therefore, zero-downtime updates are only supported if you're coming from 4.2.0 or newer. If you want to skip Mastodon 4.2, you will need to completely stop Mastodon services before updating.
|
||||||
|
- Change preview card deletes to be done using batch method (#28183 by @vmstan)
|
||||||
|
- Change `img-src` and `media-src` CSP directives to not include `https:` (#28025 and #28561 by @ClearlyClaire)
|
||||||
|
- Change self-destruct procedure (#26439, #29049, and #29420 by @ClearlyClaire and @zunda)\
|
||||||
|
Instead of enqueuing deletion jobs immediately, `tootctl self-destruct` now outputs a value for the `SELF_DESTRUCT` environment variable, which puts a server in self-destruct mode, processing deletions in the background, while giving users access to their export archives.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Remove StatsD integration (replaced by OpenTelemetry) (#30240 by @mjankowski)
|
||||||
|
- Remove `CacheBuster` default options (#30718 by @mjankowski)
|
||||||
|
- Remove home marker updates from the Web UI (#22721 by @davbeck)\
|
||||||
|
The web interface was unconditionally updating the home marker to the most recent received post, discarding any value set by other clients, thus making the feature unreliable.
|
||||||
|
- Remove support for Ruby 3.0 (reaching EOL) (#29702 by @mjankowski)
|
||||||
|
- Remove setting for unfollow confirmation modal (#29373 by @ClearlyClaire)\
|
||||||
|
Instead, the unfollow confirmation modal will always be displayed.
|
||||||
|
- Remove support for Capistrano (#27295 and #30009 by @mjankowski and @renchap)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **Fix link preview cards not always preserving the original URL from the status** (#27312 by @Gargron)
|
||||||
|
- Fix log out from user menu not working on Safari (#31402 by @renchap)
|
||||||
|
- Fix various issues when in link preview card generation (#28748, #30017, #30362, #30173, #30853, #30929, #30933, #30957, #30987, and #31144 by @adamniedzielski, @oneiros, @phocks, @timothyjrogers, and @tribela)
|
||||||
|
- Fix handling of missing links in Webfinger responses (#31030 by @adamniedzielski)
|
||||||
|
- Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil)
|
||||||
|
- Fix cross-origin loading of `inert.css` polyfill (#30687 by @louis77)
|
||||||
|
- Fix cutoff of instance name in sign-up form (#30598 by @oneiros)
|
||||||
|
- Fix empty `aria-hidden` attribute value in logo resources area (#30570 by @mjankowski)
|
||||||
|
- 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, and #31445 by @valtlai and @vmstan)
|
||||||
|
- 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 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)
|
||||||
|
- Fix distracting and confusing always-showing scrollbar track in boost confirmation modal (#31524 by @ClearlyClaire)
|
||||||
|
- Fix being able to upload more than 4 media attachments in some cases (#29183 by @mashirozx)
|
||||||
|
- Fix preview card player getting embedded when clicking on the external link button (#29457 by @ClearlyClaire)
|
||||||
|
- 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 “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)
|
||||||
|
- Fix moderation report updates through `PUT /api/v1/admin/reports/:id` not being logged in the audit log (#29044, #30342, and #31033 by @mjankowski, @tribela, and @vmstan)
|
||||||
|
- Fix moderation interface allowing to select rule violation when there are no server rules (#31458 by @ThisIsMissEm)
|
||||||
|
- Fix redirection from paths with url-encoded `@` to their decoded form (#31184 by @timothyjrogers)
|
||||||
|
- Fix Trending Tags pending review having an unstable sort order (#31473 by @ThisIsMissEm)
|
||||||
|
- Fix the emoji dropdown button always opening the dropdown instead of behaving like a toggle (#29012 by @jh97uk)
|
||||||
|
- Fix processing of incoming posts with bearcaps (#26527 by @kmycode)
|
||||||
|
- Fix support for IPv6 redis connections in streaming (#31229 by @ThisIsMissEm)
|
||||||
|
- Fix search form re-rendering spuriously in web UI (#28876 by @Gargron)
|
||||||
|
- Fix `RedownloadMediaWorker` not being called on transient S3 failure (#28714 by @ClearlyClaire)
|
||||||
|
- Fix ISO code for Canadian French from incorrect `fr-QC` to `fr-CA` (#26015 by @gunchleoc)
|
||||||
|
- Fix `.opus` file uploads being misidentified by Paperclip (#28580 by @vmstan)
|
||||||
|
- Fix loading local accounts with extraneous domain part in WebUI (#28559 by @ClearlyClaire)
|
||||||
|
- Fix destructive actions in dropdowns not using error color in light theme (#28484 by @logicalmoody)
|
||||||
|
- Fix call to inefficient `delete_matched` cache method in domain blocks (#28374 by @ClearlyClaire)
|
||||||
|
- Fix status edits not always being streamed to mentioned users (#28324 by @ClearlyClaire)
|
||||||
|
- Fix onboarding step descriptions being truncated on narrow screens (#28021 by @ClearlyClaire)
|
||||||
|
- Fix duplicate IDs in relationships and familiar_followers APIs (#27982 by @KevinBongart)
|
||||||
|
- Fix modal content not being selectable (#27813 by @pajowu)
|
||||||
|
- Fix Web UI not displaying appropriate explanation when a user hides their follows/followers (#27791 by @ClearlyClaire)
|
||||||
|
- Fix format-dependent redirects being cached regardless of requested format (#27632 by @ClearlyClaire)
|
||||||
|
- Fix confusing screen when visiting a confirmation link for an already-confirmed email (#27368 by @ClearlyClaire)
|
||||||
|
- Fix explore page reloading when you navigate back to it in web UI (#27489 by @Gargron)
|
||||||
|
- Fix missing redirection from `/home` to `/deck/home` in the advanced interface (#27378 by @Signez)
|
||||||
|
- Fix empty environment variables not using default nil value (#27400 by @renchap)
|
||||||
|
- Fix language sorting in settings (#27158 by @gunchleoc)
|
||||||
|
|
||||||
|
## |4.2.11] - 2024-08-16
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Add support for incoming `<s>` tag ([mediaformat](https://github.com/mastodon/mastodon/pull/31375))
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Change logic of block/mute bypass for mentions from moderators to only apply to visible roles with moderation powers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31271))
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix incorrect rate limit on PUT requests ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31356))
|
||||||
|
- Fix presence of `ß` in adjacent word preventing mention and hashtag matching ([adamniedzielski](https://github.com/mastodon/mastodon/pull/31122))
|
||||||
|
- Fix processing of webfinger responses with multiple `self` links ([adamniedzielski](https://github.com/mastodon/mastodon/pull/31110))
|
||||||
|
- Fix duplicate `orderedItems` in user archive's `outbox.json` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31099))
|
||||||
|
- Fix click event handling when clicking outside of an open dropdown menu ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31251))
|
||||||
|
- Fix status processing failing halfway when a remote post has a malformed `replies` attribute ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31246))
|
||||||
|
- Fix `--verbose` option of `tootctl media remove`, which was previously erroneously removed ([mjankowski](https://github.com/mastodon/mastodon/pull/30536))
|
||||||
|
- Fix division by zero on some video/GIF files ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30600))
|
||||||
|
- Fix Web UI trying to save user settings despite being logged out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30324))
|
||||||
|
- Fix hashtag regexp matching some link anchors ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30190))
|
||||||
|
- Fix local account search on LDAP login being case-sensitive ([raucao](https://github.com/mastodon/mastodon/pull/30113))
|
||||||
|
- Fix development environment admin account not being auto-approved ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29958))
|
||||||
|
- Fix report reason selector in moderation interface not unselecting rules when changing category ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29026))
|
||||||
|
- Fix already-invalid reports failing to resolve ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29027))
|
||||||
|
- Fix OCR when using S3/CDN for assets ([vmstan](https://github.com/mastodon/mastodon/pull/28551))
|
||||||
|
- Fix error when encountering malformed `Tag` objects from Kbin ([ShadowJonathan](https://github.com/mastodon/mastodon/pull/28235))
|
||||||
|
- Fix not all allowed image formats showing in file picker when uploading custom emoji ([june128](https://github.com/mastodon/mastodon/pull/28076))
|
||||||
|
- Fix search popout listing unusable search options when logged out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27918))
|
||||||
|
- Fix processing of featured collections lacking an `items` attribute ([tribela](https://github.com/mastodon/mastodon/pull/27581))
|
||||||
|
- Fix `mastodon:stats` decoration of stats rake task ([mjankowski](https://github.com/mastodon/mastodon/pull/31104))
|
||||||
|
|
||||||
## [4.2.10] - 2024-07-04
|
## [4.2.10] - 2024-07-04
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
20
Dockerfile
20
Dockerfile
@ -191,16 +191,19 @@ FROM build AS libvips
|
|||||||
|
|
||||||
# libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"]
|
# libvips version to compile, change with [--build-arg VIPS_VERSION="8.15.2"]
|
||||||
# renovate: datasource=github-releases depName=libvips packageName=libvips/libvips
|
# renovate: datasource=github-releases depName=libvips packageName=libvips/libvips
|
||||||
ARG VIPS_VERSION=8.15.2
|
ARG VIPS_VERSION=8.15.3
|
||||||
# libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"]
|
# libvips download URL, change with [--build-arg VIPS_URL="https://github.com/libvips/libvips/releases/download"]
|
||||||
ARG VIPS_URL=https://github.com/libvips/libvips/releases/download
|
ARG VIPS_URL=https://github.com/libvips/libvips/releases/download
|
||||||
|
|
||||||
WORKDIR /usr/local/libvips/src
|
WORKDIR /usr/local/libvips/src
|
||||||
|
# Download and extract libvips source code
|
||||||
|
ADD ${VIPS_URL}/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.xz /usr/local/libvips/src/
|
||||||
|
RUN tar xf vips-${VIPS_VERSION}.tar.xz;
|
||||||
|
|
||||||
|
WORKDIR /usr/local/libvips/src/vips-${VIPS_VERSION}
|
||||||
|
|
||||||
|
# Configure and compile libvips
|
||||||
RUN \
|
RUN \
|
||||||
curl -sSL -o vips-${VIPS_VERSION}.tar.xz ${VIPS_URL}/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.xz; \
|
|
||||||
tar xf vips-${VIPS_VERSION}.tar.xz; \
|
|
||||||
cd vips-${VIPS_VERSION}; \
|
|
||||||
meson setup build --prefix /usr/local/libvips --libdir=lib -Ddeprecated=false -Dintrospection=disabled -Dmodules=disabled -Dexamples=false; \
|
meson setup build --prefix /usr/local/libvips --libdir=lib -Ddeprecated=false -Dintrospection=disabled -Dmodules=disabled -Dexamples=false; \
|
||||||
cd build; \
|
cd build; \
|
||||||
ninja; \
|
ninja; \
|
||||||
@ -216,11 +219,14 @@ ARG FFMPEG_VERSION=7.0.2
|
|||||||
ARG FFMPEG_URL=https://ffmpeg.org/releases
|
ARG FFMPEG_URL=https://ffmpeg.org/releases
|
||||||
|
|
||||||
WORKDIR /usr/local/ffmpeg/src
|
WORKDIR /usr/local/ffmpeg/src
|
||||||
|
# Download and extract ffmpeg source code
|
||||||
|
ADD ${FFMPEG_URL}/ffmpeg-${FFMPEG_VERSION}.tar.xz /usr/local/ffmpeg/src/
|
||||||
|
RUN tar xf ffmpeg-${FFMPEG_VERSION}.tar.xz;
|
||||||
|
|
||||||
|
WORKDIR /usr/local/ffmpeg/src/ffmpeg-${FFMPEG_VERSION}
|
||||||
|
|
||||||
|
# Configure and compile ffmpeg
|
||||||
RUN \
|
RUN \
|
||||||
curl -sSL -o ffmpeg-${FFMPEG_VERSION}.tar.xz ${FFMPEG_URL}/ffmpeg-${FFMPEG_VERSION}.tar.xz; \
|
|
||||||
tar xf ffmpeg-${FFMPEG_VERSION}.tar.xz; \
|
|
||||||
cd ffmpeg-${FFMPEG_VERSION}; \
|
|
||||||
./configure \
|
./configure \
|
||||||
--prefix=/usr/local/ffmpeg \
|
--prefix=/usr/local/ffmpeg \
|
||||||
--toolchain=hardened \
|
--toolchain=hardened \
|
||||||
|
3
Gemfile
3
Gemfile
@ -64,7 +64,6 @@ gem 'link_header', '~> 0.0'
|
|||||||
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
||||||
gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar'
|
gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar'
|
||||||
gem 'nokogiri', '~> 1.15'
|
gem 'nokogiri', '~> 1.15'
|
||||||
gem 'nsa'
|
|
||||||
gem 'oj', '~> 3.14'
|
gem 'oj', '~> 3.14'
|
||||||
gem 'ox', '~> 2.14'
|
gem 'ox', '~> 2.14'
|
||||||
gem 'parslet'
|
gem 'parslet'
|
||||||
@ -112,7 +111,7 @@ group :opentelemetry do
|
|||||||
gem 'opentelemetry-instrumentation-http', '~> 0.23.2', require: false
|
gem 'opentelemetry-instrumentation-http', '~> 0.23.2', require: false
|
||||||
gem 'opentelemetry-instrumentation-http_client', '~> 0.22.3', require: false
|
gem 'opentelemetry-instrumentation-http_client', '~> 0.22.3', require: false
|
||||||
gem 'opentelemetry-instrumentation-net_http', '~> 0.22.4', require: false
|
gem 'opentelemetry-instrumentation-net_http', '~> 0.22.4', require: false
|
||||||
gem 'opentelemetry-instrumentation-pg', '~> 0.27.1', require: false
|
gem 'opentelemetry-instrumentation-pg', '~> 0.28.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-rack', '~> 0.24.1', require: false
|
gem 'opentelemetry-instrumentation-rack', '~> 0.24.1', require: false
|
||||||
gem 'opentelemetry-instrumentation-rails', '~> 0.31.0', require: false
|
gem 'opentelemetry-instrumentation-rails', '~> 0.31.0', require: false
|
||||||
gem 'opentelemetry-instrumentation-redis', '~> 0.25.3', require: false
|
gem 'opentelemetry-instrumentation-redis', '~> 0.25.3', require: false
|
||||||
|
59
Gemfile.lock
59
Gemfile.lock
@ -100,16 +100,16 @@ GEM
|
|||||||
attr_required (1.0.2)
|
attr_required (1.0.2)
|
||||||
awrence (1.2.1)
|
awrence (1.2.1)
|
||||||
aws-eventstream (1.3.0)
|
aws-eventstream (1.3.0)
|
||||||
aws-partitions (1.961.0)
|
aws-partitions (1.966.0)
|
||||||
aws-sdk-core (3.201.3)
|
aws-sdk-core (3.201.5)
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
aws-eventstream (~> 1, >= 1.3.0)
|
||||||
aws-partitions (~> 1, >= 1.651.0)
|
aws-partitions (~> 1, >= 1.651.0)
|
||||||
aws-sigv4 (~> 1.8)
|
aws-sigv4 (~> 1.9)
|
||||||
jmespath (~> 1, >= 1.6.1)
|
jmespath (~> 1, >= 1.6.1)
|
||||||
aws-sdk-kms (1.88.0)
|
aws-sdk-kms (1.88.0)
|
||||||
aws-sdk-core (~> 3, >= 3.201.0)
|
aws-sdk-core (~> 3, >= 3.201.0)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
aws-sdk-s3 (1.157.0)
|
aws-sdk-s3 (1.159.0)
|
||||||
aws-sdk-core (~> 3, >= 3.201.0)
|
aws-sdk-core (~> 3, >= 3.201.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
@ -137,14 +137,14 @@ GEM
|
|||||||
blurhash (0.1.7)
|
blurhash (0.1.7)
|
||||||
bootsnap (1.18.4)
|
bootsnap (1.18.4)
|
||||||
msgpack (~> 1.2)
|
msgpack (~> 1.2)
|
||||||
brakeman (6.1.2)
|
brakeman (6.2.1)
|
||||||
racc
|
racc
|
||||||
browser (5.3.1)
|
browser (5.3.1)
|
||||||
brpoplpush-redis_script (0.1.3)
|
brpoplpush-redis_script (0.1.3)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||||
redis (>= 1.0, < 6)
|
redis (>= 1.0, < 6)
|
||||||
builder (3.3.0)
|
builder (3.3.0)
|
||||||
bundler-audit (0.9.1)
|
bundler-audit (0.9.2)
|
||||||
bundler (>= 1.2.0, < 3)
|
bundler (>= 1.2.0, < 3)
|
||||||
thor (~> 1.0)
|
thor (~> 1.0)
|
||||||
capybara (3.40.0)
|
capybara (3.40.0)
|
||||||
@ -168,7 +168,7 @@ GEM
|
|||||||
climate_control (1.2.0)
|
climate_control (1.2.0)
|
||||||
cocoon (1.2.15)
|
cocoon (1.2.15)
|
||||||
color_diff (0.1)
|
color_diff (0.1)
|
||||||
concurrent-ruby (1.3.3)
|
concurrent-ruby (1.3.4)
|
||||||
connection_pool (2.4.1)
|
connection_pool (2.4.1)
|
||||||
cose (1.3.0)
|
cose (1.3.0)
|
||||||
cbor (~> 0.5.9)
|
cbor (~> 0.5.9)
|
||||||
@ -281,8 +281,8 @@ GEM
|
|||||||
fog-core (~> 2.1)
|
fog-core (~> 2.1)
|
||||||
fog-json (>= 1.0)
|
fog-json (>= 1.0)
|
||||||
formatador (1.1.0)
|
formatador (1.1.0)
|
||||||
fugit (1.10.1)
|
fugit (1.11.1)
|
||||||
et-orbi (~> 1, >= 1.2.7)
|
et-orbi (~> 1, >= 1.2.11)
|
||||||
raabro (~> 1.4)
|
raabro (~> 1.4)
|
||||||
fuubar (2.5.1)
|
fuubar (2.5.1)
|
||||||
rspec-core (~> 3.0)
|
rspec-core (~> 3.0)
|
||||||
@ -432,7 +432,7 @@ GEM
|
|||||||
mime-types-data (3.2024.0702)
|
mime-types-data (3.2024.0702)
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
mini_portile2 (2.8.7)
|
mini_portile2 (2.8.7)
|
||||||
minitest (5.24.1)
|
minitest (5.25.1)
|
||||||
msgpack (1.7.2)
|
msgpack (1.7.2)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
multipart-post (2.4.0)
|
multipart-post (2.4.0)
|
||||||
@ -455,13 +455,9 @@ GEM
|
|||||||
nokogiri (1.16.7)
|
nokogiri (1.16.7)
|
||||||
mini_portile2 (~> 2.8.2)
|
mini_portile2 (~> 2.8.2)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nsa (0.3.0)
|
oj (3.16.5)
|
||||||
activesupport (>= 4.2, < 7.2)
|
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
||||||
sidekiq (>= 3.5)
|
|
||||||
statsd-ruby (~> 1.4, >= 1.4.0)
|
|
||||||
oj (3.16.4)
|
|
||||||
bigdecimal (>= 3.0)
|
bigdecimal (>= 3.0)
|
||||||
|
ostruct (>= 0.2)
|
||||||
omniauth (2.1.2)
|
omniauth (2.1.2)
|
||||||
hashie (>= 3.4.6)
|
hashie (>= 3.4.6)
|
||||||
rack (>= 2.2.3)
|
rack (>= 2.2.3)
|
||||||
@ -470,7 +466,7 @@ GEM
|
|||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
nokogiri (~> 1.12)
|
nokogiri (~> 1.12)
|
||||||
omniauth (~> 2.1)
|
omniauth (~> 2.1)
|
||||||
omniauth-rails_csrf_protection (1.0.1)
|
omniauth-rails_csrf_protection (1.0.2)
|
||||||
actionpack (>= 4.2)
|
actionpack (>= 4.2)
|
||||||
omniauth (~> 2.0)
|
omniauth (~> 2.0)
|
||||||
omniauth-saml (2.1.0)
|
omniauth-saml (2.1.0)
|
||||||
@ -513,17 +509,17 @@ GEM
|
|||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.22.1)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-rack (~> 0.21)
|
opentelemetry-instrumentation-rack (~> 0.21)
|
||||||
opentelemetry-instrumentation-action_view (0.7.1)
|
opentelemetry-instrumentation-action_view (0.7.2)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-active_support (~> 0.1)
|
opentelemetry-instrumentation-active_support (~> 0.1)
|
||||||
opentelemetry-instrumentation-base (~> 0.22.1)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-active_job (0.7.4)
|
opentelemetry-instrumentation-active_job (0.7.7)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.22.1)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-active_model_serializers (0.20.2)
|
opentelemetry-instrumentation-active_model_serializers (0.20.2)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.22.1)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-active_record (0.7.2)
|
opentelemetry-instrumentation-active_record (0.7.3)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.22.1)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-active_support (0.6.0)
|
opentelemetry-instrumentation-active_support (0.6.0)
|
||||||
@ -550,14 +546,14 @@ GEM
|
|||||||
opentelemetry-instrumentation-net_http (0.22.7)
|
opentelemetry-instrumentation-net_http (0.22.7)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.22.1)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-pg (0.27.4)
|
opentelemetry-instrumentation-pg (0.28.0)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-helpers-sql-obfuscation
|
opentelemetry-helpers-sql-obfuscation
|
||||||
opentelemetry-instrumentation-base (~> 0.22.1)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-rack (0.24.6)
|
opentelemetry-instrumentation-rack (0.24.6)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.22.1)
|
opentelemetry-instrumentation-base (~> 0.22.1)
|
||||||
opentelemetry-instrumentation-rails (0.31.1)
|
opentelemetry-instrumentation-rails (0.31.2)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-action_mailer (~> 0.1.0)
|
opentelemetry-instrumentation-action_mailer (~> 0.1.0)
|
||||||
opentelemetry-instrumentation-action_pack (~> 0.9.0)
|
opentelemetry-instrumentation-action_pack (~> 0.9.0)
|
||||||
@ -582,6 +578,7 @@ GEM
|
|||||||
opentelemetry-semantic_conventions (1.10.1)
|
opentelemetry-semantic_conventions (1.10.1)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
|
ostruct (0.6.0)
|
||||||
ox (2.14.18)
|
ox (2.14.18)
|
||||||
parallel (1.25.1)
|
parallel (1.25.1)
|
||||||
parser (3.3.4.0)
|
parser (3.3.4.0)
|
||||||
@ -601,7 +598,7 @@ GEM
|
|||||||
actionmailer (>= 3)
|
actionmailer (>= 3)
|
||||||
net-smtp
|
net-smtp
|
||||||
premailer (~> 1.7, >= 1.7.9)
|
premailer (~> 1.7, >= 1.7.9)
|
||||||
propshaft (0.9.0)
|
propshaft (0.9.1)
|
||||||
actionpack (>= 7.0.0)
|
actionpack (>= 7.0.0)
|
||||||
activesupport (>= 7.0.0)
|
activesupport (>= 7.0.0)
|
||||||
rack
|
rack
|
||||||
@ -611,7 +608,7 @@ GEM
|
|||||||
public_suffix (6.0.1)
|
public_suffix (6.0.1)
|
||||||
puma (6.4.2)
|
puma (6.4.2)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
pundit (2.3.2)
|
pundit (2.4.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
raabro (1.4.0)
|
raabro (1.4.0)
|
||||||
racc (1.8.1)
|
racc (1.8.1)
|
||||||
@ -698,7 +695,7 @@ GEM
|
|||||||
responders (3.1.1)
|
responders (3.1.1)
|
||||||
actionpack (>= 5.2)
|
actionpack (>= 5.2)
|
||||||
railties (>= 5.2)
|
railties (>= 5.2)
|
||||||
rexml (3.3.4)
|
rexml (3.3.6)
|
||||||
strscan
|
strscan
|
||||||
rotp (6.3.0)
|
rotp (6.3.0)
|
||||||
rouge (4.2.1)
|
rouge (4.2.1)
|
||||||
@ -721,7 +718,7 @@ GEM
|
|||||||
rspec-mocks (3.13.1)
|
rspec-mocks (3.13.1)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.13.0)
|
rspec-support (~> 3.13.0)
|
||||||
rspec-rails (6.1.3)
|
rspec-rails (6.1.4)
|
||||||
actionpack (>= 6.1)
|
actionpack (>= 6.1)
|
||||||
activesupport (>= 6.1)
|
activesupport (>= 6.1)
|
||||||
railties (>= 6.1)
|
railties (>= 6.1)
|
||||||
@ -777,7 +774,7 @@ GEM
|
|||||||
fugit (~> 1.1, >= 1.1.6)
|
fugit (~> 1.1, >= 1.1.6)
|
||||||
safety_net_attestation (0.4.0)
|
safety_net_attestation (0.4.0)
|
||||||
jwt (~> 2.0)
|
jwt (~> 2.0)
|
||||||
sanitize (6.1.2)
|
sanitize (6.1.3)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.12.0)
|
nokogiri (>= 1.12.0)
|
||||||
scenic (1.8.0)
|
scenic (1.8.0)
|
||||||
@ -819,7 +816,6 @@ GEM
|
|||||||
simplecov-lcov (0.8.0)
|
simplecov-lcov (0.8.0)
|
||||||
simplecov_json_formatter (0.1.4)
|
simplecov_json_formatter (0.1.4)
|
||||||
stackprof (0.2.26)
|
stackprof (0.2.26)
|
||||||
statsd-ruby (1.5.0)
|
|
||||||
stoplight (4.1.0)
|
stoplight (4.1.0)
|
||||||
redlock (~> 1.0)
|
redlock (~> 1.0)
|
||||||
stringio (3.1.1)
|
stringio (3.1.1)
|
||||||
@ -836,7 +832,7 @@ GEM
|
|||||||
unicode-display_width (>= 1.1.1, < 3)
|
unicode-display_width (>= 1.1.1, < 3)
|
||||||
terrapin (1.0.1)
|
terrapin (1.0.1)
|
||||||
climate_control
|
climate_control
|
||||||
test-prof (1.3.3.1)
|
test-prof (1.4.1)
|
||||||
thor (1.3.1)
|
thor (1.3.1)
|
||||||
tilt (2.3.0)
|
tilt (2.3.0)
|
||||||
timeout (0.4.1)
|
timeout (0.4.1)
|
||||||
@ -904,7 +900,7 @@ GEM
|
|||||||
xorcist (1.1.3)
|
xorcist (1.1.3)
|
||||||
xpath (3.2.0)
|
xpath (3.2.0)
|
||||||
nokogiri (~> 1.8)
|
nokogiri (~> 1.8)
|
||||||
zeitwerk (2.6.16)
|
zeitwerk (2.6.17)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
@ -978,7 +974,6 @@ DEPENDENCIES
|
|||||||
net-http (~> 0.4.0)
|
net-http (~> 0.4.0)
|
||||||
net-ldap (~> 0.18)
|
net-ldap (~> 0.18)
|
||||||
nokogiri (~> 1.15)
|
nokogiri (~> 1.15)
|
||||||
nsa
|
|
||||||
oj (~> 3.14)
|
oj (~> 3.14)
|
||||||
omniauth (~> 2.0)
|
omniauth (~> 2.0)
|
||||||
omniauth-cas (~> 3.0.0.beta.1)
|
omniauth-cas (~> 3.0.0.beta.1)
|
||||||
@ -995,7 +990,7 @@ DEPENDENCIES
|
|||||||
opentelemetry-instrumentation-http (~> 0.23.2)
|
opentelemetry-instrumentation-http (~> 0.23.2)
|
||||||
opentelemetry-instrumentation-http_client (~> 0.22.3)
|
opentelemetry-instrumentation-http_client (~> 0.22.3)
|
||||||
opentelemetry-instrumentation-net_http (~> 0.22.4)
|
opentelemetry-instrumentation-net_http (~> 0.22.4)
|
||||||
opentelemetry-instrumentation-pg (~> 0.27.1)
|
opentelemetry-instrumentation-pg (~> 0.28.0)
|
||||||
opentelemetry-instrumentation-rack (~> 0.24.1)
|
opentelemetry-instrumentation-rack (~> 0.24.1)
|
||||||
opentelemetry-instrumentation-rails (~> 0.31.0)
|
opentelemetry-instrumentation-rails (~> 0.31.0)
|
||||||
opentelemetry-instrumentation-redis (~> 0.25.3)
|
opentelemetry-instrumentation-redis (~> 0.25.3)
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Api::V1::Notifications::RequestsController < Api::BaseController
|
class Api::V1::Notifications::RequestsController < Api::BaseController
|
||||||
before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, only: :index
|
include Redisable
|
||||||
before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, except: :index
|
|
||||||
|
before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, only: [:index, :show, :merged?]
|
||||||
|
before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, except: [:index, :show, :merged?]
|
||||||
|
|
||||||
before_action :require_user!
|
before_action :require_user!
|
||||||
before_action :set_request, only: [:show, :accept, :dismiss]
|
before_action :set_request, only: [:show, :accept, :dismiss]
|
||||||
@ -19,6 +21,10 @@ class Api::V1::Notifications::RequestsController < Api::BaseController
|
|||||||
render json: @requests, each_serializer: REST::NotificationRequestSerializer, relationships: @relationships
|
render json: @requests, each_serializer: REST::NotificationRequestSerializer, relationships: @relationships
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def merged?
|
||||||
|
render json: { merged: redis.get("notification_unfilter_jobs:#{current_account.id}").to_i <= 0 }
|
||||||
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
render json: @request, serializer: REST::NotificationRequestSerializer
|
render json: @request, serializer: REST::NotificationRequestSerializer
|
||||||
end
|
end
|
||||||
@ -69,13 +75,17 @@ class Api::V1::Notifications::RequestsController < Api::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def next_path
|
def next_path
|
||||||
api_v1_notifications_requests_url pagination_params(max_id: pagination_max_id) unless @requests.empty?
|
api_v1_notifications_requests_url pagination_params(max_id: pagination_max_id) if records_continue?
|
||||||
end
|
end
|
||||||
|
|
||||||
def prev_path
|
def prev_path
|
||||||
api_v1_notifications_requests_url pagination_params(min_id: pagination_since_id) unless @requests.empty?
|
api_v1_notifications_requests_url pagination_params(min_id: pagination_since_id) unless @requests.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def records_continue?
|
||||||
|
@requests.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
|
||||||
|
end
|
||||||
|
|
||||||
def pagination_max_id
|
def pagination_max_id
|
||||||
@requests.last.id
|
@requests.last.id
|
||||||
end
|
end
|
||||||
|
@ -187,4 +187,15 @@ class Auth::SessionsController < Devise::SessionsController
|
|||||||
def second_factor_attempts_key(user)
|
def second_factor_attempts_key(user)
|
||||||
"2fa_auth_attempts:#{user.id}:#{Time.now.utc.hour}"
|
"2fa_auth_attempts:#{user.id}:#{Time.now.utc.hour}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def respond_to_on_destroy
|
||||||
|
respond_to do |format|
|
||||||
|
format.json do
|
||||||
|
render json: {
|
||||||
|
redirect_to: after_sign_out_path_for(resource_name),
|
||||||
|
}, status: 200
|
||||||
|
end
|
||||||
|
format.all { super }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -25,7 +25,7 @@ module Admin::FilterHelper
|
|||||||
end
|
end
|
||||||
|
|
||||||
def table_link_to(icon, text, path, **options)
|
def table_link_to(icon, text, path, **options)
|
||||||
link_to safe_join([fa_icon(icon), text]), path, options.merge(class: 'table-action-link')
|
link_to safe_join([material_symbol(icon), text]), path, options.merge(class: 'table-action-link')
|
||||||
end
|
end
|
||||||
|
|
||||||
def selected?(more_params)
|
def selected?(more_params)
|
||||||
|
@ -86,7 +86,7 @@ module ApplicationHelper
|
|||||||
def html_title
|
def html_title
|
||||||
safe_join(
|
safe_join(
|
||||||
[content_for(:page_title).to_s.chomp, title]
|
[content_for(:page_title).to_s.chomp, title]
|
||||||
.select(&:present?),
|
.compact_blank,
|
||||||
' - '
|
' - '
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@ -105,19 +105,12 @@ module ApplicationHelper
|
|||||||
policy(record).public_send(:"#{action}?")
|
policy(record).public_send(:"#{action}?")
|
||||||
end
|
end
|
||||||
|
|
||||||
def fa_icon(icon, attributes = {})
|
|
||||||
class_names = attributes[:class]&.split || []
|
|
||||||
class_names << 'fa'
|
|
||||||
class_names += icon.split.map { |cl| "fa-#{cl}" }
|
|
||||||
|
|
||||||
content_tag(:i, nil, attributes.merge(class: class_names.join(' ')))
|
|
||||||
end
|
|
||||||
|
|
||||||
def material_symbol(icon, attributes = {})
|
def material_symbol(icon, attributes = {})
|
||||||
inline_svg_tag(
|
inline_svg_tag(
|
||||||
"400-24px/#{icon}.svg",
|
"400-24px/#{icon}.svg",
|
||||||
class: ['icon', "material-#{icon}"].concat(attributes[:class].to_s.split),
|
class: ['icon', "material-#{icon}"].concat(attributes[:class].to_s.split),
|
||||||
role: :img
|
role: :img,
|
||||||
|
data: attributes[:data]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -244,22 +237,6 @@ module ApplicationHelper
|
|||||||
full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg'))
|
full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg'))
|
||||||
end
|
end
|
||||||
|
|
||||||
def instance_presenter
|
|
||||||
@instance_presenter ||= InstancePresenter.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def favicon_path(size = '48')
|
|
||||||
instance_presenter.favicon&.file&.url(size)
|
|
||||||
end
|
|
||||||
|
|
||||||
def app_icon_path(size = '48')
|
|
||||||
instance_presenter.app_icon&.file&.url(size)
|
|
||||||
end
|
|
||||||
|
|
||||||
def use_mask_icon?
|
|
||||||
instance_presenter.app_icon.blank?
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def storage_host_var
|
def storage_host_var
|
||||||
|
@ -13,6 +13,22 @@ module InstanceHelper
|
|||||||
safe_join([description_prefix(invite), I18n.t('auth.description.suffix')], ' ')
|
safe_join([description_prefix(invite), I18n.t('auth.description.suffix')], ' ')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def instance_presenter
|
||||||
|
@instance_presenter ||= InstancePresenter.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def favicon_path(size = '48')
|
||||||
|
instance_presenter.favicon&.file&.url(size)
|
||||||
|
end
|
||||||
|
|
||||||
|
def app_icon_path(size = '48')
|
||||||
|
instance_presenter.app_icon&.file&.url(size)
|
||||||
|
end
|
||||||
|
|
||||||
|
def use_mask_icon?
|
||||||
|
instance_presenter.app_icon.blank?
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def description_prefix(invite)
|
def description_prefix(invite)
|
||||||
|
@ -26,11 +26,11 @@ module SettingsHelper
|
|||||||
device = session.detection.device
|
device = session.detection.device
|
||||||
|
|
||||||
if device.mobile?
|
if device.mobile?
|
||||||
'mobile'
|
'smartphone'
|
||||||
elsif device.tablet?
|
elsif device.tablet?
|
||||||
'tablet'
|
'tablet'
|
||||||
else
|
else
|
||||||
'desktop'
|
'desktop_mac'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
24
app/javascript/images/filter-stripes.svg
Executable file
24
app/javascript/images/filter-stripes.svg
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
<svg width="5" height="80" viewBox="0 0 5 80" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_954_5239)">
|
||||||
|
<rect width="5" height="80" transform="matrix(1 0 0 -1 0 80)" fill="#2F0C7A"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 84C6.46234 83.9609 6.57112 83.9208 6.68172 83.8795C6.79039 83.839 7.16116 83.7 7.21197 83.681C10.0919 82.6043 11.8941 82.2 15 82.2C18.0813 82.2 19.6086 82.5665 22.3886 83.6785C22.6753 83.7932 22.9494 83.9003 23.2136 84H25.0812C24.3279 83.7808 23.5395 83.4927 22.6114 83.1215C19.7664 81.9835 18.1687 81.6 15 81.6C11.8122 81.6 9.94344 82.0192 7.00185 83.119C6.95066 83.1381 6.58016 83.277 6.47198 83.3174C5.72954 83.5944 5.0738 83.8198 4.45483 84H6.35524ZM6.35524 78C3.97726 78.8676 2.42302 79.2 0 79.2L0 78.6C1.72318 78.6 2.98542 78.4277 4.45483 78H6.35524ZM23.2136 78C25.5716 78.8899 27.1507 79.2 30 79.2V78.6C27.9473 78.6 26.5843 78.4373 25.0812 78L23.2136 78ZM0 82.2C2.53215 82.2 4.1155 81.837 6.68172 80.8795C6.79039 80.839 7.16116 80.7 7.21197 80.681C10.0919 79.6043 11.8941 79.2 15 79.2C18.0813 79.2 19.6086 79.5665 22.3886 80.6785C25.2336 81.8165 26.8313 82.2 30 82.2V81.6C26.9187 81.6 25.3914 81.2335 22.6114 80.1215C19.7664 78.9835 18.1687 78.6 15 78.6C11.8122 78.6 9.94344 79.0192 7.00185 80.119C6.95066 80.1381 6.58016 80.277 6.47198 80.3174C3.96706 81.2519 2.44905 81.6 0 81.6L0 82.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 78C6.46234 77.9609 6.57112 77.9208 6.68172 77.8795C6.79039 77.839 7.16116 77.7 7.21197 77.681C10.0919 76.6043 11.8941 76.2 15 76.2C18.0813 76.2 19.6086 76.5665 22.3886 77.6785C22.6753 77.7932 22.9494 77.9003 23.2136 78H25.0812C24.3279 77.7808 23.5395 77.4927 22.6114 77.1215C19.7664 75.9835 18.1687 75.6 15 75.6C11.8122 75.6 9.94344 76.0192 7.00185 77.119C6.95066 77.1381 6.58016 77.277 6.47198 77.3174C5.72954 77.5944 5.0738 77.8198 4.45483 78H6.35524ZM6.35524 72C3.97726 72.8676 2.42302 73.2 0 73.2L0 72.6C1.72318 72.6 2.98542 72.4277 4.45483 72H6.35524ZM23.2136 72C25.5716 72.8899 27.1507 73.2 30 73.2V72.6C27.9473 72.6 26.5843 72.4373 25.0812 72L23.2136 72ZM0 76.2C2.53215 76.2 4.1155 75.837 6.68172 74.8795C6.79039 74.839 7.16116 74.7 7.21197 74.681C10.0919 73.6043 11.8941 73.2 15 73.2C18.0813 73.2 19.6086 73.5665 22.3886 74.6785C25.2336 75.8165 26.8313 76.2 30 76.2V75.6C26.9187 75.6 25.3914 75.2335 22.6114 74.1215C19.7664 72.9835 18.1687 72.6 15 72.6C11.8122 72.6 9.94344 73.0192 7.00185 74.119C6.95066 74.1381 6.58016 74.277 6.47198 74.3174C3.96706 75.2519 2.44905 75.6 0 75.6L0 76.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 72C6.46234 71.9609 6.57112 71.9208 6.68172 71.8795C6.79039 71.839 7.16116 71.7 7.21197 71.681C10.0919 70.6043 11.8941 70.2 15 70.2C18.0813 70.2 19.6086 70.5665 22.3886 71.6785C22.6753 71.7932 22.9494 71.9003 23.2136 72H25.0812C24.3279 71.7808 23.5395 71.4927 22.6114 71.1215C19.7664 69.9835 18.1687 69.6 15 69.6C11.8122 69.6 9.94344 70.0192 7.00185 71.119C6.95066 71.1381 6.58016 71.277 6.47198 71.3174C5.72954 71.5944 5.0738 71.8198 4.45483 72H6.35524ZM6.35524 66C3.97726 66.8676 2.42302 67.2 0 67.2L0 66.6C1.72318 66.6 2.98542 66.4277 4.45483 66H6.35524ZM23.2136 66C25.5716 66.8899 27.1507 67.2 30 67.2V66.6C27.9473 66.6 26.5843 66.4373 25.0812 66L23.2136 66ZM0 70.2C2.53215 70.2 4.1155 69.837 6.68172 68.8795C6.79039 68.839 7.16116 68.7 7.21197 68.681C10.0919 67.6043 11.8941 67.2 15 67.2C18.0813 67.2 19.6086 67.5665 22.3886 68.6785C25.2336 69.8165 26.8313 70.2 30 70.2V69.6C26.9187 69.6 25.3914 69.2335 22.6114 68.1215C19.7664 66.9835 18.1687 66.6 15 66.6C11.8122 66.6 9.94344 67.0192 7.00185 68.119C6.95066 68.1381 6.58016 68.277 6.47198 68.3174C3.96706 69.2519 2.44905 69.6 0 69.6L0 70.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 66C6.46234 65.9609 6.57112 65.9208 6.68172 65.8795C6.79039 65.839 7.16116 65.7 7.21197 65.681C10.0919 64.6043 11.8941 64.2 15 64.2C18.0813 64.2 19.6086 64.5665 22.3886 65.6785C22.6753 65.7932 22.9494 65.9003 23.2136 66H25.0812C24.3279 65.7808 23.5395 65.4927 22.6114 65.1215C19.7664 63.9835 18.1687 63.6 15 63.6C11.8122 63.6 9.94344 64.0192 7.00185 65.119C6.95066 65.1381 6.58016 65.277 6.47198 65.3174C5.72954 65.5944 5.0738 65.8198 4.45483 66H6.35524ZM6.35524 60C3.97726 60.8676 2.42302 61.2 0 61.2L0 60.6C1.72318 60.6 2.98542 60.4277 4.45483 60H6.35524ZM23.2136 60C25.5716 60.8899 27.1507 61.2 30 61.2V60.6C27.9473 60.6 26.5843 60.4373 25.0812 60L23.2136 60ZM0 64.2C2.53215 64.2 4.1155 63.837 6.68172 62.8795C6.79039 62.839 7.16116 62.7 7.21197 62.681C10.0919 61.6043 11.8941 61.2 15 61.2C18.0813 61.2 19.6086 61.5665 22.3886 62.6785C25.2336 63.8165 26.8313 64.2 30 64.2V63.6C26.9187 63.6 25.3914 63.2335 22.6114 62.1215C19.7664 60.9835 18.1687 60.6 15 60.6C11.8122 60.6 9.94344 61.0192 7.00185 62.119C6.95066 62.1381 6.58016 62.277 6.47198 62.3174C3.96706 63.2519 2.44905 63.6 0 63.6L0 64.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 60C6.46234 59.9609 6.57112 59.9208 6.68172 59.8795C6.79039 59.839 7.16116 59.7 7.21197 59.681C10.0919 58.6043 11.8941 58.2 15 58.2C18.0813 58.2 19.6086 58.5665 22.3886 59.6785C22.6753 59.7932 22.9494 59.9003 23.2136 60H25.0812C24.3279 59.7808 23.5395 59.4927 22.6114 59.1215C19.7664 57.9835 18.1687 57.6 15 57.6C11.8122 57.6 9.94344 58.0192 7.00185 59.119C6.95066 59.1381 6.58016 59.277 6.47198 59.3174C5.72954 59.5944 5.0738 59.8198 4.45483 60H6.35524ZM6.35524 54C3.97726 54.8676 2.42302 55.2 0 55.2L0 54.6C1.72318 54.6 2.98542 54.4277 4.45483 54H6.35524ZM23.2136 54C25.5716 54.8899 27.1507 55.2 30 55.2V54.6C27.9473 54.6 26.5843 54.4373 25.0812 54L23.2136 54ZM0 58.2C2.53215 58.2 4.1155 57.837 6.68172 56.8795C6.79039 56.839 7.16116 56.7 7.21197 56.681C10.0919 55.6043 11.8941 55.2 15 55.2C18.0813 55.2 19.6086 55.5665 22.3886 56.6785C25.2336 57.8165 26.8313 58.2 30 58.2V57.6C26.9187 57.6 25.3914 57.2335 22.6114 56.1215C19.7664 54.9835 18.1687 54.6 15 54.6C11.8122 54.6 9.94344 55.0192 7.00185 56.119C6.95066 56.1381 6.58016 56.277 6.47198 56.3174C3.96706 57.2519 2.44905 57.6 0 57.6L0 58.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 54C6.46234 53.9609 6.57112 53.9208 6.68172 53.8795C6.79039 53.839 7.16116 53.7 7.21197 53.681C10.0919 52.6043 11.8941 52.2 15 52.2C18.0813 52.2 19.6086 52.5665 22.3886 53.6785C22.6753 53.7932 22.9494 53.9003 23.2136 54H25.0812C24.3279 53.7808 23.5395 53.4927 22.6114 53.1215C19.7664 51.9835 18.1687 51.6 15 51.6C11.8122 51.6 9.94344 52.0192 7.00185 53.119C6.95066 53.1381 6.58016 53.277 6.47198 53.3174C5.72954 53.5944 5.0738 53.8198 4.45483 54H6.35524ZM6.35524 48C3.97726 48.8676 2.42302 49.2 0 49.2L0 48.6C1.72318 48.6 2.98542 48.4277 4.45483 48H6.35524ZM23.2136 48C25.5716 48.8899 27.1507 49.2 30 49.2V48.6C27.9473 48.6 26.5843 48.4373 25.0812 48L23.2136 48ZM0 52.2C2.53215 52.2 4.1155 51.837 6.68172 50.8795C6.79039 50.839 7.16116 50.7 7.21197 50.681C10.0919 49.6043 11.8941 49.2 15 49.2C18.0813 49.2 19.6086 49.5665 22.3886 50.6785C25.2336 51.8165 26.8313 52.2 30 52.2V51.6C26.9187 51.6 25.3914 51.2335 22.6114 50.1215C19.7664 48.9835 18.1687 48.6 15 48.6C11.8122 48.6 9.94344 49.0192 7.00185 50.119C6.95066 50.1381 6.58016 50.277 6.47198 50.3174C3.96706 51.2519 2.44905 51.6 0 51.6L0 52.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 48C6.46234 47.9609 6.57112 47.9208 6.68172 47.8795C6.79039 47.839 7.16116 47.7 7.21197 47.681C10.0919 46.6043 11.8941 46.2 15 46.2C18.0813 46.2 19.6086 46.5665 22.3886 47.6785C22.6753 47.7932 22.9494 47.9003 23.2136 48H25.0812C24.3279 47.7808 23.5395 47.4927 22.6114 47.1215C19.7664 45.9835 18.1687 45.6 15 45.6C11.8122 45.6 9.94344 46.0192 7.00185 47.119C6.95066 47.1381 6.58016 47.277 6.47198 47.3174C5.72954 47.5944 5.0738 47.8198 4.45483 48H6.35524ZM6.35524 42C3.97726 42.8676 2.42302 43.2 0 43.2L0 42.6C1.72318 42.6 2.98542 42.4277 4.45483 42H6.35524ZM23.2136 42C25.5716 42.8899 27.1507 43.2 30 43.2V42.6C27.9473 42.6 26.5843 42.4373 25.0812 42L23.2136 42ZM0 46.2C2.53215 46.2 4.1155 45.837 6.68172 44.8795C6.79039 44.839 7.16116 44.7 7.21197 44.681C10.0919 43.6043 11.8941 43.2 15 43.2C18.0813 43.2 19.6086 43.5665 22.3886 44.6785C25.2336 45.8165 26.8313 46.2 30 46.2V45.6C26.9187 45.6 25.3914 45.2335 22.6114 44.1215C19.7664 42.9835 18.1687 42.6 15 42.6C11.8122 42.6 9.94344 43.0192 7.00185 44.119C6.95066 44.1381 6.58016 44.277 6.47198 44.3174C3.96706 45.2519 2.44905 45.6 0 45.6L0 46.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 42C6.46234 41.9609 6.57112 41.9208 6.68172 41.8795C6.79039 41.839 7.16116 41.7 7.21197 41.681C10.0919 40.6043 11.8941 40.2 15 40.2C18.0813 40.2 19.6086 40.5665 22.3886 41.6785C22.6753 41.7932 22.9494 41.9003 23.2136 42H25.0812C24.3279 41.7808 23.5395 41.4927 22.6114 41.1215C19.7664 39.9835 18.1687 39.6 15 39.6C11.8122 39.6 9.94344 40.0192 7.00185 41.119C6.95066 41.1381 6.58016 41.277 6.47198 41.3174C5.72954 41.5944 5.0738 41.8198 4.45483 42H6.35524ZM6.35524 36C3.97726 36.8676 2.42302 37.2 0 37.2L0 36.6C1.72318 36.6 2.98542 36.4277 4.45483 36H6.35524ZM23.2136 36C25.5716 36.8899 27.1507 37.2 30 37.2V36.6C27.9473 36.6 26.5843 36.4373 25.0812 36L23.2136 36ZM0 40.2C2.53215 40.2 4.1155 39.837 6.68172 38.8795C6.79039 38.839 7.16116 38.7 7.21197 38.681C10.0919 37.6043 11.8941 37.2 15 37.2C18.0813 37.2 19.6086 37.5665 22.3886 38.6785C25.2336 39.8165 26.8313 40.2 30 40.2V39.6C26.9187 39.6 25.3914 39.2335 22.6114 38.1215C19.7664 36.9835 18.1687 36.6 15 36.6C11.8122 36.6 9.94344 37.0192 7.00185 38.119C6.95066 38.1381 6.58016 38.277 6.47198 38.3174C3.96706 39.2519 2.44905 39.6 0 39.6L0 40.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 36C6.46234 35.9609 6.57112 35.9208 6.68172 35.8795C6.79039 35.839 7.16116 35.7 7.21197 35.681C10.0919 34.6043 11.8941 34.2 15 34.2C18.0813 34.2 19.6086 34.5665 22.3886 35.6785C22.6753 35.7932 22.9494 35.9003 23.2136 36H25.0812C24.3279 35.7808 23.5395 35.4927 22.6114 35.1215C19.7664 33.9835 18.1687 33.6 15 33.6C11.8122 33.6 9.94344 34.0192 7.00185 35.119C6.95066 35.1381 6.58016 35.277 6.47198 35.3174C5.72954 35.5944 5.0738 35.8198 4.45483 36H6.35524ZM6.35524 30C3.97726 30.8676 2.42302 31.2 0 31.2L0 30.6C1.72318 30.6 2.98542 30.4277 4.45483 30H6.35524ZM23.2136 30C25.5716 30.8899 27.1507 31.2 30 31.2V30.6C27.9473 30.6 26.5843 30.4373 25.0812 30L23.2136 30ZM0 34.2C2.53215 34.2 4.1155 33.837 6.68172 32.8795C6.79039 32.839 7.16116 32.7 7.21197 32.681C10.0919 31.6043 11.8941 31.2 15 31.2C18.0813 31.2 19.6086 31.5665 22.3886 32.6785C25.2336 33.8165 26.8313 34.2 30 34.2V33.6C26.9187 33.6 25.3914 33.2335 22.6114 32.1215C19.7664 30.9835 18.1687 30.6 15 30.6C11.8122 30.6 9.94344 31.0192 7.00185 32.119C6.95066 32.1381 6.58016 32.277 6.47198 32.3174C3.96706 33.2519 2.44905 33.6 0 33.6L0 34.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 30C6.46234 29.9609 6.57112 29.9208 6.68172 29.8795C6.79039 29.839 7.16116 29.7 7.21197 29.681C10.0919 28.6043 11.8941 28.2 15 28.2C18.0813 28.2 19.6086 28.5665 22.3886 29.6785C22.6753 29.7932 22.9494 29.9003 23.2136 30H25.0812C24.3279 29.7808 23.5395 29.4927 22.6114 29.1215C19.7664 27.9835 18.1687 27.6 15 27.6C11.8122 27.6 9.94344 28.0192 7.00185 29.119C6.95066 29.1381 6.58016 29.277 6.47198 29.3174C5.72954 29.5944 5.0738 29.8198 4.45483 30H6.35524ZM6.35524 24C3.97726 24.8676 2.42302 25.2 0 25.2L0 24.6C1.72318 24.6 2.98542 24.4277 4.45483 24H6.35524ZM23.2136 24C25.5716 24.8899 27.1507 25.2 30 25.2V24.6C27.9473 24.6 26.5843 24.4373 25.0812 24L23.2136 24ZM0 28.2C2.53215 28.2 4.1155 27.837 6.68172 26.8795C6.79039 26.839 7.16116 26.7 7.21197 26.681C10.0919 25.6043 11.8941 25.2 15 25.2C18.0813 25.2 19.6086 25.5665 22.3886 26.6785C25.2336 27.8165 26.8313 28.2 30 28.2V27.6C26.9187 27.6 25.3914 27.2335 22.6114 26.1215C19.7664 24.9835 18.1687 24.6 15 24.6C11.8122 24.6 9.94344 25.0192 7.00185 26.119C6.95066 26.1381 6.58016 26.277 6.47198 26.3174C3.96706 27.2519 2.44905 27.6 0 27.6L0 28.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 24C6.46234 23.9609 6.57112 23.9208 6.68172 23.8795C6.79039 23.839 7.16116 23.7 7.21197 23.681C10.0919 22.6043 11.8941 22.2 15 22.2C18.0813 22.2 19.6086 22.5665 22.3886 23.6785C22.6753 23.7932 22.9494 23.9003 23.2136 24H25.0812C24.3279 23.7808 23.5395 23.4927 22.6114 23.1215C19.7664 21.9835 18.1687 21.6 15 21.6C11.8122 21.6 9.94344 22.0192 7.00185 23.119C6.95066 23.1381 6.58016 23.277 6.47198 23.3174C5.72954 23.5944 5.0738 23.8198 4.45483 24H6.35524ZM6.35524 18C3.97726 18.8676 2.42302 19.2 0 19.2L0 18.6C1.72318 18.6 2.98542 18.4277 4.45483 18H6.35524ZM23.2136 18C25.5716 18.8899 27.1507 19.2 30 19.2V18.6C27.9473 18.6 26.5843 18.4373 25.0812 18L23.2136 18ZM0 22.2C2.53215 22.2 4.1155 21.837 6.68172 20.8795C6.79039 20.839 7.16116 20.7 7.21197 20.681C10.0919 19.6043 11.8941 19.2 15 19.2C18.0813 19.2 19.6086 19.5665 22.3886 20.6785C25.2336 21.8165 26.8313 22.2 30 22.2V21.6C26.9187 21.6 25.3914 21.2335 22.6114 20.1215C19.7664 18.9835 18.1687 18.6 15 18.6C11.8122 18.6 9.94344 19.0192 7.00185 20.119C6.95066 20.1381 6.58016 20.277 6.47198 20.3174C3.96706 21.2519 2.44905 21.6 0 21.6L0 22.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 18C6.46234 17.9609 6.57112 17.9208 6.68172 17.8795C6.79039 17.839 7.16116 17.7 7.21197 17.681C10.0919 16.6043 11.8941 16.2 15 16.2C18.0813 16.2 19.6086 16.5665 22.3886 17.6785C22.6753 17.7932 22.9494 17.9003 23.2136 18H25.0812C24.3279 17.7808 23.5395 17.4927 22.6114 17.1215C19.7664 15.9835 18.1687 15.6 15 15.6C11.8122 15.6 9.94344 16.0192 7.00185 17.119C6.95066 17.1381 6.58016 17.277 6.47198 17.3174C5.72954 17.5944 5.0738 17.8198 4.45483 18H6.35524ZM6.35524 12C3.97726 12.8676 2.42302 13.2 0 13.2L0 12.6C1.72318 12.6 2.98542 12.4277 4.45483 12H6.35524ZM23.2136 12C25.5716 12.8899 27.1507 13.2 30 13.2V12.6C27.9473 12.6 26.5843 12.4373 25.0812 12L23.2136 12ZM0 16.2C2.53215 16.2 4.1155 15.837 6.68172 14.8795C6.79039 14.839 7.16116 14.7 7.21197 14.681C10.0919 13.6043 11.8941 13.2 15 13.2C18.0813 13.2 19.6086 13.5665 22.3886 14.6785C25.2336 15.8165 26.8313 16.2 30 16.2V15.6C26.9187 15.6 25.3914 15.2335 22.6114 14.1215C19.7664 12.9835 18.1687 12.6 15 12.6C11.8122 12.6 9.94344 13.0192 7.00185 14.119C6.95066 14.1381 6.58016 14.277 6.47198 14.3174C3.96706 15.2519 2.44905 15.6 0 15.6L0 16.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 12C6.46234 11.9609 6.57112 11.9208 6.68172 11.8795C6.79039 11.839 7.16116 11.7 7.21197 11.681C10.0919 10.6043 11.8941 10.2 15 10.2C18.0813 10.2 19.6086 10.5665 22.3886 11.6785C22.6753 11.7932 22.9494 11.9003 23.2136 12H25.0812C24.3279 11.7808 23.5395 11.4927 22.6114 11.1215C19.7664 9.98347 18.1687 9.6 15 9.6C11.8122 9.6 9.94344 10.0192 7.00185 11.119C6.95066 11.1381 6.58016 11.277 6.47198 11.3174C5.72954 11.5944 5.0738 11.8198 4.45483 12H6.35524ZM6.35524 6C3.97726 6.86758 2.42302 7.2 0 7.2L0 6.6C1.72318 6.6 2.98542 6.42769 4.45483 6H6.35524ZM23.2136 6C25.5716 6.88993 27.1507 7.2 30 7.2V6.6C27.9473 6.6 26.5843 6.43734 25.0812 6L23.2136 6ZM0 10.2C2.53215 10.2 4.1155 9.83697 6.68172 8.8795C6.79039 8.83895 7.16116 8.7 7.21197 8.681C10.0919 7.60427 11.8941 7.2 15 7.2C18.0813 7.2 19.6086 7.56653 22.3886 8.67854C25.2336 9.81653 26.8313 10.2 30 10.2V9.6C26.9187 9.6 25.3914 9.23347 22.6114 8.12146C19.7664 6.98347 18.1687 6.6 15 6.6C11.8122 6.6 9.94344 7.01922 7.00185 8.119C6.95066 8.13814 6.58016 8.27699 6.47198 8.31735C3.96706 9.25195 2.44905 9.6 0 9.6L0 10.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.35524 6C6.46234 5.96092 6.57112 5.92076 6.68172 5.8795C6.79039 5.83895 7.16116 5.7 7.21197 5.681C10.0919 4.60427 11.8941 4.2 15 4.2C18.0813 4.2 19.6086 4.56653 22.3886 5.67854C22.6753 5.79323 22.9494 5.90026 23.2136 6H25.0812C24.3279 5.78083 23.5395 5.49269 22.6114 5.12146C19.7664 3.98347 18.1687 3.6 15 3.6C11.8122 3.6 9.94344 4.01922 7.00185 5.119C6.95066 5.13814 6.58016 5.27699 6.47198 5.31735C5.72954 5.59436 5.0738 5.81984 4.45483 6H6.35524ZM6.35524 0C3.97726 0.867585 2.42302 1.2 0 1.2L0 0.6C1.72318 0.6 2.98542 0.427692 4.45483 0L6.35524 0ZM23.2136 0C25.5716 0.88993 27.1507 1.2 30 1.2V0.6C27.9473 0.6 26.5843 0.437343 25.0812 0L23.2136 0ZM0 4.2C2.53215 4.2 4.1155 3.83697 6.68172 2.8795C6.79039 2.83895 7.16116 2.7 7.21197 2.681C10.0919 1.60427 11.8941 1.2 15 1.2C18.0813 1.2 19.6086 1.56653 22.3886 2.67854C25.2336 3.81653 26.8313 4.2 30 4.2V3.6C26.9187 3.6 25.3914 3.23347 22.6114 2.12146C19.7664 0.983469 18.1687 0.6 15 0.6C11.8122 0.6 9.94344 1.01922 7.00185 2.119C6.95066 2.13814 6.58016 2.27699 6.47198 2.31735C3.96706 3.25195 2.44905 3.6 0 3.6L0 4.2Z" fill="#858AFA" stroke="#858AFA" stroke-width="0.5"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_954_5239">
|
||||||
|
<rect width="5" height="80" fill="white" transform="matrix(1 0 0 -1 0 80)"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 17 KiB |
@ -6,5 +6,4 @@ export const submitAccountNote = createDataLoadingThunk(
|
|||||||
({ accountId, note }: { accountId: string; note: string }) =>
|
({ accountId, note }: { accountId: string; note: string }) =>
|
||||||
apiSubmitAccountNote(accountId, note),
|
apiSubmitAccountNote(accountId, note),
|
||||||
(relationship) => ({ relationship }),
|
(relationship) => ({ relationship }),
|
||||||
{ skipLoading: true },
|
|
||||||
);
|
);
|
||||||
|
@ -437,12 +437,12 @@ export function unpinFail(status, error) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleReblogWithoutConfirmation(status, privacy) {
|
function toggleReblogWithoutConfirmation(status, visibility) {
|
||||||
return (dispatch) => {
|
return (dispatch) => {
|
||||||
if (status.get('reblogged')) {
|
if (status.get('reblogged')) {
|
||||||
dispatch(unreblog({ statusId: status.get('id') }));
|
dispatch(unreblog({ statusId: status.get('id') }));
|
||||||
} else {
|
} else {
|
||||||
dispatch(reblog({ statusId: status.get('id'), privacy }));
|
dispatch(reblog({ statusId: status.get('id'), visibility }));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ import { debounce } from 'lodash';
|
|||||||
|
|
||||||
import type { MarkerJSON } from 'mastodon/api_types/markers';
|
import type { MarkerJSON } from 'mastodon/api_types/markers';
|
||||||
import { getAccessToken } from 'mastodon/initial_state';
|
import { getAccessToken } from 'mastodon/initial_state';
|
||||||
|
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
|
||||||
import type { AppDispatch, RootState } from 'mastodon/store';
|
import type { AppDispatch, RootState } from 'mastodon/store';
|
||||||
import { createAppAsyncThunk } from 'mastodon/store/typed_functions';
|
import { createAppAsyncThunk } from 'mastodon/store/typed_functions';
|
||||||
|
|
||||||
@ -75,13 +76,8 @@ interface MarkerParam {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getLastNotificationId(state: RootState): string | undefined {
|
function getLastNotificationId(state: RootState): string | undefined {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
||||||
const enableBeta = state.settings.getIn(
|
|
||||||
['notifications', 'groupingBeta'],
|
|
||||||
false,
|
|
||||||
) as boolean;
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
||||||
return enableBeta
|
return selectUseGroupedNotifications(state)
|
||||||
? state.notificationGroups.lastReadId
|
? state.notificationGroups.lastReadId
|
||||||
: // @ts-expect-error state.notifications is not yet typed
|
: // @ts-expect-error state.notifications is not yet typed
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
||||||
|
@ -11,10 +11,12 @@ import type {
|
|||||||
} from 'mastodon/api_types/notifications';
|
} from 'mastodon/api_types/notifications';
|
||||||
import { allNotificationTypes } from 'mastodon/api_types/notifications';
|
import { allNotificationTypes } from 'mastodon/api_types/notifications';
|
||||||
import type { ApiStatusJSON } from 'mastodon/api_types/statuses';
|
import type { ApiStatusJSON } from 'mastodon/api_types/statuses';
|
||||||
|
import { usePendingItems } from 'mastodon/initial_state';
|
||||||
import type { NotificationGap } from 'mastodon/reducers/notification_groups';
|
import type { NotificationGap } from 'mastodon/reducers/notification_groups';
|
||||||
import {
|
import {
|
||||||
selectSettingsNotificationsExcludedTypes,
|
selectSettingsNotificationsExcludedTypes,
|
||||||
selectSettingsNotificationsQuickFilterActive,
|
selectSettingsNotificationsQuickFilterActive,
|
||||||
|
selectSettingsNotificationsShows,
|
||||||
} from 'mastodon/selectors/settings';
|
} from 'mastodon/selectors/settings';
|
||||||
import type { AppDispatch } from 'mastodon/store';
|
import type { AppDispatch } from 'mastodon/store';
|
||||||
import {
|
import {
|
||||||
@ -46,7 +48,7 @@ function dispatchAssociatedRecords(
|
|||||||
fetchedAccounts.push(notification.moderation_warning.target_account);
|
fetchedAccounts.push(notification.moderation_warning.target_account);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ('status' in notification) {
|
if ('status' in notification && notification.status) {
|
||||||
fetchedStatuses.push(notification.status);
|
fetchedStatuses.push(notification.status);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -102,9 +104,55 @@ export const fetchNotificationsGap = createDataLoadingThunk(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const pollRecentNotifications = createDataLoadingThunk(
|
||||||
|
'notificationGroups/pollRecentNotifications',
|
||||||
|
async (_params, { getState }) => {
|
||||||
|
return apiFetchNotifications({
|
||||||
|
max_id: undefined,
|
||||||
|
// In slow mode, we don't want to include notifications that duplicate the already-displayed ones
|
||||||
|
since_id: usePendingItems
|
||||||
|
? getState().notificationGroups.groups.find(
|
||||||
|
(group) => group.type !== 'gap',
|
||||||
|
)?.page_max_id
|
||||||
|
: undefined,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
({ notifications, accounts, statuses }, { dispatch }) => {
|
||||||
|
dispatch(importFetchedAccounts(accounts));
|
||||||
|
dispatch(importFetchedStatuses(statuses));
|
||||||
|
dispatchAssociatedRecords(dispatch, notifications);
|
||||||
|
|
||||||
|
return { notifications };
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
export const processNewNotificationForGroups = createAppAsyncThunk(
|
export const processNewNotificationForGroups = createAppAsyncThunk(
|
||||||
'notificationGroups/processNew',
|
'notificationGroups/processNew',
|
||||||
(notification: ApiNotificationJSON, { dispatch }) => {
|
(notification: ApiNotificationJSON, { dispatch, getState }) => {
|
||||||
|
const state = getState();
|
||||||
|
const activeFilter = selectSettingsNotificationsQuickFilterActive(state);
|
||||||
|
const notificationShows = selectSettingsNotificationsShows(state);
|
||||||
|
|
||||||
|
const showInColumn =
|
||||||
|
activeFilter === 'all'
|
||||||
|
? notificationShows[notification.type]
|
||||||
|
: activeFilter === notification.type;
|
||||||
|
|
||||||
|
if (!showInColumn) return;
|
||||||
|
|
||||||
|
if (
|
||||||
|
(notification.type === 'mention' || notification.type === 'update') &&
|
||||||
|
notification.status?.filtered
|
||||||
|
) {
|
||||||
|
const filters = notification.status.filtered.filter((result) =>
|
||||||
|
result.filter.context.includes('notifications'),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (filters.some((result) => result.filter.filter_action === 'hide')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dispatchAssociatedRecords(dispatch, [notification]);
|
dispatchAssociatedRecords(dispatch, [notification]);
|
||||||
|
|
||||||
return notification;
|
return notification;
|
||||||
@ -113,8 +161,18 @@ export const processNewNotificationForGroups = createAppAsyncThunk(
|
|||||||
|
|
||||||
export const loadPending = createAction('notificationGroups/loadPending');
|
export const loadPending = createAction('notificationGroups/loadPending');
|
||||||
|
|
||||||
export const updateScrollPosition = createAction<{ top: boolean }>(
|
export const updateScrollPosition = createAppAsyncThunk(
|
||||||
'notificationGroups/updateScrollPosition',
|
'notificationGroups/updateScrollPosition',
|
||||||
|
({ top }: { top: boolean }, { dispatch, getState }) => {
|
||||||
|
if (
|
||||||
|
top &&
|
||||||
|
getState().notificationGroups.mergedNotifications === 'needs-reload'
|
||||||
|
) {
|
||||||
|
void dispatch(fetchNotifications());
|
||||||
|
}
|
||||||
|
|
||||||
|
return { top };
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
export const setNotificationsFilter = createAppAsyncThunk(
|
export const setNotificationsFilter = createAppAsyncThunk(
|
||||||
@ -140,5 +198,34 @@ export const markNotificationsAsRead = createAction(
|
|||||||
'notificationGroups/markAsRead',
|
'notificationGroups/markAsRead',
|
||||||
);
|
);
|
||||||
|
|
||||||
export const mountNotifications = createAction('notificationGroups/mount');
|
export const mountNotifications = createAppAsyncThunk(
|
||||||
|
'notificationGroups/mount',
|
||||||
|
(_, { dispatch, getState }) => {
|
||||||
|
const state = getState();
|
||||||
|
|
||||||
|
if (
|
||||||
|
state.notificationGroups.mounted === 0 &&
|
||||||
|
state.notificationGroups.mergedNotifications === 'needs-reload'
|
||||||
|
) {
|
||||||
|
void dispatch(fetchNotifications());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
export const unmountNotifications = createAction('notificationGroups/unmount');
|
export const unmountNotifications = createAction('notificationGroups/unmount');
|
||||||
|
|
||||||
|
export const refreshStaleNotificationGroups = createAppAsyncThunk<{
|
||||||
|
deferredRefresh: boolean;
|
||||||
|
}>('notificationGroups/refreshStale', (_, { dispatch, getState }) => {
|
||||||
|
const state = getState();
|
||||||
|
|
||||||
|
if (
|
||||||
|
state.notificationGroups.scrolledToTop ||
|
||||||
|
!state.notificationGroups.mounted
|
||||||
|
) {
|
||||||
|
void dispatch(fetchNotifications());
|
||||||
|
return { deferredRefresh: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
return { deferredRefresh: true };
|
||||||
|
});
|
||||||
|
@ -64,6 +64,14 @@ export const NOTIFICATION_REQUEST_DISMISS_REQUEST = 'NOTIFICATION_REQUEST_DISMIS
|
|||||||
export const NOTIFICATION_REQUEST_DISMISS_SUCCESS = 'NOTIFICATION_REQUEST_DISMISS_SUCCESS';
|
export const NOTIFICATION_REQUEST_DISMISS_SUCCESS = 'NOTIFICATION_REQUEST_DISMISS_SUCCESS';
|
||||||
export const NOTIFICATION_REQUEST_DISMISS_FAIL = 'NOTIFICATION_REQUEST_DISMISS_FAIL';
|
export const NOTIFICATION_REQUEST_DISMISS_FAIL = 'NOTIFICATION_REQUEST_DISMISS_FAIL';
|
||||||
|
|
||||||
|
export const NOTIFICATION_REQUESTS_ACCEPT_REQUEST = 'NOTIFICATION_REQUESTS_ACCEPT_REQUEST';
|
||||||
|
export const NOTIFICATION_REQUESTS_ACCEPT_SUCCESS = 'NOTIFICATION_REQUESTS_ACCEPT_SUCCESS';
|
||||||
|
export const NOTIFICATION_REQUESTS_ACCEPT_FAIL = 'NOTIFICATION_REQUESTS_ACCEPT_FAIL';
|
||||||
|
|
||||||
|
export const NOTIFICATION_REQUESTS_DISMISS_REQUEST = 'NOTIFICATION_REQUESTS_DISMISS_REQUEST';
|
||||||
|
export const NOTIFICATION_REQUESTS_DISMISS_SUCCESS = 'NOTIFICATION_REQUESTS_DISMISS_SUCCESS';
|
||||||
|
export const NOTIFICATION_REQUESTS_DISMISS_FAIL = 'NOTIFICATION_REQUESTS_DISMISS_FAIL';
|
||||||
|
|
||||||
export const NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST';
|
export const NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST';
|
||||||
export const NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS';
|
export const NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS';
|
||||||
export const NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL = 'NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL';
|
export const NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL = 'NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL';
|
||||||
@ -180,8 +188,8 @@ const noOp = () => {};
|
|||||||
|
|
||||||
let expandNotificationsController = new AbortController();
|
let expandNotificationsController = new AbortController();
|
||||||
|
|
||||||
export function expandNotifications({ maxId, forceLoad = false } = {}, done = noOp) {
|
export function expandNotifications({ maxId = undefined, forceLoad = false }) {
|
||||||
return (dispatch, getState) => {
|
return async (dispatch, getState) => {
|
||||||
const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']);
|
const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']);
|
||||||
const notifications = getState().get('notifications');
|
const notifications = getState().get('notifications');
|
||||||
const isLoadingMore = !!maxId;
|
const isLoadingMore = !!maxId;
|
||||||
@ -191,7 +199,6 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no
|
|||||||
expandNotificationsController.abort();
|
expandNotificationsController.abort();
|
||||||
expandNotificationsController = new AbortController();
|
expandNotificationsController = new AbortController();
|
||||||
} else {
|
} else {
|
||||||
done();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -218,7 +225,8 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no
|
|||||||
|
|
||||||
dispatch(expandNotificationsRequest(isLoadingMore));
|
dispatch(expandNotificationsRequest(isLoadingMore));
|
||||||
|
|
||||||
api().get('/api/v1/notifications', { params, signal: expandNotificationsController.signal }).then(response => {
|
try {
|
||||||
|
const response = await api().get('/api/v1/notifications', { params, signal: expandNotificationsController.signal });
|
||||||
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
||||||
|
|
||||||
dispatch(importFetchedAccounts(response.data.map(item => item.account)));
|
dispatch(importFetchedAccounts(response.data.map(item => item.account)));
|
||||||
@ -228,11 +236,9 @@ export function expandNotifications({ maxId, forceLoad = false } = {}, done = no
|
|||||||
dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems));
|
dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems));
|
||||||
fetchRelatedRelationships(dispatch, response.data);
|
fetchRelatedRelationships(dispatch, response.data);
|
||||||
dispatch(submitMarkers());
|
dispatch(submitMarkers());
|
||||||
}).catch(error => {
|
} catch(error) {
|
||||||
dispatch(expandNotificationsFail(error, isLoadingMore));
|
dispatch(expandNotificationsFail(error, isLoadingMore));
|
||||||
}).finally(() => {
|
}
|
||||||
done();
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -496,6 +502,62 @@ export const dismissNotificationRequestFail = (id, error) => ({
|
|||||||
error,
|
error,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const acceptNotificationRequests = (ids) => (dispatch, getState) => {
|
||||||
|
const count = ids.reduce((count, id) => count + selectNotificationCountForRequest(getState(), id), 0);
|
||||||
|
dispatch(acceptNotificationRequestsRequest(ids));
|
||||||
|
|
||||||
|
api().post(`/api/v1/notifications/requests/accept`, { id: ids }).then(() => {
|
||||||
|
dispatch(acceptNotificationRequestsSuccess(ids));
|
||||||
|
dispatch(decreasePendingNotificationsCount(count));
|
||||||
|
}).catch(err => {
|
||||||
|
dispatch(acceptNotificationRequestFail(ids, err));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const acceptNotificationRequestsRequest = ids => ({
|
||||||
|
type: NOTIFICATION_REQUESTS_ACCEPT_REQUEST,
|
||||||
|
ids,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const acceptNotificationRequestsSuccess = ids => ({
|
||||||
|
type: NOTIFICATION_REQUESTS_ACCEPT_SUCCESS,
|
||||||
|
ids,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const acceptNotificationRequestsFail = (ids, error) => ({
|
||||||
|
type: NOTIFICATION_REQUESTS_ACCEPT_FAIL,
|
||||||
|
ids,
|
||||||
|
error,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const dismissNotificationRequests = (ids) => (dispatch, getState) => {
|
||||||
|
const count = ids.reduce((count, id) => count + selectNotificationCountForRequest(getState(), id), 0);
|
||||||
|
dispatch(acceptNotificationRequestsRequest(ids));
|
||||||
|
|
||||||
|
api().post(`/api/v1/notifications/requests/dismiss`, { id: ids }).then(() => {
|
||||||
|
dispatch(dismissNotificationRequestsSuccess(ids));
|
||||||
|
dispatch(decreasePendingNotificationsCount(count));
|
||||||
|
}).catch(err => {
|
||||||
|
dispatch(dismissNotificationRequestFail(ids, err));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const dismissNotificationRequestsRequest = ids => ({
|
||||||
|
type: NOTIFICATION_REQUESTS_DISMISS_REQUEST,
|
||||||
|
ids,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const dismissNotificationRequestsSuccess = ids => ({
|
||||||
|
type: NOTIFICATION_REQUESTS_DISMISS_SUCCESS,
|
||||||
|
ids,
|
||||||
|
});
|
||||||
|
|
||||||
|
export const dismissNotificationRequestsFail = (ids, error) => ({
|
||||||
|
type: NOTIFICATION_REQUESTS_DISMISS_FAIL,
|
||||||
|
ids,
|
||||||
|
error,
|
||||||
|
});
|
||||||
|
|
||||||
export const fetchNotificationsForRequest = accountId => (dispatch, getState) => {
|
export const fetchNotificationsForRequest = accountId => (dispatch, getState) => {
|
||||||
const current = getState().getIn(['notificationRequests', 'current']);
|
const current = getState().getIn(['notificationRequests', 'current']);
|
||||||
const params = { account_id: accountId };
|
const params = { account_id: accountId };
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
|
||||||
import { createAppAsyncThunk } from 'mastodon/store';
|
import { createAppAsyncThunk } from 'mastodon/store';
|
||||||
|
|
||||||
import { fetchNotifications } from './notification_groups';
|
import { fetchNotifications } from './notification_groups';
|
||||||
@ -6,13 +7,8 @@ import { expandNotifications } from './notifications';
|
|||||||
export const initializeNotifications = createAppAsyncThunk(
|
export const initializeNotifications = createAppAsyncThunk(
|
||||||
'notifications/initialize',
|
'notifications/initialize',
|
||||||
(_, { dispatch, getState }) => {
|
(_, { dispatch, getState }) => {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
if (selectUseGroupedNotifications(getState()))
|
||||||
const enableBeta = getState().settings.getIn(
|
void dispatch(fetchNotifications());
|
||||||
['notifications', 'groupingBeta'],
|
else void dispatch(expandNotifications({}));
|
||||||
false,
|
|
||||||
) as boolean;
|
|
||||||
|
|
||||||
if (enableBeta) void dispatch(fetchNotifications());
|
|
||||||
else dispatch(expandNotifications());
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
// @ts-check
|
// @ts-check
|
||||||
|
|
||||||
|
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
|
||||||
|
|
||||||
import { getLocale } from '../locales';
|
import { getLocale } from '../locales';
|
||||||
import { connectStream } from '../stream';
|
import { connectStream } from '../stream';
|
||||||
|
|
||||||
@ -10,7 +12,7 @@ import {
|
|||||||
deleteAnnouncement,
|
deleteAnnouncement,
|
||||||
} from './announcements';
|
} from './announcements';
|
||||||
import { updateConversations } from './conversations';
|
import { updateConversations } from './conversations';
|
||||||
import { processNewNotificationForGroups } from './notification_groups';
|
import { processNewNotificationForGroups, refreshStaleNotificationGroups, pollRecentNotifications as pollRecentGroupNotifications } from './notification_groups';
|
||||||
import { updateNotifications, expandNotifications } from './notifications';
|
import { updateNotifications, expandNotifications } from './notifications';
|
||||||
import { updateStatus } from './statuses';
|
import { updateStatus } from './statuses';
|
||||||
import {
|
import {
|
||||||
@ -37,7 +39,7 @@ const randomUpTo = max =>
|
|||||||
* @param {string} channelName
|
* @param {string} channelName
|
||||||
* @param {Object.<string, string>} params
|
* @param {Object.<string, string>} params
|
||||||
* @param {Object} options
|
* @param {Object} options
|
||||||
* @param {function(Function, Function): void} [options.fallback]
|
* @param {function(Function, Function): Promise<void>} [options.fallback]
|
||||||
* @param {function(): void} [options.fillGaps]
|
* @param {function(): void} [options.fillGaps]
|
||||||
* @param {function(object): boolean} [options.accept]
|
* @param {function(object): boolean} [options.accept]
|
||||||
* @returns {function(): void}
|
* @returns {function(): void}
|
||||||
@ -52,14 +54,13 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
|
|||||||
let pollingId;
|
let pollingId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {function(Function, Function): void} fallback
|
* @param {function(Function, Function): Promise<void>} fallback
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const useFallback = fallback => {
|
const useFallback = async fallback => {
|
||||||
fallback(dispatch, () => {
|
await fallback(dispatch, getState);
|
||||||
// eslint-disable-next-line react-hooks/rules-of-hooks -- this is not a react hook
|
// eslint-disable-next-line react-hooks/rules-of-hooks -- this is not a react hook
|
||||||
pollingId = setTimeout(() => useFallback(fallback), 20000 + randomUpTo(20000));
|
pollingId = setTimeout(() => useFallback(fallback), 20000 + randomUpTo(20000));
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -104,11 +105,19 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
|
|||||||
const notificationJSON = JSON.parse(data.payload);
|
const notificationJSON = JSON.parse(data.payload);
|
||||||
dispatch(updateNotifications(notificationJSON, messages, locale));
|
dispatch(updateNotifications(notificationJSON, messages, locale));
|
||||||
// TODO: remove this once the groups feature replaces the previous one
|
// TODO: remove this once the groups feature replaces the previous one
|
||||||
if(getState().notificationGroups.groups.length > 0) {
|
if(selectUseGroupedNotifications(getState())) {
|
||||||
dispatch(processNewNotificationForGroups(notificationJSON));
|
dispatch(processNewNotificationForGroups(notificationJSON));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'notifications_merged':
|
||||||
|
const state = getState();
|
||||||
|
if (state.notifications.top || !state.notifications.mounted)
|
||||||
|
dispatch(expandNotifications({ forceLoad: true, maxId: undefined }));
|
||||||
|
if (selectUseGroupedNotifications(state)) {
|
||||||
|
dispatch(refreshStaleNotificationGroups());
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'conversation':
|
case 'conversation':
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
dispatch(updateConversations(JSON.parse(data.payload)));
|
dispatch(updateConversations(JSON.parse(data.payload)));
|
||||||
@ -132,21 +141,30 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Function} dispatch
|
* @param {Function} dispatch
|
||||||
* @param {function(): void} done
|
* @param {Function} getState
|
||||||
*/
|
*/
|
||||||
const refreshHomeTimelineAndNotification = (dispatch, done) => {
|
async function refreshHomeTimelineAndNotification(dispatch, getState) {
|
||||||
// @ts-expect-error
|
await dispatch(expandHomeTimeline({ maxId: undefined }));
|
||||||
dispatch(expandHomeTimeline({}, () =>
|
|
||||||
// @ts-expect-error
|
// TODO: remove this once the groups feature replaces the previous one
|
||||||
dispatch(expandNotifications({}, () =>
|
if(selectUseGroupedNotifications(getState())) {
|
||||||
dispatch(fetchAnnouncements(done))))));
|
// TODO: polling for merged notifications
|
||||||
};
|
try {
|
||||||
|
await dispatch(pollRecentGroupNotifications());
|
||||||
|
} catch (error) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await dispatch(expandNotifications({}));
|
||||||
|
}
|
||||||
|
|
||||||
|
await dispatch(fetchAnnouncements());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {function(): void}
|
* @returns {function(): void}
|
||||||
*/
|
*/
|
||||||
export const connectUserStream = () =>
|
export const connectUserStream = () =>
|
||||||
// @ts-expect-error
|
|
||||||
connectTimelineStream('home', 'user', {}, { fallback: refreshHomeTimelineAndNotification, fillGaps: fillHomeTimelineGaps });
|
connectTimelineStream('home', 'user', {}, { fallback: refreshHomeTimelineAndNotification, fillGaps: fillHomeTimelineGaps });
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -76,21 +76,18 @@ export function clearTimeline(timeline) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const noOp = () => {};
|
|
||||||
|
|
||||||
const parseTags = (tags = {}, mode) => {
|
const parseTags = (tags = {}, mode) => {
|
||||||
return (tags[mode] || []).map((tag) => {
|
return (tags[mode] || []).map((tag) => {
|
||||||
return tag.value;
|
return tag.value;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export function expandTimeline(timelineId, path, params = {}, done = noOp) {
|
export function expandTimeline(timelineId, path, params = {}) {
|
||||||
return (dispatch, getState) => {
|
return async (dispatch, getState) => {
|
||||||
const timeline = getState().getIn(['timelines', timelineId], ImmutableMap());
|
const timeline = getState().getIn(['timelines', timelineId], ImmutableMap());
|
||||||
const isLoadingMore = !!params.max_id;
|
const isLoadingMore = !!params.max_id;
|
||||||
|
|
||||||
if (timeline.get('isLoading')) {
|
if (timeline.get('isLoading')) {
|
||||||
done();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +106,8 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
|
|||||||
|
|
||||||
dispatch(expandTimelineRequest(timelineId, isLoadingMore));
|
dispatch(expandTimelineRequest(timelineId, isLoadingMore));
|
||||||
|
|
||||||
api().get(path, { params }).then(response => {
|
try {
|
||||||
|
const response = await api().get(path, { params });
|
||||||
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
||||||
|
|
||||||
dispatch(importFetchedStatuses(response.data));
|
dispatch(importFetchedStatuses(response.data));
|
||||||
@ -127,52 +125,48 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
|
|||||||
if (timelineId === 'home') {
|
if (timelineId === 'home') {
|
||||||
dispatch(submitMarkers());
|
dispatch(submitMarkers());
|
||||||
}
|
}
|
||||||
}).catch(error => {
|
} catch(error) {
|
||||||
dispatch(expandTimelineFail(timelineId, error, isLoadingMore));
|
dispatch(expandTimelineFail(timelineId, error, isLoadingMore));
|
||||||
}).finally(() => {
|
}
|
||||||
done();
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function fillTimelineGaps(timelineId, path, params = {}, done = noOp) {
|
export function fillTimelineGaps(timelineId, path, params = {}) {
|
||||||
return (dispatch, getState) => {
|
return async (dispatch, getState) => {
|
||||||
const timeline = getState().getIn(['timelines', timelineId], ImmutableMap());
|
const timeline = getState().getIn(['timelines', timelineId], ImmutableMap());
|
||||||
const items = timeline.get('items');
|
const items = timeline.get('items');
|
||||||
const nullIndexes = items.map((statusId, index) => statusId === null ? index : null);
|
const nullIndexes = items.map((statusId, index) => statusId === null ? index : null);
|
||||||
const gaps = nullIndexes.map(index => index > 0 ? items.get(index - 1) : null);
|
const gaps = nullIndexes.map(index => index > 0 ? items.get(index - 1) : null);
|
||||||
|
|
||||||
// Only expand at most two gaps to avoid doing too many requests
|
// Only expand at most two gaps to avoid doing too many requests
|
||||||
done = gaps.take(2).reduce((done, maxId) => {
|
for (const maxId of gaps.take(2)) {
|
||||||
return (() => dispatch(expandTimeline(timelineId, path, { ...params, maxId }, done)));
|
await dispatch(expandTimeline(timelineId, path, { ...params, maxId }));
|
||||||
}, done);
|
}
|
||||||
|
|
||||||
done();
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export const expandHomeTimeline = ({ maxId } = {}, done = noOp) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId }, done);
|
export const expandHomeTimeline = ({ maxId } = {}) => expandTimeline('home', '/api/v1/timelines/home', { max_id: maxId });
|
||||||
export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote } = {}, done = noOp) => expandTimeline(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, max_id: maxId, only_media: !!onlyMedia }, done);
|
export const expandPublicTimeline = ({ maxId, onlyMedia, onlyRemote } = {}) => expandTimeline(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, max_id: maxId, only_media: !!onlyMedia });
|
||||||
export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}, done = noOp) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia }, done);
|
export const expandCommunityTimeline = ({ maxId, onlyMedia } = {}) => expandTimeline(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, max_id: maxId, only_media: !!onlyMedia });
|
||||||
export const expandAccountTimeline = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, exclude_reblogs: withReplies, tagged, max_id: maxId });
|
export const expandAccountTimeline = (accountId, { maxId, withReplies, tagged } = {}) => expandTimeline(`account:${accountId}${withReplies ? ':with_replies' : ''}${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { exclude_replies: !withReplies, exclude_reblogs: withReplies, tagged, max_id: maxId });
|
||||||
export const expandAccountFeaturedTimeline = (accountId, { tagged } = {}) => expandTimeline(`account:${accountId}:pinned${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true, tagged });
|
export const expandAccountFeaturedTimeline = (accountId, { tagged } = {}) => expandTimeline(`account:${accountId}:pinned${tagged ? `:${tagged}` : ''}`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true, tagged });
|
||||||
export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 });
|
export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 });
|
||||||
export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done);
|
export const expandListTimeline = (id, { maxId } = {}) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId });
|
||||||
export const expandLinkTimeline = (url, { maxId } = {}, done = noOp) => expandTimeline(`link:${url}`, `/api/v1/timelines/link`, { url, max_id: maxId }, done);
|
export const expandLinkTimeline = (url, { maxId } = {}) => expandTimeline(`link:${url}`, `/api/v1/timelines/link`, { url, max_id: maxId });
|
||||||
export const expandHashtagTimeline = (hashtag, { maxId, tags, local } = {}, done = noOp) => {
|
export const expandHashtagTimeline = (hashtag, { maxId, tags, local } = {}) => {
|
||||||
return expandTimeline(`hashtag:${hashtag}${local ? ':local' : ''}`, `/api/v1/timelines/tag/${hashtag}`, {
|
return expandTimeline(`hashtag:${hashtag}${local ? ':local' : ''}`, `/api/v1/timelines/tag/${hashtag}`, {
|
||||||
max_id: maxId,
|
max_id: maxId,
|
||||||
any: parseTags(tags, 'any'),
|
any: parseTags(tags, 'any'),
|
||||||
all: parseTags(tags, 'all'),
|
all: parseTags(tags, 'all'),
|
||||||
none: parseTags(tags, 'none'),
|
none: parseTags(tags, 'none'),
|
||||||
local: local,
|
local: local,
|
||||||
}, done);
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const fillHomeTimelineGaps = (done = noOp) => fillTimelineGaps('home', '/api/v1/timelines/home', {}, done);
|
export const fillHomeTimelineGaps = () => fillTimelineGaps('home', '/api/v1/timelines/home', {});
|
||||||
export const fillPublicTimelineGaps = ({ onlyMedia, onlyRemote } = {}, done = noOp) => fillTimelineGaps(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, only_media: !!onlyMedia }, done);
|
export const fillPublicTimelineGaps = ({ onlyMedia, onlyRemote } = {}) => fillTimelineGaps(`public${onlyRemote ? ':remote' : ''}${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { remote: !!onlyRemote, only_media: !!onlyMedia });
|
||||||
export const fillCommunityTimelineGaps = ({ onlyMedia } = {}, done = noOp) => fillTimelineGaps(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, only_media: !!onlyMedia }, done);
|
export const fillCommunityTimelineGaps = ({ onlyMedia } = {}) => fillTimelineGaps(`community${onlyMedia ? ':media' : ''}`, '/api/v1/timelines/public', { local: true, only_media: !!onlyMedia });
|
||||||
export const fillListTimelineGaps = (id, done = noOp) => fillTimelineGaps(`list:${id}`, `/api/v1/timelines/list/${id}`, {}, done);
|
export const fillListTimelineGaps = (id) => fillTimelineGaps(`list:${id}`, `/api/v1/timelines/list/${id}`, {});
|
||||||
|
|
||||||
export function expandTimelineRequest(timeline, isLoadingMore) {
|
export function expandTimelineRequest(timeline, isLoadingMore) {
|
||||||
return {
|
return {
|
||||||
|
@ -2,8 +2,8 @@ import { apiRequestGet, apiRequestPut } from 'mastodon/api';
|
|||||||
import type { NotificationPolicyJSON } from 'mastodon/api_types/notification_policies';
|
import type { NotificationPolicyJSON } from 'mastodon/api_types/notification_policies';
|
||||||
|
|
||||||
export const apiGetNotificationPolicy = () =>
|
export const apiGetNotificationPolicy = () =>
|
||||||
apiRequestGet<NotificationPolicyJSON>('/v2/notifications/policy');
|
apiRequestGet<NotificationPolicyJSON>('v2/notifications/policy');
|
||||||
|
|
||||||
export const apiUpdateNotificationsPolicy = (
|
export const apiUpdateNotificationsPolicy = (
|
||||||
policy: Partial<NotificationPolicyJSON>,
|
policy: Partial<NotificationPolicyJSON>,
|
||||||
) => apiRequestPut<NotificationPolicyJSON>('/v2/notifications/policy', policy);
|
) => apiRequestPut<NotificationPolicyJSON>('v2/notifications/policy', policy);
|
||||||
|
@ -4,6 +4,7 @@ import type { ApiNotificationGroupsResultJSON } from 'mastodon/api_types/notific
|
|||||||
export const apiFetchNotifications = async (params?: {
|
export const apiFetchNotifications = async (params?: {
|
||||||
exclude_types?: string[];
|
exclude_types?: string[];
|
||||||
max_id?: string;
|
max_id?: string;
|
||||||
|
since_id?: string;
|
||||||
}) => {
|
}) => {
|
||||||
const response = await api().request<ApiNotificationGroupsResultJSON>({
|
const response = await api().request<ApiNotificationGroupsResultJSON>({
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
|
@ -60,12 +60,12 @@ export interface BaseNotificationGroupJSON {
|
|||||||
|
|
||||||
interface NotificationGroupWithStatusJSON extends BaseNotificationGroupJSON {
|
interface NotificationGroupWithStatusJSON extends BaseNotificationGroupJSON {
|
||||||
type: NotificationWithStatusType;
|
type: NotificationWithStatusType;
|
||||||
status_id: string;
|
status_id: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface NotificationWithStatusJSON extends BaseNotificationJSON {
|
interface NotificationWithStatusJSON extends BaseNotificationJSON {
|
||||||
type: NotificationWithStatusType;
|
type: NotificationWithStatusType;
|
||||||
status: ApiStatusJSON;
|
status: ApiStatusJSON | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ReportNotificationGroupJSON extends BaseNotificationGroupJSON {
|
interface ReportNotificationGroupJSON extends BaseNotificationGroupJSON {
|
||||||
|
@ -58,6 +58,29 @@ export interface ApiPreviewCardJSON {
|
|||||||
authors: ApiPreviewCardAuthorJSON[];
|
authors: ApiPreviewCardAuthorJSON[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type FilterContext =
|
||||||
|
| 'home'
|
||||||
|
| 'notifications'
|
||||||
|
| 'public'
|
||||||
|
| 'thread'
|
||||||
|
| 'account';
|
||||||
|
|
||||||
|
export interface ApiFilterJSON {
|
||||||
|
id: string;
|
||||||
|
title: string;
|
||||||
|
context: FilterContext;
|
||||||
|
expires_at: string;
|
||||||
|
filter_action: 'warn' | 'hide';
|
||||||
|
keywords?: unknown[]; // TODO: FilterKeywordSerializer
|
||||||
|
statuses?: unknown[]; // TODO: FilterStatusSerializer
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiFilterResultJSON {
|
||||||
|
filter: ApiFilterJSON;
|
||||||
|
keyword_matches: string[];
|
||||||
|
status_matches: string[];
|
||||||
|
}
|
||||||
|
|
||||||
export interface ApiStatusJSON {
|
export interface ApiStatusJSON {
|
||||||
id: string;
|
id: string;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
@ -80,8 +103,7 @@ export interface ApiStatusJSON {
|
|||||||
bookmarked?: boolean;
|
bookmarked?: boolean;
|
||||||
pinned?: boolean;
|
pinned?: boolean;
|
||||||
|
|
||||||
// filtered: FilterResult[]
|
filtered?: ApiFilterResultJSON[];
|
||||||
filtered: unknown; // TODO
|
|
||||||
content?: string;
|
content?: string;
|
||||||
text?: string;
|
text?: string;
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import Rails from '@rails/ujs';
|
import Rails from '@rails/ujs';
|
||||||
import 'font-awesome/css/font-awesome.css';
|
|
||||||
|
|
||||||
export function start() {
|
export function start() {
|
||||||
require.context('../images/', true, /\.(jpg|png|svg)$/);
|
require.context('../images/', true, /\.(jpg|png|svg)$/);
|
||||||
|
@ -153,7 +153,7 @@ class ReportReasonSelector extends PureComponent {
|
|||||||
<Category id='other' text={intl.formatMessage(messages.other)} selected={category === 'other'} onSelect={this.handleSelect} disabled={disabled} />
|
<Category id='other' text={intl.formatMessage(messages.other)} selected={category === 'other'} onSelect={this.handleSelect} disabled={disabled} />
|
||||||
<Category id='legal' text={intl.formatMessage(messages.legal)} selected={category === 'legal'} onSelect={this.handleSelect} disabled={disabled} />
|
<Category id='legal' text={intl.formatMessage(messages.legal)} selected={category === 'legal'} onSelect={this.handleSelect} disabled={disabled} />
|
||||||
<Category id='spam' text={intl.formatMessage(messages.spam)} selected={category === 'spam'} onSelect={this.handleSelect} disabled={disabled} />
|
<Category id='spam' text={intl.formatMessage(messages.spam)} selected={category === 'spam'} onSelect={this.handleSelect} disabled={disabled} />
|
||||||
<Category id='violation' text={intl.formatMessage(messages.violation)} selected={category === 'violation'} onSelect={this.handleSelect} disabled={disabled}>
|
<Category id='violation' text={intl.formatMessage(messages.violation)} selected={category === 'violation'} onSelect={this.handleSelect} disabled={disabled || rules.length === 0}>
|
||||||
{rules.map(rule => <Rule key={rule.id} id={rule.id} text={rule.text} selected={rule_ids.includes(rule.id)} onToggle={this.handleToggle} disabled={disabled} />)}
|
{rules.map(rule => <Rule key={rule.id} id={rule.id} text={rule.text} selected={rule_ids.includes(rule.id)} onToggle={this.handleToggle} disabled={disabled} />)}
|
||||||
</Category>
|
</Category>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
|
import CheckIndeterminateSmallIcon from '@/material-icons/400-24px/check_indeterminate_small.svg?react';
|
||||||
import DoneIcon from '@/material-icons/400-24px/done.svg?react';
|
import DoneIcon from '@/material-icons/400-24px/done.svg?react';
|
||||||
|
|
||||||
import { Icon } from './icon';
|
import { Icon } from './icon';
|
||||||
@ -7,6 +8,7 @@ import { Icon } from './icon';
|
|||||||
interface Props {
|
interface Props {
|
||||||
value: string;
|
value: string;
|
||||||
checked: boolean;
|
checked: boolean;
|
||||||
|
indeterminate: boolean;
|
||||||
name: string;
|
name: string;
|
||||||
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
||||||
label: React.ReactNode;
|
label: React.ReactNode;
|
||||||
@ -16,6 +18,7 @@ export const CheckBox: React.FC<Props> = ({
|
|||||||
name,
|
name,
|
||||||
value,
|
value,
|
||||||
checked,
|
checked,
|
||||||
|
indeterminate,
|
||||||
onChange,
|
onChange,
|
||||||
label,
|
label,
|
||||||
}) => {
|
}) => {
|
||||||
@ -29,8 +32,14 @@ export const CheckBox: React.FC<Props> = ({
|
|||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<span className={classNames('check-box__input', { checked })}>
|
<span
|
||||||
{checked && <Icon id='check' icon={DoneIcon} />}
|
className={classNames('check-box__input', { checked, indeterminate })}
|
||||||
|
>
|
||||||
|
{indeterminate ? (
|
||||||
|
<Icon id='indeterminate' icon={CheckIndeterminateSmallIcon} />
|
||||||
|
) : (
|
||||||
|
checked && <Icon id='check' icon={DoneIcon} />
|
||||||
|
)}
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<span>{label}</span>
|
<span>{label}</span>
|
||||||
|
15
app/javascript/mastodon/components/content_warning.tsx
Normal file
15
app/javascript/mastodon/components/content_warning.tsx
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import { StatusBanner, BannerVariant } from './status_banner';
|
||||||
|
|
||||||
|
export const ContentWarning: React.FC<{
|
||||||
|
text: string;
|
||||||
|
expanded?: boolean;
|
||||||
|
onClick?: () => void;
|
||||||
|
}> = ({ text, expanded, onClick }) => (
|
||||||
|
<StatusBanner
|
||||||
|
expanded={expanded}
|
||||||
|
onClick={onClick}
|
||||||
|
variant={BannerVariant.Yellow}
|
||||||
|
>
|
||||||
|
<p dangerouslySetInnerHTML={{ __html: text }} />
|
||||||
|
</StatusBanner>
|
||||||
|
);
|
23
app/javascript/mastodon/components/filter_warning.tsx
Normal file
23
app/javascript/mastodon/components/filter_warning.tsx
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
|
import { StatusBanner, BannerVariant } from './status_banner';
|
||||||
|
|
||||||
|
export const FilterWarning: React.FC<{
|
||||||
|
title: string;
|
||||||
|
expanded?: boolean;
|
||||||
|
onClick?: () => void;
|
||||||
|
}> = ({ title, expanded, onClick }) => (
|
||||||
|
<StatusBanner
|
||||||
|
expanded={expanded}
|
||||||
|
onClick={onClick}
|
||||||
|
variant={BannerVariant.Blue}
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
<FormattedMessage
|
||||||
|
id='filter_warning.matches_filter'
|
||||||
|
defaultMessage='Matches filter “{title}”'
|
||||||
|
values={{ title }}
|
||||||
|
/>
|
||||||
|
</p>
|
||||||
|
</StatusBanner>
|
||||||
|
);
|
@ -13,6 +13,8 @@ import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?re
|
|||||||
import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react';
|
import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react';
|
||||||
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
|
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
|
||||||
import ReplyIcon from '@/material-icons/400-24px/reply.svg?react';
|
import ReplyIcon from '@/material-icons/400-24px/reply.svg?react';
|
||||||
|
import { ContentWarning } from 'mastodon/components/content_warning';
|
||||||
|
import { FilterWarning } from 'mastodon/components/filter_warning';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder';
|
import PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder';
|
||||||
import { withOptionalRouter, WithOptionalRouterPropTypes } from 'mastodon/utils/react_router';
|
import { withOptionalRouter, WithOptionalRouterPropTypes } from 'mastodon/utils/react_router';
|
||||||
@ -140,7 +142,7 @@ class Status extends ImmutablePureComponent {
|
|||||||
|
|
||||||
state = {
|
state = {
|
||||||
showMedia: defaultMediaVisibility(this.props.status) && !(this.context?.hideMediaByDefault),
|
showMedia: defaultMediaVisibility(this.props.status) && !(this.context?.hideMediaByDefault),
|
||||||
forceFilter: undefined,
|
showDespiteFilter: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidUpdate (prevProps) {
|
componentDidUpdate (prevProps) {
|
||||||
@ -152,7 +154,7 @@ class Status extends ImmutablePureComponent {
|
|||||||
if (this.props.status?.get('id') !== prevProps.status?.get('id')) {
|
if (this.props.status?.get('id') !== prevProps.status?.get('id')) {
|
||||||
this.setState({
|
this.setState({
|
||||||
showMedia: defaultMediaVisibility(this.props.status) && !(this.context?.hideMediaByDefault),
|
showMedia: defaultMediaVisibility(this.props.status) && !(this.context?.hideMediaByDefault),
|
||||||
forceFilter: undefined,
|
showDespiteFilter: undefined,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -325,20 +327,32 @@ class Status extends ImmutablePureComponent {
|
|||||||
};
|
};
|
||||||
|
|
||||||
handleHotkeyToggleHidden = () => {
|
handleHotkeyToggleHidden = () => {
|
||||||
this.props.onToggleHidden(this._properStatus());
|
const { onToggleHidden } = this.props;
|
||||||
|
const status = this._properStatus();
|
||||||
|
|
||||||
|
if (status.get('matched_filters')) {
|
||||||
|
const expandedBecauseOfCW = !status.get('hidden') || status.get('spoiler_text').length === 0;
|
||||||
|
const expandedBecauseOfFilter = this.state.showDespiteFilter;
|
||||||
|
|
||||||
|
if (expandedBecauseOfFilter && !expandedBecauseOfCW) {
|
||||||
|
onToggleHidden(status);
|
||||||
|
} else if (expandedBecauseOfFilter && expandedBecauseOfCW) {
|
||||||
|
onToggleHidden(status);
|
||||||
|
this.handleFilterToggle();
|
||||||
|
} else {
|
||||||
|
this.handleFilterToggle();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
onToggleHidden(status);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
handleHotkeyToggleSensitive = () => {
|
handleHotkeyToggleSensitive = () => {
|
||||||
this.handleToggleMediaVisibility();
|
this.handleToggleMediaVisibility();
|
||||||
};
|
};
|
||||||
|
|
||||||
handleUnfilterClick = e => {
|
handleFilterToggle = () => {
|
||||||
this.setState({ forceFilter: false });
|
this.setState(state => ({ ...state, showDespiteFilter: !state.showDespiteFilter }));
|
||||||
e.preventDefault();
|
|
||||||
};
|
|
||||||
|
|
||||||
handleFilterClick = () => {
|
|
||||||
this.setState({ forceFilter: true });
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_properStatus () {
|
_properStatus () {
|
||||||
@ -396,25 +410,6 @@ class Status extends ImmutablePureComponent {
|
|||||||
const connectReply = nextInReplyToId && nextInReplyToId === status.get('id');
|
const connectReply = nextInReplyToId && nextInReplyToId === status.get('id');
|
||||||
const matchedFilters = status.get('matched_filters');
|
const matchedFilters = status.get('matched_filters');
|
||||||
|
|
||||||
if (this.state.forceFilter === undefined ? matchedFilters : this.state.forceFilter) {
|
|
||||||
const minHandlers = this.props.muted ? {} : {
|
|
||||||
moveUp: this.handleHotkeyMoveUp,
|
|
||||||
moveDown: this.handleHotkeyMoveDown,
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<HotKeys handlers={minHandlers} tabIndex={unfocusable ? null : -1}>
|
|
||||||
<div className='status__wrapper status__wrapper--filtered focusable' tabIndex={unfocusable ? null : 0} ref={this.handleRef}>
|
|
||||||
<FormattedMessage id='status.filtered' defaultMessage='Filtered' />: {matchedFilters.join(', ')}.
|
|
||||||
{' '}
|
|
||||||
<button className='status__wrapper--filtered__button' onClick={this.handleUnfilterClick}>
|
|
||||||
<FormattedMessage id='status.show_filter_reason' defaultMessage='Show anyway' />
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</HotKeys>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (featured) {
|
if (featured) {
|
||||||
prepend = (
|
prepend = (
|
||||||
<div className='status__prepend'>
|
<div className='status__prepend'>
|
||||||
@ -548,7 +543,7 @@ class Status extends ImmutablePureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status);
|
const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status);
|
||||||
const expanded = !status.get('hidden') || status.get('spoiler_text').length === 0;
|
const expanded = (!matchedFilters || this.state.showDespiteFilter) && (!status.get('hidden') || status.get('spoiler_text').length === 0);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HotKeys handlers={handlers} tabIndex={unfocusable ? null : -1}>
|
<HotKeys handlers={handlers} tabIndex={unfocusable ? null : -1}>
|
||||||
@ -574,22 +569,27 @@ class Status extends ImmutablePureComponent {
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<StatusContent
|
{matchedFilters && <FilterWarning title={matchedFilters.join(', ')} expanded={this.state.showDespiteFilter} onClick={this.handleFilterToggle} />}
|
||||||
status={status}
|
|
||||||
onClick={this.handleClick}
|
|
||||||
expanded={expanded}
|
|
||||||
onExpandedToggle={this.handleExpandedToggle}
|
|
||||||
onTranslate={this.handleTranslate}
|
|
||||||
collapsible
|
|
||||||
onCollapsedToggle={this.handleCollapsedToggle}
|
|
||||||
{...statusContentProps}
|
|
||||||
/>
|
|
||||||
|
|
||||||
{media}
|
{(status.get('spoiler_text').length > 0 && (!matchedFilters || this.state.showDespiteFilter)) && <ContentWarning text={status.getIn(['translation', 'spoilerHtml']) || status.get('spoilerHtml')} expanded={expanded} onClick={this.handleExpandedToggle} />}
|
||||||
|
|
||||||
{expanded && hashtagBar}
|
{expanded && (
|
||||||
|
<>
|
||||||
|
<StatusContent
|
||||||
|
status={status}
|
||||||
|
onClick={this.handleClick}
|
||||||
|
onTranslate={this.handleTranslate}
|
||||||
|
collapsible
|
||||||
|
onCollapsedToggle={this.handleCollapsedToggle}
|
||||||
|
{...statusContentProps}
|
||||||
|
/>
|
||||||
|
|
||||||
<StatusActionBar scrollKey={scrollKey} status={status} account={account} onFilter={matchedFilters ? this.handleFilterClick : null} {...other} />
|
{media}
|
||||||
|
{hashtagBar}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<StatusActionBar scrollKey={scrollKey} status={status} account={account} {...other} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</HotKeys>
|
</HotKeys>
|
||||||
|
@ -17,7 +17,6 @@ import ReplyIcon from '@/material-icons/400-24px/reply.svg?react';
|
|||||||
import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react';
|
import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react';
|
||||||
import StarIcon from '@/material-icons/400-24px/star-fill.svg?react';
|
import StarIcon from '@/material-icons/400-24px/star-fill.svg?react';
|
||||||
import StarBorderIcon from '@/material-icons/400-24px/star.svg?react';
|
import StarBorderIcon from '@/material-icons/400-24px/star.svg?react';
|
||||||
import VisibilityIcon from '@/material-icons/400-24px/visibility.svg?react';
|
|
||||||
import RepeatActiveIcon from '@/svg-icons/repeat_active.svg?react';
|
import RepeatActiveIcon from '@/svg-icons/repeat_active.svg?react';
|
||||||
import RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react';
|
import RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react';
|
||||||
import RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react';
|
import RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react';
|
||||||
@ -61,7 +60,6 @@ const messages = defineMessages({
|
|||||||
admin_status: { id: 'status.admin_status', defaultMessage: 'Open this post in the moderation interface' },
|
admin_status: { id: 'status.admin_status', defaultMessage: 'Open this post in the moderation interface' },
|
||||||
admin_domain: { id: 'status.admin_domain', defaultMessage: 'Open moderation interface for {domain}' },
|
admin_domain: { id: 'status.admin_domain', defaultMessage: 'Open moderation interface for {domain}' },
|
||||||
copy: { id: 'status.copy', defaultMessage: 'Copy link to post' },
|
copy: { id: 'status.copy', defaultMessage: 'Copy link to post' },
|
||||||
hide: { id: 'status.hide', defaultMessage: 'Hide post' },
|
|
||||||
blockDomain: { id: 'account.block_domain', defaultMessage: 'Block domain {domain}' },
|
blockDomain: { id: 'account.block_domain', defaultMessage: 'Block domain {domain}' },
|
||||||
unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },
|
unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },
|
||||||
unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },
|
unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },
|
||||||
@ -241,10 +239,6 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||||||
navigator.clipboard.writeText(url);
|
navigator.clipboard.writeText(url);
|
||||||
};
|
};
|
||||||
|
|
||||||
handleHideClick = () => {
|
|
||||||
this.props.onFilter();
|
|
||||||
};
|
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { status, relationship, intl, withDismiss, withCounters, scrollKey } = this.props;
|
const { status, relationship, intl, withDismiss, withCounters, scrollKey } = this.props;
|
||||||
const { signedIn, permissions } = this.props.identity;
|
const { signedIn, permissions } = this.props.identity;
|
||||||
@ -377,10 +371,6 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||||||
reblogIconComponent = RepeatDisabledIcon;
|
reblogIconComponent = RepeatDisabledIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
const filterButton = this.props.onFilter && (
|
|
||||||
<IconButton className='status__action-bar__button' title={intl.formatMessage(messages.hide)} icon='eye' iconComponent={VisibilityIcon} onClick={this.handleHideClick} />
|
|
||||||
);
|
|
||||||
|
|
||||||
const isReply = status.get('in_reply_to_account_id') === status.getIn(['account', 'id']);
|
const isReply = status.get('in_reply_to_account_id') === status.getIn(['account', 'id']);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -390,8 +380,6 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||||||
<IconButton className='status__action-bar__button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} counter={withCounters ? status.get('favourites_count') : undefined} />
|
<IconButton className='status__action-bar__button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} counter={withCounters ? status.get('favourites_count') : undefined} />
|
||||||
<IconButton className='status__action-bar__button bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' iconComponent={status.get('bookmarked') ? BookmarkIcon : BookmarkBorderIcon} onClick={this.handleBookmarkClick} />
|
<IconButton className='status__action-bar__button bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' iconComponent={status.get('bookmarked') ? BookmarkIcon : BookmarkBorderIcon} onClick={this.handleBookmarkClick} />
|
||||||
|
|
||||||
{filterButton}
|
|
||||||
|
|
||||||
<DropdownMenuContainer
|
<DropdownMenuContainer
|
||||||
scrollKey={scrollKey}
|
scrollKey={scrollKey}
|
||||||
status={status}
|
status={status}
|
||||||
|
37
app/javascript/mastodon/components/status_banner.tsx
Normal file
37
app/javascript/mastodon/components/status_banner.tsx
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import { FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
|
export enum BannerVariant {
|
||||||
|
Yellow = 'yellow',
|
||||||
|
Blue = 'blue',
|
||||||
|
}
|
||||||
|
|
||||||
|
export const StatusBanner: React.FC<{
|
||||||
|
children: React.ReactNode;
|
||||||
|
variant: BannerVariant;
|
||||||
|
expanded?: boolean;
|
||||||
|
onClick?: () => void;
|
||||||
|
}> = ({ children, variant, expanded, onClick }) => (
|
||||||
|
<div
|
||||||
|
className={
|
||||||
|
variant === BannerVariant.Yellow
|
||||||
|
? 'content-warning'
|
||||||
|
: 'content-warning content-warning--filter'
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
|
||||||
|
<button className='link-button' onClick={onClick}>
|
||||||
|
{expanded ? (
|
||||||
|
<FormattedMessage
|
||||||
|
id='content_warning.hide'
|
||||||
|
defaultMessage='Hide post'
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<FormattedMessage
|
||||||
|
id='content_warning.show'
|
||||||
|
defaultMessage='Show anyway'
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
);
|
@ -4,7 +4,7 @@ import { PureComponent } from 'react';
|
|||||||
import { FormattedMessage, injectIntl } from 'react-intl';
|
import { FormattedMessage, injectIntl } from 'react-intl';
|
||||||
|
|
||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
import { Link, withRouter } from 'react-router-dom';
|
import { withRouter } from 'react-router-dom';
|
||||||
|
|
||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
@ -15,7 +15,6 @@ import PollContainer from 'mastodon/containers/poll_container';
|
|||||||
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
||||||
import { autoPlayGif, languages as preloadedLanguages } from 'mastodon/initial_state';
|
import { autoPlayGif, languages as preloadedLanguages } from 'mastodon/initial_state';
|
||||||
|
|
||||||
|
|
||||||
const MAX_HEIGHT = 706; // 22px * 32 (+ 2px padding at the top)
|
const MAX_HEIGHT = 706; // 22px * 32 (+ 2px padding at the top)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -73,8 +72,6 @@ class StatusContent extends PureComponent {
|
|||||||
identity: identityContextPropShape,
|
identity: identityContextPropShape,
|
||||||
status: ImmutablePropTypes.map.isRequired,
|
status: ImmutablePropTypes.map.isRequired,
|
||||||
statusContent: PropTypes.string,
|
statusContent: PropTypes.string,
|
||||||
expanded: PropTypes.bool,
|
|
||||||
onExpandedToggle: PropTypes.func,
|
|
||||||
onTranslate: PropTypes.func,
|
onTranslate: PropTypes.func,
|
||||||
onClick: PropTypes.func,
|
onClick: PropTypes.func,
|
||||||
collapsible: PropTypes.bool,
|
collapsible: PropTypes.bool,
|
||||||
@ -87,10 +84,6 @@ class StatusContent extends PureComponent {
|
|||||||
history: PropTypes.object.isRequired
|
history: PropTypes.object.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
state = {
|
|
||||||
hidden: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
_updateStatusLinks () {
|
_updateStatusLinks () {
|
||||||
const node = this.node;
|
const node = this.node;
|
||||||
|
|
||||||
@ -218,17 +211,6 @@ class StatusContent extends PureComponent {
|
|||||||
this.startXY = null;
|
this.startXY = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
handleSpoilerClick = (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
if (this.props.onExpandedToggle) {
|
|
||||||
// The parent manages the state
|
|
||||||
this.props.onExpandedToggle();
|
|
||||||
} else {
|
|
||||||
this.setState({ hidden: !this.state.hidden });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
handleTranslate = () => {
|
handleTranslate = () => {
|
||||||
this.props.onTranslate();
|
this.props.onTranslate();
|
||||||
};
|
};
|
||||||
@ -240,18 +222,15 @@ class StatusContent extends PureComponent {
|
|||||||
render () {
|
render () {
|
||||||
const { status, intl, statusContent } = this.props;
|
const { status, intl, statusContent } = this.props;
|
||||||
|
|
||||||
const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden;
|
|
||||||
const renderReadMore = this.props.onClick && status.get('collapsed');
|
const renderReadMore = this.props.onClick && status.get('collapsed');
|
||||||
const contentLocale = intl.locale.replace(/[_-].*/, '');
|
const contentLocale = intl.locale.replace(/[_-].*/, '');
|
||||||
const targetLanguages = this.props.languages?.get(status.get('language') || 'und');
|
const targetLanguages = this.props.languages?.get(status.get('language') || 'und');
|
||||||
const renderTranslate = this.props.onTranslate && this.props.identity.signedIn && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('search_index').trim().length > 0 && targetLanguages?.includes(contentLocale);
|
const renderTranslate = this.props.onTranslate && this.props.identity.signedIn && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('search_index').trim().length > 0 && targetLanguages?.includes(contentLocale);
|
||||||
|
|
||||||
const content = { __html: statusContent ?? getStatusContent(status) };
|
const content = { __html: statusContent ?? getStatusContent(status) };
|
||||||
const spoilerContent = { __html: status.getIn(['translation', 'spoilerHtml']) || status.get('spoilerHtml') };
|
|
||||||
const language = status.getIn(['translation', 'language']) || status.get('language');
|
const language = status.getIn(['translation', 'language']) || status.get('language');
|
||||||
const classNames = classnames('status__content', {
|
const classNames = classnames('status__content', {
|
||||||
'status__content--with-action': this.props.onClick && this.props.history,
|
'status__content--with-action': this.props.onClick && this.props.history,
|
||||||
'status__content--with-spoiler': status.get('spoiler_text').length > 0,
|
|
||||||
'status__content--collapsed': renderReadMore,
|
'status__content--collapsed': renderReadMore,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -269,38 +248,7 @@ class StatusContent extends PureComponent {
|
|||||||
<PollContainer pollId={status.get('poll')} lang={language} />
|
<PollContainer pollId={status.get('poll')} lang={language} />
|
||||||
);
|
);
|
||||||
|
|
||||||
if (status.get('spoiler_text').length > 0) {
|
if (this.props.onClick) {
|
||||||
let mentionsPlaceholder = '';
|
|
||||||
|
|
||||||
const mentionLinks = status.get('mentions').map(item => (
|
|
||||||
<Link to={`/@${item.get('acct')}`} key={item.get('id')} className='status-link mention'>
|
|
||||||
@<span>{item.get('username')}</span>
|
|
||||||
</Link>
|
|
||||||
)).reduce((aggregate, item) => [...aggregate, item, ' '], []);
|
|
||||||
|
|
||||||
const toggleText = hidden ? <FormattedMessage id='status.show_more' defaultMessage='Show more' /> : <FormattedMessage id='status.show_less' defaultMessage='Show less' />;
|
|
||||||
|
|
||||||
if (hidden) {
|
|
||||||
mentionsPlaceholder = <div>{mentionLinks}</div>;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className={classNames} ref={this.setRef} tabIndex={0} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
|
||||||
<p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}>
|
|
||||||
<span dangerouslySetInnerHTML={spoilerContent} className='translate' lang={language} />
|
|
||||||
{' '}
|
|
||||||
<button type='button' className={`status__content__spoiler-link ${hidden ? 'status__content__spoiler-link--show-more' : 'status__content__spoiler-link--show-less'}`} onClick={this.handleSpoilerClick} aria-expanded={!hidden}>{toggleText}</button>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{mentionsPlaceholder}
|
|
||||||
|
|
||||||
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''} translate`} lang={language} dangerouslySetInnerHTML={content} />
|
|
||||||
|
|
||||||
{!hidden && poll}
|
|
||||||
{translateButton}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
} else if (this.props.onClick) {
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className={classNames} ref={this.setRef} tabIndex={0} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
<div className={classNames} ref={this.setRef} tabIndex={0} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content' onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||||
|
@ -1,25 +1,23 @@
|
|||||||
import { FormattedMessage } from 'react-intl';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
resource: JSX.Element;
|
message: React.ReactNode;
|
||||||
|
label: React.ReactNode;
|
||||||
url: string;
|
url: string;
|
||||||
|
className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const TimelineHint: React.FC<Props> = ({ resource, url }) => (
|
export const TimelineHint: React.FC<Props> = ({
|
||||||
<div className='timeline-hint'>
|
className,
|
||||||
<strong>
|
message,
|
||||||
<FormattedMessage
|
label,
|
||||||
id='timeline_hint.remote_resource_not_displayed'
|
url,
|
||||||
defaultMessage='{resource} from other servers are not displayed.'
|
}) => (
|
||||||
values={{ resource }}
|
<div className={classNames('timeline-hint', className)}>
|
||||||
/>
|
<p>{message}</p>
|
||||||
</strong>
|
|
||||||
<br />
|
|
||||||
<a href={url} target='_blank' rel='noopener noreferrer'>
|
<a href={url} target='_blank' rel='noopener noreferrer'>
|
||||||
<FormattedMessage
|
{label}
|
||||||
id='account.browse_more_on_origin_server'
|
|
||||||
defaultMessage='Browse more on the original profile'
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -12,6 +12,7 @@ import BundleColumnError from 'mastodon/features/ui/components/bundle_column_err
|
|||||||
import { me } from 'mastodon/initial_state';
|
import { me } from 'mastodon/initial_state';
|
||||||
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
|
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
|
||||||
import { getAccountHidden } from 'mastodon/selectors';
|
import { getAccountHidden } from 'mastodon/selectors';
|
||||||
|
import { useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
import { lookupAccount, fetchAccount } from '../../actions/accounts';
|
import { lookupAccount, fetchAccount } from '../../actions/accounts';
|
||||||
import { fetchFeaturedTags } from '../../actions/featured_tags';
|
import { fetchFeaturedTags } from '../../actions/featured_tags';
|
||||||
@ -59,12 +60,22 @@ const mapStateToProps = (state, { params: { acct, id, tagged }, withReplies = fa
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const RemoteHint = ({ url }) => (
|
const RemoteHint = ({ accountId, url }) => {
|
||||||
<TimelineHint url={url} resource={<FormattedMessage id='timeline_hint.resources.statuses' defaultMessage='Older posts' />} />
|
const acct = useAppSelector(state => state.accounts.get(accountId)?.acct);
|
||||||
);
|
const domain = acct ? acct.split('@')[1] : undefined;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<TimelineHint
|
||||||
|
url={url}
|
||||||
|
message={<FormattedMessage id='hints.profiles.posts_may_be_missing' defaultMessage='Some posts from this profile may be missing.' />}
|
||||||
|
label={<FormattedMessage id='hints.profiles.see_more_posts' defaultMessage='See more posts on {domain}' values={{ domain: <strong>{domain}</strong> }} />}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
RemoteHint.propTypes = {
|
RemoteHint.propTypes = {
|
||||||
url: PropTypes.string.isRequired,
|
url: PropTypes.string.isRequired,
|
||||||
|
accountId: PropTypes.string.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
class AccountTimeline extends ImmutablePureComponent {
|
class AccountTimeline extends ImmutablePureComponent {
|
||||||
@ -175,12 +186,12 @@ class AccountTimeline extends ImmutablePureComponent {
|
|||||||
} else if (blockedBy) {
|
} else if (blockedBy) {
|
||||||
emptyMessage = <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />;
|
emptyMessage = <FormattedMessage id='empty_column.account_unavailable' defaultMessage='Profile unavailable' />;
|
||||||
} else if (remote && statusIds.isEmpty()) {
|
} else if (remote && statusIds.isEmpty()) {
|
||||||
emptyMessage = <RemoteHint url={remoteUrl} />;
|
emptyMessage = <RemoteHint accountId={accountId} url={remoteUrl} />;
|
||||||
} else {
|
} else {
|
||||||
emptyMessage = <FormattedMessage id='empty_column.account_timeline' defaultMessage='No posts found' />;
|
emptyMessage = <FormattedMessage id='empty_column.account_timeline' defaultMessage='No posts found' />;
|
||||||
}
|
}
|
||||||
|
|
||||||
const remoteMessage = remote ? <RemoteHint url={remoteUrl} /> : null;
|
const remoteMessage = remote ? <RemoteHint accountId={accountId} url={remoteUrl} /> : null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column>
|
<Column>
|
||||||
|
@ -12,6 +12,7 @@ import { TimelineHint } from 'mastodon/components/timeline_hint';
|
|||||||
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
|
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
|
||||||
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
|
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
|
||||||
import { getAccountHidden } from 'mastodon/selectors';
|
import { getAccountHidden } from 'mastodon/selectors';
|
||||||
|
import { useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
lookupAccount,
|
lookupAccount,
|
||||||
@ -51,12 +52,22 @@ const mapStateToProps = (state, { params: { acct, id } }) => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const RemoteHint = ({ url }) => (
|
const RemoteHint = ({ accountId, url }) => {
|
||||||
<TimelineHint url={url} resource={<FormattedMessage id='timeline_hint.resources.followers' defaultMessage='Followers' />} />
|
const acct = useAppSelector(state => state.accounts.get(accountId)?.acct);
|
||||||
);
|
const domain = acct ? acct.split('@')[1] : undefined;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<TimelineHint
|
||||||
|
url={url}
|
||||||
|
message={<FormattedMessage id='hints.profiles.followers_may_be_missing' defaultMessage='Followers for this profile may be missing.' />}
|
||||||
|
label={<FormattedMessage id='hints.profiles.see_more_followers' defaultMessage='See more followers on {domain}' values={{ domain: <strong>{domain}</strong> }} />}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
RemoteHint.propTypes = {
|
RemoteHint.propTypes = {
|
||||||
url: PropTypes.string.isRequired,
|
url: PropTypes.string.isRequired,
|
||||||
|
accountId: PropTypes.string.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
class Followers extends ImmutablePureComponent {
|
class Followers extends ImmutablePureComponent {
|
||||||
@ -141,12 +152,12 @@ class Followers extends ImmutablePureComponent {
|
|||||||
} else if (hideCollections && accountIds.isEmpty()) {
|
} else if (hideCollections && accountIds.isEmpty()) {
|
||||||
emptyMessage = <FormattedMessage id='empty_column.account_hides_collections' defaultMessage='This user has chosen to not make this information available' />;
|
emptyMessage = <FormattedMessage id='empty_column.account_hides_collections' defaultMessage='This user has chosen to not make this information available' />;
|
||||||
} else if (remote && accountIds.isEmpty()) {
|
} else if (remote && accountIds.isEmpty()) {
|
||||||
emptyMessage = <RemoteHint url={remoteUrl} />;
|
emptyMessage = <RemoteHint accountId={accountId} url={remoteUrl} />;
|
||||||
} else {
|
} else {
|
||||||
emptyMessage = <FormattedMessage id='account.followers.empty' defaultMessage='No one follows this user yet.' />;
|
emptyMessage = <FormattedMessage id='account.followers.empty' defaultMessage='No one follows this user yet.' />;
|
||||||
}
|
}
|
||||||
|
|
||||||
const remoteMessage = remote ? <RemoteHint url={remoteUrl} /> : null;
|
const remoteMessage = remote ? <RemoteHint accountId={accountId} url={remoteUrl} /> : null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column>
|
<Column>
|
||||||
|
@ -12,6 +12,7 @@ import { TimelineHint } from 'mastodon/components/timeline_hint';
|
|||||||
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
|
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
|
||||||
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
|
import { normalizeForLookup } from 'mastodon/reducers/accounts_map';
|
||||||
import { getAccountHidden } from 'mastodon/selectors';
|
import { getAccountHidden } from 'mastodon/selectors';
|
||||||
|
import { useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
lookupAccount,
|
lookupAccount,
|
||||||
@ -51,12 +52,22 @@ const mapStateToProps = (state, { params: { acct, id } }) => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const RemoteHint = ({ url }) => (
|
const RemoteHint = ({ accountId, url }) => {
|
||||||
<TimelineHint url={url} resource={<FormattedMessage id='timeline_hint.resources.follows' defaultMessage='Follows' />} />
|
const acct = useAppSelector(state => state.accounts.get(accountId)?.acct);
|
||||||
);
|
const domain = acct ? acct.split('@')[1] : undefined;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<TimelineHint
|
||||||
|
url={url}
|
||||||
|
message={<FormattedMessage id='hints.profiles.follows_may_be_missing' defaultMessage='Follows for this profile may be missing.' />}
|
||||||
|
label={<FormattedMessage id='hints.profiles.see_more_follows' defaultMessage='See more follows on {domain}' values={{ domain: <strong>{domain}</strong> }} />}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
RemoteHint.propTypes = {
|
RemoteHint.propTypes = {
|
||||||
url: PropTypes.string.isRequired,
|
url: PropTypes.string.isRequired,
|
||||||
|
accountId: PropTypes.string.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
class Following extends ImmutablePureComponent {
|
class Following extends ImmutablePureComponent {
|
||||||
@ -141,12 +152,12 @@ class Following extends ImmutablePureComponent {
|
|||||||
} else if (hideCollections && accountIds.isEmpty()) {
|
} else if (hideCollections && accountIds.isEmpty()) {
|
||||||
emptyMessage = <FormattedMessage id='empty_column.account_hides_collections' defaultMessage='This user has chosen to not make this information available' />;
|
emptyMessage = <FormattedMessage id='empty_column.account_hides_collections' defaultMessage='This user has chosen to not make this information available' />;
|
||||||
} else if (remote && accountIds.isEmpty()) {
|
} else if (remote && accountIds.isEmpty()) {
|
||||||
emptyMessage = <RemoteHint url={remoteUrl} />;
|
emptyMessage = <RemoteHint accountId={accountId} url={remoteUrl} />;
|
||||||
} else {
|
} else {
|
||||||
emptyMessage = <FormattedMessage id='account.follows.empty' defaultMessage="This user doesn't follow anyone yet." />;
|
emptyMessage = <FormattedMessage id='account.follows.empty' defaultMessage="This user doesn't follow anyone yet." />;
|
||||||
}
|
}
|
||||||
|
|
||||||
const remoteMessage = remote ? <RemoteHint url={remoteUrl} /> : null;
|
const remoteMessage = remote ? <RemoteHint accountId={accountId} url={remoteUrl} /> : null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Column>
|
<Column>
|
||||||
|
@ -12,9 +12,11 @@ import { connect } from 'react-redux';
|
|||||||
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
|
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
|
||||||
import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
|
import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
|
||||||
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
|
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
|
||||||
|
import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react';
|
||||||
import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
|
import PeopleIcon from '@/material-icons/400-24px/group.svg?react';
|
||||||
import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react';
|
import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react';
|
||||||
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
|
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
|
||||||
|
import AdministrationIcon from '@/material-icons/400-24px/manufacturing.svg?react';
|
||||||
import MenuIcon from '@/material-icons/400-24px/menu.svg?react';
|
import MenuIcon from '@/material-icons/400-24px/menu.svg?react';
|
||||||
import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react';
|
import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react';
|
||||||
import PublicIcon from '@/material-icons/400-24px/public.svg?react';
|
import PublicIcon from '@/material-icons/400-24px/public.svg?react';
|
||||||
@ -25,6 +27,7 @@ import Column from 'mastodon/components/column';
|
|||||||
import ColumnHeader from 'mastodon/components/column_header';
|
import ColumnHeader from 'mastodon/components/column_header';
|
||||||
import LinkFooter from 'mastodon/features/ui/components/link_footer';
|
import LinkFooter from 'mastodon/features/ui/components/link_footer';
|
||||||
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
||||||
|
import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions';
|
||||||
|
|
||||||
import { me, showTrends } from '../../initial_state';
|
import { me, showTrends } from '../../initial_state';
|
||||||
import { NavigationBar } from '../compose/components/navigation_bar';
|
import { NavigationBar } from '../compose/components/navigation_bar';
|
||||||
@ -43,6 +46,8 @@ const messages = defineMessages({
|
|||||||
direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' },
|
direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' },
|
||||||
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
|
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
|
||||||
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
|
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
|
||||||
|
administration: { id: 'navigation_bar.administration', defaultMessage: 'Administration' },
|
||||||
|
moderation: { id: 'navigation_bar.moderation', defaultMessage: 'Moderation' },
|
||||||
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
|
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
|
||||||
favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favorites' },
|
favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favorites' },
|
||||||
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
|
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
|
||||||
@ -99,7 +104,7 @@ class GettingStarted extends ImmutablePureComponent {
|
|||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { intl, myAccount, multiColumn, unreadFollowRequests } = this.props;
|
const { intl, myAccount, multiColumn, unreadFollowRequests } = this.props;
|
||||||
const { signedIn } = this.props.identity;
|
const { signedIn, permissions } = this.props.identity;
|
||||||
|
|
||||||
const navItems = [];
|
const navItems = [];
|
||||||
|
|
||||||
@ -136,6 +141,13 @@ class GettingStarted extends ImmutablePureComponent {
|
|||||||
<ColumnSubheading key='header-settings' text={intl.formatMessage(messages.settings_subheading)} />,
|
<ColumnSubheading key='header-settings' text={intl.formatMessage(messages.settings_subheading)} />,
|
||||||
<ColumnLink key='preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />,
|
<ColumnLink key='preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} href='/settings/preferences' />,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (canManageReports(permissions)) {
|
||||||
|
navItems.push(<ColumnLink key='moderation' href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />);
|
||||||
|
}
|
||||||
|
if (canViewAdminDashboard(permissions)) {
|
||||||
|
navItems.push(<ColumnLink key='administration' href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -36,13 +36,13 @@ export const LinkTimeline: React.FC<{
|
|||||||
|
|
||||||
const handleLoadMore = useCallback(
|
const handleLoadMore = useCallback(
|
||||||
(maxId: string) => {
|
(maxId: string) => {
|
||||||
dispatch(expandLinkTimeline(decodedUrl, { maxId }));
|
void dispatch(expandLinkTimeline(decodedUrl, { maxId }));
|
||||||
},
|
},
|
||||||
[dispatch, decodedUrl],
|
[dispatch, decodedUrl],
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(expandLinkTimeline(decodedUrl));
|
void dispatch(expandLinkTimeline(decodedUrl));
|
||||||
}, [dispatch, decodedUrl]);
|
}, [dispatch, decodedUrl]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -6,6 +6,7 @@ import { FormattedMessage } from 'react-intl';
|
|||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
|
|
||||||
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
||||||
|
import { forceGroupedNotifications } from 'mastodon/initial_state';
|
||||||
import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'mastodon/permissions';
|
import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'mastodon/permissions';
|
||||||
|
|
||||||
import ClearColumnButton from './clear_column_button';
|
import ClearColumnButton from './clear_column_button';
|
||||||
@ -45,14 +46,18 @@ class ColumnSettings extends PureComponent {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='column-settings'>
|
<div className='column-settings'>
|
||||||
{alertsEnabled && browserSupport && browserPermission === 'denied' && (
|
|
||||||
<span className='warning-hint'><FormattedMessage id='notifications.permission_denied' defaultMessage='Desktop notifications are unavailable due to previously denied browser permissions request' /></span>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<ClearColumnButton onClick={onClear} />
|
<ClearColumnButton onClick={onClear} />
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
{alertsEnabled && browserSupport && browserPermission === 'denied' && (
|
||||||
|
<section>
|
||||||
|
<span className='warning-hint'>
|
||||||
|
<FormattedMessage id='notifications.permission_denied' defaultMessage='Desktop notifications are unavailable due to previously denied browser permissions request' />
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
)}
|
||||||
|
|
||||||
{alertsEnabled && browserSupport && browserPermission === 'default' && (
|
{alertsEnabled && browserSupport && browserPermission === 'default' && (
|
||||||
<section>
|
<section>
|
||||||
<span className='warning-hint'>
|
<span className='warning-hint'>
|
||||||
@ -63,15 +68,17 @@ class ColumnSettings extends PureComponent {
|
|||||||
|
|
||||||
<PolicyControls />
|
<PolicyControls />
|
||||||
|
|
||||||
<section role='group' aria-labelledby='notifications-beta'>
|
{!forceGroupedNotifications && (
|
||||||
<h3 id='notifications-beta'>
|
<section role='group' aria-labelledby='notifications-beta'>
|
||||||
<FormattedMessage id='notifications.column_settings.beta.category' defaultMessage='Experimental features' />
|
<h3 id='notifications-beta'>
|
||||||
</h3>
|
<FormattedMessage id='notifications.column_settings.beta.category' defaultMessage='Experimental features' />
|
||||||
|
</h3>
|
||||||
|
|
||||||
<div className='column-settings__row'>
|
<div className='column-settings__row'>
|
||||||
<SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['groupingBeta']} onChange={onChange} label={groupingShowStr} />
|
<SettingToggle id='unread-notification-markers' prefix='notifications' settings={settings} settingPath={['groupingBeta']} onChange={onChange} label={groupingShowStr} />
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
)}
|
||||||
|
|
||||||
<section role='group' aria-labelledby='notifications-unread-markers'>
|
<section role='group' aria-labelledby='notifications-unread-markers'>
|
||||||
<h3 id='notifications-unread-markers'>
|
<h3 id='notifications-unread-markers'>
|
||||||
|
@ -3,15 +3,21 @@ import { useCallback } from 'react';
|
|||||||
|
|
||||||
import { defineMessages, useIntl } from 'react-intl';
|
import { defineMessages, useIntl } from 'react-intl';
|
||||||
|
|
||||||
import { Link } from 'react-router-dom';
|
import classNames from 'classnames';
|
||||||
|
import { Link, useHistory } from 'react-router-dom';
|
||||||
|
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
|
|
||||||
import DeleteIcon from '@/material-icons/400-24px/delete.svg?react';
|
import DeleteIcon from '@/material-icons/400-24px/delete.svg?react';
|
||||||
import DoneIcon from '@/material-icons/400-24px/done.svg?react';
|
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||||
|
import { initBlockModal } from 'mastodon/actions/blocks';
|
||||||
|
import { initMuteModal } from 'mastodon/actions/mutes';
|
||||||
import { acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications';
|
import { acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications';
|
||||||
|
import { initReport } from 'mastodon/actions/reports';
|
||||||
import { Avatar } from 'mastodon/components/avatar';
|
import { Avatar } from 'mastodon/components/avatar';
|
||||||
|
import { CheckBox } from 'mastodon/components/check_box';
|
||||||
import { IconButton } from 'mastodon/components/icon_button';
|
import { IconButton } from 'mastodon/components/icon_button';
|
||||||
|
import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container';
|
||||||
import { makeGetAccount } from 'mastodon/selectors';
|
import { makeGetAccount } from 'mastodon/selectors';
|
||||||
import { toCappedNumber } from 'mastodon/utils/numbers';
|
import { toCappedNumber } from 'mastodon/utils/numbers';
|
||||||
|
|
||||||
@ -20,12 +26,18 @@ const getAccount = makeGetAccount();
|
|||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
accept: { id: 'notification_requests.accept', defaultMessage: 'Accept' },
|
accept: { id: 'notification_requests.accept', defaultMessage: 'Accept' },
|
||||||
dismiss: { id: 'notification_requests.dismiss', defaultMessage: 'Dismiss' },
|
dismiss: { id: 'notification_requests.dismiss', defaultMessage: 'Dismiss' },
|
||||||
|
view: { id: 'notification_requests.view', defaultMessage: 'View notifications' },
|
||||||
|
mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },
|
||||||
|
block: { id: 'account.block', defaultMessage: 'Block @{name}' },
|
||||||
|
report: { id: 'status.report', defaultMessage: 'Report @{name}' },
|
||||||
|
more: { id: 'status.more', defaultMessage: 'More' },
|
||||||
});
|
});
|
||||||
|
|
||||||
export const NotificationRequest = ({ id, accountId, notificationsCount }) => {
|
export const NotificationRequest = ({ id, accountId, notificationsCount, checked, showCheckbox, toggleCheck }) => {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const account = useSelector(state => getAccount(state, accountId));
|
const account = useSelector(state => getAccount(state, accountId));
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
const { push: historyPush } = useHistory();
|
||||||
|
|
||||||
const handleDismiss = useCallback(() => {
|
const handleDismiss = useCallback(() => {
|
||||||
dispatch(dismissNotificationRequest(id));
|
dispatch(dismissNotificationRequest(id));
|
||||||
@ -35,9 +47,51 @@ export const NotificationRequest = ({ id, accountId, notificationsCount }) => {
|
|||||||
dispatch(acceptNotificationRequest(id));
|
dispatch(acceptNotificationRequest(id));
|
||||||
}, [dispatch, id]);
|
}, [dispatch, id]);
|
||||||
|
|
||||||
|
const handleMute = useCallback(() => {
|
||||||
|
dispatch(initMuteModal(account));
|
||||||
|
}, [dispatch, account]);
|
||||||
|
|
||||||
|
const handleBlock = useCallback(() => {
|
||||||
|
dispatch(initBlockModal(account));
|
||||||
|
}, [dispatch, account]);
|
||||||
|
|
||||||
|
const handleReport = useCallback(() => {
|
||||||
|
dispatch(initReport(account));
|
||||||
|
}, [dispatch, account]);
|
||||||
|
|
||||||
|
const handleView = useCallback(() => {
|
||||||
|
historyPush(`/notifications/requests/${id}`);
|
||||||
|
}, [historyPush, id]);
|
||||||
|
|
||||||
|
const menu = [
|
||||||
|
{ text: intl.formatMessage(messages.view), action: handleView },
|
||||||
|
null,
|
||||||
|
{ text: intl.formatMessage(messages.accept), action: handleAccept },
|
||||||
|
null,
|
||||||
|
{ text: intl.formatMessage(messages.mute, { name: account.username }), action: handleMute, dangerous: true },
|
||||||
|
{ text: intl.formatMessage(messages.block, { name: account.username }), action: handleBlock, dangerous: true },
|
||||||
|
{ text: intl.formatMessage(messages.report, { name: account.username }), action: handleReport, dangerous: true },
|
||||||
|
];
|
||||||
|
|
||||||
|
const handleCheck = useCallback(() => {
|
||||||
|
toggleCheck(id);
|
||||||
|
}, [toggleCheck, id]);
|
||||||
|
|
||||||
|
const handleClick = useCallback((e) => {
|
||||||
|
if (showCheckbox) {
|
||||||
|
toggleCheck(id);
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
}
|
||||||
|
}, [toggleCheck, id, showCheckbox]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='notification-request'>
|
/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- this is just a minor affordance, but we will need a comprehensive accessibility pass */
|
||||||
<Link to={`/notifications/requests/${id}`} className='notification-request__link'>
|
<div className={classNames('notification-request', showCheckbox && 'notification-request--forced-checkbox')} onClick={handleClick}>
|
||||||
|
<div className='notification-request__checkbox' aria-hidden={!showCheckbox}>
|
||||||
|
<CheckBox checked={checked} onChange={handleCheck} />
|
||||||
|
</div>
|
||||||
|
<Link to={`/notifications/requests/${id}`} className='notification-request__link' onClick={handleClick} title={account?.acct}>
|
||||||
<Avatar account={account} size={40} counter={toCappedNumber(notificationsCount)} />
|
<Avatar account={account} size={40} counter={toCappedNumber(notificationsCount)} />
|
||||||
|
|
||||||
<div className='notification-request__name'>
|
<div className='notification-request__name'>
|
||||||
@ -51,7 +105,13 @@ export const NotificationRequest = ({ id, accountId, notificationsCount }) => {
|
|||||||
|
|
||||||
<div className='notification-request__actions'>
|
<div className='notification-request__actions'>
|
||||||
<IconButton iconComponent={DeleteIcon} onClick={handleDismiss} title={intl.formatMessage(messages.dismiss)} />
|
<IconButton iconComponent={DeleteIcon} onClick={handleDismiss} title={intl.formatMessage(messages.dismiss)} />
|
||||||
<IconButton iconComponent={DoneIcon} onClick={handleAccept} title={intl.formatMessage(messages.accept)} />
|
<DropdownMenuContainer
|
||||||
|
items={menu}
|
||||||
|
icons='ellipsis-h'
|
||||||
|
iconComponent={MoreHorizIcon}
|
||||||
|
direction='right'
|
||||||
|
title={intl.formatMessage(messages.more)}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@ -61,4 +121,7 @@ NotificationRequest.propTypes = {
|
|||||||
id: PropTypes.string.isRequired,
|
id: PropTypes.string.isRequired,
|
||||||
accountId: PropTypes.string.isRequired,
|
accountId: PropTypes.string.isRequired,
|
||||||
notificationsCount: PropTypes.string.isRequired,
|
notificationsCount: PropTypes.string.isRequired,
|
||||||
|
checked: PropTypes.bool,
|
||||||
|
showCheckbox: PropTypes.bool,
|
||||||
|
toggleCheck: PropTypes.func,
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { useRef, useCallback, useEffect } from 'react';
|
import { useRef, useCallback, useEffect, useState } from 'react';
|
||||||
|
|
||||||
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
import { defineMessages, useIntl, FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
@ -7,12 +7,18 @@ import { Helmet } from 'react-helmet';
|
|||||||
|
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
|
|
||||||
|
import ArrowDropDownIcon from '@/material-icons/400-24px/arrow_drop_down.svg?react';
|
||||||
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
|
import InventoryIcon from '@/material-icons/400-24px/inventory_2.svg?react';
|
||||||
import { fetchNotificationRequests, expandNotificationRequests } from 'mastodon/actions/notifications';
|
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||||
|
import { openModal } from 'mastodon/actions/modal';
|
||||||
|
import { fetchNotificationRequests, expandNotificationRequests, acceptNotificationRequests, dismissNotificationRequests } from 'mastodon/actions/notifications';
|
||||||
import { changeSetting } from 'mastodon/actions/settings';
|
import { changeSetting } from 'mastodon/actions/settings';
|
||||||
|
import { CheckBox } from 'mastodon/components/check_box';
|
||||||
import Column from 'mastodon/components/column';
|
import Column from 'mastodon/components/column';
|
||||||
import ColumnHeader from 'mastodon/components/column_header';
|
import ColumnHeader from 'mastodon/components/column_header';
|
||||||
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import ScrollableList from 'mastodon/components/scrollable_list';
|
import ScrollableList from 'mastodon/components/scrollable_list';
|
||||||
|
import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container';
|
||||||
|
|
||||||
import { NotificationRequest } from './components/notification_request';
|
import { NotificationRequest } from './components/notification_request';
|
||||||
import { PolicyControls } from './components/policy_controls';
|
import { PolicyControls } from './components/policy_controls';
|
||||||
@ -20,7 +26,16 @@ import SettingToggle from './components/setting_toggle';
|
|||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
title: { id: 'notification_requests.title', defaultMessage: 'Filtered notifications' },
|
title: { id: 'notification_requests.title', defaultMessage: 'Filtered notifications' },
|
||||||
maximize: { id: 'notification_requests.maximize', defaultMessage: 'Maximize' }
|
maximize: { id: 'notification_requests.maximize', defaultMessage: 'Maximize' },
|
||||||
|
more: { id: 'status.more', defaultMessage: 'More' },
|
||||||
|
acceptMultiple: { id: 'notification_requests.accept_multiple', defaultMessage: '{count, plural, one {Accept # request…} other {Accept # requests…}}' },
|
||||||
|
dismissMultiple: { id: 'notification_requests.dismiss_multiple', defaultMessage: '{count, plural, one {Dismiss # request…} other {Dismiss # requests…}}' },
|
||||||
|
confirmAcceptMultipleTitle: { id: 'notification_requests.confirm_accept_multiple.title', defaultMessage: 'Accept notification requests?' },
|
||||||
|
confirmAcceptMultipleMessage: { id: 'notification_requests.confirm_accept_multiple.message', defaultMessage: 'You are about to accept {count, plural, one {one notification request} other {# notification requests}}. Are you sure you want to proceed?' },
|
||||||
|
confirmAcceptMultipleButton: { id: 'notification_requests.confirm_accept_multiple.button', defaultMessage: '{count, plural, one {Accept request} other {Accept requests}}' },
|
||||||
|
confirmDismissMultipleTitle: { id: 'notification_requests.confirm_dismiss_multiple.title', defaultMessage: 'Dismiss notification requests?' },
|
||||||
|
confirmDismissMultipleMessage: { id: 'notification_requests.confirm_dismiss_multiple.message', defaultMessage: "You are about to dismiss {count, plural, one {one notification request} other {# notification requests}}. You won't be able to easily access {count, plural, one {it} other {them}} again. Are you sure you want to proceed?" },
|
||||||
|
confirmDismissMultipleButton: { id: 'notification_requests.confirm_dismiss_multiple.button', defaultMessage: '{count, plural, one {Dismiss request} other {Dismiss requests}}' },
|
||||||
});
|
});
|
||||||
|
|
||||||
const ColumnSettings = () => {
|
const ColumnSettings = () => {
|
||||||
@ -55,6 +70,93 @@ const ColumnSettings = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const SelectRow = ({selectAllChecked, toggleSelectAll, selectedItems, selectionMode, setSelectionMode}) => {
|
||||||
|
const intl = useIntl();
|
||||||
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
|
const selectedCount = selectedItems.length;
|
||||||
|
|
||||||
|
const handleAcceptMultiple = useCallback(() => {
|
||||||
|
dispatch(openModal({
|
||||||
|
modalType: 'CONFIRM',
|
||||||
|
modalProps: {
|
||||||
|
title: intl.formatMessage(messages.confirmAcceptMultipleTitle),
|
||||||
|
message: intl.formatMessage(messages.confirmAcceptMultipleMessage, { count: selectedItems.length }),
|
||||||
|
confirm: intl.formatMessage(messages.confirmAcceptMultipleButton, { count: selectedItems.length}),
|
||||||
|
onConfirm: () =>
|
||||||
|
dispatch(acceptNotificationRequests(selectedItems)),
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
}, [dispatch, intl, selectedItems]);
|
||||||
|
|
||||||
|
const handleDismissMultiple = useCallback(() => {
|
||||||
|
dispatch(openModal({
|
||||||
|
modalType: 'CONFIRM',
|
||||||
|
modalProps: {
|
||||||
|
title: intl.formatMessage(messages.confirmDismissMultipleTitle),
|
||||||
|
message: intl.formatMessage(messages.confirmDismissMultipleMessage, { count: selectedItems.length }),
|
||||||
|
confirm: intl.formatMessage(messages.confirmDismissMultipleButton, { count: selectedItems.length}),
|
||||||
|
onConfirm: () =>
|
||||||
|
dispatch(dismissNotificationRequests(selectedItems)),
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
}, [dispatch, intl, selectedItems]);
|
||||||
|
|
||||||
|
const handleToggleSelectionMode = useCallback(() => {
|
||||||
|
setSelectionMode((mode) => !mode);
|
||||||
|
}, [setSelectionMode]);
|
||||||
|
|
||||||
|
const menu = [
|
||||||
|
{ text: intl.formatMessage(messages.acceptMultiple, { count: selectedCount }), action: handleAcceptMultiple },
|
||||||
|
{ text: intl.formatMessage(messages.dismissMultiple, { count: selectedCount }), action: handleDismissMultiple },
|
||||||
|
];
|
||||||
|
|
||||||
|
const handleSelectAll = useCallback(() => {
|
||||||
|
setSelectionMode(true);
|
||||||
|
toggleSelectAll();
|
||||||
|
}, [setSelectionMode, toggleSelectAll]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className='column-header__select-row'>
|
||||||
|
<div className='column-header__select-row__checkbox'>
|
||||||
|
<CheckBox checked={selectAllChecked} indeterminate={selectedCount > 0 && !selectAllChecked} onChange={handleSelectAll} />
|
||||||
|
</div>
|
||||||
|
<DropdownMenuContainer
|
||||||
|
items={menu}
|
||||||
|
icons='ellipsis-h'
|
||||||
|
iconComponent={MoreHorizIcon}
|
||||||
|
direction='right'
|
||||||
|
title={intl.formatMessage(messages.more)}
|
||||||
|
>
|
||||||
|
<button className='dropdown-button column-header__select-row__select-menu' disabled={selectedItems.length === 0}>
|
||||||
|
<span className='dropdown-button__label'>
|
||||||
|
{selectedCount} selected
|
||||||
|
</span>
|
||||||
|
<Icon id='down' icon={ArrowDropDownIcon} />
|
||||||
|
</button>
|
||||||
|
</DropdownMenuContainer>
|
||||||
|
<div className='column-header__select-row__mode-button'>
|
||||||
|
<button className='text-btn' tabIndex={0} onClick={handleToggleSelectionMode}>
|
||||||
|
{selectionMode ? (
|
||||||
|
<FormattedMessage id='notification_requests.exit_selection' defaultMessage='Done' />
|
||||||
|
) :
|
||||||
|
(
|
||||||
|
<FormattedMessage id='notification_requests.edit_selection' defaultMessage='Edit' />
|
||||||
|
)}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
SelectRow.propTypes = {
|
||||||
|
selectAllChecked: PropTypes.func.isRequired,
|
||||||
|
toggleSelectAll: PropTypes.func.isRequired,
|
||||||
|
selectedItems: PropTypes.arrayOf(PropTypes.string).isRequired,
|
||||||
|
selectionMode: PropTypes.bool,
|
||||||
|
setSelectionMode: PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
export const NotificationRequests = ({ multiColumn }) => {
|
export const NotificationRequests = ({ multiColumn }) => {
|
||||||
const columnRef = useRef();
|
const columnRef = useRef();
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
@ -63,10 +165,40 @@ export const NotificationRequests = ({ multiColumn }) => {
|
|||||||
const notificationRequests = useSelector(state => state.getIn(['notificationRequests', 'items']));
|
const notificationRequests = useSelector(state => state.getIn(['notificationRequests', 'items']));
|
||||||
const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'next']));
|
const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'next']));
|
||||||
|
|
||||||
|
const [selectionMode, setSelectionMode] = useState(false);
|
||||||
|
const [checkedRequestIds, setCheckedRequestIds] = useState([]);
|
||||||
|
const [selectAllChecked, setSelectAllChecked] = useState(false);
|
||||||
|
|
||||||
const handleHeaderClick = useCallback(() => {
|
const handleHeaderClick = useCallback(() => {
|
||||||
columnRef.current?.scrollTop();
|
columnRef.current?.scrollTop();
|
||||||
}, [columnRef]);
|
}, [columnRef]);
|
||||||
|
|
||||||
|
const handleCheck = useCallback(id => {
|
||||||
|
setCheckedRequestIds(ids => {
|
||||||
|
const position = ids.indexOf(id);
|
||||||
|
|
||||||
|
if(position > -1)
|
||||||
|
ids.splice(position, 1);
|
||||||
|
else
|
||||||
|
ids.push(id);
|
||||||
|
|
||||||
|
setSelectAllChecked(ids.length === notificationRequests.size);
|
||||||
|
|
||||||
|
return [...ids];
|
||||||
|
});
|
||||||
|
}, [setCheckedRequestIds, notificationRequests]);
|
||||||
|
|
||||||
|
const toggleSelectAll = useCallback(() => {
|
||||||
|
setSelectAllChecked(checked => {
|
||||||
|
if(checked)
|
||||||
|
setCheckedRequestIds([]);
|
||||||
|
else
|
||||||
|
setCheckedRequestIds(notificationRequests.map(request => request.get('id')).toArray());
|
||||||
|
|
||||||
|
return !checked;
|
||||||
|
});
|
||||||
|
}, [notificationRequests]);
|
||||||
|
|
||||||
const handleLoadMore = useCallback(() => {
|
const handleLoadMore = useCallback(() => {
|
||||||
dispatch(expandNotificationRequests());
|
dispatch(expandNotificationRequests());
|
||||||
}, [dispatch]);
|
}, [dispatch]);
|
||||||
@ -84,6 +216,10 @@ export const NotificationRequests = ({ multiColumn }) => {
|
|||||||
onClick={handleHeaderClick}
|
onClick={handleHeaderClick}
|
||||||
multiColumn={multiColumn}
|
multiColumn={multiColumn}
|
||||||
showBackButton
|
showBackButton
|
||||||
|
appendContent={
|
||||||
|
notificationRequests.size > 0 && (
|
||||||
|
<SelectRow selectionMode={selectionMode} setSelectionMode={setSelectionMode} selectAllChecked={selectAllChecked} toggleSelectAll={toggleSelectAll} selectedItems={checkedRequestIds} />
|
||||||
|
)}
|
||||||
>
|
>
|
||||||
<ColumnSettings />
|
<ColumnSettings />
|
||||||
</ColumnHeader>
|
</ColumnHeader>
|
||||||
@ -104,6 +240,9 @@ export const NotificationRequests = ({ multiColumn }) => {
|
|||||||
id={request.get('id')}
|
id={request.get('id')}
|
||||||
accountId={request.get('account')}
|
accountId={request.get('account')}
|
||||||
notificationsCount={request.get('notifications_count')}
|
notificationsCount={request.get('notifications_count')}
|
||||||
|
showCheckbox={selectionMode}
|
||||||
|
checked={checkedRequestIds.includes(request.get('id'))}
|
||||||
|
toggleCheck={handleCheck}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</ScrollableList>
|
</ScrollableList>
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
|
||||||
|
import { useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
|
export const DisplayedName: React.FC<{
|
||||||
|
accountIds: string[];
|
||||||
|
}> = ({ accountIds }) => {
|
||||||
|
const lastAccountId = accountIds[0] ?? '0';
|
||||||
|
const account = useAppSelector((state) => state.accounts.get(lastAccountId));
|
||||||
|
|
||||||
|
if (!account) return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Link
|
||||||
|
to={`/@${account.acct}`}
|
||||||
|
title={`@${account.acct}`}
|
||||||
|
data-hover-card-account={account.id}
|
||||||
|
>
|
||||||
|
<bdi dangerouslySetInnerHTML={{ __html: account.display_name_html }} />
|
||||||
|
</Link>
|
||||||
|
);
|
||||||
|
};
|
@ -8,11 +8,13 @@ import type { List as ImmutableList, RecordOf } from 'immutable';
|
|||||||
|
|
||||||
import BarChart4BarsIcon from '@/material-icons/400-24px/bar_chart_4_bars.svg?react';
|
import BarChart4BarsIcon from '@/material-icons/400-24px/bar_chart_4_bars.svg?react';
|
||||||
import PhotoLibraryIcon from '@/material-icons/400-24px/photo_library.svg?react';
|
import PhotoLibraryIcon from '@/material-icons/400-24px/photo_library.svg?react';
|
||||||
|
import { toggleStatusSpoilers } from 'mastodon/actions/statuses';
|
||||||
import { Avatar } from 'mastodon/components/avatar';
|
import { Avatar } from 'mastodon/components/avatar';
|
||||||
|
import { ContentWarning } from 'mastodon/components/content_warning';
|
||||||
import { DisplayName } from 'mastodon/components/display_name';
|
import { DisplayName } from 'mastodon/components/display_name';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import type { Status } from 'mastodon/models/status';
|
import type { Status } from 'mastodon/models/status';
|
||||||
import { useAppSelector } from 'mastodon/store';
|
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
import { EmbeddedStatusContent } from './embedded_status_content';
|
import { EmbeddedStatusContent } from './embedded_status_content';
|
||||||
|
|
||||||
@ -23,6 +25,7 @@ export const EmbeddedStatus: React.FC<{ statusId: string }> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
const clickCoordinatesRef = useRef<[number, number] | null>();
|
const clickCoordinatesRef = useRef<[number, number] | null>();
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
const status = useAppSelector(
|
const status = useAppSelector(
|
||||||
(state) => state.statuses.get(statusId) as Status | undefined,
|
(state) => state.statuses.get(statusId) as Status | undefined,
|
||||||
@ -96,15 +99,21 @@ export const EmbeddedStatus: React.FC<{ statusId: string }> = ({
|
|||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handleContentWarningClick = useCallback(() => {
|
||||||
|
dispatch(toggleStatusSpoilers(statusId));
|
||||||
|
}, [dispatch, statusId]);
|
||||||
|
|
||||||
if (!status) {
|
if (!status) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assign status attributes to variables with a forced type, as status is not yet properly typed
|
// Assign status attributes to variables with a forced type, as status is not yet properly typed
|
||||||
const contentHtml = status.get('contentHtml') as string;
|
const contentHtml = status.get('contentHtml') as string;
|
||||||
|
const contentWarning = status.get('spoilerHtml') as string;
|
||||||
const poll = status.get('poll');
|
const poll = status.get('poll');
|
||||||
const language = status.get('language') as string;
|
const language = status.get('language') as string;
|
||||||
const mentions = status.get('mentions') as ImmutableList<Mention>;
|
const mentions = status.get('mentions') as ImmutableList<Mention>;
|
||||||
|
const expanded = !status.get('hidden') || !contentWarning;
|
||||||
const mediaAttachmentsSize = (
|
const mediaAttachmentsSize = (
|
||||||
status.get('media_attachments') as ImmutableList<unknown>
|
status.get('media_attachments') as ImmutableList<unknown>
|
||||||
).size;
|
).size;
|
||||||
@ -124,14 +133,24 @@ export const EmbeddedStatus: React.FC<{ statusId: string }> = ({
|
|||||||
<DisplayName account={account} />
|
<DisplayName account={account} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<EmbeddedStatusContent
|
{contentWarning && (
|
||||||
className='notification-group__embedded-status__content reply-indicator__content translate'
|
<ContentWarning
|
||||||
content={contentHtml}
|
text={contentWarning}
|
||||||
language={language}
|
onClick={handleContentWarningClick}
|
||||||
mentions={mentions}
|
expanded={expanded}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
{(poll || mediaAttachmentsSize > 0) && (
|
{(!contentWarning || expanded) && (
|
||||||
|
<EmbeddedStatusContent
|
||||||
|
className='notification-group__embedded-status__content reply-indicator__content translate'
|
||||||
|
content={contentHtml}
|
||||||
|
language={language}
|
||||||
|
mentions={mentions}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{expanded && (poll || mediaAttachmentsSize > 0) && (
|
||||||
<div className='notification-group__embedded-status__attachments reply-indicator__attachments'>
|
<div className='notification-group__embedded-status__attachments reply-indicator__attachments'>
|
||||||
{!!poll && (
|
{!!poll && (
|
||||||
<>
|
<>
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
import { FormattedMessage } from 'react-intl';
|
|
||||||
|
|
||||||
import { Link } from 'react-router-dom';
|
|
||||||
|
|
||||||
import { useAppSelector } from 'mastodon/store';
|
|
||||||
|
|
||||||
export const NamesList: React.FC<{
|
|
||||||
accountIds: string[];
|
|
||||||
total: number;
|
|
||||||
seeMoreHref?: string;
|
|
||||||
}> = ({ accountIds, total, seeMoreHref }) => {
|
|
||||||
const lastAccountId = accountIds[0] ?? '0';
|
|
||||||
const account = useAppSelector((state) => state.accounts.get(lastAccountId));
|
|
||||||
|
|
||||||
if (!account) return null;
|
|
||||||
|
|
||||||
const displayedName = (
|
|
||||||
<Link
|
|
||||||
to={`/@${account.acct}`}
|
|
||||||
title={`@${account.acct}`}
|
|
||||||
data-hover-card-account={account.id}
|
|
||||||
>
|
|
||||||
<bdi dangerouslySetInnerHTML={{ __html: account.display_name_html }} />
|
|
||||||
</Link>
|
|
||||||
);
|
|
||||||
|
|
||||||
if (total === 1) {
|
|
||||||
return displayedName;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (seeMoreHref)
|
|
||||||
return (
|
|
||||||
<FormattedMessage
|
|
||||||
id='name_and_others_with_link'
|
|
||||||
defaultMessage='{name} and <a>{count, plural, one {# other} other {# others}}</a>'
|
|
||||||
values={{
|
|
||||||
name: displayedName,
|
|
||||||
count: total - 1,
|
|
||||||
a: (chunks) => <Link to={seeMoreHref}>{chunks}</Link>,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<FormattedMessage
|
|
||||||
id='name_and_others'
|
|
||||||
defaultMessage='{name} and {count, plural, one {# other} other {# others}}'
|
|
||||||
values={{ name: displayedName, count: total - 1 }}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
@ -6,13 +6,27 @@ import type { NotificationGroupAdminSignUp } from 'mastodon/models/notification_
|
|||||||
import type { LabelRenderer } from './notification_group_with_status';
|
import type { LabelRenderer } from './notification_group_with_status';
|
||||||
import { NotificationGroupWithStatus } from './notification_group_with_status';
|
import { NotificationGroupWithStatus } from './notification_group_with_status';
|
||||||
|
|
||||||
const labelRenderer: LabelRenderer = (values) => (
|
const labelRenderer: LabelRenderer = (displayedName, total) => {
|
||||||
<FormattedMessage
|
if (total === 1)
|
||||||
id='notification.admin.sign_up'
|
return (
|
||||||
defaultMessage='{name} signed up'
|
<FormattedMessage
|
||||||
values={values}
|
id='notification.admin.sign_up'
|
||||||
/>
|
defaultMessage='{name} signed up'
|
||||||
);
|
values={{ name: displayedName }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormattedMessage
|
||||||
|
id='notification.admin.sign_up.name_and_others'
|
||||||
|
defaultMessage='{name} and {count, plural, one {# other} other {# others}} signed up'
|
||||||
|
values={{
|
||||||
|
name: displayedName,
|
||||||
|
count: total - 1,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export const NotificationAdminSignUp: React.FC<{
|
export const NotificationAdminSignUp: React.FC<{
|
||||||
notification: NotificationGroupAdminSignUp;
|
notification: NotificationGroupAdminSignUp;
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
|
||||||
import StarIcon from '@/material-icons/400-24px/star-fill.svg?react';
|
import StarIcon from '@/material-icons/400-24px/star-fill.svg?react';
|
||||||
import type { NotificationGroupFavourite } from 'mastodon/models/notification_group';
|
import type { NotificationGroupFavourite } from 'mastodon/models/notification_group';
|
||||||
import { useAppSelector } from 'mastodon/store';
|
import { useAppSelector } from 'mastodon/store';
|
||||||
@ -7,13 +9,29 @@ import { useAppSelector } from 'mastodon/store';
|
|||||||
import type { LabelRenderer } from './notification_group_with_status';
|
import type { LabelRenderer } from './notification_group_with_status';
|
||||||
import { NotificationGroupWithStatus } from './notification_group_with_status';
|
import { NotificationGroupWithStatus } from './notification_group_with_status';
|
||||||
|
|
||||||
const labelRenderer: LabelRenderer = (values) => (
|
const labelRenderer: LabelRenderer = (displayedName, total, seeMoreHref) => {
|
||||||
<FormattedMessage
|
if (total === 1)
|
||||||
id='notification.favourite'
|
return (
|
||||||
defaultMessage='{name} favorited your status'
|
<FormattedMessage
|
||||||
values={values}
|
id='notification.favourite'
|
||||||
/>
|
defaultMessage='{name} favorited your status'
|
||||||
);
|
values={{ name: displayedName }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormattedMessage
|
||||||
|
id='notification.favourite.name_and_others_with_link'
|
||||||
|
defaultMessage='{name} and <a>{count, plural, one {# other} other {# others}}</a> favorited your post'
|
||||||
|
values={{
|
||||||
|
name: displayedName,
|
||||||
|
count: total - 1,
|
||||||
|
a: (chunks) =>
|
||||||
|
seeMoreHref ? <Link to={seeMoreHref}>{chunks}</Link> : chunks,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export const NotificationFavourite: React.FC<{
|
export const NotificationFavourite: React.FC<{
|
||||||
notification: NotificationGroupFavourite;
|
notification: NotificationGroupFavourite;
|
||||||
|
@ -1,31 +1,76 @@
|
|||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
import PersonAddIcon from '@/material-icons/400-24px/person_add-fill.svg?react';
|
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 type { NotificationGroupFollow } from 'mastodon/models/notification_group';
|
import type { NotificationGroupFollow } from 'mastodon/models/notification_group';
|
||||||
|
import { useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
import type { LabelRenderer } from './notification_group_with_status';
|
import type { LabelRenderer } from './notification_group_with_status';
|
||||||
import { NotificationGroupWithStatus } from './notification_group_with_status';
|
import { NotificationGroupWithStatus } from './notification_group_with_status';
|
||||||
|
|
||||||
const labelRenderer: LabelRenderer = (values) => (
|
const labelRenderer: LabelRenderer = (displayedName, total) => {
|
||||||
<FormattedMessage
|
if (total === 1)
|
||||||
id='notification.follow'
|
return (
|
||||||
defaultMessage='{name} followed you'
|
<FormattedMessage
|
||||||
values={values}
|
id='notification.follow'
|
||||||
/>
|
defaultMessage='{name} followed you'
|
||||||
);
|
values={{ name: displayedName }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormattedMessage
|
||||||
|
id='notification.follow.name_and_others'
|
||||||
|
defaultMessage='{name} and {count, plural, one {# other} other {# others}} followed you'
|
||||||
|
values={{
|
||||||
|
name: displayedName,
|
||||||
|
count: total - 1,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const FollowerCount: React.FC<{ accountId: string }> = ({ accountId }) => {
|
||||||
|
const account = useAppSelector((s) => s.accounts.get(accountId));
|
||||||
|
|
||||||
|
if (!account) return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ShortNumber value={account.followers_count} renderer={FollowersCounter} />
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export const NotificationFollow: React.FC<{
|
export const NotificationFollow: React.FC<{
|
||||||
notification: NotificationGroupFollow;
|
notification: NotificationGroupFollow;
|
||||||
unread: boolean;
|
unread: boolean;
|
||||||
}> = ({ notification, unread }) => (
|
}> = ({ notification, unread }) => {
|
||||||
<NotificationGroupWithStatus
|
let actions: JSX.Element | undefined;
|
||||||
type='follow'
|
let additionalContent: JSX.Element | undefined;
|
||||||
icon={PersonAddIcon}
|
|
||||||
iconId='person-add'
|
if (notification.sampleAccountIds.length === 1) {
|
||||||
accountIds={notification.sampleAccountIds}
|
// only display those if the group contains 1 account, otherwise it does not makes sense
|
||||||
timestamp={notification.latest_page_notification_at}
|
const account = notification.sampleAccountIds[0];
|
||||||
count={notification.notifications_count}
|
|
||||||
labelRenderer={labelRenderer}
|
if (account) {
|
||||||
unread={unread}
|
actions = <FollowButton accountId={notification.sampleAccountIds[0]} />;
|
||||||
/>
|
additionalContent = <FollowerCount accountId={account} />;
|
||||||
);
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<NotificationGroupWithStatus
|
||||||
|
type='follow'
|
||||||
|
icon={PersonAddIcon}
|
||||||
|
iconId='person-add'
|
||||||
|
accountIds={notification.sampleAccountIds}
|
||||||
|
timestamp={notification.latest_page_notification_at}
|
||||||
|
count={notification.notifications_count}
|
||||||
|
labelRenderer={labelRenderer}
|
||||||
|
unread={unread}
|
||||||
|
actions={actions}
|
||||||
|
additionalContent={additionalContent}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
@ -21,13 +21,27 @@ const messages = defineMessages({
|
|||||||
reject: { id: 'follow_request.reject', defaultMessage: 'Reject' },
|
reject: { id: 'follow_request.reject', defaultMessage: 'Reject' },
|
||||||
});
|
});
|
||||||
|
|
||||||
const labelRenderer: LabelRenderer = (values) => (
|
const labelRenderer: LabelRenderer = (displayedName, total) => {
|
||||||
<FormattedMessage
|
if (total === 1)
|
||||||
id='notification.follow_request'
|
return (
|
||||||
defaultMessage='{name} has requested to follow you'
|
<FormattedMessage
|
||||||
values={values}
|
id='notification.follow_request'
|
||||||
/>
|
defaultMessage='{name} has requested to follow you'
|
||||||
);
|
values={{ name: displayedName }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormattedMessage
|
||||||
|
id='notification.follow_request.name_and_others'
|
||||||
|
defaultMessage='{name} and {count, plural, one {# other} other {# others}} has requested to follow you'
|
||||||
|
values={{
|
||||||
|
name: displayedName,
|
||||||
|
count: total - 1,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export const NotificationFollowRequest: React.FC<{
|
export const NotificationFollowRequest: React.FC<{
|
||||||
notification: NotificationGroupFollowRequest;
|
notification: NotificationGroupFollowRequest;
|
||||||
@ -46,7 +60,7 @@ export const NotificationFollowRequest: React.FC<{
|
|||||||
}, [dispatch, notification.sampleAccountIds]);
|
}, [dispatch, notification.sampleAccountIds]);
|
||||||
|
|
||||||
const actions = (
|
const actions = (
|
||||||
<div className='notification-group__actions'>
|
<>
|
||||||
<IconButton
|
<IconButton
|
||||||
title={intl.formatMessage(messages.reject)}
|
title={intl.formatMessage(messages.reject)}
|
||||||
icon='times'
|
icon='times'
|
||||||
@ -59,7 +73,7 @@ export const NotificationFollowRequest: React.FC<{
|
|||||||
iconComponent={CheckIcon}
|
iconComponent={CheckIcon}
|
||||||
onClick={onAuthorize}
|
onClick={onAuthorize}
|
||||||
/>
|
/>
|
||||||
</div>
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -12,11 +12,13 @@ import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
|
|||||||
import { useAppDispatch } from 'mastodon/store';
|
import { useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
import { AvatarGroup } from './avatar_group';
|
import { AvatarGroup } from './avatar_group';
|
||||||
|
import { DisplayedName } from './displayed_name';
|
||||||
import { EmbeddedStatus } from './embedded_status';
|
import { EmbeddedStatus } from './embedded_status';
|
||||||
import { NamesList } from './names_list';
|
|
||||||
|
|
||||||
export type LabelRenderer = (
|
export type LabelRenderer = (
|
||||||
values: Record<string, React.ReactNode>,
|
displayedName: JSX.Element,
|
||||||
|
total: number,
|
||||||
|
seeMoreHref?: string,
|
||||||
) => JSX.Element;
|
) => JSX.Element;
|
||||||
|
|
||||||
export const NotificationGroupWithStatus: React.FC<{
|
export const NotificationGroupWithStatus: React.FC<{
|
||||||
@ -31,6 +33,7 @@ export const NotificationGroupWithStatus: React.FC<{
|
|||||||
labelSeeMoreHref?: string;
|
labelSeeMoreHref?: string;
|
||||||
type: string;
|
type: string;
|
||||||
unread: boolean;
|
unread: boolean;
|
||||||
|
additionalContent?: JSX.Element;
|
||||||
}> = ({
|
}> = ({
|
||||||
icon,
|
icon,
|
||||||
iconId,
|
iconId,
|
||||||
@ -43,20 +46,17 @@ export const NotificationGroupWithStatus: React.FC<{
|
|||||||
labelSeeMoreHref,
|
labelSeeMoreHref,
|
||||||
type,
|
type,
|
||||||
unread,
|
unread,
|
||||||
|
additionalContent,
|
||||||
}) => {
|
}) => {
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
const label = useMemo(
|
const label = useMemo(
|
||||||
() =>
|
() =>
|
||||||
labelRenderer({
|
labelRenderer(
|
||||||
name: (
|
<DisplayedName accountIds={accountIds} />,
|
||||||
<NamesList
|
count,
|
||||||
accountIds={accountIds}
|
labelSeeMoreHref,
|
||||||
total={count}
|
),
|
||||||
seeMoreHref={labelSeeMoreHref}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
}),
|
|
||||||
[labelRenderer, accountIds, count, labelSeeMoreHref],
|
[labelRenderer, accountIds, count, labelSeeMoreHref],
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -92,7 +92,9 @@ export const NotificationGroupWithStatus: React.FC<{
|
|||||||
<div className='notification-group__main__header__wrapper'>
|
<div className='notification-group__main__header__wrapper'>
|
||||||
<AvatarGroup accountIds={accountIds} />
|
<AvatarGroup accountIds={accountIds} />
|
||||||
|
|
||||||
{actions}
|
{actions && (
|
||||||
|
<div className='notification-group__actions'>{actions}</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className='notification-group__main__header__label'>
|
<div className='notification-group__main__header__label'>
|
||||||
@ -106,6 +108,12 @@ export const NotificationGroupWithStatus: React.FC<{
|
|||||||
<EmbeddedStatus statusId={statusId} />
|
<EmbeddedStatus statusId={statusId} />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{additionalContent && (
|
||||||
|
<div className='notification-group__main__additional-content'>
|
||||||
|
{additionalContent}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</HotKeys>
|
</HotKeys>
|
||||||
|
@ -37,7 +37,11 @@ export const NotificationMention: React.FC<{
|
|||||||
unread: boolean;
|
unread: boolean;
|
||||||
}> = ({ notification, unread }) => {
|
}> = ({ notification, unread }) => {
|
||||||
const [isDirect, isReply] = useAppSelector((state) => {
|
const [isDirect, isReply] = useAppSelector((state) => {
|
||||||
const status = state.statuses.get(notification.statusId) as Status;
|
const status = state.statuses.get(notification.statusId) as
|
||||||
|
| Status
|
||||||
|
| undefined;
|
||||||
|
|
||||||
|
if (!status) return [false, false] as const;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
status.get('visibility') === 'direct',
|
status.get('visibility') === 'direct',
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
|
||||||
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
|
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
|
||||||
import type { NotificationGroupReblog } from 'mastodon/models/notification_group';
|
import type { NotificationGroupReblog } from 'mastodon/models/notification_group';
|
||||||
import { useAppSelector } from 'mastodon/store';
|
import { useAppSelector } from 'mastodon/store';
|
||||||
@ -7,13 +9,29 @@ import { useAppSelector } from 'mastodon/store';
|
|||||||
import type { LabelRenderer } from './notification_group_with_status';
|
import type { LabelRenderer } from './notification_group_with_status';
|
||||||
import { NotificationGroupWithStatus } from './notification_group_with_status';
|
import { NotificationGroupWithStatus } from './notification_group_with_status';
|
||||||
|
|
||||||
const labelRenderer: LabelRenderer = (values) => (
|
const labelRenderer: LabelRenderer = (displayedName, total, seeMoreHref) => {
|
||||||
<FormattedMessage
|
if (total === 1)
|
||||||
id='notification.reblog'
|
return (
|
||||||
defaultMessage='{name} boosted your status'
|
<FormattedMessage
|
||||||
values={values}
|
id='notification.reblog'
|
||||||
/>
|
defaultMessage='{name} boosted your status'
|
||||||
);
|
values={{ name: displayedName }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormattedMessage
|
||||||
|
id='notification.reblog.name_and_others_with_link'
|
||||||
|
defaultMessage='{name} and <a>{count, plural, one {# other} other {# others}}</a> boosted your post'
|
||||||
|
values={{
|
||||||
|
name: displayedName,
|
||||||
|
count: total - 1,
|
||||||
|
a: (chunks) =>
|
||||||
|
seeMoreHref ? <Link to={seeMoreHref}>{chunks}</Link> : chunks,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
export const NotificationReblog: React.FC<{
|
export const NotificationReblog: React.FC<{
|
||||||
notification: NotificationGroupReblog;
|
notification: NotificationGroupReblog;
|
||||||
|
@ -6,11 +6,11 @@ import type { NotificationGroupStatus } from 'mastodon/models/notification_group
|
|||||||
import type { LabelRenderer } from './notification_group_with_status';
|
import type { LabelRenderer } from './notification_group_with_status';
|
||||||
import { NotificationWithStatus } from './notification_with_status';
|
import { NotificationWithStatus } from './notification_with_status';
|
||||||
|
|
||||||
const labelRenderer: LabelRenderer = (values) => (
|
const labelRenderer: LabelRenderer = (displayedName) => (
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='notification.status'
|
id='notification.status'
|
||||||
defaultMessage='{name} just posted'
|
defaultMessage='{name} just posted'
|
||||||
values={values}
|
values={{ name: displayedName }}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -6,11 +6,11 @@ import type { NotificationGroupUpdate } from 'mastodon/models/notification_group
|
|||||||
import type { LabelRenderer } from './notification_group_with_status';
|
import type { LabelRenderer } from './notification_group_with_status';
|
||||||
import { NotificationWithStatus } from './notification_with_status';
|
import { NotificationWithStatus } from './notification_with_status';
|
||||||
|
|
||||||
const labelRenderer: LabelRenderer = (values) => (
|
const labelRenderer: LabelRenderer = (displayedName) => (
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='notification.update'
|
id='notification.update'
|
||||||
defaultMessage='{name} edited a post'
|
defaultMessage='{name} edited a post'
|
||||||
values={values}
|
values={{ name: displayedName }}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ import { Icon } from 'mastodon/components/icon';
|
|||||||
import Status from 'mastodon/containers/status_container';
|
import Status from 'mastodon/containers/status_container';
|
||||||
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
import { NamesList } from './names_list';
|
import { DisplayedName } from './displayed_name';
|
||||||
import type { LabelRenderer } from './notification_group_with_status';
|
import type { LabelRenderer } from './notification_group_with_status';
|
||||||
|
|
||||||
export const NotificationWithStatus: React.FC<{
|
export const NotificationWithStatus: React.FC<{
|
||||||
@ -23,7 +23,7 @@ export const NotificationWithStatus: React.FC<{
|
|||||||
icon: IconProp;
|
icon: IconProp;
|
||||||
iconId: string;
|
iconId: string;
|
||||||
accountIds: string[];
|
accountIds: string[];
|
||||||
statusId: string;
|
statusId: string | undefined;
|
||||||
count: number;
|
count: number;
|
||||||
labelRenderer: LabelRenderer;
|
labelRenderer: LabelRenderer;
|
||||||
unread: boolean;
|
unread: boolean;
|
||||||
@ -40,10 +40,7 @@ export const NotificationWithStatus: React.FC<{
|
|||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
const label = useMemo(
|
const label = useMemo(
|
||||||
() =>
|
() => labelRenderer(<DisplayedName accountIds={accountIds} />, count),
|
||||||
labelRenderer({
|
|
||||||
name: <NamesList accountIds={accountIds} total={count} />,
|
|
||||||
}),
|
|
||||||
[labelRenderer, accountIds, count],
|
[labelRenderer, accountIds, count],
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -76,6 +73,8 @@ export const NotificationWithStatus: React.FC<{
|
|||||||
[dispatch, statusId],
|
[dispatch, statusId],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (!statusId) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HotKeys handlers={handlers}>
|
<HotKeys handlers={handlers}>
|
||||||
<div
|
<div
|
||||||
|
@ -81,7 +81,11 @@ export const Notifications: React.FC<{
|
|||||||
|
|
||||||
const anyPendingNotification = useAppSelector(selectAnyPendingNotification);
|
const anyPendingNotification = useAppSelector(selectAnyPendingNotification);
|
||||||
|
|
||||||
const isUnread = unreadNotificationsCount > 0;
|
const needsReload = useAppSelector(
|
||||||
|
(state) => state.notificationGroups.mergedNotifications === 'needs-reload',
|
||||||
|
);
|
||||||
|
|
||||||
|
const isUnread = unreadNotificationsCount > 0 || needsReload;
|
||||||
|
|
||||||
const canMarkAsRead =
|
const canMarkAsRead =
|
||||||
useAppSelector(selectSettingsNotificationsShowUnread) &&
|
useAppSelector(selectSettingsNotificationsShowUnread) &&
|
||||||
@ -118,11 +122,11 @@ export const Notifications: React.FC<{
|
|||||||
|
|
||||||
// Keep track of mounted components for unread notification handling
|
// Keep track of mounted components for unread notification handling
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(mountNotifications());
|
void dispatch(mountNotifications());
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
dispatch(unmountNotifications());
|
dispatch(unmountNotifications());
|
||||||
dispatch(updateScrollPosition({ top: false }));
|
void dispatch(updateScrollPosition({ top: false }));
|
||||||
};
|
};
|
||||||
}, [dispatch]);
|
}, [dispatch]);
|
||||||
|
|
||||||
@ -147,11 +151,11 @@ export const Notifications: React.FC<{
|
|||||||
}, [dispatch]);
|
}, [dispatch]);
|
||||||
|
|
||||||
const handleScrollToTop = useDebouncedCallback(() => {
|
const handleScrollToTop = useDebouncedCallback(() => {
|
||||||
dispatch(updateScrollPosition({ top: true }));
|
void dispatch(updateScrollPosition({ top: true }));
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
const handleScroll = useDebouncedCallback(() => {
|
const handleScroll = useDebouncedCallback(() => {
|
||||||
dispatch(updateScrollPosition({ top: false }));
|
void dispatch(updateScrollPosition({ top: false }));
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import Notifications from 'mastodon/features/notifications';
|
import Notifications from 'mastodon/features/notifications';
|
||||||
import Notifications_v2 from 'mastodon/features/notifications_v2';
|
import Notifications_v2 from 'mastodon/features/notifications_v2';
|
||||||
|
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
|
||||||
import { useAppSelector } from 'mastodon/store';
|
import { useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
export const NotificationsWrapper = (props) => {
|
export const NotificationsWrapper = (props) => {
|
||||||
const optedInGroupedNotifications = useAppSelector((state) => state.getIn(['settings', 'notifications', 'groupingBeta'], false));
|
const optedInGroupedNotifications = useAppSelector(selectUseGroupedNotifications);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
optedInGroupedNotifications ? <Notifications_v2 {...props} /> : <Notifications {...props} />
|
optedInGroupedNotifications ? <Notifications_v2 {...props} /> : <Notifications {...props} />
|
||||||
|
@ -10,6 +10,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
|
|||||||
|
|
||||||
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
|
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
|
||||||
import { AnimatedNumber } from 'mastodon/components/animated_number';
|
import { AnimatedNumber } from 'mastodon/components/animated_number';
|
||||||
|
import { ContentWarning } from 'mastodon/components/content_warning';
|
||||||
import EditedTimestamp from 'mastodon/components/edited_timestamp';
|
import EditedTimestamp from 'mastodon/components/edited_timestamp';
|
||||||
import { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar';
|
import { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
@ -277,17 +278,20 @@ class DetailedStatus extends ImmutablePureComponent {
|
|||||||
<DisplayName account={status.get('account')} localDomain={this.props.domain} />
|
<DisplayName account={status.get('account')} localDomain={this.props.domain} />
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<StatusContent
|
{status.get('spoiler_text').length > 0 && <ContentWarning text={status.getIn(['translation', 'spoilerHtml']) || status.get('spoilerHtml')} expanded={expanded} onClick={this.handleExpandedToggle} />}
|
||||||
status={status}
|
|
||||||
expanded={!status.get('hidden')}
|
|
||||||
onExpandedToggle={this.handleExpandedToggle}
|
|
||||||
onTranslate={this.handleTranslate}
|
|
||||||
{...statusContentProps}
|
|
||||||
/>
|
|
||||||
|
|
||||||
{media}
|
{expanded && (
|
||||||
|
<>
|
||||||
|
<StatusContent
|
||||||
|
status={status}
|
||||||
|
onTranslate={this.handleTranslate}
|
||||||
|
{...statusContentProps}
|
||||||
|
/>
|
||||||
|
|
||||||
{expanded && hashtagBar}
|
{media}
|
||||||
|
{hashtagBar}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
<div className='detailed-status__meta'>
|
<div className='detailed-status__meta'>
|
||||||
<div className='detailed-status__meta__line'>
|
<div className='detailed-status__meta__line'>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
import { defineMessages, injectIntl } from 'react-intl';
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
@ -18,6 +18,7 @@ import VisibilityIcon from '@/material-icons/400-24px/visibility.svg?react';
|
|||||||
import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react';
|
import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
||||||
|
import { TimelineHint } from 'mastodon/components/timeline_hint';
|
||||||
import ScrollContainer from 'mastodon/containers/scroll_container';
|
import ScrollContainer from 'mastodon/containers/scroll_container';
|
||||||
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
|
import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';
|
||||||
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
||||||
@ -598,7 +599,7 @@ class Status extends ImmutablePureComponent {
|
|||||||
};
|
};
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
let ancestors, descendants;
|
let ancestors, descendants, remoteHint;
|
||||||
const { isLoading, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props;
|
const { isLoading, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props;
|
||||||
const { fullscreen } = this.state;
|
const { fullscreen } = this.state;
|
||||||
|
|
||||||
@ -627,6 +628,17 @@ class Status extends ImmutablePureComponent {
|
|||||||
const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;
|
const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;
|
||||||
const isIndexable = !status.getIn(['account', 'noindex']);
|
const isIndexable = !status.getIn(['account', 'noindex']);
|
||||||
|
|
||||||
|
if (!isLocal) {
|
||||||
|
remoteHint = (
|
||||||
|
<TimelineHint
|
||||||
|
className={classNames(!!descendants && 'timeline-hint--with-descendants')}
|
||||||
|
url={status.get('url')}
|
||||||
|
message={<FormattedMessage id='hints.threads.replies_may_be_missing' defaultMessage='Replies from other servers may be missing.' />}
|
||||||
|
label={<FormattedMessage id='hints.threads.see_more' defaultMessage='See more replies on {domain}' values={{ domain: <strong>{status.getIn(['account', 'acct']).split('@')[1]}</strong> }} />}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const handlers = {
|
const handlers = {
|
||||||
moveUp: this.handleHotkeyMoveUp,
|
moveUp: this.handleHotkeyMoveUp,
|
||||||
moveDown: this.handleHotkeyMoveDown,
|
moveDown: this.handleHotkeyMoveDown,
|
||||||
@ -695,6 +707,7 @@ class Status extends ImmutablePureComponent {
|
|||||||
</HotKeys>
|
</HotKeys>
|
||||||
|
|
||||||
{descendants}
|
{descendants}
|
||||||
|
{remoteHint}
|
||||||
</div>
|
</div>
|
||||||
</ScrollContainer>
|
</ScrollContainer>
|
||||||
|
|
||||||
|
@ -1,28 +1,17 @@
|
|||||||
import type { MouseEventHandler } from 'react';
|
|
||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
|
|
||||||
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
|
||||||
|
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useHistory } from 'react-router';
|
|
||||||
|
|
||||||
import type Immutable from 'immutable';
|
|
||||||
|
|
||||||
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
|
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
|
||||||
import AttachmentList from 'mastodon/components/attachment_list';
|
import { Button } from 'mastodon/components/button';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import { VisibilityIcon } from 'mastodon/components/visibility_icon';
|
|
||||||
import PrivacyDropdown from 'mastodon/features/compose/components/privacy_dropdown';
|
import PrivacyDropdown from 'mastodon/features/compose/components/privacy_dropdown';
|
||||||
import type { Account } from 'mastodon/models/account';
|
import { EmbeddedStatus } from 'mastodon/features/notifications_v2/components/embedded_status';
|
||||||
import type { Status, StatusVisibility } from 'mastodon/models/status';
|
import type { Status, StatusVisibility } from 'mastodon/models/status';
|
||||||
import { useAppSelector } from 'mastodon/store';
|
import { useAppSelector } from 'mastodon/store';
|
||||||
|
|
||||||
import { Avatar } from '../../../components/avatar';
|
|
||||||
import { Button } from '../../../components/button';
|
|
||||||
import { DisplayName } from '../../../components/display_name';
|
|
||||||
import { RelativeTimestamp } from '../../../components/relative_timestamp';
|
|
||||||
import StatusContent from '../../../components/status_content';
|
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
cancel_reblog: {
|
cancel_reblog: {
|
||||||
id: 'status.cancel_reblog_private',
|
id: 'status.cancel_reblog_private',
|
||||||
@ -37,18 +26,17 @@ export const BoostModal: React.FC<{
|
|||||||
onReblog: (status: Status, privacy: StatusVisibility) => void;
|
onReblog: (status: Status, privacy: StatusVisibility) => void;
|
||||||
}> = ({ status, onReblog, onClose }) => {
|
}> = ({ status, onReblog, onClose }) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const history = useHistory();
|
|
||||||
|
|
||||||
const default_privacy = useAppSelector(
|
const defaultPrivacy = useAppSelector(
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
||||||
(state) => state.compose.get('default_privacy') as StatusVisibility,
|
(state) => state.compose.get('default_privacy') as StatusVisibility,
|
||||||
);
|
);
|
||||||
|
|
||||||
const account = status.get('account') as Account;
|
const statusId = status.get('id') as string;
|
||||||
const statusVisibility = status.get('visibility') as StatusVisibility;
|
const statusVisibility = status.get('visibility') as StatusVisibility;
|
||||||
|
|
||||||
const [privacy, setPrivacy] = useState<StatusVisibility>(
|
const [privacy, setPrivacy] = useState<StatusVisibility>(
|
||||||
statusVisibility === 'private' ? 'private' : default_privacy,
|
statusVisibility === 'private' ? 'private' : defaultPrivacy,
|
||||||
);
|
);
|
||||||
|
|
||||||
const onPrivacyChange = useCallback((value: StatusVisibility) => {
|
const onPrivacyChange = useCallback((value: StatusVisibility) => {
|
||||||
@ -60,20 +48,9 @@ export const BoostModal: React.FC<{
|
|||||||
onClose();
|
onClose();
|
||||||
}, [onClose, onReblog, status, privacy]);
|
}, [onClose, onReblog, status, privacy]);
|
||||||
|
|
||||||
const handleAccountClick = useCallback<MouseEventHandler>(
|
const handleCancel = useCallback(() => {
|
||||||
(e) => {
|
onClose();
|
||||||
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
|
}, [onClose]);
|
||||||
e.preventDefault();
|
|
||||||
onClose();
|
|
||||||
history.push(`/@${account.acct}`);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[history, onClose, account],
|
|
||||||
);
|
|
||||||
|
|
||||||
const buttonText = status.get('reblogged')
|
|
||||||
? messages.cancel_reblog
|
|
||||||
: messages.reblog;
|
|
||||||
|
|
||||||
const findContainer = useCallback(
|
const findContainer = useCallback(
|
||||||
() => document.getElementsByClassName('modal-root__container')[0],
|
() => document.getElementsByClassName('modal-root__container')[0],
|
||||||
@ -81,81 +58,78 @@ export const BoostModal: React.FC<{
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='modal-root__modal boost-modal'>
|
<div className='modal-root__modal safety-action-modal'>
|
||||||
<div className='boost-modal__container'>
|
<div className='safety-action-modal__top'>
|
||||||
<div
|
<div className='safety-action-modal__header'>
|
||||||
className={classNames(
|
<div className='safety-action-modal__header__icon'>
|
||||||
'status',
|
<Icon icon={RepeatIcon} id='retweet' />
|
||||||
`status-${statusVisibility}`,
|
|
||||||
'light',
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
<div className='status__info'>
|
|
||||||
<a
|
|
||||||
href={`/@${account.acct}/${status.get('id') as string}`}
|
|
||||||
className='status__relative-time'
|
|
||||||
target='_blank'
|
|
||||||
rel='noopener noreferrer'
|
|
||||||
>
|
|
||||||
<span className='status__visibility-icon'>
|
|
||||||
<VisibilityIcon visibility={statusVisibility} />
|
|
||||||
</span>
|
|
||||||
<RelativeTimestamp
|
|
||||||
timestamp={status.get('created_at') as string}
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a
|
|
||||||
onClick={handleAccountClick}
|
|
||||||
href={`/@${account.acct}`}
|
|
||||||
className='status__display-name'
|
|
||||||
>
|
|
||||||
<div className='status__avatar'>
|
|
||||||
<Avatar account={account} size={48} />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<DisplayName account={account} />
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* @ts-expect-error Expected until StatusContent is typed */}
|
<div>
|
||||||
<StatusContent status={status} />
|
<h1>
|
||||||
|
{status.get('reblogged') ? (
|
||||||
|
<FormattedMessage
|
||||||
|
id='boost_modal.undo_reblog'
|
||||||
|
defaultMessage='Unboost post?'
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<FormattedMessage
|
||||||
|
id='boost_modal.reblog'
|
||||||
|
defaultMessage='Boost post?'
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
<FormattedMessage
|
||||||
|
id='boost_modal.combo'
|
||||||
|
defaultMessage='You can press {combo} to skip this next time'
|
||||||
|
values={{
|
||||||
|
combo: (
|
||||||
|
<span className='hotkey-combination'>
|
||||||
|
<kbd>Shift</kbd>+<Icon id='retweet' icon={RepeatIcon} />
|
||||||
|
</span>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{(status.get('media_attachments') as Immutable.List<unknown>).size >
|
<div className='safety-action-modal__status'>
|
||||||
0 && (
|
<EmbeddedStatus statusId={statusId} />
|
||||||
<AttachmentList compact media={status.get('media_attachments')} />
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className='boost-modal__action-bar'>
|
<div className={classNames('safety-action-modal__bottom')}>
|
||||||
<div>
|
<div className='safety-action-modal__actions'>
|
||||||
<FormattedMessage
|
{!status.get('reblogged') && (
|
||||||
id='boost_modal.combo'
|
<PrivacyDropdown
|
||||||
defaultMessage='You can press {combo} to skip this next time'
|
noDirect
|
||||||
values={{
|
value={privacy}
|
||||||
combo: (
|
container={findContainer}
|
||||||
<span>
|
onChange={onPrivacyChange}
|
||||||
Shift + <Icon id='retweet' icon={RepeatIcon} />
|
disabled={statusVisibility === 'private'}
|
||||||
</span>
|
/>
|
||||||
),
|
)}
|
||||||
}}
|
|
||||||
|
<div className='spacer' />
|
||||||
|
|
||||||
|
<button onClick={handleCancel} className='link-button'>
|
||||||
|
<FormattedMessage
|
||||||
|
id='confirmation_modal.cancel'
|
||||||
|
defaultMessage='Cancel'
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
onClick={handleReblog}
|
||||||
|
text={intl.formatMessage(
|
||||||
|
status.get('reblogged')
|
||||||
|
? messages.cancel_reblog
|
||||||
|
: messages.reblog,
|
||||||
|
)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{statusVisibility !== 'private' && !status.get('reblogged') && (
|
|
||||||
<PrivacyDropdown
|
|
||||||
noDirect
|
|
||||||
value={privacy}
|
|
||||||
container={findContainer}
|
|
||||||
onChange={onPrivacyChange}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
<Button
|
|
||||||
text={intl.formatMessage(buttonText)}
|
|
||||||
onClick={handleReblog}
|
|
||||||
// eslint-disable-next-line jsx-a11y/no-autofocus
|
|
||||||
autoFocus
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -25,7 +25,7 @@ export const ConfirmLogOutModal: React.FC<BaseConfirmationModalProps> = ({
|
|||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
const onConfirm = useCallback(() => {
|
const onConfirm = useCallback(() => {
|
||||||
logOut();
|
void logOut();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -60,7 +60,7 @@ export const IgnoreNotificationsModal = ({ filterType }) => {
|
|||||||
<div className='safety-action-modal__bullet-points'>
|
<div className='safety-action-modal__bullet-points'>
|
||||||
<div>
|
<div>
|
||||||
<div className='safety-action-modal__bullet-points__icon'><Icon icon={InventoryIcon} /></div>
|
<div className='safety-action-modal__bullet-points__icon'><Icon icon={InventoryIcon} /></div>
|
||||||
<div><FormattedMessage id='ignore_notifications_modal.filter_to_review_separately' defaultMessage='You can review filtered notifications speparately' /></div>
|
<div><FormattedMessage id='ignore_notifications_modal.filter_to_review_separately' defaultMessage='You can review filtered notifications separately' /></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
@ -7,16 +7,17 @@ import { Link } from 'react-router-dom';
|
|||||||
|
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
|
|
||||||
|
|
||||||
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
|
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
|
||||||
import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
|
import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';
|
||||||
import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react';
|
import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react';
|
||||||
import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react';
|
import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react';
|
||||||
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
|
import ExploreIcon from '@/material-icons/400-24px/explore.svg?react';
|
||||||
|
import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react';
|
||||||
import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react';
|
import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react';
|
||||||
import HomeIcon from '@/material-icons/400-24px/home.svg?react';
|
import HomeIcon from '@/material-icons/400-24px/home.svg?react';
|
||||||
import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react';
|
import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react';
|
||||||
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
|
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
|
||||||
|
import AdministrationIcon from '@/material-icons/400-24px/manufacturing.svg?react';
|
||||||
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||||
import NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react';
|
import NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react';
|
||||||
import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react';
|
import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react';
|
||||||
@ -34,7 +35,9 @@ import { NavigationPortal } from 'mastodon/components/navigation_portal';
|
|||||||
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
||||||
import { timelinePreview, trendsEnabled } from 'mastodon/initial_state';
|
import { timelinePreview, trendsEnabled } from 'mastodon/initial_state';
|
||||||
import { transientSingleColumn } from 'mastodon/is_mobile';
|
import { transientSingleColumn } from 'mastodon/is_mobile';
|
||||||
|
import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions';
|
||||||
import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications';
|
import { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications';
|
||||||
|
import { selectUseGroupedNotifications } from 'mastodon/selectors/settings';
|
||||||
|
|
||||||
import ColumnLink from './column_link';
|
import ColumnLink from './column_link';
|
||||||
import DisabledAccountBanner from './disabled_account_banner';
|
import DisabledAccountBanner from './disabled_account_banner';
|
||||||
@ -51,6 +54,8 @@ const messages = defineMessages({
|
|||||||
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
|
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
|
||||||
lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
|
lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
|
||||||
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
|
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
|
||||||
|
administration: { id: 'navigation_bar.administration', defaultMessage: 'Administration' },
|
||||||
|
moderation: { id: 'navigation_bar.moderation', defaultMessage: 'Moderation' },
|
||||||
followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' },
|
followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' },
|
||||||
about: { id: 'navigation_bar.about', defaultMessage: 'About' },
|
about: { id: 'navigation_bar.about', defaultMessage: 'About' },
|
||||||
search: { id: 'navigation_bar.search', defaultMessage: 'Search' },
|
search: { id: 'navigation_bar.search', defaultMessage: 'Search' },
|
||||||
@ -60,7 +65,7 @@ const messages = defineMessages({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const NotificationsLink = () => {
|
const NotificationsLink = () => {
|
||||||
const optedInGroupedNotifications = useSelector((state) => state.getIn(['settings', 'notifications', 'groupingBeta'], false));
|
const optedInGroupedNotifications = useSelector(selectUseGroupedNotifications);
|
||||||
const count = useSelector(state => state.getIn(['notifications', 'unread']));
|
const count = useSelector(state => state.getIn(['notifications', 'unread']));
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
|
|
||||||
@ -114,7 +119,7 @@ class NavigationPanel extends Component {
|
|||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { intl } = this.props;
|
const { intl } = this.props;
|
||||||
const { signedIn, disabledAccountId } = this.props.identity;
|
const { signedIn, disabledAccountId, permissions } = this.props.identity;
|
||||||
|
|
||||||
let banner = undefined;
|
let banner = undefined;
|
||||||
|
|
||||||
@ -176,6 +181,9 @@ class NavigationPanel extends Component {
|
|||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<ColumnLink transparent href='/settings/preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} />
|
<ColumnLink transparent href='/settings/preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} />
|
||||||
|
|
||||||
|
{canManageReports(permissions) && <ColumnLink transparent href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />}
|
||||||
|
{canViewAdminDashboard(permissions) && <ColumnLink transparent href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ const mapStateToProps = state => ({
|
|||||||
isComposing: state.getIn(['compose', 'is_composing']),
|
isComposing: state.getIn(['compose', 'is_composing']),
|
||||||
hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0,
|
hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0,
|
||||||
hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,
|
hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,
|
||||||
canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4,
|
canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < state.getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments']),
|
||||||
firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,
|
firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,
|
||||||
username: state.getIn(['accounts', me, 'username']),
|
username: state.getIn(['accounts', me, 'username']),
|
||||||
});
|
});
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
* @property {boolean=} use_pending_items
|
* @property {boolean=} use_pending_items
|
||||||
* @property {string} version
|
* @property {string} version
|
||||||
* @property {string} sso_redirect
|
* @property {string} sso_redirect
|
||||||
|
* @property {boolean} force_grouped_notifications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -118,6 +119,7 @@ export const criticalUpdatesPending = initialState?.critical_updates_pending;
|
|||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
export const statusPageUrl = getMeta('status_page_url');
|
export const statusPageUrl = getMeta('status_page_url');
|
||||||
export const sso_redirect = getMeta('sso_redirect');
|
export const sso_redirect = getMeta('sso_redirect');
|
||||||
|
export const forceGroupedNotifications = getMeta('force_grouped_notifications');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {string | undefined}
|
* @returns {string | undefined}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
"account.block_domain": "Blokkeer domein {domain}",
|
"account.block_domain": "Blokkeer domein {domain}",
|
||||||
"account.block_short": "Blokkeer",
|
"account.block_short": "Blokkeer",
|
||||||
"account.blocked": "Geblokkeer",
|
"account.blocked": "Geblokkeer",
|
||||||
"account.browse_more_on_origin_server": "Verken die oorspronklike profiel",
|
|
||||||
"account.cancel_follow_request": "Herroep volgversoek",
|
"account.cancel_follow_request": "Herroep volgversoek",
|
||||||
"account.disable_notifications": "Hou op om my van @{name} se plasings te laat weet",
|
"account.disable_notifications": "Hou op om my van @{name} se plasings te laat weet",
|
||||||
"account.domain_blocked": "Domein geblokkeer",
|
"account.domain_blocked": "Domein geblokkeer",
|
||||||
@ -308,7 +307,6 @@
|
|||||||
"status.translated_from_with": "Uit {lang} vertaal deur {provider}",
|
"status.translated_from_with": "Uit {lang} vertaal deur {provider}",
|
||||||
"tabs_bar.home": "Tuis",
|
"tabs_bar.home": "Tuis",
|
||||||
"tabs_bar.notifications": "Kennisgewings",
|
"tabs_bar.notifications": "Kennisgewings",
|
||||||
"timeline_hint.resources.statuses": "Ouer plasings",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
||||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||||
"upload_form.description": "Describe for the visually impaired",
|
"upload_form.description": "Describe for the visually impaired",
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
"account.block": "Blocar a @{name}",
|
"account.block": "Blocar a @{name}",
|
||||||
"account.block_domain": "Blocar dominio {domain}",
|
"account.block_domain": "Blocar dominio {domain}",
|
||||||
"account.blocked": "Blocau",
|
"account.blocked": "Blocau",
|
||||||
"account.browse_more_on_origin_server": "Veyer mas en o perfil orichinal",
|
|
||||||
"account.cancel_follow_request": "Retirar solicitut de seguimiento",
|
"account.cancel_follow_request": "Retirar solicitut de seguimiento",
|
||||||
"account.disable_notifications": "Deixar de notificar-me quan @{name} publique bella cosa",
|
"account.disable_notifications": "Deixar de notificar-me quan @{name} publique bella cosa",
|
||||||
"account.domain_blocked": "Dominio blocau",
|
"account.domain_blocked": "Dominio blocau",
|
||||||
@ -336,7 +335,6 @@
|
|||||||
"notification.admin.sign_up": "{name} se rechistró",
|
"notification.admin.sign_up": "{name} se rechistró",
|
||||||
"notification.follow": "{name} t'empecipió a seguir",
|
"notification.follow": "{name} t'empecipió a seguir",
|
||||||
"notification.follow_request": "{name} ha solicitau seguir-te",
|
"notification.follow_request": "{name} ha solicitau seguir-te",
|
||||||
"notification.mention": "{name} t'ha mencionau",
|
|
||||||
"notification.own_poll": "La tuya enqüesta ha rematau",
|
"notification.own_poll": "La tuya enqüesta ha rematau",
|
||||||
"notification.reblog": "{name} ha retutau la tuya publicación",
|
"notification.reblog": "{name} ha retutau la tuya publicación",
|
||||||
"notification.status": "{name} acaba de publicar",
|
"notification.status": "{name} acaba de publicar",
|
||||||
@ -485,8 +483,6 @@
|
|||||||
"status.edited_x_times": "Editau {count, plural, one {{count} vez} other {{count} veces}}",
|
"status.edited_x_times": "Editau {count, plural, one {{count} vez} other {{count} veces}}",
|
||||||
"status.embed": "Incrustado",
|
"status.embed": "Incrustado",
|
||||||
"status.filter": "Filtrar esta publicación",
|
"status.filter": "Filtrar esta publicación",
|
||||||
"status.filtered": "Filtrau",
|
|
||||||
"status.hide": "Amagar la publicación",
|
|
||||||
"status.history.created": "{name} creyó {date}",
|
"status.history.created": "{name} creyó {date}",
|
||||||
"status.history.edited": "{name} editó {date}",
|
"status.history.edited": "{name} editó {date}",
|
||||||
"status.load_more": "Cargar mas",
|
"status.load_more": "Cargar mas",
|
||||||
@ -511,10 +507,7 @@
|
|||||||
"status.report": "Denunciar €{name}",
|
"status.report": "Denunciar €{name}",
|
||||||
"status.sensitive_warning": "Conteniu sensible",
|
"status.sensitive_warning": "Conteniu sensible",
|
||||||
"status.share": "Compartir",
|
"status.share": "Compartir",
|
||||||
"status.show_filter_reason": "Amostrar de totz modos",
|
|
||||||
"status.show_less": "Amostrar menos",
|
|
||||||
"status.show_less_all": "Amostrar menos pa tot",
|
"status.show_less_all": "Amostrar menos pa tot",
|
||||||
"status.show_more": "Amostrar mas",
|
|
||||||
"status.show_more_all": "Amostrar mas pa tot",
|
"status.show_more_all": "Amostrar mas pa tot",
|
||||||
"status.show_original": "Amostrar orichinal",
|
"status.show_original": "Amostrar orichinal",
|
||||||
"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 {# attachments}}",
|
||||||
@ -532,10 +525,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# menuto restante} other {# menutos restantes}}",
|
"time_remaining.minutes": "{number, plural, one {# menuto restante} other {# menutos restantes}}",
|
||||||
"time_remaining.moments": "Momentos restantes",
|
"time_remaining.moments": "Momentos restantes",
|
||||||
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
|
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} d'atros servidors no s'amuestran.",
|
|
||||||
"timeline_hint.resources.followers": "Seguidores",
|
|
||||||
"timeline_hint.resources.follows": "Seguius",
|
|
||||||
"timeline_hint.resources.statuses": "Publicacions mas antigas",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en os zaguers {days, plural, one {días} other {{days} días}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en os zaguers {days, plural, one {días} other {{days} días}}",
|
||||||
"trends.trending_now": "Tendencia agora",
|
"trends.trending_now": "Tendencia agora",
|
||||||
"ui.beforeunload": "Lo tuyo borrador se perderá si sales de Mastodon.",
|
"ui.beforeunload": "Lo tuyo borrador se perderá si sales de Mastodon.",
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
"about.not_available": "لم يتم توفير هذه المعلومات على هذا الخادم.",
|
"about.not_available": "لم يتم توفير هذه المعلومات على هذا الخادم.",
|
||||||
"about.powered_by": "شبكة اجتماعية لامركزية مدعومة من {mastodon}",
|
"about.powered_by": "شبكة اجتماعية لامركزية مدعومة من {mastodon}",
|
||||||
"about.rules": "قواعد الخادم",
|
"about.rules": "قواعد الخادم",
|
||||||
|
"account.account_note_header": "ملاحظة شخصية",
|
||||||
"account.add_or_remove_from_list": "الإضافة أو الإزالة من القائمة",
|
"account.add_or_remove_from_list": "الإضافة أو الإزالة من القائمة",
|
||||||
"account.badges.bot": "آلي",
|
"account.badges.bot": "آلي",
|
||||||
"account.badges.group": "فريق",
|
"account.badges.group": "فريق",
|
||||||
@ -18,7 +19,6 @@
|
|||||||
"account.block_domain": "حظر اسم النِّطاق {domain}",
|
"account.block_domain": "حظر اسم النِّطاق {domain}",
|
||||||
"account.block_short": "حظر",
|
"account.block_short": "حظر",
|
||||||
"account.blocked": "محظور",
|
"account.blocked": "محظور",
|
||||||
"account.browse_more_on_origin_server": "تصفح المزيد في الملف الشخصي الأصلي",
|
|
||||||
"account.cancel_follow_request": "إلغاء طلب المتابعة",
|
"account.cancel_follow_request": "إلغاء طلب المتابعة",
|
||||||
"account.copy": "نسخ الرابط إلى الملف الشخصي",
|
"account.copy": "نسخ الرابط إلى الملف الشخصي",
|
||||||
"account.direct": "إشارة خاصة لـ @{name}",
|
"account.direct": "إشارة خاصة لـ @{name}",
|
||||||
@ -31,7 +31,7 @@
|
|||||||
"account.featured_tags.last_status_never": "لا توجد رسائل",
|
"account.featured_tags.last_status_never": "لا توجد رسائل",
|
||||||
"account.featured_tags.title": "وسوم {name} المميَّزة",
|
"account.featured_tags.title": "وسوم {name} المميَّزة",
|
||||||
"account.follow": "متابعة",
|
"account.follow": "متابعة",
|
||||||
"account.follow_back": "تابعهم بالمثل",
|
"account.follow_back": "تابعه بالمثل",
|
||||||
"account.followers": "مُتابِعون",
|
"account.followers": "مُتابِعون",
|
||||||
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
|
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
|
||||||
"account.followers_counter": "{count, plural, zero {}one {{counter} متابع} two {{counter} متابعين} few {{counter} متابعين} many {{counter} متابعين} other {{counter} متابعين}}",
|
"account.followers_counter": "{count, plural, zero {}one {{counter} متابع} two {{counter} متابعين} few {{counter} متابعين} many {{counter} متابعين} other {{counter} متابعين}}",
|
||||||
@ -168,21 +168,30 @@
|
|||||||
"confirmations.block.confirm": "حظر",
|
"confirmations.block.confirm": "حظر",
|
||||||
"confirmations.delete.confirm": "حذف",
|
"confirmations.delete.confirm": "حذف",
|
||||||
"confirmations.delete.message": "هل أنتَ مُتأكدٌ أنك تُريدُ حَذفَ هذا المنشور؟",
|
"confirmations.delete.message": "هل أنتَ مُتأكدٌ أنك تُريدُ حَذفَ هذا المنشور؟",
|
||||||
|
"confirmations.delete.title": "أتريد حذف المنشور؟",
|
||||||
"confirmations.delete_list.confirm": "حذف",
|
"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.confirm": "تجاهل",
|
||||||
"confirmations.discard_edit_media.message": "لديك تغييرات غير محفوظة لوصف الوسائط أو معاينتها، أتريد تجاهلها على أي حال؟",
|
"confirmations.discard_edit_media.message": "لديك تغييرات غير محفوظة لوصف الوسائط أو معاينتها، أتريد تجاهلها على أي حال؟",
|
||||||
"confirmations.edit.confirm": "تعديل",
|
"confirmations.edit.confirm": "تعديل",
|
||||||
"confirmations.edit.message": "التعديل في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد تحريرها. متأكد من أنك تريد المواصلة؟",
|
"confirmations.edit.message": "التعديل في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد تحريرها. متأكد من أنك تريد المواصلة؟",
|
||||||
|
"confirmations.edit.title": "هل تريد استبدال المنشور؟",
|
||||||
"confirmations.logout.confirm": "خروج",
|
"confirmations.logout.confirm": "خروج",
|
||||||
"confirmations.logout.message": "متأكد من أنك تريد الخروج؟",
|
"confirmations.logout.message": "متأكد من أنك تريد الخروج؟",
|
||||||
|
"confirmations.logout.title": "أتريد المغادرة؟",
|
||||||
"confirmations.mute.confirm": "أكتم",
|
"confirmations.mute.confirm": "أكتم",
|
||||||
"confirmations.redraft.confirm": "إزالة وإعادة الصياغة",
|
"confirmations.redraft.confirm": "إزالة وإعادة الصياغة",
|
||||||
"confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.",
|
"confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.",
|
||||||
|
"confirmations.redraft.title": "أتريد حذف وإعادة صياغة المنشور؟",
|
||||||
"confirmations.reply.confirm": "رد",
|
"confirmations.reply.confirm": "رد",
|
||||||
"confirmations.reply.message": "الرد في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد كتابتها. متأكد من أنك تريد المواصلة؟",
|
"confirmations.reply.message": "الرد في الحين سوف يُعيد كتابة الرسالة التي أنت بصدد كتابتها. متأكد من أنك تريد المواصلة؟",
|
||||||
|
"confirmations.reply.title": "هل تريد استبدال المنشور؟",
|
||||||
"confirmations.unfollow.confirm": "إلغاء المتابعة",
|
"confirmations.unfollow.confirm": "إلغاء المتابعة",
|
||||||
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
|
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
|
||||||
|
"confirmations.unfollow.title": "إلغاء متابعة المستخدم؟",
|
||||||
|
"content_warning.hide": "إخفاء المنشور",
|
||||||
|
"content_warning.show": "إظهار على أي حال",
|
||||||
"conversation.delete": "احذف المحادثة",
|
"conversation.delete": "احذف المحادثة",
|
||||||
"conversation.mark_as_read": "اعتبرها كمقروءة",
|
"conversation.mark_as_read": "اعتبرها كمقروءة",
|
||||||
"conversation.open": "اعرض المحادثة",
|
"conversation.open": "اعرض المحادثة",
|
||||||
@ -218,8 +227,8 @@
|
|||||||
"domain_pill.their_username": "مُعرّفُهم الفريد على الخادم. من الممكن العثور على مستخدمين بنفس اسم المستخدم على خوادم مختلفة.",
|
"domain_pill.their_username": "مُعرّفُهم الفريد على الخادم. من الممكن العثور على مستخدمين بنفس اسم المستخدم على خوادم مختلفة.",
|
||||||
"domain_pill.username": "اسم المستخدم",
|
"domain_pill.username": "اسم المستخدم",
|
||||||
"domain_pill.whats_in_a_handle": "ما المقصود بالمُعرِّف؟",
|
"domain_pill.whats_in_a_handle": "ما المقصود بالمُعرِّف؟",
|
||||||
"domain_pill.who_they_are": "بما أن المعالجات تقول من هو الشخص ومكان وجوده، يمكنك التفاعل مع الناس عبر الشبكة الاجتماعية لـ <button>ActivityPub-Power منصات</button>.",
|
"domain_pill.who_they_are": "بما أن المعرفات تقول من هو الشخص ومكان وجوده، يمكنك التفاعل مع الناس عبر الويب الاجتماعي لل <button>منصات التي تعمل ب ActivityPub</button>.",
|
||||||
"domain_pill.who_you_are": "لأن معالجتك تقول من أنت ومكان وجودك، يمكن الناس التفاعل معك عبر الشبكة الاجتماعية لـ <button>ActivityPub-Power منصات</button>.",
|
"domain_pill.who_you_are": "بما أن معرفك يقول من أنت ومكان وجوده، يمكن للناس التفاعل معك عبر الويب الاجتماعي لل <button>منصات التي تعمل ب ActivityPub</button>.",
|
||||||
"domain_pill.your_handle": "عنوانك الكامل:",
|
"domain_pill.your_handle": "عنوانك الكامل:",
|
||||||
"domain_pill.your_server": "منزلك الرقمي، حيث تعيش جميع مشاركاتك. لا تحب هذا؟ إنقل الخوادم في أي وقت واخضر متابعينك أيضًا.",
|
"domain_pill.your_server": "منزلك الرقمي، حيث تعيش جميع مشاركاتك. لا تحب هذا؟ إنقل الخوادم في أي وقت واخضر متابعينك أيضًا.",
|
||||||
"domain_pill.your_username": "معرفك الفريد على هذا الخادم. من الممكن العثور على مستخدمين بنفس إسم المستخدم على خوادم مختلفة.",
|
"domain_pill.your_username": "معرفك الفريد على هذا الخادم. من الممكن العثور على مستخدمين بنفس إسم المستخدم على خوادم مختلفة.",
|
||||||
@ -290,6 +299,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "استخدم فئة موجودة أو قم بإنشاء فئة جديدة",
|
"filter_modal.select_filter.subtitle": "استخدم فئة موجودة أو قم بإنشاء فئة جديدة",
|
||||||
"filter_modal.select_filter.title": "تصفية هذا المنشور",
|
"filter_modal.select_filter.title": "تصفية هذا المنشور",
|
||||||
"filter_modal.title.status": "تصفية منشور",
|
"filter_modal.title.status": "تصفية منشور",
|
||||||
|
"filter_warning.matches_filter": "يطابق عامل التصفية \"{title}\"",
|
||||||
"filtered_notifications_banner.title": "الإشعارات المصفاة",
|
"filtered_notifications_banner.title": "الإشعارات المصفاة",
|
||||||
"firehose.all": "الكل",
|
"firehose.all": "الكل",
|
||||||
"firehose.local": "هذا الخادم",
|
"firehose.local": "هذا الخادم",
|
||||||
@ -345,6 +355,9 @@
|
|||||||
"home.pending_critical_update.link": "اطّلع على التحديثات",
|
"home.pending_critical_update.link": "اطّلع على التحديثات",
|
||||||
"home.pending_critical_update.title": "تحديث أمان حرج متوفر!",
|
"home.pending_critical_update.title": "تحديث أمان حرج متوفر!",
|
||||||
"home.show_announcements": "إظهار الإعلانات",
|
"home.show_announcements": "إظهار الإعلانات",
|
||||||
|
"ignore_notifications_modal.disclaimer": "لا يمكن لـ Mastodon إبلاغ المستخدمين بأنك قد تجاهلت إشعاراتهم. تجاهل الإشعارات لن يمنع إرسال الرسائل نفسها.",
|
||||||
|
"ignore_notifications_modal.ignore": "تجاهل الإشعارات",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "تجاهل الإشعارات من الحسابات التي هي تحت الإشراف؟",
|
||||||
"interaction_modal.description.favourite": "بفضل حساب على ماستدون، يمكنك إضافة هذا المنشور إلى مفضلتك لإبلاغ الناشر عن تقديرك وكذا للاحتفاظ بالمنشور إلى وقت لاحق.",
|
"interaction_modal.description.favourite": "بفضل حساب على ماستدون، يمكنك إضافة هذا المنشور إلى مفضلتك لإبلاغ الناشر عن تقديرك وكذا للاحتفاظ بالمنشور إلى وقت لاحق.",
|
||||||
"interaction_modal.description.follow": "بفضل حساب في ماستدون، يمكنك متابعة {name} وتلقي منشوراته في موجزات خيطك الرئيس.",
|
"interaction_modal.description.follow": "بفضل حساب في ماستدون، يمكنك متابعة {name} وتلقي منشوراته في موجزات خيطك الرئيس.",
|
||||||
"interaction_modal.description.reblog": "مع حساب في ماستدون، يمكنك تعزيز هذا المنشور ومشاركته مع مُتابِعيك.",
|
"interaction_modal.description.reblog": "مع حساب في ماستدون، يمكنك تعزيز هذا المنشور ومشاركته مع مُتابِعيك.",
|
||||||
@ -431,7 +444,7 @@
|
|||||||
"mute_modal.they_can_mention_and_follow": "سيكون بإمكانه الإشارة إليك ومتابعتك، لكنك لن تره.",
|
"mute_modal.they_can_mention_and_follow": "سيكون بإمكانه الإشارة إليك ومتابعتك، لكنك لن تره.",
|
||||||
"mute_modal.they_wont_know": "لن يَعرف أنه قد تم كتمه.",
|
"mute_modal.they_wont_know": "لن يَعرف أنه قد تم كتمه.",
|
||||||
"mute_modal.title": "أتريد كتم المُستخدم؟",
|
"mute_modal.title": "أتريد كتم المُستخدم؟",
|
||||||
"mute_modal.you_wont_see_mentions": "سوف لن تر المنشورات التي يُشار إليه.",
|
"mute_modal.you_wont_see_mentions": "لن تر المنشورات التي يُشار فيها إليه.",
|
||||||
"mute_modal.you_wont_see_posts": "سيكون بإمكانه رؤية منشوراتك، لكنك لن ترى منشوراته.",
|
"mute_modal.you_wont_see_posts": "سيكون بإمكانه رؤية منشوراتك، لكنك لن ترى منشوراته.",
|
||||||
"navigation_bar.about": "عن",
|
"navigation_bar.about": "عن",
|
||||||
"navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة",
|
"navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة",
|
||||||
@ -464,7 +477,11 @@
|
|||||||
"notification.favourite": "أضاف {name} منشورك إلى مفضلته",
|
"notification.favourite": "أضاف {name} منشورك إلى مفضلته",
|
||||||
"notification.follow": "يتابعك {name}",
|
"notification.follow": "يتابعك {name}",
|
||||||
"notification.follow_request": "لقد طلب {name} متابعتك",
|
"notification.follow_request": "لقد طلب {name} متابعتك",
|
||||||
"notification.mention": "{name} ذكرك",
|
"notification.label.mention": "إشارة",
|
||||||
|
"notification.label.private_mention": "إشارة خاصة",
|
||||||
|
"notification.label.private_reply": "رد خاص",
|
||||||
|
"notification.label.reply": "ردّ",
|
||||||
|
"notification.mention": "إشارة",
|
||||||
"notification.moderation-warning.learn_more": "اعرف المزيد",
|
"notification.moderation-warning.learn_more": "اعرف المزيد",
|
||||||
"notification.moderation_warning": "لقد تلقيت تحذيرًا بالإشراف",
|
"notification.moderation_warning": "لقد تلقيت تحذيرًا بالإشراف",
|
||||||
"notification.moderation_warning.action_delete_statuses": "تم إزالة بعض مشاركاتك.",
|
"notification.moderation_warning.action_delete_statuses": "تم إزالة بعض مشاركاتك.",
|
||||||
@ -475,6 +492,7 @@
|
|||||||
"notification.moderation_warning.action_silence": "لقد تم تقييد حسابك.",
|
"notification.moderation_warning.action_silence": "لقد تم تقييد حسابك.",
|
||||||
"notification.moderation_warning.action_suspend": "لقد تم تعليق حسابك.",
|
"notification.moderation_warning.action_suspend": "لقد تم تعليق حسابك.",
|
||||||
"notification.own_poll": "انتهى استطلاعك للرأي",
|
"notification.own_poll": "انتهى استطلاعك للرأي",
|
||||||
|
"notification.poll": "لقد انتهى استطلاع رأي صوتت فيه",
|
||||||
"notification.reblog": "قام {name} بمشاركة منشورك",
|
"notification.reblog": "قام {name} بمشاركة منشورك",
|
||||||
"notification.relationships_severance_event": "فقدت الاتصالات مع {name}",
|
"notification.relationships_severance_event": "فقدت الاتصالات مع {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "قام مشرف من {from} بتعليق {target}، مما يعني أنك لم يعد بإمكانك تلقي التحديثات منهم أو التفاعل معهم.",
|
"notification.relationships_severance_event.account_suspension": "قام مشرف من {from} بتعليق {target}، مما يعني أنك لم يعد بإمكانك تلقي التحديثات منهم أو التفاعل معهم.",
|
||||||
@ -485,13 +503,19 @@
|
|||||||
"notification.update": "عدّلَ {name} منشورًا",
|
"notification.update": "عدّلَ {name} منشورًا",
|
||||||
"notification_requests.accept": "موافقة",
|
"notification_requests.accept": "موافقة",
|
||||||
"notification_requests.dismiss": "تخطي",
|
"notification_requests.dismiss": "تخطي",
|
||||||
|
"notification_requests.edit_selection": "تعديل",
|
||||||
|
"notification_requests.exit_selection": "تمّ",
|
||||||
|
"notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.",
|
||||||
"notification_requests.notifications_from": "إشعارات من {name}",
|
"notification_requests.notifications_from": "إشعارات من {name}",
|
||||||
"notification_requests.title": "الإشعارات المصفاة",
|
"notification_requests.title": "الإشعارات المصفاة",
|
||||||
"notifications.clear": "مسح الإشعارات",
|
"notifications.clear": "مسح الإشعارات",
|
||||||
"notifications.clear_confirmation": "متأكد من أنك تود مسح جميع الإشعارات الخاصة بك و المتلقاة إلى حد الآن ؟",
|
"notifications.clear_confirmation": "متأكد من أنك تود مسح جميع الإشعارات الخاصة بك و المتلقاة إلى حد الآن ؟",
|
||||||
|
"notifications.clear_title": "أترغب في مسح الإشعارات؟",
|
||||||
"notifications.column_settings.admin.report": "التبليغات الجديدة:",
|
"notifications.column_settings.admin.report": "التبليغات الجديدة:",
|
||||||
"notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:",
|
"notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:",
|
||||||
"notifications.column_settings.alert": "إشعارات سطح المكتب",
|
"notifications.column_settings.alert": "إشعارات سطح المكتب",
|
||||||
|
"notifications.column_settings.beta.category": "ميزات تجريبية",
|
||||||
|
"notifications.column_settings.beta.grouping": "جمّع الإشعارات",
|
||||||
"notifications.column_settings.favourite": "المفضلة:",
|
"notifications.column_settings.favourite": "المفضلة:",
|
||||||
"notifications.column_settings.filter_bar.advanced": "عرض جميع الفئات",
|
"notifications.column_settings.filter_bar.advanced": "عرض جميع الفئات",
|
||||||
"notifications.column_settings.filter_bar.category": "شريط التصفية السريعة",
|
"notifications.column_settings.filter_bar.category": "شريط التصفية السريعة",
|
||||||
@ -520,15 +544,21 @@
|
|||||||
"notifications.permission_denied": "تنبيهات سطح المكتب غير متوفرة بسبب رفض أذونات المتصفح مسبقاً",
|
"notifications.permission_denied": "تنبيهات سطح المكتب غير متوفرة بسبب رفض أذونات المتصفح مسبقاً",
|
||||||
"notifications.permission_denied_alert": "لا يمكن تفعيل إشعارات سطح المكتب، لأن إذن المتصفح قد تم رفضه سابقاً",
|
"notifications.permission_denied_alert": "لا يمكن تفعيل إشعارات سطح المكتب، لأن إذن المتصفح قد تم رفضه سابقاً",
|
||||||
"notifications.permission_required": "إشعارات سطح المكتب غير متوفرة لأنه لم يتم منح الإذن المطلوب.",
|
"notifications.permission_required": "إشعارات سطح المكتب غير متوفرة لأنه لم يتم منح الإذن المطلوب.",
|
||||||
|
"notifications.policy.accept": "قبول",
|
||||||
|
"notifications.policy.accept_hint": "إظهار في الإشعارات",
|
||||||
|
"notifications.policy.drop": "تجاهل",
|
||||||
|
"notifications.policy.filter": "تصفية",
|
||||||
|
"notifications.policy.filter_limited_accounts_hint": "المحدودة من قبل مشرفي الخادم",
|
||||||
|
"notifications.policy.filter_limited_accounts_title": "حسابات تحت الإشراف",
|
||||||
"notifications.policy.filter_new_accounts.hint": "تم إنشاؤها منذ {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}",
|
"notifications.policy.filter_new_accounts.hint": "تم إنشاؤها منذ {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "حسابات جديدة",
|
"notifications.policy.filter_new_accounts_title": "حسابات جديدة",
|
||||||
"notifications.policy.filter_not_followers_hint": "بما في ذلك الأشخاص الذين يتابعونك أقل من {days, plural, zero {}one {يوم واحد} two {يومان} few {# أيام} many {# أيام} other {# أيام}}",
|
"notifications.policy.filter_not_followers_hint": "بما في ذلك الأشخاص الذين يتابعونك منذ أقل من {days, plural, zero {}one {يوم واحد} two {يومين} few {# أيام} many {# يوما} other {# أيام}}",
|
||||||
"notifications.policy.filter_not_followers_title": "أشخاص لا يتابعونك",
|
"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_not_following_title": "أشخاص لا تتابعهم",
|
||||||
"notifications.policy.filter_private_mentions_hint": "تمت تصفيته إلا إذا أن يكون ردًا على ذكرك أو إذا كنت تتابع الحساب",
|
"notifications.policy.filter_private_mentions_hint": "يتم تصفيتها إلا إن كانت ردًا على أحد ردودك أو إذا كنت متابعا للمرسل",
|
||||||
"notifications.policy.filter_private_mentions_title": "إشارات خاصة غير مرغوب فيها",
|
"notifications.policy.filter_private_mentions_title": "الإشارات الخاصة غير المرغوب فيها",
|
||||||
"notifications.policy.title": "تصفية الإشعارات من…",
|
"notifications.policy.title": "إدارة الإشعارات الواردة من…",
|
||||||
"notifications_permission_banner.enable": "تفعيل إشعارات سطح المكتب",
|
"notifications_permission_banner.enable": "تفعيل إشعارات سطح المكتب",
|
||||||
"notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.",
|
"notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.",
|
||||||
"notifications_permission_banner.title": "لا تفوت شيئاً أبداً",
|
"notifications_permission_banner.title": "لا تفوت شيئاً أبداً",
|
||||||
@ -637,7 +667,7 @@
|
|||||||
"report.reasons.legal_description": "أنت تعتقد أنه ينتهك قانون بلدك أو دولة الخادم",
|
"report.reasons.legal_description": "أنت تعتقد أنه ينتهك قانون بلدك أو دولة الخادم",
|
||||||
"report.reasons.other": "شيء آخر",
|
"report.reasons.other": "شيء آخر",
|
||||||
"report.reasons.other_description": "لا تندرج هذه المشكلة ضمن فئات أخرى",
|
"report.reasons.other_description": "لا تندرج هذه المشكلة ضمن فئات أخرى",
|
||||||
"report.reasons.spam": "إنها رسالة مزعجة",
|
"report.reasons.spam": "إنه منشور غير مرغوب فيه",
|
||||||
"report.reasons.spam_description": "روابط خبيثة أو تفاعل كاذب أو ردود متكررة",
|
"report.reasons.spam_description": "روابط خبيثة أو تفاعل كاذب أو ردود متكررة",
|
||||||
"report.reasons.violation": "ينتهك قواعد الخادم",
|
"report.reasons.violation": "ينتهك قواعد الخادم",
|
||||||
"report.reasons.violation_description": "تعلم أنه ينتهك قواعد محددة",
|
"report.reasons.violation_description": "تعلم أنه ينتهك قواعد محددة",
|
||||||
@ -655,9 +685,13 @@
|
|||||||
"report.unfollow_explanation": "أنت تتابع هذا الحساب، لإزالة مَنشوراته من موجزات خيطك الرئيس، ألغ متابعته.",
|
"report.unfollow_explanation": "أنت تتابع هذا الحساب، لإزالة مَنشوراته من موجزات خيطك الرئيس، ألغ متابعته.",
|
||||||
"report_notification.attached_statuses": "{count, plural, one {{count} منشور} other {{count} منشورات}} مرفقة",
|
"report_notification.attached_statuses": "{count, plural, one {{count} منشور} other {{count} منشورات}} مرفقة",
|
||||||
"report_notification.categories.legal": "أمور قانونية",
|
"report_notification.categories.legal": "أمور قانونية",
|
||||||
|
"report_notification.categories.legal_sentence": "محتوى غير قانوني",
|
||||||
"report_notification.categories.other": "آخر",
|
"report_notification.categories.other": "آخر",
|
||||||
|
"report_notification.categories.other_sentence": "آخر",
|
||||||
"report_notification.categories.spam": "مزعج",
|
"report_notification.categories.spam": "مزعج",
|
||||||
|
"report_notification.categories.spam_sentence": "مزعج",
|
||||||
"report_notification.categories.violation": "القاعدة المنتهَكة",
|
"report_notification.categories.violation": "القاعدة المنتهَكة",
|
||||||
|
"report_notification.categories.violation_sentence": "انتهاك لقاعدة",
|
||||||
"report_notification.open": "فتح التقرير",
|
"report_notification.open": "فتح التقرير",
|
||||||
"search.no_recent_searches": "ما من عمليات بحث تمت مؤخرًا",
|
"search.no_recent_searches": "ما من عمليات بحث تمت مؤخرًا",
|
||||||
"search.placeholder": "ابحث",
|
"search.placeholder": "ابحث",
|
||||||
@ -685,6 +719,7 @@
|
|||||||
"server_banner.about_active_users": "الأشخاص الذين يستخدمون هذا الخادم خلال الأيام الثلاثين الأخيرة (المستخدمون النشطون شهريًا)",
|
"server_banner.about_active_users": "الأشخاص الذين يستخدمون هذا الخادم خلال الأيام الثلاثين الأخيرة (المستخدمون النشطون شهريًا)",
|
||||||
"server_banner.active_users": "مستخدم نشط",
|
"server_banner.active_users": "مستخدم نشط",
|
||||||
"server_banner.administered_by": "يُديره:",
|
"server_banner.administered_by": "يُديره:",
|
||||||
|
"server_banner.is_one_of_many": "{domain} هو واحد من بين العديد من خوادم ماستدون المستقلة التي يمكنك استخدامها للمشاركة في الفديفرس.",
|
||||||
"server_banner.server_stats": "إحصائيات الخادم:",
|
"server_banner.server_stats": "إحصائيات الخادم:",
|
||||||
"sign_in_banner.create_account": "أنشئ حسابًا",
|
"sign_in_banner.create_account": "أنشئ حسابًا",
|
||||||
"sign_in_banner.sign_in": "تسجيل الدخول",
|
"sign_in_banner.sign_in": "تسجيل الدخول",
|
||||||
@ -707,9 +742,7 @@
|
|||||||
"status.embed": "إدماج",
|
"status.embed": "إدماج",
|
||||||
"status.favourite": "فضّل",
|
"status.favourite": "فضّل",
|
||||||
"status.favourites": "{count, plural, zero {}one {مفضلة واحدة} two {مفضلتان} few {# مفضلات} many {# مفضلات} other {# مفضلات}}",
|
"status.favourites": "{count, plural, zero {}one {مفضلة واحدة} two {مفضلتان} few {# مفضلات} many {# مفضلات} other {# مفضلات}}",
|
||||||
"status.filter": "تصفية هذه الرسالة",
|
"status.filter": "تصفية هذا المنشور",
|
||||||
"status.filtered": "مُصفّى",
|
|
||||||
"status.hide": "إخفاء المنشور",
|
|
||||||
"status.history.created": "أنشأه {name} {date}",
|
"status.history.created": "أنشأه {name} {date}",
|
||||||
"status.history.edited": "عدله {name} {date}",
|
"status.history.edited": "عدله {name} {date}",
|
||||||
"status.load_more": "حمّل المزيد",
|
"status.load_more": "حمّل المزيد",
|
||||||
@ -737,10 +770,7 @@
|
|||||||
"status.report": "ابلِغ عن @{name}",
|
"status.report": "ابلِغ عن @{name}",
|
||||||
"status.sensitive_warning": "محتوى حساس",
|
"status.sensitive_warning": "محتوى حساس",
|
||||||
"status.share": "مشاركة",
|
"status.share": "مشاركة",
|
||||||
"status.show_filter_reason": "إظهار على أي حال",
|
|
||||||
"status.show_less": "اعرض أقلّ",
|
|
||||||
"status.show_less_all": "طي الكل",
|
"status.show_less_all": "طي الكل",
|
||||||
"status.show_more": "أظهر المزيد",
|
|
||||||
"status.show_more_all": "توسيع الكل",
|
"status.show_more_all": "توسيع الكل",
|
||||||
"status.show_original": "إظهار الأصل",
|
"status.show_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 {# attachments}}",
|
||||||
@ -759,10 +789,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# دقيقة} other {# دقائق}} متبقية",
|
"time_remaining.minutes": "{number, plural, one {# دقيقة} other {# دقائق}} متبقية",
|
||||||
"time_remaining.moments": "لحظات متبقية",
|
"time_remaining.moments": "لحظات متبقية",
|
||||||
"time_remaining.seconds": "{number, plural, one {# ثانية} other {# ثوانٍ}} متبقية",
|
"time_remaining.seconds": "{number, plural, one {# ثانية} other {# ثوانٍ}} متبقية",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} من الخوادم الأخرى لا يتم عرضها.",
|
|
||||||
"timeline_hint.resources.followers": "المتابِعون",
|
|
||||||
"timeline_hint.resources.follows": "المتابَعون",
|
|
||||||
"timeline_hint.resources.statuses": "المنشورات القديمة",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {شخص واحد} two {شخصان} few {{counter} أشخاصٍ} many {{counter} شخصًا} other {{counter} شخصًا}} {days, plural, one {خلال اليوم الماضي} two {خلال اليومَيْنِ الماضيَيْنِ} few {خلال {days} أيام الماضية} many {خلال {days} يومًا الماضية} other {خلال {days} يومٍ الماضية}}",
|
"trends.counter_by_accounts": "{count, plural, one {شخص واحد} two {شخصان} few {{counter} أشخاصٍ} many {{counter} شخصًا} other {{counter} شخصًا}} {days, plural, one {خلال اليوم الماضي} two {خلال اليومَيْنِ الماضيَيْنِ} few {خلال {days} أيام الماضية} many {خلال {days} يومًا الماضية} other {خلال {days} يومٍ الماضية}}",
|
||||||
"trends.trending_now": "المتداولة الآن",
|
"trends.trending_now": "المتداولة الآن",
|
||||||
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
|
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
|
||||||
|
@ -11,14 +11,12 @@
|
|||||||
"about.not_available": "Esta información nun ta disponible nesti sirvidor.",
|
"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.powered_by": "Una rede social descentralizada que tien la teunoloxía de {mastodon}",
|
||||||
"about.rules": "Normes del sirvidor",
|
"about.rules": "Normes del sirvidor",
|
||||||
|
"account.account_note_header": "Nota personal",
|
||||||
"account.add_or_remove_from_list": "Amestar o quitar de les llistes",
|
"account.add_or_remove_from_list": "Amestar o quitar de les llistes",
|
||||||
"account.badges.group": "Grupu",
|
"account.badges.group": "Grupu",
|
||||||
"account.block": "Bloquiar a @{name}",
|
"account.block": "Bloquiar a @{name}",
|
||||||
"account.block_domain": "Bloquiar el dominiu {domain}",
|
"account.block_domain": "Bloquiar el dominiu {domain}",
|
||||||
"account.block_short": "Bloquiar",
|
|
||||||
"account.blocked": "Perfil bloquiáu",
|
"account.blocked": "Perfil bloquiáu",
|
||||||
"account.browse_more_on_origin_server": "Restolar más nel perfil orixinal",
|
|
||||||
"account.copy": "Copiar I'enllaz al perfil",
|
|
||||||
"account.direct": "Mentar a @{name} per privao",
|
"account.direct": "Mentar a @{name} per privao",
|
||||||
"account.disable_notifications": "Dexar d'avisame cuando @{name} espublice artículos",
|
"account.disable_notifications": "Dexar d'avisame cuando @{name} espublice artículos",
|
||||||
"account.domain_blocked": "Dominiu bloquiáu",
|
"account.domain_blocked": "Dominiu bloquiáu",
|
||||||
@ -30,9 +28,7 @@
|
|||||||
"account.follow": "Siguir",
|
"account.follow": "Siguir",
|
||||||
"account.followers": "Siguidores",
|
"account.followers": "Siguidores",
|
||||||
"account.followers.empty": "Naide sigue a esti perfil.",
|
"account.followers.empty": "Naide sigue a esti perfil.",
|
||||||
"account.following": "Siguiendo",
|
|
||||||
"account.follows.empty": "Esti perfil nun sigue a naide.",
|
"account.follows.empty": "Esti perfil nun sigue a naide.",
|
||||||
"account.go_to_profile": "Dir al perfil",
|
|
||||||
"account.hide_reblogs": "Anubrir los artículos compartíos de @{name}",
|
"account.hide_reblogs": "Anubrir los artículos compartíos de @{name}",
|
||||||
"account.in_memoriam": "N'alcordanza.",
|
"account.in_memoriam": "N'alcordanza.",
|
||||||
"account.joined_short": "Data de xunión",
|
"account.joined_short": "Data de xunión",
|
||||||
@ -41,15 +37,16 @@
|
|||||||
"account.mention": "Mentar a @{name}",
|
"account.mention": "Mentar a @{name}",
|
||||||
"account.moved_to": "{name} indicó qu'agora la so cuenta nueva ye:",
|
"account.moved_to": "{name} indicó qu'agora la so cuenta nueva ye:",
|
||||||
"account.mute": "Desactivar los avisos de @{name}",
|
"account.mute": "Desactivar los avisos de @{name}",
|
||||||
|
"account.no_bio": "Nun se fornió nenguna descripción.",
|
||||||
"account.open_original_page": "Abrir la páxina orixinal",
|
"account.open_original_page": "Abrir la páxina orixinal",
|
||||||
"account.posts": "Artículos",
|
"account.posts": "Artículos",
|
||||||
"account.posts_with_replies": "Artículos y rempuestes",
|
"account.posts_with_replies": "Artículos y rempuestes",
|
||||||
"account.report": "Informar de @{name}",
|
"account.report": "Informar de @{name}",
|
||||||
"account.requested_follow": "{name} solicitó siguite",
|
"account.requested_follow": "{name} solicitó siguite",
|
||||||
|
"account.share": "Compartir el perfil de @{name}",
|
||||||
"account.show_reblogs": "Amosar los artículos compartíos de @{name}",
|
"account.show_reblogs": "Amosar los artículos compartíos de @{name}",
|
||||||
"account.unblock": "Desbloquiar a @{name}",
|
"account.unblock": "Desbloquiar a @{name}",
|
||||||
"account.unblock_domain": "Desbloquiar el dominiu «{domain}»",
|
"account.unblock_domain": "Desbloquiar el dominiu «{domain}»",
|
||||||
"account.unblock_short": "Desbloquiar",
|
|
||||||
"account.unendorse": "Dexar de destacar nel perfil",
|
"account.unendorse": "Dexar de destacar nel perfil",
|
||||||
"account.unfollow": "Dexar de siguir",
|
"account.unfollow": "Dexar de siguir",
|
||||||
"account.unmute": "Activar los avisos de @{name}",
|
"account.unmute": "Activar los avisos de @{name}",
|
||||||
@ -150,7 +147,6 @@
|
|||||||
"empty_column.account_timeline": "¡Equí nun hai nengún artículu!",
|
"empty_column.account_timeline": "¡Equí nun hai nengún artículu!",
|
||||||
"empty_column.blocks": "Nun bloquiesti a nengún perfil.",
|
"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 nengún artículu en Marcadores. Cuando amiestes dalgún, apaez equí.",
|
||||||
"empty_column.community": "La llinia de tiempu llocal ta balera. ¡Espubliza daqué públicamente pa comenzar l'alderique!",
|
|
||||||
"empty_column.direct": "Nun tienes nenguna mención privada. Cuando unvies o recibas dalguna, apaez 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.domain_blocks": "Nun hai nengún dominiu bloquiáu.",
|
||||||
"empty_column.explore_statuses": "Agora nun hai nada en tendencia. ¡Volvi equí dempués!",
|
"empty_column.explore_statuses": "Agora nun hai nada en tendencia. ¡Volvi equí dempués!",
|
||||||
@ -186,6 +182,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Usa una categoría esistente o créala",
|
"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.select_filter.title": "Peñerar esti artículu",
|
||||||
"filter_modal.title.status": "Peñera d'un artículu",
|
"filter_modal.title.status": "Peñera d'un artículu",
|
||||||
|
"firehose.all": "Tolos sirvidores",
|
||||||
"firehose.local": "Esti sirvidor",
|
"firehose.local": "Esti sirvidor",
|
||||||
"firehose.remote": "Otros sirvidores",
|
"firehose.remote": "Otros sirvidores",
|
||||||
"follow_request.authorize": "Autorizar",
|
"follow_request.authorize": "Autorizar",
|
||||||
@ -195,6 +192,7 @@
|
|||||||
"follow_suggestions.friends_of_friends_longer": "Ye popular ente los perfiles que sigues",
|
"follow_suggestions.friends_of_friends_longer": "Ye popular ente los perfiles que sigues",
|
||||||
"follow_suggestions.personalized_suggestion": "Suxerencia personalizada",
|
"follow_suggestions.personalized_suggestion": "Suxerencia personalizada",
|
||||||
"follow_suggestions.popular_suggestion": "Suxerencia popular",
|
"follow_suggestions.popular_suggestion": "Suxerencia popular",
|
||||||
|
"follow_suggestions.popular_suggestion_longer": "Ye popular na instancia {domain}",
|
||||||
"follow_suggestions.similar_to_recently_followed_longer": "Aseméyase a los perfiles que siguiesti apocayá",
|
"follow_suggestions.similar_to_recently_followed_longer": "Aseméyase a los perfiles que siguiesti apocayá",
|
||||||
"follow_suggestions.view_all": "Ver too",
|
"follow_suggestions.view_all": "Ver too",
|
||||||
"follow_suggestions.who_to_follow": "A quién siguir",
|
"follow_suggestions.who_to_follow": "A quién siguir",
|
||||||
@ -271,8 +269,6 @@
|
|||||||
"lists.subheading": "Les tos llistes",
|
"lists.subheading": "Les tos llistes",
|
||||||
"load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}",
|
"load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}",
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Anubrir la imaxe} other {Anubrir les imáxenes}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Anubrir la imaxe} other {Anubrir les imáxenes}}",
|
||||||
"name_and_others": "{name} y {count, plural, one {# más} other {# más}}",
|
|
||||||
"name_and_others_with_link": "{name} y <a>{count, plural, one {# más} other {# más}}</a>",
|
|
||||||
"navigation_bar.about": "Tocante a",
|
"navigation_bar.about": "Tocante a",
|
||||||
"navigation_bar.blocks": "Perfiles bloquiaos",
|
"navigation_bar.blocks": "Perfiles bloquiaos",
|
||||||
"navigation_bar.bookmarks": "Marcadores",
|
"navigation_bar.bookmarks": "Marcadores",
|
||||||
@ -296,7 +292,6 @@
|
|||||||
"notification.admin.sign_up": "{name} rexistróse",
|
"notification.admin.sign_up": "{name} rexistróse",
|
||||||
"notification.follow": "{name} siguióte",
|
"notification.follow": "{name} siguióte",
|
||||||
"notification.follow_request": "{name} solicitó siguite",
|
"notification.follow_request": "{name} solicitó siguite",
|
||||||
"notification.mention": "{name} mentóte",
|
|
||||||
"notification.reblog": "{name} compartió'l to artículu",
|
"notification.reblog": "{name} compartió'l to artículu",
|
||||||
"notification.status": "{name} ta acabante d'espublizar",
|
"notification.status": "{name} ta acabante d'espublizar",
|
||||||
"notification.update": "{name} editó un artículu",
|
"notification.update": "{name} editó un artículu",
|
||||||
@ -354,7 +349,6 @@
|
|||||||
"relative_time.seconds": "{number} s",
|
"relative_time.seconds": "{number} s",
|
||||||
"relative_time.today": "güei",
|
"relative_time.today": "güei",
|
||||||
"reply_indicator.cancel": "Encaboxar",
|
"reply_indicator.cancel": "Encaboxar",
|
||||||
"reply_indicator.poll": "Encuesta",
|
|
||||||
"report.block": "Bloquiar",
|
"report.block": "Bloquiar",
|
||||||
"report.categories.spam": "Spam",
|
"report.categories.spam": "Spam",
|
||||||
"report.categories.violation": "El conteníu incumple una o más normes del sirvidor",
|
"report.categories.violation": "El conteníu incumple una o más normes del sirvidor",
|
||||||
@ -428,8 +422,6 @@
|
|||||||
"status.edited_x_times": "Editóse {count, plural, one {{count} vegada} other {{count} vegaes}}",
|
"status.edited_x_times": "Editóse {count, plural, one {{count} vegada} other {{count} vegaes}}",
|
||||||
"status.embed": "Empotrar",
|
"status.embed": "Empotrar",
|
||||||
"status.filter": "Peñerar esti artículu",
|
"status.filter": "Peñerar esti artículu",
|
||||||
"status.filtered": "Peñeróse",
|
|
||||||
"status.hide": "Anubrir l'artículu",
|
|
||||||
"status.history.created": "{name} creó {date}",
|
"status.history.created": "{name} creó {date}",
|
||||||
"status.history.edited": "{name} editó {date}",
|
"status.history.edited": "{name} editó {date}",
|
||||||
"status.load_more": "Cargar más",
|
"status.load_more": "Cargar más",
|
||||||
@ -452,9 +444,6 @@
|
|||||||
"status.report": "Informar de @{name}",
|
"status.report": "Informar de @{name}",
|
||||||
"status.sensitive_warning": "Conteníu sensible",
|
"status.sensitive_warning": "Conteníu sensible",
|
||||||
"status.share": "Compartir",
|
"status.share": "Compartir",
|
||||||
"status.show_filter_reason": "Amosar de toes toes",
|
|
||||||
"status.show_less": "Amosar menos",
|
|
||||||
"status.show_more": "Amosar más",
|
|
||||||
"status.show_original": "Amosar l'orixinal",
|
"status.show_original": "Amosar l'orixinal",
|
||||||
"status.translate": "Traducir",
|
"status.translate": "Traducir",
|
||||||
"status.translated_from_with": "Tradúxose del {lang} con {provider}",
|
"status.translated_from_with": "Tradúxose del {lang} con {provider}",
|
||||||
@ -467,9 +456,6 @@
|
|||||||
"time_remaining.hours": "{number, plural, one {Queda # hora} other {Queden # hores}}",
|
"time_remaining.hours": "{number, plural, one {Queda # hora} other {Queden # hores}}",
|
||||||
"time_remaining.minutes": "{number, plural, one {Queda # minutu} other {Queden # minutos}}",
|
"time_remaining.minutes": "{number, plural, one {Queda # minutu} other {Queden # minutos}}",
|
||||||
"time_remaining.seconds": "{number, plural, one {Queda # segundu} other {Queden # segundos}}",
|
"time_remaining.seconds": "{number, plural, one {Queda # segundu} other {Queden # segundos}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "Nun s'amuesa'l recursu «{resource}» d'otros sirvidores.",
|
|
||||||
"timeline_hint.resources.followers": "Siguidores",
|
|
||||||
"timeline_hint.resources.statuses": "Artículos antiguos",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persones}} {days, plural, one {nel últimu día} other {nos últimos {days} díes}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persones}} {days, plural, one {nel últimu día} other {nos últimos {days} díes}}",
|
||||||
"trends.trending_now": "En tendencia",
|
"trends.trending_now": "En tendencia",
|
||||||
"ui.beforeunload": "El borrador piérdese si coles de Mastodon.",
|
"ui.beforeunload": "El borrador piérdese si coles de Mastodon.",
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
"about.not_available": "Дадзеная інфармацыя не дасяжная на гэтым серверы.",
|
"about.not_available": "Дадзеная інфармацыя не дасяжная на гэтым серверы.",
|
||||||
"about.powered_by": "Дэцэнтралізаваная сацыяльная сетка, створаная {mastodon}",
|
"about.powered_by": "Дэцэнтралізаваная сацыяльная сетка, створаная {mastodon}",
|
||||||
"about.rules": "Правілы сервера",
|
"about.rules": "Правілы сервера",
|
||||||
|
"account.account_note_header": "Асабістая нататка",
|
||||||
"account.add_or_remove_from_list": "Дадаць або выдаліць са спісаў",
|
"account.add_or_remove_from_list": "Дадаць або выдаліць са спісаў",
|
||||||
"account.badges.bot": "Бот",
|
"account.badges.bot": "Бот",
|
||||||
"account.badges.group": "Група",
|
"account.badges.group": "Група",
|
||||||
@ -18,7 +19,6 @@
|
|||||||
"account.block_domain": "Заблакіраваць дамен {domain}",
|
"account.block_domain": "Заблакіраваць дамен {domain}",
|
||||||
"account.block_short": "Заблакіраваць",
|
"account.block_short": "Заблакіраваць",
|
||||||
"account.blocked": "Заблакіраваны",
|
"account.blocked": "Заблакіраваны",
|
||||||
"account.browse_more_on_origin_server": "Глядзіце больш у арыгінальным профілі",
|
|
||||||
"account.cancel_follow_request": "Скасаваць запыт на падпіску",
|
"account.cancel_follow_request": "Скасаваць запыт на падпіску",
|
||||||
"account.copy": "Скапіраваць спасылку на профіль",
|
"account.copy": "Скапіраваць спасылку на профіль",
|
||||||
"account.direct": "Згадаць асабіста @{name}",
|
"account.direct": "Згадаць асабіста @{name}",
|
||||||
@ -192,6 +192,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Адпісацца",
|
"confirmations.unfollow.confirm": "Адпісацца",
|
||||||
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
|
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
|
||||||
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
|
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
|
||||||
|
"content_warning.hide": "Схаваць допіс",
|
||||||
|
"content_warning.show": "Усё адно паказаць",
|
||||||
"conversation.delete": "Выдаліць размову",
|
"conversation.delete": "Выдаліць размову",
|
||||||
"conversation.mark_as_read": "Адзначыць прачытаным",
|
"conversation.mark_as_read": "Адзначыць прачытаным",
|
||||||
"conversation.open": "Прагледзець размову",
|
"conversation.open": "Прагледзець размову",
|
||||||
@ -299,6 +301,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую",
|
"filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую",
|
||||||
"filter_modal.select_filter.title": "Фільтраваць гэты допіс",
|
"filter_modal.select_filter.title": "Фільтраваць гэты допіс",
|
||||||
"filter_modal.title.status": "Фільтраваць допіс",
|
"filter_modal.title.status": "Фільтраваць допіс",
|
||||||
|
"filter_warning.matches_filter": "Адпавядае фільтру \"{title}\"",
|
||||||
"filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце",
|
"filtered_notifications_banner.pending_requests": "Ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце",
|
||||||
"filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні",
|
"filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні",
|
||||||
"firehose.all": "Усе",
|
"firehose.all": "Усе",
|
||||||
@ -355,6 +358,7 @@
|
|||||||
"home.pending_critical_update.link": "Прагледзець абнаўленні",
|
"home.pending_critical_update.link": "Прагледзець абнаўленні",
|
||||||
"home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!",
|
"home.pending_critical_update.title": "Даступна крытычнае абнаўленне бяспекі!",
|
||||||
"home.show_announcements": "Паказаць аб'явы",
|
"home.show_announcements": "Паказаць аб'явы",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
|
||||||
"interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.",
|
"interaction_modal.description.favourite": "Маючы ўліковы запіс Mastodon, вы можаце ўпадабаць гэты допіс, каб паведаміць аўтару, што ён вам падабаецца, і захаваць яго на будучыню.",
|
||||||
"interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.",
|
"interaction_modal.description.follow": "Маючы акаўнт у Mastodon, вы можаце падпісацца на {name}, каб бачыць яго/яе допісы ў сваёй хатняй стужцы.",
|
||||||
"interaction_modal.description.reblog": "З уліковым запісам Mastodon, вы можаце пашырыць гэты пост, каб падзяліцца ім са сваімі падпісчыкамі.",
|
"interaction_modal.description.reblog": "З уліковым запісам Mastodon, вы можаце пашырыць гэты пост, каб падзяліцца ім са сваімі падпісчыкамі.",
|
||||||
@ -444,8 +448,6 @@
|
|||||||
"mute_modal.title": "Ігнараваць карыстальніка?",
|
"mute_modal.title": "Ігнараваць карыстальніка?",
|
||||||
"mute_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.",
|
"mute_modal.you_wont_see_mentions": "Вы не ўбачыце паведамленняў са згадваннем карыстальніка.",
|
||||||
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць вашыя паведамленні, але вы не будзеце паведамленні карыстальніка.",
|
"mute_modal.you_wont_see_posts": "Карыстальнік па-ранейшаму будзе бачыць вашыя паведамленні, але вы не будзеце паведамленні карыстальніка.",
|
||||||
"name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}}",
|
|
||||||
"name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} many {# іншых} other {# іншых}}</a>",
|
|
||||||
"navigation_bar.about": "Пра нас",
|
"navigation_bar.about": "Пра нас",
|
||||||
"navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе",
|
"navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе",
|
||||||
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
|
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
|
||||||
@ -481,7 +483,11 @@
|
|||||||
"notification.favourite": "Ваш допіс упадабаны {name}",
|
"notification.favourite": "Ваш допіс упадабаны {name}",
|
||||||
"notification.follow": "{name} падпісаўся на вас",
|
"notification.follow": "{name} падпісаўся на вас",
|
||||||
"notification.follow_request": "{name} адправіў запыт на падпіску",
|
"notification.follow_request": "{name} адправіў запыт на падпіску",
|
||||||
"notification.mention": "{name} згадаў вас",
|
"notification.label.mention": "Згадванне",
|
||||||
|
"notification.label.private_mention": "Асабістае згадванне",
|
||||||
|
"notification.label.private_reply": "Асабісты адказ",
|
||||||
|
"notification.label.reply": "Адказ",
|
||||||
|
"notification.mention": "Згадванне",
|
||||||
"notification.moderation-warning.learn_more": "Даведацца больш",
|
"notification.moderation-warning.learn_more": "Даведацца больш",
|
||||||
"notification.moderation_warning": "Вы атрымалі папярэджанне аб мадэрацыі",
|
"notification.moderation_warning": "Вы атрымалі папярэджанне аб мадэрацыі",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.",
|
"notification.moderation_warning.action_delete_statuses": "Некаторыя вашыя допісы былі выдаленыя.",
|
||||||
@ -493,7 +499,6 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Ваш уліковы запіс быў прыпынены.",
|
"notification.moderation_warning.action_suspend": "Ваш уліковы запіс быў прыпынены.",
|
||||||
"notification.own_poll": "Ваша апытанне скончылася",
|
"notification.own_poll": "Ваша апытанне скончылася",
|
||||||
"notification.poll": "Апытанне, дзе вы прынялі ўдзел, скончылася",
|
"notification.poll": "Апытанне, дзе вы прынялі ўдзел, скончылася",
|
||||||
"notification.private_mention": "{name} згадаў вас асабіста",
|
|
||||||
"notification.reblog": "{name} пашырыў ваш допіс",
|
"notification.reblog": "{name} пашырыў ваш допіс",
|
||||||
"notification.relationships_severance_event": "Страціў сувязь з {name}",
|
"notification.relationships_severance_event": "Страціў сувязь з {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу {target}, што азначае, што вы больш не можаце атрымліваць ад іх абнаўлення ці ўзаемадзейнічаць з імі.",
|
"notification.relationships_severance_event.account_suspension": "Адміністратар з {from} прыпыніў працу {target}, што азначае, што вы больш не можаце атрымліваць ад іх абнаўлення ці ўзаемадзейнічаць з імі.",
|
||||||
@ -503,11 +508,16 @@
|
|||||||
"notification.status": "Новы допіс ад {name}",
|
"notification.status": "Новы допіс ад {name}",
|
||||||
"notification.update": "Допіс {name} адрэдагаваны",
|
"notification.update": "Допіс {name} адрэдагаваны",
|
||||||
"notification_requests.accept": "Прыняць",
|
"notification_requests.accept": "Прыняць",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "Прыняць запыты на апавяшчэнні?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Адхіліць запыты на апавяшчэнні?",
|
||||||
"notification_requests.dismiss": "Адхіліць",
|
"notification_requests.dismiss": "Адхіліць",
|
||||||
|
"notification_requests.edit_selection": "Рэдагаваць",
|
||||||
|
"notification_requests.exit_selection": "Гатова",
|
||||||
"notification_requests.maximize": "Разгарнуць",
|
"notification_requests.maximize": "Разгарнуць",
|
||||||
"notification_requests.minimize_banner": "Згарнуць банер адфільтраваных апавяшчэнняў",
|
"notification_requests.minimize_banner": "Згарнуць банер адфільтраваных апавяшчэнняў",
|
||||||
"notification_requests.notifications_from": "Апавяшчэнні ад {name}",
|
"notification_requests.notifications_from": "Апавяшчэнні ад {name}",
|
||||||
"notification_requests.title": "Адфільтраваныя апавяшчэнні",
|
"notification_requests.title": "Адфільтраваныя апавяшчэнні",
|
||||||
|
"notification_requests.view": "Прагляд апавяшчэнняў",
|
||||||
"notifications.clear": "Ачысціць апавяшчэнні",
|
"notifications.clear": "Ачысціць апавяшчэнні",
|
||||||
"notifications.clear_confirmation": "Вы ўпэўнены, што жадаеце назаўсёды сцерці ўсё паведамленні?",
|
"notifications.clear_confirmation": "Вы ўпэўнены, што жадаеце назаўсёды сцерці ўсё паведамленні?",
|
||||||
"notifications.clear_title": "Ачысціць апавяшчэнні?",
|
"notifications.clear_title": "Ачысціць апавяшчэнні?",
|
||||||
@ -544,6 +554,10 @@
|
|||||||
"notifications.permission_denied": "Апавяшчэнні на працоўным стале недаступныя з-за папярэдне адхіленага запыта праў браўзера",
|
"notifications.permission_denied": "Апавяшчэнні на працоўным стале недаступныя з-за папярэдне адхіленага запыта праў браўзера",
|
||||||
"notifications.permission_denied_alert": "Апавяшчэнні на працоўным стале не могуць быць уключаныя, з-за таго што запыт браўзера быў адхілены",
|
"notifications.permission_denied_alert": "Апавяшчэнні на працоўным стале не могуць быць уключаныя, з-за таго што запыт браўзера быў адхілены",
|
||||||
"notifications.permission_required": "Апавяшчэнні на працоўным стале недаступныя, з-за таго што неабходны дазвол не быў дадзены.",
|
"notifications.permission_required": "Апавяшчэнні на працоўным стале недаступныя, з-за таго што неабходны дазвол не быў дадзены.",
|
||||||
|
"notifications.policy.accept": "Прыняць",
|
||||||
|
"notifications.policy.accept_hint": "Паказваць у апавяшчэннях",
|
||||||
|
"notifications.policy.drop": "Iгнараваць",
|
||||||
|
"notifications.policy.filter": "Фільтраваць",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Створаныя на працягу {days, plural, one {апошняга # дня} few {апошніх # дзён} many {апошніх # дзён} other {апошняй # дня}}",
|
"notifications.policy.filter_new_accounts.hint": "Створаныя на працягу {days, plural, one {апошняга # дня} few {апошніх # дзён} many {апошніх # дзён} other {апошняй # дня}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Новыя ўліковыя запісы",
|
"notifications.policy.filter_new_accounts_title": "Новыя ўліковыя запісы",
|
||||||
"notifications.policy.filter_not_followers_hint": "Уключаючы людзей, якія падпісаны на вас менш, чым {days, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
|
"notifications.policy.filter_not_followers_hint": "Уключаючы людзей, якія падпісаны на вас менш, чым {days, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
|
||||||
@ -552,7 +566,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Людзі, на якіх вы не падпісаны",
|
"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.filter_private_mentions_title": "Непажаданыя асаблівыя згадванні",
|
||||||
"notifications.policy.title": "Адфільтроўваць апавяшчэнні ад…",
|
"notifications.policy.title": "Наладзіць апавяшчэнні ад…",
|
||||||
"notifications_permission_banner.enable": "Уключыць апавяшчэнні на працоўным стале",
|
"notifications_permission_banner.enable": "Уключыць апавяшчэнні на працоўным стале",
|
||||||
"notifications_permission_banner.how_to_control": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.",
|
"notifications_permission_banner.how_to_control": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.",
|
||||||
"notifications_permission_banner.title": "Не прапусціце нічога",
|
"notifications_permission_banner.title": "Не прапусціце нічога",
|
||||||
@ -739,8 +753,6 @@
|
|||||||
"status.favourite": "Упадабанае",
|
"status.favourite": "Упадабанае",
|
||||||
"status.favourites": "{count, plural, one {# упадабанае} few {# упадабаныя} many {# упадабаных} other {# упадабанага}}",
|
"status.favourites": "{count, plural, one {# упадабанае} few {# упадабаныя} many {# упадабаных} other {# упадабанага}}",
|
||||||
"status.filter": "Фільтраваць гэты допіс",
|
"status.filter": "Фільтраваць гэты допіс",
|
||||||
"status.filtered": "Адфільтравана",
|
|
||||||
"status.hide": "Схаваць допіс",
|
|
||||||
"status.history.created": "Створана {name} {date}",
|
"status.history.created": "Створана {name} {date}",
|
||||||
"status.history.edited": "Адрэдагавана {name} {date}",
|
"status.history.edited": "Адрэдагавана {name} {date}",
|
||||||
"status.load_more": "Загрузіць яшчэ",
|
"status.load_more": "Загрузіць яшчэ",
|
||||||
@ -768,10 +780,7 @@
|
|||||||
"status.report": "Паскардзіцца на @{name}",
|
"status.report": "Паскардзіцца на @{name}",
|
||||||
"status.sensitive_warning": "Уражвальны змест",
|
"status.sensitive_warning": "Уражвальны змест",
|
||||||
"status.share": "Абагуліць",
|
"status.share": "Абагуліць",
|
||||||
"status.show_filter_reason": "Усё адно паказаць",
|
|
||||||
"status.show_less": "Паказаць меньш",
|
|
||||||
"status.show_less_all": "Згарнуць усё",
|
"status.show_less_all": "Згарнуць усё",
|
||||||
"status.show_more": "Паказаць болей",
|
|
||||||
"status.show_more_all": "Разгарнуць усё",
|
"status.show_more_all": "Разгарнуць усё",
|
||||||
"status.show_original": "Паказаць арыгінал",
|
"status.show_original": "Паказаць арыгінал",
|
||||||
"status.title.with_attachments": "{user} апублікаваў {attachmentCount, plural, one {далучэнне} few {{attachmentCount} далучэнні} many {{attachmentCount} далучэнняў} other {{attachmentCount} далучэння}}",
|
"status.title.with_attachments": "{user} апублікаваў {attachmentCount, plural, one {далучэнне} few {{attachmentCount} далучэнні} many {{attachmentCount} далучэнняў} other {{attachmentCount} далучэння}}",
|
||||||
@ -790,10 +799,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {засталася # хвіліна} few {засталося # хвіліны} many {засталося # хвілін} other {засталося # хвіліны}}",
|
"time_remaining.minutes": "{number, plural, one {засталася # хвіліна} few {засталося # хвіліны} many {засталося # хвілін} other {засталося # хвіліны}}",
|
||||||
"time_remaining.moments": "Засталося некалькі секунд",
|
"time_remaining.moments": "Засталося некалькі секунд",
|
||||||
"time_remaining.seconds": "{number, plural, one {засталася # секунда} few {засталося # секунды} many {засталося # секунд} other {засталося # секунды}}",
|
"time_remaining.seconds": "{number, plural, one {засталася # секунда} few {засталося # секунды} many {засталося # секунд} other {засталося # секунды}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} з іншых сервераў не адлюстроўваецца.",
|
|
||||||
"timeline_hint.resources.followers": "Падпісчыкі",
|
|
||||||
"timeline_hint.resources.follows": "Падпіскі",
|
|
||||||
"timeline_hint.resources.statuses": "Старыя допісы",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} чалавек} few {{counter} чалавекі} many {{counter} людзей} other {{counter} чалавек}} за {days, plural, one {{days} апошні дзень} few {{days} апошнія дні} many {{days} апошніх дзён} other {{days} апошніх дзён}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} чалавек} few {{counter} чалавекі} many {{counter} людзей} other {{counter} чалавек}} за {days, plural, one {{days} апошні дзень} few {{days} апошнія дні} many {{days} апошніх дзён} other {{days} апошніх дзён}}",
|
||||||
"trends.trending_now": "Актуальнае",
|
"trends.trending_now": "Актуальнае",
|
||||||
"ui.beforeunload": "Ваш чарнавік знішчыцца калі вы пакінеце Mastodon.",
|
"ui.beforeunload": "Ваш чарнавік знішчыцца калі вы пакінеце Mastodon.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Блокиране на домейн {domain}",
|
"account.block_domain": "Блокиране на домейн {domain}",
|
||||||
"account.block_short": "Блокиране",
|
"account.block_short": "Блокиране",
|
||||||
"account.blocked": "Блокирани",
|
"account.blocked": "Блокирани",
|
||||||
"account.browse_more_on_origin_server": "Разглеждане на още в оригиналния профил",
|
|
||||||
"account.cancel_follow_request": "Оттегляне на заявката за последване",
|
"account.cancel_follow_request": "Оттегляне на заявката за последване",
|
||||||
"account.copy": "Копиране на връзка към профила",
|
"account.copy": "Копиране на връзка към профила",
|
||||||
"account.direct": "Частно споменаване на @{name}",
|
"account.direct": "Частно споменаване на @{name}",
|
||||||
@ -193,6 +192,7 @@
|
|||||||
"confirmations.unfollow.confirm": "Без следване",
|
"confirmations.unfollow.confirm": "Без следване",
|
||||||
"confirmations.unfollow.message": "Наистина ли искате да не следвате {name}?",
|
"confirmations.unfollow.message": "Наистина ли искате да не следвате {name}?",
|
||||||
"confirmations.unfollow.title": "Спирате ли да следвате потребителя?",
|
"confirmations.unfollow.title": "Спирате ли да следвате потребителя?",
|
||||||
|
"content_warning.hide": "Скриване на публ.",
|
||||||
"conversation.delete": "Изтриване на разговора",
|
"conversation.delete": "Изтриване на разговора",
|
||||||
"conversation.mark_as_read": "Маркиране като прочетено",
|
"conversation.mark_as_read": "Маркиране като прочетено",
|
||||||
"conversation.open": "Преглед на разговора",
|
"conversation.open": "Преглед на разговора",
|
||||||
@ -445,8 +445,6 @@
|
|||||||
"mute_modal.title": "Заглушавате ли потребител?",
|
"mute_modal.title": "Заглушавате ли потребител?",
|
||||||
"mute_modal.you_wont_see_mentions": "Няма да виждате споменаващите ги публикации.",
|
"mute_modal.you_wont_see_mentions": "Няма да виждате споменаващите ги публикации.",
|
||||||
"mute_modal.you_wont_see_posts": "Още могат да виждат публикациите ви, но вие техните не.",
|
"mute_modal.you_wont_see_posts": "Още могат да виждат публикациите ви, но вие техните не.",
|
||||||
"name_and_others": "{name} и {count, plural, one {# друг} other {# други}}",
|
|
||||||
"name_and_others_with_link": "{name} и <a>{count, plural, one {# друг} other {# други}}</a>",
|
|
||||||
"navigation_bar.about": "Относно",
|
"navigation_bar.about": "Относно",
|
||||||
"navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
|
"navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
|
||||||
"navigation_bar.blocks": "Блокирани потребители",
|
"navigation_bar.blocks": "Блокирани потребители",
|
||||||
@ -482,7 +480,8 @@
|
|||||||
"notification.favourite": "{name} направи любима публикацията ви",
|
"notification.favourite": "{name} направи любима публикацията ви",
|
||||||
"notification.follow": "{name} ви последва",
|
"notification.follow": "{name} ви последва",
|
||||||
"notification.follow_request": "{name} поиска да ви последва",
|
"notification.follow_request": "{name} поиска да ви последва",
|
||||||
"notification.mention": "{name} ви спомена",
|
"notification.label.mention": "Споменаване",
|
||||||
|
"notification.mention": "Споменаване",
|
||||||
"notification.moderation-warning.learn_more": "Научете повече",
|
"notification.moderation-warning.learn_more": "Научете повече",
|
||||||
"notification.moderation_warning": "Получихте предупреждение за модериране",
|
"notification.moderation_warning": "Получихте предупреждение за модериране",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Някои от публикациите ви са премахнати.",
|
"notification.moderation_warning.action_delete_statuses": "Някои от публикациите ви са премахнати.",
|
||||||
@ -494,7 +493,6 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Вашият акаунт е спрян.",
|
"notification.moderation_warning.action_suspend": "Вашият акаунт е спрян.",
|
||||||
"notification.own_poll": "Анкетата ви приключи",
|
"notification.own_poll": "Анкетата ви приключи",
|
||||||
"notification.poll": "Анкета, в която гласувахте, приключи",
|
"notification.poll": "Анкета, в която гласувахте, приключи",
|
||||||
"notification.private_mention": "{name} лично ви спомена",
|
|
||||||
"notification.reblog": "{name} подсили ваша публикация",
|
"notification.reblog": "{name} подсили ваша публикация",
|
||||||
"notification.relationships_severance_event": "Изгуби се връзката с {name}",
|
"notification.relationships_severance_event": "Изгуби се връзката с {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Администратор от {from} спря {target}, което значи че повече не може да получавате новости от тях или да взаимодействате с тях.",
|
"notification.relationships_severance_event.account_suspension": "Администратор от {from} спря {target}, което значи че повече не може да получавате новости от тях или да взаимодействате с тях.",
|
||||||
@ -505,10 +503,15 @@
|
|||||||
"notification.update": "{name} промени публикация",
|
"notification.update": "{name} промени публикация",
|
||||||
"notification_requests.accept": "Приемам",
|
"notification_requests.accept": "Приемам",
|
||||||
"notification_requests.dismiss": "Отхвърлям",
|
"notification_requests.dismiss": "Отхвърлям",
|
||||||
|
"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.maximize": "Максимизиране",
|
||||||
"notification_requests.minimize_banner": "Минимизиране на банера за филтрирани известия",
|
"notification_requests.minimize_banner": "Минимизиране на банера за филтрирани известия",
|
||||||
"notification_requests.notifications_from": "Известия от {name}",
|
"notification_requests.notifications_from": "Известия от {name}",
|
||||||
"notification_requests.title": "Филтрирани известия",
|
"notification_requests.title": "Филтрирани известия",
|
||||||
|
"notification_requests.view": "Преглед на известията",
|
||||||
"notifications.clear": "Изчистване на известията",
|
"notifications.clear": "Изчистване на известията",
|
||||||
"notifications.clear_confirmation": "Наистина ли искате да изчистите завинаги всичките си известия?",
|
"notifications.clear_confirmation": "Наистина ли искате да изчистите завинаги всичките си известия?",
|
||||||
"notifications.clear_title": "Изчиствате ли известията?",
|
"notifications.clear_title": "Изчиствате ли известията?",
|
||||||
@ -545,6 +548,11 @@
|
|||||||
"notifications.permission_denied": "Известията на работния плот не са налични поради предварително отказана заявка за разрешение в браузъра",
|
"notifications.permission_denied": "Известията на работния плот не са налични поради предварително отказана заявка за разрешение в браузъра",
|
||||||
"notifications.permission_denied_alert": "Известията на работния плот не могат да се включат, тъй като разрешението на браузъра е отказвано преди",
|
"notifications.permission_denied_alert": "Известията на работния плот не могат да се включат, тъй като разрешението на браузъра е отказвано преди",
|
||||||
"notifications.permission_required": "Известията на работния плот ги няма, щото няма дадено нужното позволение.",
|
"notifications.permission_required": "Известията на работния плот ги няма, щото няма дадено нужното позволение.",
|
||||||
|
"notifications.policy.accept": "Приемам",
|
||||||
|
"notifications.policy.accept_hint": "Показване в известия",
|
||||||
|
"notifications.policy.filter": "Филтър",
|
||||||
|
"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.hint": "Сътворено през {days, plural, one {последния ден} other {последните # дена}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Нови акаунти",
|
"notifications.policy.filter_new_accounts_title": "Нови акаунти",
|
||||||
"notifications.policy.filter_not_followers_hint": "Включително хора, които са ви последвали по-малко от {days, plural, one {ден} other {# дни}}",
|
"notifications.policy.filter_not_followers_hint": "Включително хора, които са ви последвали по-малко от {days, plural, one {ден} other {# дни}}",
|
||||||
@ -553,7 +561,6 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Хора, които не следвате",
|
"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.filter_private_mentions_title": "Непоискани частни споменавания",
|
||||||
"notifications.policy.title": "Да се филтрират известия от…",
|
|
||||||
"notifications_permission_banner.enable": "Включване на известията на работния плот",
|
"notifications_permission_banner.enable": "Включване на известията на работния плот",
|
||||||
"notifications_permission_banner.how_to_control": "За да получавате известия, когато Mastodon не е отворен, включете известията на работния плот. Може да управлявате точно кои видове взаимодействия пораждат известия на работния плот чрез бутона {icon} по-горе, след като бъдат включени.",
|
"notifications_permission_banner.how_to_control": "За да получавате известия, когато Mastodon не е отворен, включете известията на работния плот. Може да управлявате точно кои видове взаимодействия пораждат известия на работния плот чрез бутона {icon} по-горе, след като бъдат включени.",
|
||||||
"notifications_permission_banner.title": "Никога не пропускайте нищо",
|
"notifications_permission_banner.title": "Никога не пропускайте нищо",
|
||||||
@ -740,8 +747,6 @@
|
|||||||
"status.favourite": "Любимо",
|
"status.favourite": "Любимо",
|
||||||
"status.favourites": "{count, plural, one {любимо} other {любими}}",
|
"status.favourites": "{count, plural, one {любимо} other {любими}}",
|
||||||
"status.filter": "Филтриране на публ.",
|
"status.filter": "Филтриране на публ.",
|
||||||
"status.filtered": "Филтрирано",
|
|
||||||
"status.hide": "Скриване на публ.",
|
|
||||||
"status.history.created": "{name} създаде {date}",
|
"status.history.created": "{name} създаде {date}",
|
||||||
"status.history.edited": "{name} редактира {date}",
|
"status.history.edited": "{name} редактира {date}",
|
||||||
"status.load_more": "Зареждане на още",
|
"status.load_more": "Зареждане на още",
|
||||||
@ -769,10 +774,7 @@
|
|||||||
"status.report": "Докладване на @{name}",
|
"status.report": "Докладване на @{name}",
|
||||||
"status.sensitive_warning": "Деликатно съдържание",
|
"status.sensitive_warning": "Деликатно съдържание",
|
||||||
"status.share": "Споделяне",
|
"status.share": "Споделяне",
|
||||||
"status.show_filter_reason": "Покажи въпреки това",
|
|
||||||
"status.show_less": "Показване на по-малко",
|
|
||||||
"status.show_less_all": "Показване на по-малко за всички",
|
"status.show_less_all": "Показване на по-малко за всички",
|
||||||
"status.show_more": "Показване на повече",
|
|
||||||
"status.show_more_all": "Показване на повече за всички",
|
"status.show_more_all": "Показване на повече за всички",
|
||||||
"status.show_original": "Показване на първообраза",
|
"status.show_original": "Показване на първообраза",
|
||||||
"status.title.with_attachments": "{user} публикува {attachmentCount, plural, one {прикачване} other {{attachmentCount} прикачвания}}",
|
"status.title.with_attachments": "{user} публикува {attachmentCount, plural, one {прикачване} other {{attachmentCount} прикачвания}}",
|
||||||
@ -791,10 +793,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {остава # минута} other {остават # минути}}",
|
"time_remaining.minutes": "{number, plural, one {остава # минута} other {остават # минути}}",
|
||||||
"time_remaining.moments": "Оставащи моменти",
|
"time_remaining.moments": "Оставащи моменти",
|
||||||
"time_remaining.seconds": "{number, plural, one {# секунда} other {# секунди}} остава",
|
"time_remaining.seconds": "{number, plural, one {# секунда} other {# секунди}} остава",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} от други сървъри не се показват.",
|
|
||||||
"timeline_hint.resources.followers": "Последователи",
|
|
||||||
"timeline_hint.resources.follows": "Последвани",
|
|
||||||
"timeline_hint.resources.statuses": "По-стари публикации",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} човек} other {{counter} души}} {days, plural, one {за последния {days} ден} other {за последните {days} дни}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} човек} other {{counter} души}} {days, plural, one {за последния {days} ден} other {за последните {days} дни}}",
|
||||||
"trends.trending_now": "Налагащи се сега",
|
"trends.trending_now": "Налагащи се сега",
|
||||||
"ui.beforeunload": "Черновата ви ще се загуби, излизайки от Mastodon.",
|
"ui.beforeunload": "Черновата ви ще се загуби, излизайки от Mastodon.",
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
"account.block_domain": "{domain} কে ব্লক করুন",
|
"account.block_domain": "{domain} কে ব্লক করুন",
|
||||||
"account.block_short": "ব্লক",
|
"account.block_short": "ব্লক",
|
||||||
"account.blocked": "অবরুদ্ধ",
|
"account.blocked": "অবরুদ্ধ",
|
||||||
"account.browse_more_on_origin_server": "মূল প্রোফাইলটিতে আরও ব্রাউজ করুন",
|
|
||||||
"account.cancel_follow_request": "অনুসরণ অনুরোধ প্রত্যাহার করুন",
|
"account.cancel_follow_request": "অনুসরণ অনুরোধ প্রত্যাহার করুন",
|
||||||
"account.direct": "গোপনে মেনশন করুন @{name}",
|
"account.direct": "গোপনে মেনশন করুন @{name}",
|
||||||
"account.disable_notifications": "আমাকে জানানো বন্ধ করো যখন @{name} পোস্ট করবে",
|
"account.disable_notifications": "আমাকে জানানো বন্ধ করো যখন @{name} পোস্ট করবে",
|
||||||
@ -314,7 +313,6 @@
|
|||||||
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
|
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
|
||||||
"notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
|
"notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
|
||||||
"notification.follow_request": "{name} আপনাকে অনুসরণ করার জন্য অনুরধ করেছে",
|
"notification.follow_request": "{name} আপনাকে অনুসরণ করার জন্য অনুরধ করেছে",
|
||||||
"notification.mention": "{name} আপনাকে উল্লেখ করেছেন",
|
|
||||||
"notification.own_poll": "আপনার পোল শেষ হয়েছে",
|
"notification.own_poll": "আপনার পোল শেষ হয়েছে",
|
||||||
"notification.reblog": "{name} আপনার কার্যক্রমে সমর্থন দেখিয়েছেন",
|
"notification.reblog": "{name} আপনার কার্যক্রমে সমর্থন দেখিয়েছেন",
|
||||||
"notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে",
|
"notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে",
|
||||||
@ -413,8 +411,6 @@
|
|||||||
"status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}",
|
"status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}",
|
||||||
"status.embed": "এমবেড করতে",
|
"status.embed": "এমবেড করতে",
|
||||||
"status.favourite": "পছন্দ",
|
"status.favourite": "পছন্দ",
|
||||||
"status.filtered": "ছাঁকনিদিত",
|
|
||||||
"status.hide": "পোস্ট লুকাও",
|
|
||||||
"status.load_more": "আরো দেখুন",
|
"status.load_more": "আরো দেখুন",
|
||||||
"status.media_hidden": "মিডিয়া লুকানো আছে",
|
"status.media_hidden": "মিডিয়া লুকানো আছে",
|
||||||
"status.mention": "@{name}কে উল্লেখ করতে",
|
"status.mention": "@{name}কে উল্লেখ করতে",
|
||||||
@ -436,9 +432,7 @@
|
|||||||
"status.report": "@{name} কে রিপোর্ট করতে",
|
"status.report": "@{name} কে রিপোর্ট করতে",
|
||||||
"status.sensitive_warning": "সংবেদনশীল কিছু",
|
"status.sensitive_warning": "সংবেদনশীল কিছু",
|
||||||
"status.share": "অন্যদের জানান",
|
"status.share": "অন্যদের জানান",
|
||||||
"status.show_less": "কম দেখতে",
|
|
||||||
"status.show_less_all": "সবগুলোতে কম দেখতে",
|
"status.show_less_all": "সবগুলোতে কম দেখতে",
|
||||||
"status.show_more": "আরো দেখাতে",
|
|
||||||
"status.show_more_all": "সবগুলোতে আরো দেখতে",
|
"status.show_more_all": "সবগুলোতে আরো দেখতে",
|
||||||
"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 {# attachments}}",
|
||||||
"status.translate": "অনুবাদ",
|
"status.translate": "অনুবাদ",
|
||||||
@ -451,10 +445,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}} বাকি আছে",
|
"time_remaining.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}} বাকি আছে",
|
||||||
"time_remaining.moments": "সময় বাকি আছে",
|
"time_remaining.moments": "সময় বাকি আছে",
|
||||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে",
|
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে",
|
||||||
"timeline_hint.remote_resource_not_displayed": "অন্য সার্ভারগুলি থেকে {resource} দেখাচ্ছে না। ",
|
|
||||||
"timeline_hint.resources.followers": "অনুসরকারীরা",
|
|
||||||
"timeline_hint.resources.follows": "অনুসরণ করে",
|
|
||||||
"timeline_hint.resources.statuses": "পুরনো টুটগুলি",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
||||||
"trends.trending_now": "বর্তমানে জনপ্রিয়",
|
"trends.trending_now": "বর্তমানে জনপ্রিয়",
|
||||||
"ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।",
|
"ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।",
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
"account.block_domain": "Stankañ an domani {domain}",
|
"account.block_domain": "Stankañ an domani {domain}",
|
||||||
"account.block_short": "Stankañ",
|
"account.block_short": "Stankañ",
|
||||||
"account.blocked": "Stanket",
|
"account.blocked": "Stanket",
|
||||||
"account.browse_more_on_origin_server": "Furchal pelloc'h war ar profil orin",
|
|
||||||
"account.cancel_follow_request": "Nullañ ar reked heuliañ",
|
"account.cancel_follow_request": "Nullañ ar reked heuliañ",
|
||||||
"account.copy": "Eilañ al liamm war-zu ho profil",
|
"account.copy": "Eilañ al liamm war-zu ho profil",
|
||||||
"account.direct": "Menegiñ @{name} ent-prevez",
|
"account.direct": "Menegiñ @{name} ent-prevez",
|
||||||
@ -390,7 +389,6 @@
|
|||||||
"notification.admin.sign_up": "{name} en·he deus lakaet e·hec'h anv",
|
"notification.admin.sign_up": "{name} en·he deus lakaet e·hec'h anv",
|
||||||
"notification.follow": "heuliañ a ra {name} ac'hanoc'h",
|
"notification.follow": "heuliañ a ra {name} ac'hanoc'h",
|
||||||
"notification.follow_request": "Gant {name} eo bet goulennet ho heuliañ",
|
"notification.follow_request": "Gant {name} eo bet goulennet ho heuliañ",
|
||||||
"notification.mention": "Gant {name} oc'h bet meneget",
|
|
||||||
"notification.moderation-warning.learn_more": "Gouzout hiroc'h",
|
"notification.moderation-warning.learn_more": "Gouzout hiroc'h",
|
||||||
"notification.own_poll": "Echu eo ho sontadeg",
|
"notification.own_poll": "Echu eo ho sontadeg",
|
||||||
"notification.reblog": "Gant {name} eo bet skignet ho toud",
|
"notification.reblog": "Gant {name} eo bet skignet ho toud",
|
||||||
@ -581,8 +579,6 @@
|
|||||||
"status.embed": "Enframmañ",
|
"status.embed": "Enframmañ",
|
||||||
"status.favourite": "Muiañ-karet",
|
"status.favourite": "Muiañ-karet",
|
||||||
"status.filter": "Silañ ar c'hannad-mañ",
|
"status.filter": "Silañ ar c'hannad-mañ",
|
||||||
"status.filtered": "Silet",
|
|
||||||
"status.hide": "Kuzhat an embannadur",
|
|
||||||
"status.history.created": "Krouet gant {name} {date}",
|
"status.history.created": "Krouet gant {name} {date}",
|
||||||
"status.history.edited": "Kemmet gant {name} {date}",
|
"status.history.edited": "Kemmet gant {name} {date}",
|
||||||
"status.load_more": "Kargañ muioc'h",
|
"status.load_more": "Kargañ muioc'h",
|
||||||
@ -609,10 +605,7 @@
|
|||||||
"status.report": "Disklêriañ @{name}",
|
"status.report": "Disklêriañ @{name}",
|
||||||
"status.sensitive_warning": "Dalc'had kizidik",
|
"status.sensitive_warning": "Dalc'had kizidik",
|
||||||
"status.share": "Rannañ",
|
"status.share": "Rannañ",
|
||||||
"status.show_filter_reason": "Diskwel memes tra",
|
|
||||||
"status.show_less": "Diskouez nebeutoc'h",
|
|
||||||
"status.show_less_all": "Diskouez nebeutoc'h evit an holl",
|
"status.show_less_all": "Diskouez nebeutoc'h evit an holl",
|
||||||
"status.show_more": "Diskouez muioc'h",
|
|
||||||
"status.show_more_all": "Diskouez miuoc'h evit an holl",
|
"status.show_more_all": "Diskouez miuoc'h evit an holl",
|
||||||
"status.show_original": "Diskouez hini orin",
|
"status.show_original": "Diskouez hini orin",
|
||||||
"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 {# attachments}}",
|
||||||
@ -630,10 +623,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# munut} other{# a vunut}} a chom",
|
"time_remaining.minutes": "{number, plural, one {# munut} other{# a vunut}} a chom",
|
||||||
"time_remaining.moments": "Pennadoù a-zilerc'h",
|
"time_remaining.moments": "Pennadoù a-zilerc'h",
|
||||||
"time_remaining.seconds": "{number, plural, one {# eilenn} other{# eilenn}} a chom",
|
"time_remaining.seconds": "{number, plural, one {# eilenn} other{# eilenn}} a chom",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} eus servijerien all n'int ket skrammet.",
|
|
||||||
"timeline_hint.resources.followers": "Heulier·ezed·ien",
|
|
||||||
"timeline_hint.resources.follows": "Heuliañ",
|
|
||||||
"timeline_hint.resources.statuses": "Toudoù koshoc'h",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
||||||
"trends.trending_now": "Luskad ar mare",
|
"trends.trending_now": "Luskad ar mare",
|
||||||
"ui.beforeunload": "Kollet e vo ho prell ma kuitit Mastodon.",
|
"ui.beforeunload": "Kollet e vo ho prell ma kuitit Mastodon.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Bloca el domini {domain}",
|
"account.block_domain": "Bloca el domini {domain}",
|
||||||
"account.block_short": "Bloca",
|
"account.block_short": "Bloca",
|
||||||
"account.blocked": "Blocat",
|
"account.blocked": "Blocat",
|
||||||
"account.browse_more_on_origin_server": "Explora'n més al perfil original",
|
|
||||||
"account.cancel_follow_request": "Cancel·la el seguiment",
|
"account.cancel_follow_request": "Cancel·la el seguiment",
|
||||||
"account.copy": "Copia l'enllaç al perfil",
|
"account.copy": "Copia l'enllaç al perfil",
|
||||||
"account.direct": "Menciona privadament @{name}",
|
"account.direct": "Menciona privadament @{name}",
|
||||||
@ -98,6 +97,8 @@
|
|||||||
"block_modal.title": "Bloquem l'usuari?",
|
"block_modal.title": "Bloquem l'usuari?",
|
||||||
"block_modal.you_wont_see_mentions": "No veureu publicacions que l'esmentin.",
|
"block_modal.you_wont_see_mentions": "No veureu publicacions que l'esmentin.",
|
||||||
"boost_modal.combo": "Pots prémer {combo} per a evitar-ho el pròxim cop",
|
"boost_modal.combo": "Pots prémer {combo} per a evitar-ho el pròxim cop",
|
||||||
|
"boost_modal.reblog": "Voleu impulsar la publicació?",
|
||||||
|
"boost_modal.undo_reblog": "Voleu retirar l'impuls a la publicació?",
|
||||||
"bundle_column_error.copy_stacktrace": "Copia l'informe d'error",
|
"bundle_column_error.copy_stacktrace": "Copia l'informe d'error",
|
||||||
"bundle_column_error.error.body": "No s'ha pogut renderitzar la pàgina sol·licitada. Podria ser per un error en el nostre codi o per un problema de compatibilitat del navegador.",
|
"bundle_column_error.error.body": "No s'ha pogut renderitzar la pàgina sol·licitada. Podria ser per un error en el nostre codi o per un problema de compatibilitat del navegador.",
|
||||||
"bundle_column_error.error.title": "Oh, no!",
|
"bundle_column_error.error.title": "Oh, no!",
|
||||||
@ -193,6 +194,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Deixa de seguir",
|
"confirmations.unfollow.confirm": "Deixa de seguir",
|
||||||
"confirmations.unfollow.message": "Segur que vols deixar de seguir {name}?",
|
"confirmations.unfollow.message": "Segur que vols deixar de seguir {name}?",
|
||||||
"confirmations.unfollow.title": "Deixar de seguir l'usuari?",
|
"confirmations.unfollow.title": "Deixar de seguir l'usuari?",
|
||||||
|
"content_warning.hide": "Amaga la publicació",
|
||||||
|
"content_warning.show": "Mostra-la igualment",
|
||||||
"conversation.delete": "Elimina la conversa",
|
"conversation.delete": "Elimina la conversa",
|
||||||
"conversation.mark_as_read": "Marca com a llegida",
|
"conversation.mark_as_read": "Marca com a llegida",
|
||||||
"conversation.open": "Mostra la conversa",
|
"conversation.open": "Mostra la conversa",
|
||||||
@ -300,6 +303,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova",
|
"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.select_filter.title": "Filtra aquest tut",
|
||||||
"filter_modal.title.status": "Filtra un tut",
|
"filter_modal.title.status": "Filtra un tut",
|
||||||
|
"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.pending_requests": "{count, plural, =0 {De ningú} one {D'una persona} other {De # persones}} que potser coneixes",
|
||||||
"filtered_notifications_banner.title": "Notificacions filtrades",
|
"filtered_notifications_banner.title": "Notificacions filtrades",
|
||||||
"firehose.all": "Tots",
|
"firehose.all": "Tots",
|
||||||
@ -349,6 +353,14 @@
|
|||||||
"hashtag.follow": "Segueix l'etiqueta",
|
"hashtag.follow": "Segueix l'etiqueta",
|
||||||
"hashtag.unfollow": "Deixa de seguir l'etiqueta",
|
"hashtag.unfollow": "Deixa de seguir l'etiqueta",
|
||||||
"hashtags.and_other": "…i {count, plural, other {# més}}",
|
"hashtags.and_other": "…i {count, plural, other {# més}}",
|
||||||
|
"hints.profiles.followers_may_be_missing": "Es poden haver perdut seguidors d'aquest perfil.",
|
||||||
|
"hints.profiles.follows_may_be_missing": "Es poden haver perdut seguiments d'aquest perfil.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Es poden haver perdut algunes publicacions d'aquest perfil.",
|
||||||
|
"hints.profiles.see_more_followers": "Vegeu més seguidors a {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "Vegeu més seguiments a {domain}",
|
||||||
|
"hints.profiles.see_more_posts": "Vegeu més publicacions a {domain}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Es poden haver perdut respostes d'altres servidors.",
|
||||||
|
"hints.threads.see_more": "Vegeu més respostes a {domain}",
|
||||||
"home.column_settings.show_reblogs": "Mostra els impulsos",
|
"home.column_settings.show_reblogs": "Mostra els impulsos",
|
||||||
"home.column_settings.show_replies": "Mostra les respostes",
|
"home.column_settings.show_replies": "Mostra les respostes",
|
||||||
"home.hide_announcements": "Amaga els anuncis",
|
"home.hide_announcements": "Amaga els anuncis",
|
||||||
@ -356,6 +368,17 @@
|
|||||||
"home.pending_critical_update.link": "Veure actualitzacions",
|
"home.pending_critical_update.link": "Veure actualitzacions",
|
||||||
"home.pending_critical_update.title": "Actualització de seguretat crítica disponible!",
|
"home.pending_critical_update.title": "Actualització de seguretat crítica disponible!",
|
||||||
"home.show_announcements": "Mostra els anuncis",
|
"home.show_announcements": "Mostra els anuncis",
|
||||||
|
"ignore_notifications_modal.disclaimer": "Mastodon no pot informar els usuaris que heu ignorat notificacions seves.\nIgnorar notificacions no evitarà que se segueixin enviant els missatges.",
|
||||||
|
"ignore_notifications_modal.filter_instead": "Altrament filtra",
|
||||||
|
"ignore_notifications_modal.filter_to_act_users": "Encara podreu acceptar, rebutjar o reportar usuaris",
|
||||||
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar ajuda a evitar potencials confusions",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "Podeu revisar separadament notificacions filtrades",
|
||||||
|
"ignore_notifications_modal.ignore": "Ignora les notificacions",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "Voleu ignorar les notificacions dels comptes moderats?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "Voleu ignorar les notificacions dels comptes nous?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "Voleu ignorar les notificacions de qui no us segueix?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Voleu ignorar les notificacions de qui no seguiu?",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "Voleu ignorar les notificacions de mencions privades no sol·licitades?",
|
||||||
"interaction_modal.description.favourite": "Amb un compte a Mastodon pots afavorir aquest tut perquè l'autor sàpiga que t'ha agradat i desar-lo per a més endavant.",
|
"interaction_modal.description.favourite": "Amb un compte a Mastodon pots afavorir aquest tut perquè l'autor sàpiga que t'ha agradat i desar-lo per a més endavant.",
|
||||||
"interaction_modal.description.follow": "Amb un compte a Mastodon, pots seguir a {name} per a rebre els seus tuts en la teva línia de temps d'Inici.",
|
"interaction_modal.description.follow": "Amb un compte a Mastodon, pots seguir a {name} per a rebre els seus tuts en la teva línia de temps d'Inici.",
|
||||||
"interaction_modal.description.reblog": "Amb un compte a Mastodon, pots impulsar aquest tut per a compartir-lo amb els teus seguidors.",
|
"interaction_modal.description.reblog": "Amb un compte a Mastodon, pots impulsar aquest tut per a compartir-lo amb els teus seguidors.",
|
||||||
@ -445,9 +468,8 @@
|
|||||||
"mute_modal.title": "Silenciem l'usuari?",
|
"mute_modal.title": "Silenciem l'usuari?",
|
||||||
"mute_modal.you_wont_see_mentions": "No veureu publicacions que els esmentin.",
|
"mute_modal.you_wont_see_mentions": "No veureu publicacions que els esmentin.",
|
||||||
"mute_modal.you_wont_see_posts": "Encara poden veure les vostres publicacions, però no veureu les seves.",
|
"mute_modal.you_wont_see_posts": "Encara poden veure les vostres publicacions, però no veureu les seves.",
|
||||||
"name_and_others": "{name} i {count, plural, one {# altre} other {# altres}}",
|
|
||||||
"name_and_others_with_link": "{name} i <a>{count, plural, one {# altre} other {# altres}}</a>",
|
|
||||||
"navigation_bar.about": "Quant a",
|
"navigation_bar.about": "Quant a",
|
||||||
|
"navigation_bar.administration": "Administració",
|
||||||
"navigation_bar.advanced_interface": "Obre en la interfície web avançada",
|
"navigation_bar.advanced_interface": "Obre en la interfície web avançada",
|
||||||
"navigation_bar.blocks": "Usuaris blocats",
|
"navigation_bar.blocks": "Usuaris blocats",
|
||||||
"navigation_bar.bookmarks": "Marcadors",
|
"navigation_bar.bookmarks": "Marcadors",
|
||||||
@ -464,6 +486,7 @@
|
|||||||
"navigation_bar.follows_and_followers": "Seguint i seguidors",
|
"navigation_bar.follows_and_followers": "Seguint i seguidors",
|
||||||
"navigation_bar.lists": "Llistes",
|
"navigation_bar.lists": "Llistes",
|
||||||
"navigation_bar.logout": "Tanca la sessió",
|
"navigation_bar.logout": "Tanca la sessió",
|
||||||
|
"navigation_bar.moderation": "Moderació",
|
||||||
"navigation_bar.mutes": "Usuaris silenciats",
|
"navigation_bar.mutes": "Usuaris silenciats",
|
||||||
"navigation_bar.opened_in_classic_interface": "Els tuts, comptes i altres pàgines especifiques s'obren per defecte en la interfície web clàssica.",
|
"navigation_bar.opened_in_classic_interface": "Els tuts, comptes i altres pàgines especifiques s'obren per defecte en la interfície web clàssica.",
|
||||||
"navigation_bar.personal": "Personal",
|
"navigation_bar.personal": "Personal",
|
||||||
@ -479,10 +502,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} ha reportat {target} per {category}",
|
"notification.admin.report_statuses": "{name} ha reportat {target} per {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} ha reportat {target}",
|
"notification.admin.report_statuses_other": "{name} ha reportat {target}",
|
||||||
"notification.admin.sign_up": "{name} s'ha registrat",
|
"notification.admin.sign_up": "{name} s'ha registrat",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} s'han registrat",
|
||||||
"notification.favourite": "{name} ha afavorit el teu tut",
|
"notification.favourite": "{name} ha afavorit el teu tut",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} i <a>{count, plural, one {# altre} other {# altres}}</a> han afavorit la vostra publicació",
|
||||||
"notification.follow": "{name} et segueix",
|
"notification.follow": "{name} et segueix",
|
||||||
|
"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} ha sol·licitat de seguir-te",
|
||||||
"notification.mention": "{name} t'ha esmentat",
|
"notification.follow_request.name_and_others": "{name} i {count, plural, one {# altre} other {# altres}} han demanat de seguir-vos",
|
||||||
|
"notification.label.mention": "Menció",
|
||||||
|
"notification.label.private_mention": "Menció privada",
|
||||||
|
"notification.label.private_reply": "Resposta en privat",
|
||||||
|
"notification.label.reply": "Resposta",
|
||||||
|
"notification.mention": "Menció",
|
||||||
"notification.moderation-warning.learn_more": "Per a saber-ne més",
|
"notification.moderation-warning.learn_more": "Per a saber-ne més",
|
||||||
"notification.moderation_warning": "Heu rebut un avís de moderació",
|
"notification.moderation_warning": "Heu rebut un avís de moderació",
|
||||||
"notification.moderation_warning.action_delete_statuses": "S'han eliminat algunes de les vostres publicacions.",
|
"notification.moderation_warning.action_delete_statuses": "S'han eliminat algunes de les vostres publicacions.",
|
||||||
@ -494,8 +525,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "S'ha suspès el vostre compte.",
|
"notification.moderation_warning.action_suspend": "S'ha suspès el vostre compte.",
|
||||||
"notification.own_poll": "La teva enquesta ha finalitzat",
|
"notification.own_poll": "La teva enquesta ha finalitzat",
|
||||||
"notification.poll": "Ha finalitzat una enquesta que heu respost",
|
"notification.poll": "Ha finalitzat una enquesta que heu respost",
|
||||||
"notification.private_mention": "{name} us ha esmentat en privat",
|
|
||||||
"notification.reblog": "{name} t'ha impulsat",
|
"notification.reblog": "{name} t'ha impulsat",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} i <a>{count, plural, one {# altre} other {# altres}}</a> han impulsat la vostra publicació",
|
||||||
"notification.relationships_severance_event": "S'han perdut les connexions amb {name}",
|
"notification.relationships_severance_event": "S'han perdut les connexions amb {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Un administrador de {from} ha suspès {target}; això vol dir que ja no en podreu rebre actualitzacions o interactuar-hi.",
|
"notification.relationships_severance_event.account_suspension": "Un administrador de {from} ha suspès {target}; això vol dir que ja no en podreu rebre actualitzacions o interactuar-hi.",
|
||||||
"notification.relationships_severance_event.domain_block": "Un administrador de {from} ha blocat {target}, incloent-hi {followersCount} dels vostres seguidors i {followingCount, plural, one {# compte} other {# comptes}} que seguiu.",
|
"notification.relationships_severance_event.domain_block": "Un administrador de {from} ha blocat {target}, incloent-hi {followersCount} dels vostres seguidors i {followingCount, plural, one {# compte} other {# comptes}} que seguiu.",
|
||||||
@ -504,11 +535,24 @@
|
|||||||
"notification.status": "{name} acaba de publicar",
|
"notification.status": "{name} acaba de publicar",
|
||||||
"notification.update": "{name} ha editat un tut",
|
"notification.update": "{name} ha editat un tut",
|
||||||
"notification_requests.accept": "Accepta",
|
"notification_requests.accept": "Accepta",
|
||||||
|
"notification_requests.accept_multiple": "{count, plural, one {Accepta # petició…} other {Accepta # peticions…}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Accepta petició} other {Accepta peticions}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "Esteu a punt d'acceptar {count, plural, one {una petició de notificació} other {# peticions de notificació}}. N'esteu segurs de continuar?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "Acceptar peticions de notificació?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Descarta petició} other {Descarta peticions}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "Esteu a punt de descartar {count, plural, one {una petició de notificació} other {# peticions de notificació}}. No hi {count, plural, one {} other {}} podreu tornar a accedir fàcilment. N'esteu segurs de continuar?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Descartar les peticions de notificació?",
|
||||||
"notification_requests.dismiss": "Ignora",
|
"notification_requests.dismiss": "Ignora",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Descarta # petició…} other {Descarta # peticions…}}",
|
||||||
|
"notification_requests.edit_selection": "Edita",
|
||||||
|
"notification_requests.exit_selection": "Fet",
|
||||||
|
"notification_requests.explainer_for_limited_account": "S'han filtrat les notificacions d'aquest compte perquè un moderador l'ha limitat.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "S'han filtrat les notificacions d'aquest compte perquè un moderador ha limitat el compte o el seu servidor.",
|
||||||
"notification_requests.maximize": "Maximitza",
|
"notification_requests.maximize": "Maximitza",
|
||||||
"notification_requests.minimize_banner": "Minimitza el bàner de notificacions filtrades",
|
"notification_requests.minimize_banner": "Minimitza el bàner de notificacions filtrades",
|
||||||
"notification_requests.notifications_from": "Notificacions de {name}",
|
"notification_requests.notifications_from": "Notificacions de {name}",
|
||||||
"notification_requests.title": "Notificacions filtrades",
|
"notification_requests.title": "Notificacions filtrades",
|
||||||
|
"notification_requests.view": "Mostra les notificacions",
|
||||||
"notifications.clear": "Esborra les notificacions",
|
"notifications.clear": "Esborra les notificacions",
|
||||||
"notifications.clear_confirmation": "Segur que vols esborrar permanentment totes les teves notificacions?",
|
"notifications.clear_confirmation": "Segur que vols esborrar permanentment totes les teves notificacions?",
|
||||||
"notifications.clear_title": "Esborrar les notificacions?",
|
"notifications.clear_title": "Esborrar les notificacions?",
|
||||||
@ -545,6 +589,14 @@
|
|||||||
"notifications.permission_denied": "Les notificacions d’escriptori no estan disponibles perquè prèviament s’ha denegat el permís al navegador",
|
"notifications.permission_denied": "Les notificacions d’escriptori no estan disponibles perquè prèviament s’ha denegat el permís al navegador",
|
||||||
"notifications.permission_denied_alert": "No es poden activar les notificacions de l'escriptori perquè abans s'ha denegat el permís del navegador",
|
"notifications.permission_denied_alert": "No es poden activar les notificacions de l'escriptori perquè abans s'ha denegat el permís del navegador",
|
||||||
"notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.",
|
"notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.",
|
||||||
|
"notifications.policy.accept": "Accepta",
|
||||||
|
"notifications.policy.accept_hint": "Mostra a notificacions",
|
||||||
|
"notifications.policy.drop": "Ignora",
|
||||||
|
"notifications.policy.drop_hint": "Envia al buit, no es tornarà a veure mai més",
|
||||||
|
"notifications.policy.filter": "Filtra",
|
||||||
|
"notifications.policy.filter_hint": "Envia a la bústia de notificacions filtrades",
|
||||||
|
"notifications.policy.filter_limited_accounts_hint": "Limitat pels moderadors del servidor",
|
||||||
|
"notifications.policy.filter_limited_accounts_title": "Comptes moderats",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Creat {days, plural, one {ahir} other {durant els # dies passats}}",
|
"notifications.policy.filter_new_accounts.hint": "Creat {days, plural, one {ahir} other {durant els # dies passats}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Comptes nous",
|
"notifications.policy.filter_new_accounts_title": "Comptes nous",
|
||||||
"notifications.policy.filter_not_followers_hint": "Incloent les persones que us segueixen fa menys {days, plural, one {d'un dia} other {de # dies}}",
|
"notifications.policy.filter_not_followers_hint": "Incloent les persones que us segueixen fa menys {days, plural, one {d'un dia} other {de # dies}}",
|
||||||
@ -553,7 +605,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Persones que no seguiu",
|
"notifications.policy.filter_not_following_title": "Persones que no seguiu",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Filtrat si no és que és en resposta a una menció vostra o si seguiu el remitent",
|
"notifications.policy.filter_private_mentions_hint": "Filtrat si no és que és en resposta a una menció vostra o si seguiu el remitent",
|
||||||
"notifications.policy.filter_private_mentions_title": "Mencions privades no sol·licitades",
|
"notifications.policy.filter_private_mentions_title": "Mencions privades no sol·licitades",
|
||||||
"notifications.policy.title": "Filtra les notificacions de…",
|
"notifications.policy.title": "Gestiona les notificacions des de…",
|
||||||
"notifications_permission_banner.enable": "Activa les notificacions d’escriptori",
|
"notifications_permission_banner.enable": "Activa les notificacions d’escriptori",
|
||||||
"notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no és obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.",
|
"notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no és obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.",
|
||||||
"notifications_permission_banner.title": "No et perdis mai res",
|
"notifications_permission_banner.title": "No et perdis mai res",
|
||||||
@ -740,8 +792,6 @@
|
|||||||
"status.favourite": "Favorit",
|
"status.favourite": "Favorit",
|
||||||
"status.favourites": "{count, plural, one {favorit} other {favorits}}",
|
"status.favourites": "{count, plural, one {favorit} other {favorits}}",
|
||||||
"status.filter": "Filtra aquest tut",
|
"status.filter": "Filtra aquest tut",
|
||||||
"status.filtered": "Filtrada",
|
|
||||||
"status.hide": "Amaga el tut",
|
|
||||||
"status.history.created": "creat per {name} {date}",
|
"status.history.created": "creat per {name} {date}",
|
||||||
"status.history.edited": "editat per {name} {date}",
|
"status.history.edited": "editat per {name} {date}",
|
||||||
"status.load_more": "Carrega'n més",
|
"status.load_more": "Carrega'n més",
|
||||||
@ -769,10 +819,7 @@
|
|||||||
"status.report": "Denuncia @{name}",
|
"status.report": "Denuncia @{name}",
|
||||||
"status.sensitive_warning": "Contingut sensible",
|
"status.sensitive_warning": "Contingut sensible",
|
||||||
"status.share": "Comparteix",
|
"status.share": "Comparteix",
|
||||||
"status.show_filter_reason": "Mostra igualment",
|
|
||||||
"status.show_less": "Mostra'n menys",
|
|
||||||
"status.show_less_all": "Mostra'n menys per a tot",
|
"status.show_less_all": "Mostra'n menys per a tot",
|
||||||
"status.show_more": "Mostra'n més",
|
|
||||||
"status.show_more_all": "Mostra'n més per a tot",
|
"status.show_more_all": "Mostra'n més per a tot",
|
||||||
"status.show_original": "Mostra l'original",
|
"status.show_original": "Mostra l'original",
|
||||||
"status.title.with_attachments": "{user} ha publicat {attachmentCount, plural, one {un adjunt} other {{attachmentCount} adjunts}}",
|
"status.title.with_attachments": "{user} ha publicat {attachmentCount, plural, one {un adjunt} other {{attachmentCount} adjunts}}",
|
||||||
@ -791,10 +838,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minut restant} other {# minuts restants}}",
|
"time_remaining.minutes": "{number, plural, one {# minut restant} other {# minuts restants}}",
|
||||||
"time_remaining.moments": "Moments restants",
|
"time_remaining.moments": "Moments restants",
|
||||||
"time_remaining.seconds": "{number, plural, one {# segon restant} other {# segons restants}}",
|
"time_remaining.seconds": "{number, plural, one {# segon restant} other {# segons restants}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "No es mostren {resource} d'altres servidors.",
|
|
||||||
"timeline_hint.resources.followers": "Seguidors",
|
|
||||||
"timeline_hint.resources.follows": "Seguiments",
|
|
||||||
"timeline_hint.resources.statuses": "Tuts més antics",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persones}} en {days, plural, one {el passat dia} other {els passats {days} dies}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persones}} en {days, plural, one {el passat dia} other {els passats {days} dies}}",
|
||||||
"trends.trending_now": "És tendència",
|
"trends.trending_now": "És tendència",
|
||||||
"ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
|
"ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
"account.block_domain": "بلۆکی هەموو شتێک لە {domain}",
|
"account.block_domain": "بلۆکی هەموو شتێک لە {domain}",
|
||||||
"account.block_short": "بلۆک",
|
"account.block_short": "بلۆک",
|
||||||
"account.blocked": "بلۆککرا",
|
"account.blocked": "بلۆککرا",
|
||||||
"account.browse_more_on_origin_server": "گەڕانی فرەتر لە سەر پرۆفایلی سەرەکی",
|
|
||||||
"account.cancel_follow_request": "داواکاری فۆڵۆو بکشێنەوە",
|
"account.cancel_follow_request": "داواکاری فۆڵۆو بکشێنەوە",
|
||||||
"account.copy": "ڕوونووسی بەستەر بۆ توت",
|
"account.copy": "ڕوونووسی بەستەر بۆ توت",
|
||||||
"account.direct": "بە شێوەیەکی تایبەت باسی @{name} بکە",
|
"account.direct": "بە شێوەیەکی تایبەت باسی @{name} بکە",
|
||||||
@ -385,7 +384,6 @@
|
|||||||
"notification.admin.sign_up": "{name} تۆمارکرا",
|
"notification.admin.sign_up": "{name} تۆمارکرا",
|
||||||
"notification.follow": "{name} دوای تۆ کەوت",
|
"notification.follow": "{name} دوای تۆ کەوت",
|
||||||
"notification.follow_request": "{name} داوای کردووە کە شوێنت بکەوێت",
|
"notification.follow_request": "{name} داوای کردووە کە شوێنت بکەوێت",
|
||||||
"notification.mention": "{name} باسی ئێوەی کرد",
|
|
||||||
"notification.own_poll": "ڕاپرسیەکەت کۆتایی هات",
|
"notification.own_poll": "ڕاپرسیەکەت کۆتایی هات",
|
||||||
"notification.reblog": "{name} نووسراوەکەتی دووبارە توتاند",
|
"notification.reblog": "{name} نووسراوەکەتی دووبارە توتاند",
|
||||||
"notification.status": "{name} تازە بڵاوکرایەوە",
|
"notification.status": "{name} تازە بڵاوکرایەوە",
|
||||||
@ -544,8 +542,6 @@
|
|||||||
"status.edited_x_times": "دەستکاریکراوە {count, plural, one {{count} کات} other {{count} کات}}",
|
"status.edited_x_times": "دەستکاریکراوە {count, plural, one {{count} کات} other {{count} کات}}",
|
||||||
"status.embed": "نیشتەجێ بکە",
|
"status.embed": "نیشتەجێ بکە",
|
||||||
"status.filter": "ئەم پۆستە فلتەر بکە",
|
"status.filter": "ئەم پۆستە فلتەر بکە",
|
||||||
"status.filtered": "پاڵاوتن",
|
|
||||||
"status.hide": "شاردنەوەی پۆست",
|
|
||||||
"status.history.created": "{name} دروستکراوە لە{date}",
|
"status.history.created": "{name} دروستکراوە لە{date}",
|
||||||
"status.history.edited": "{name} دروستکاریکراوە لە{date}",
|
"status.history.edited": "{name} دروستکاریکراوە لە{date}",
|
||||||
"status.load_more": "زیاتر بار بکە",
|
"status.load_more": "زیاتر بار بکە",
|
||||||
@ -570,10 +566,7 @@
|
|||||||
"status.report": "گوزارشت @{name}",
|
"status.report": "گوزارشت @{name}",
|
||||||
"status.sensitive_warning": "ناوەڕۆکی هەستیار",
|
"status.sensitive_warning": "ناوەڕۆکی هەستیار",
|
||||||
"status.share": "هاوبەشی بکە",
|
"status.share": "هاوبەشی بکە",
|
||||||
"status.show_filter_reason": "بە هەر حاڵ نیشان بدە",
|
|
||||||
"status.show_less": "کەمتر نیشان بدە",
|
|
||||||
"status.show_less_all": "هەمووی بچووک بکەوە",
|
"status.show_less_all": "هەمووی بچووک بکەوە",
|
||||||
"status.show_more": "زیاتر نیشان بدە",
|
|
||||||
"status.show_more_all": "زیاتر نیشان بدە بۆ هەمووی",
|
"status.show_more_all": "زیاتر نیشان بدە بۆ هەمووی",
|
||||||
"status.show_original": "پیشاندانی شێوهی ڕاستهقینه",
|
"status.show_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 {# attachments}}",
|
||||||
@ -591,10 +584,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# خولەک} other {# خولەک}} ماوە",
|
"time_remaining.minutes": "{number, plural, one {# خولەک} other {# خولەک}} ماوە",
|
||||||
"time_remaining.moments": "کاتی ماوە",
|
"time_remaining.moments": "کاتی ماوە",
|
||||||
"time_remaining.seconds": "{number, plural, one {# چرکە} other {# چرکە}} ماوە",
|
"time_remaining.seconds": "{number, plural, one {# چرکە} other {# چرکە}} ماوە",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} لە ڕاژەکانی ترەوە پیشان نادرێت.",
|
|
||||||
"timeline_hint.resources.followers": "شوێنکەوتوو",
|
|
||||||
"timeline_hint.resources.follows": "شوێنکەوتن",
|
|
||||||
"timeline_hint.resources.statuses": "نێردراوی کۆن",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}",
|
||||||
"trends.trending_now": "ڕۆژەڤ",
|
"trends.trending_now": "ڕۆژەڤ",
|
||||||
"ui.beforeunload": "ڕەشنووسەکەت لەدەست دەچێت ئەگەر ماستۆدۆن جێ بهێڵیت.",
|
"ui.beforeunload": "ڕەشنووسەکەت لەدەست دەچێت ئەگەر ماستۆدۆن جێ بهێڵیت.",
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
"account.block": "Bluccà @{name}",
|
"account.block": "Bluccà @{name}",
|
||||||
"account.block_domain": "Piattà u duminiu {domain}",
|
"account.block_domain": "Piattà u duminiu {domain}",
|
||||||
"account.blocked": "Bluccatu",
|
"account.blocked": "Bluccatu",
|
||||||
"account.browse_more_on_origin_server": "Vede di più nant'à u prufile uriginale",
|
|
||||||
"account.cancel_follow_request": "Withdraw follow request",
|
"account.cancel_follow_request": "Withdraw follow request",
|
||||||
"account.disable_notifications": "Ùn mi nutificate più quandu @{name} pubblica qualcosa",
|
"account.disable_notifications": "Ùn mi nutificate più quandu @{name} pubblica qualcosa",
|
||||||
"account.domain_blocked": "Duminiu piattatu",
|
"account.domain_blocked": "Duminiu piattatu",
|
||||||
@ -236,7 +235,6 @@
|
|||||||
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
|
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
|
||||||
"notification.follow": "{name} v'hà seguitatu",
|
"notification.follow": "{name} v'hà seguitatu",
|
||||||
"notification.follow_request": "{name} vole abbunassi à u vostru contu",
|
"notification.follow_request": "{name} vole abbunassi à u vostru contu",
|
||||||
"notification.mention": "{name} v'hà mintuvatu",
|
|
||||||
"notification.own_poll": "U vostru scandagliu hè compiu",
|
"notification.own_poll": "U vostru scandagliu hè compiu",
|
||||||
"notification.reblog": "{name} hà spartutu u vostru statutu",
|
"notification.reblog": "{name} hà spartutu u vostru statutu",
|
||||||
"notification.status": "{name} hà appena pubblicatu",
|
"notification.status": "{name} hà appena pubblicatu",
|
||||||
@ -323,7 +321,6 @@
|
|||||||
"status.detailed_status": "Vista in ditagliu di a cunversazione",
|
"status.detailed_status": "Vista in ditagliu di a cunversazione",
|
||||||
"status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}",
|
"status.edited_x_times": "Edited {count, plural, one {# time} other {# times}}",
|
||||||
"status.embed": "Integrà",
|
"status.embed": "Integrà",
|
||||||
"status.filtered": "Filtratu",
|
|
||||||
"status.load_more": "Vede di più",
|
"status.load_more": "Vede di più",
|
||||||
"status.media_hidden": "Media piattata",
|
"status.media_hidden": "Media piattata",
|
||||||
"status.mention": "Mintuvà @{name}",
|
"status.mention": "Mintuvà @{name}",
|
||||||
@ -345,9 +342,7 @@
|
|||||||
"status.report": "Palisà @{name}",
|
"status.report": "Palisà @{name}",
|
||||||
"status.sensitive_warning": "Cuntinutu sensibile",
|
"status.sensitive_warning": "Cuntinutu sensibile",
|
||||||
"status.share": "Sparte",
|
"status.share": "Sparte",
|
||||||
"status.show_less": "Ripiegà",
|
|
||||||
"status.show_less_all": "Ripiegà tuttu",
|
"status.show_less_all": "Ripiegà tuttu",
|
||||||
"status.show_more": "Slibrà",
|
|
||||||
"status.show_more_all": "Slibrà tuttu",
|
"status.show_more_all": "Slibrà tuttu",
|
||||||
"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 {# attachments}}",
|
||||||
"status.unmute_conversation": "Ùn piattà più a cunversazione",
|
"status.unmute_conversation": "Ùn piattà più a cunversazione",
|
||||||
@ -359,10 +354,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minuta ferma} other {# minute fermanu}} left",
|
"time_remaining.minutes": "{number, plural, one {# minuta ferma} other {# minute fermanu}} left",
|
||||||
"time_remaining.moments": "Ci fermanu qualchi mumentu",
|
"time_remaining.moments": "Ci fermanu qualchi mumentu",
|
||||||
"time_remaining.seconds": "{number, plural, one {# siconda ferma} other {# siconde fermanu}}",
|
"time_remaining.seconds": "{number, plural, one {# siconda ferma} other {# siconde fermanu}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} da l'altri servori ùn so micca affissati·e.",
|
|
||||||
"timeline_hint.resources.followers": "Abbunati",
|
|
||||||
"timeline_hint.resources.follows": "Abbunamenti",
|
|
||||||
"timeline_hint.resources.statuses": "Statuti più anziani",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {# days}}",
|
||||||
"trends.trending_now": "Tindenze d'avà",
|
"trends.trending_now": "Tindenze d'avà",
|
||||||
"ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
|
"ui.beforeunload": "A bruttacopia sarà persa s'ellu hè chjosu Mastodon.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Blokovat doménu {domain}",
|
"account.block_domain": "Blokovat doménu {domain}",
|
||||||
"account.block_short": "Zablokovat",
|
"account.block_short": "Zablokovat",
|
||||||
"account.blocked": "Blokovaný",
|
"account.blocked": "Blokovaný",
|
||||||
"account.browse_more_on_origin_server": "Více na původním profilu",
|
|
||||||
"account.cancel_follow_request": "Zrušit sledování",
|
"account.cancel_follow_request": "Zrušit sledování",
|
||||||
"account.copy": "Kopírovat odkaz na profil",
|
"account.copy": "Kopírovat odkaz na profil",
|
||||||
"account.direct": "Soukromě zmínit @{name}",
|
"account.direct": "Soukromě zmínit @{name}",
|
||||||
@ -477,7 +476,6 @@
|
|||||||
"notification.favourite": "Uživatel {name} si oblíbil váš příspěvek",
|
"notification.favourite": "Uživatel {name} si oblíbil váš příspěvek",
|
||||||
"notification.follow": "Uživatel {name} vás začal sledovat",
|
"notification.follow": "Uživatel {name} vás začal sledovat",
|
||||||
"notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat",
|
"notification.follow_request": "Uživatel {name} požádal o povolení vás sledovat",
|
||||||
"notification.mention": "Uživatel {name} vás zmínil",
|
|
||||||
"notification.moderation-warning.learn_more": "Zjistit více",
|
"notification.moderation-warning.learn_more": "Zjistit více",
|
||||||
"notification.moderation_warning": "Obdrželi jste moderační varování",
|
"notification.moderation_warning": "Obdrželi jste moderační varování",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Některé z vašich příspěvků byly odstraněny.",
|
"notification.moderation_warning.action_delete_statuses": "Některé z vašich příspěvků byly odstraněny.",
|
||||||
@ -489,7 +487,6 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Váš účet byl pozastaven.",
|
"notification.moderation_warning.action_suspend": "Váš účet byl pozastaven.",
|
||||||
"notification.own_poll": "Vaše anketa skončila",
|
"notification.own_poll": "Vaše anketa skončila",
|
||||||
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
|
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
|
||||||
"notification.private_mention": "{name} vás soukromě zmínil",
|
|
||||||
"notification.reblog": "Uživatel {name} boostnul váš příspěvek",
|
"notification.reblog": "Uživatel {name} boostnul váš příspěvek",
|
||||||
"notification.relationships_severance_event": "Kontakt ztracen s {name}",
|
"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.account_suspension": "Administrátor z {from} pozastavil {target}, což znamená, že již od nich nemůžete přijímat aktualizace nebo s nimi interagovat.",
|
||||||
@ -548,7 +545,6 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Lidé, které nesledujete",
|
"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_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.filter_private_mentions_title": "Nevyžádané soukromé zmínky",
|
||||||
"notifications.policy.title": "Vyfiltrovat oznámení od…",
|
|
||||||
"notifications_permission_banner.enable": "Povolit oznámení na ploše",
|
"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.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",
|
"notifications_permission_banner.title": "Nenechte si nic uniknout",
|
||||||
@ -735,8 +731,6 @@
|
|||||||
"status.favourite": "Oblíbit",
|
"status.favourite": "Oblíbit",
|
||||||
"status.favourites": "{count, plural, one {oblíbený} few {oblíbené} many {oblíbených} other {oblíbených}}",
|
"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",
|
"status.filter": "Filtrovat tento příspěvek",
|
||||||
"status.filtered": "Filtrováno",
|
|
||||||
"status.hide": "Skrýt příspěvek",
|
|
||||||
"status.history.created": "Uživatel {name} vytvořil {date}",
|
"status.history.created": "Uživatel {name} vytvořil {date}",
|
||||||
"status.history.edited": "Uživatel {name} upravil {date}",
|
"status.history.edited": "Uživatel {name} upravil {date}",
|
||||||
"status.load_more": "Načíst více",
|
"status.load_more": "Načíst více",
|
||||||
@ -764,10 +758,7 @@
|
|||||||
"status.report": "Nahlásit @{name}",
|
"status.report": "Nahlásit @{name}",
|
||||||
"status.sensitive_warning": "Citlivý obsah",
|
"status.sensitive_warning": "Citlivý obsah",
|
||||||
"status.share": "Sdílet",
|
"status.share": "Sdílet",
|
||||||
"status.show_filter_reason": "Přesto zobrazit",
|
|
||||||
"status.show_less": "Zobrazit méně",
|
|
||||||
"status.show_less_all": "Zobrazit méně pro všechny",
|
"status.show_less_all": "Zobrazit méně pro všechny",
|
||||||
"status.show_more": "Zobrazit více",
|
|
||||||
"status.show_more_all": "Zobrazit více pro všechny",
|
"status.show_more_all": "Zobrazit více pro všechny",
|
||||||
"status.show_original": "Zobrazit originál",
|
"status.show_original": "Zobrazit originál",
|
||||||
"status.title.with_attachments": "{user} zveřejnil {attachmentCount, plural, one {přílohu} few {{attachmentCount} přílohy} many {{attachmentCount} příloh} other {{attachmentCount} příloh}}",
|
"status.title.with_attachments": "{user} zveřejnil {attachmentCount, plural, one {přílohu} few {{attachmentCount} přílohy} many {{attachmentCount} příloh} other {{attachmentCount} příloh}}",
|
||||||
@ -786,10 +777,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {Zbývá # minuta} few {Zbývají # minuty} many {Zbývá # minut} other {Zbývá # minut}}",
|
"time_remaining.minutes": "{number, plural, one {Zbývá # minuta} few {Zbývají # minuty} many {Zbývá # minut} other {Zbývá # minut}}",
|
||||||
"time_remaining.moments": "Zbývá několik sekund",
|
"time_remaining.moments": "Zbývá několik sekund",
|
||||||
"time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekund} other {Zbývá # sekund}}",
|
"time_remaining.seconds": "{number, plural, one {Zbývá # sekunda} few {Zbývají # sekundy} many {Zbývá # sekund} other {Zbývá # sekund}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} z jiných serverů se nezobrazují.",
|
|
||||||
"timeline_hint.resources.followers": "Sledující",
|
|
||||||
"timeline_hint.resources.follows": "Sledovaní",
|
|
||||||
"timeline_hint.resources.statuses": "Starší příspěvky",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} člověk} few {{counter} lidé} many {{counter} lidí} other {{counter} lidí}} za poslední {days, plural, one {den} few {{days} dny} many {{days} dnů} other {{days} dnů}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} člověk} few {{counter} lidé} many {{counter} lidí} other {{counter} lidí}} za poslední {days, plural, one {den} few {{days} dny} many {{days} dnů} other {{days} dnů}}",
|
||||||
"trends.trending_now": "Právě populární",
|
"trends.trending_now": "Právě populární",
|
||||||
"ui.beforeunload": "Pokud Mastodon opustíte, váš koncept se ztratí.",
|
"ui.beforeunload": "Pokud Mastodon opustíte, váš koncept se ztratí.",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"about.blocks": "Gweinyddion sy'n cael eu cymedroli",
|
"about.blocks": "Gweinyddion gyda chymedrolwyr",
|
||||||
"about.contact": "Cysylltwch â:",
|
"about.contact": "Cysylltwch â:",
|
||||||
"about.disclaimer": "Mae Mastodon yn feddalwedd cod agored rhydd ac o dan hawlfraint Mastodon gGmbH.",
|
"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",
|
"about.domain_blocks.no_reason_available": "Nid yw'r rheswm ar gael",
|
||||||
@ -11,6 +11,7 @@
|
|||||||
"about.not_available": "Nid yw'r wybodaeth hon ar gael ar y gweinydd hwn.",
|
"about.not_available": "Nid yw'r wybodaeth hon ar gael ar y gweinydd hwn.",
|
||||||
"about.powered_by": "Cyfrwng cymdeithasol datganoledig wedi ei yrru gan {mastodon}",
|
"about.powered_by": "Cyfrwng cymdeithasol datganoledig wedi ei yrru gan {mastodon}",
|
||||||
"about.rules": "Rheolau'r gweinydd",
|
"about.rules": "Rheolau'r gweinydd",
|
||||||
|
"account.account_note_header": "Nodyn personol",
|
||||||
"account.add_or_remove_from_list": "Ychwanegu neu Ddileu o'r rhestrau",
|
"account.add_or_remove_from_list": "Ychwanegu neu Ddileu o'r rhestrau",
|
||||||
"account.badges.bot": "Bot",
|
"account.badges.bot": "Bot",
|
||||||
"account.badges.group": "Grŵp",
|
"account.badges.group": "Grŵp",
|
||||||
@ -18,7 +19,6 @@
|
|||||||
"account.block_domain": "Blocio parth {domain}",
|
"account.block_domain": "Blocio parth {domain}",
|
||||||
"account.block_short": "Blocio",
|
"account.block_short": "Blocio",
|
||||||
"account.blocked": "Blociwyd",
|
"account.blocked": "Blociwyd",
|
||||||
"account.browse_more_on_origin_server": "Pori mwy ar y proffil gwreiddiol",
|
|
||||||
"account.cancel_follow_request": "Tynnu cais i ddilyn",
|
"account.cancel_follow_request": "Tynnu cais i ddilyn",
|
||||||
"account.copy": "Copïo dolen i'r proffil",
|
"account.copy": "Copïo dolen i'r proffil",
|
||||||
"account.direct": "Crybwyll yn breifat @{name}",
|
"account.direct": "Crybwyll yn breifat @{name}",
|
||||||
@ -95,15 +95,17 @@
|
|||||||
"block_modal.they_cant_see_posts": "Nid ydynt yn gallu gweld eich postiadau ac ni fyddwch yn gweld eu rhai hwy.",
|
"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.they_will_know": "Gallant weld eu bod wedi'u rhwystro.",
|
||||||
"block_modal.title": "Blocio defnyddiwr?",
|
"block_modal.title": "Blocio defnyddiwr?",
|
||||||
"block_modal.you_wont_see_mentions": "Ni welwch bostiadau sy'n sôn amdanynt.",
|
"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.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.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": "Nid oedd 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.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.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.network.title": "Gwall rhwydwaith",
|
||||||
"bundle_column_error.retry": "Ceisiwch eto",
|
"bundle_column_error.retry": "Ceisiwch eto",
|
||||||
"bundle_column_error.return": "Mynd nôl adref",
|
"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": "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.title": "404",
|
"bundle_column_error.routing.title": "404",
|
||||||
"bundle_modal_error.close": "Cau",
|
"bundle_modal_error.close": "Cau",
|
||||||
@ -124,7 +126,7 @@
|
|||||||
"column.favourites": "Ffefrynnau",
|
"column.favourites": "Ffefrynnau",
|
||||||
"column.firehose": "Ffrydiau byw",
|
"column.firehose": "Ffrydiau byw",
|
||||||
"column.follow_requests": "Ceisiadau dilyn",
|
"column.follow_requests": "Ceisiadau dilyn",
|
||||||
"column.home": "Hafan",
|
"column.home": "Cartref",
|
||||||
"column.lists": "Rhestrau",
|
"column.lists": "Rhestrau",
|
||||||
"column.mutes": "Defnyddwyr wedi'u tewi",
|
"column.mutes": "Defnyddwyr wedi'u tewi",
|
||||||
"column.notifications": "Hysbysiadau",
|
"column.notifications": "Hysbysiadau",
|
||||||
@ -145,7 +147,7 @@
|
|||||||
"compose.language.search": "Chwilio ieithoedd...",
|
"compose.language.search": "Chwilio ieithoedd...",
|
||||||
"compose.published.body": "Postiad wedi ei gyhoeddi.",
|
"compose.published.body": "Postiad wedi ei gyhoeddi.",
|
||||||
"compose.published.open": "Agor",
|
"compose.published.open": "Agor",
|
||||||
"compose.saved.body": "Post wedi'i gadw.",
|
"compose.saved.body": "Postiad wedi'i gadw.",
|
||||||
"compose_form.direct_message_warning_learn_more": "Dysgu mwy",
|
"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.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": "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.",
|
||||||
@ -170,7 +172,7 @@
|
|||||||
"confirmations.block.confirm": "Blocio",
|
"confirmations.block.confirm": "Blocio",
|
||||||
"confirmations.delete.confirm": "Dileu",
|
"confirmations.delete.confirm": "Dileu",
|
||||||
"confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y post hwn?",
|
"confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y post hwn?",
|
||||||
"confirmations.delete.title": "Dileu post?",
|
"confirmations.delete.title": "Dileu postiad?",
|
||||||
"confirmations.delete_list.confirm": "Dileu",
|
"confirmations.delete_list.confirm": "Dileu",
|
||||||
"confirmations.delete_list.message": "Ydych chi'n siŵr eich bod eisiau dileu'r rhestr hwn am byth?",
|
"confirmations.delete_list.message": "Ydych chi'n siŵr eich bod eisiau dileu'r rhestr hwn am byth?",
|
||||||
"confirmations.delete_list.title": "Dileu rhestr?",
|
"confirmations.delete_list.title": "Dileu rhestr?",
|
||||||
@ -178,20 +180,22 @@
|
|||||||
"confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg - eu dileu beth bynnag?",
|
"confirmations.discard_edit_media.message": "Mae gennych newidiadau heb eu cadw i'r disgrifiad cyfryngau neu'r rhagolwg - eu dileu beth bynnag?",
|
||||||
"confirmations.edit.confirm": "Golygu",
|
"confirmations.edit.confirm": "Golygu",
|
||||||
"confirmations.edit.message": "Bydd golygu nawr yn trosysgrifennu'r neges rydych yn ei ysgrifennu ar hyn o bryd. Ydych chi'n siŵr eich bod eisiau gwneud hyn?",
|
"confirmations.edit.message": "Bydd golygu nawr yn trosysgrifennu'r neges rydych yn ei ysgrifennu ar hyn o bryd. Ydych chi'n siŵr eich bod eisiau gwneud hyn?",
|
||||||
"confirmations.edit.title": "Trosysgrifo post?",
|
"confirmations.edit.title": "Trosysgrifo'r postiad?",
|
||||||
"confirmations.logout.confirm": "Allgofnodi",
|
"confirmations.logout.confirm": "Allgofnodi",
|
||||||
"confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?",
|
"confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?",
|
||||||
"confirmations.logout.title": "Allgofnodi?",
|
"confirmations.logout.title": "Allgofnodi?",
|
||||||
"confirmations.mute.confirm": "Tewi",
|
"confirmations.mute.confirm": "Tewi",
|
||||||
"confirmations.redraft.confirm": "Dileu ac ailddrafftio",
|
"confirmations.redraft.confirm": "Dileu ac ailddrafftio",
|
||||||
"confirmations.redraft.message": "Ydych chi'n siŵr eich bod am ddileu'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.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 post?",
|
"confirmations.redraft.title": "Dileu & ailddraftio postiad?",
|
||||||
"confirmations.reply.confirm": "Ateb",
|
"confirmations.reply.confirm": "Ateb",
|
||||||
"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.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 post?",
|
"confirmations.reply.title": "Trosysgrifo'r postiad?",
|
||||||
"confirmations.unfollow.confirm": "Dad-ddilyn",
|
"confirmations.unfollow.confirm": "Dad-ddilyn",
|
||||||
"confirmations.unfollow.message": "Ydych chi'n siŵr eich bod am ddad-ddilyn {name}?",
|
"confirmations.unfollow.message": "Ydych chi'n siŵr eich bod am ddad-ddilyn {name}?",
|
||||||
"confirmations.unfollow.title": "Dad-ddilyn defnyddiwr?",
|
"confirmations.unfollow.title": "Dad-ddilyn defnyddiwr?",
|
||||||
|
"content_warning.hide": "Cuddio'r postiad",
|
||||||
|
"content_warning.show": "Dangos beth bynnag",
|
||||||
"conversation.delete": "Dileu sgwrs",
|
"conversation.delete": "Dileu sgwrs",
|
||||||
"conversation.mark_as_read": "Nodi fel wedi'i ddarllen",
|
"conversation.mark_as_read": "Nodi fel wedi'i ddarllen",
|
||||||
"conversation.open": "Gweld sgwrs",
|
"conversation.open": "Gweld sgwrs",
|
||||||
@ -208,7 +212,7 @@
|
|||||||
"dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.",
|
"dismissable_banner.community_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl sydd â chyfrifon ar {domain}.",
|
||||||
"dismissable_banner.dismiss": "Cau",
|
"dismissable_banner.dismiss": "Cau",
|
||||||
"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_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": "Mae'r rhain yn bostiadau o bob rhan o'r we gymdeithasol sydd ar gynnydd heddiw. Mae postiadau mwy diweddar sydd â mwy o hybiau a ffefrynu'n 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.",
|
"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.",
|
||||||
"dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.",
|
"dismissable_banner.public_timeline": "Dyma'r postiadau cyhoeddus diweddaraf gan bobl ar y we gymdeithasol y mae pobl ar {domain} yn eu dilyn.",
|
||||||
"domain_block_modal.block": "Blocio gweinydd",
|
"domain_block_modal.block": "Blocio gweinydd",
|
||||||
@ -254,17 +258,17 @@
|
|||||||
"empty_column.account_timeline": "Dim postiadau yma!",
|
"empty_column.account_timeline": "Dim postiadau yma!",
|
||||||
"empty_column.account_unavailable": "Nid yw'r proffil ar gael",
|
"empty_column.account_unavailable": "Nid yw'r proffil ar gael",
|
||||||
"empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.",
|
"empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.",
|
||||||
"empty_column.bookmarked_statuses": "Nid oes gennych unrhyw bostiad wedi'u cadw fel llyfrnodau eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.",
|
"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.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!",
|
"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": "Nid oes gennych 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.domain_blocks": "Nid oes unrhyw barthau wedi'u blocio eto.",
|
||||||
"empty_column.explore_statuses": "Does dim yn trendio ar hyn o bryd. Dewch nôl nes ymlaen!",
|
"empty_column.explore_statuses": "Does dim pynciau llosg ar hyn o bryd. Dewch nôl nes ymlaen!",
|
||||||
"empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff bostiadau eto. Pan byddwch yn hoffi un, bydd yn ymddangos yma.",
|
"empty_column.favourited_statuses": "Rydych chi heb ffafrio unrhyw bostiadau eto. Pan byddwch chi'n ffafrio un, bydd yn ymddangos yma.",
|
||||||
"empty_column.favourites": "Nid oes unrhyw un wedi hoffi'r postiad hwn eto. Pan fydd rhywun yn gwneud hynny, byddan nhw'n ymddangos yma.",
|
"empty_column.favourites": "Nid oes unrhyw un wedi ffafrio'r postiad hwn eto. Pan fydd rhywun yn gwneud hynny, byddan nhw'n ymddangos yma.",
|
||||||
"empty_column.follow_requests": "Nid oes gennych unrhyw geisiadau dilyn eto. Pan fyddwch yn derbyn un, byddan nhw'n ymddangos yma.",
|
"empty_column.follow_requests": "Nid oes gennych unrhyw geisiadau dilyn eto. Pan fyddwch yn derbyn un, byddan nhw'n ymddangos yma.",
|
||||||
"empty_column.followed_tags": "Nid ydych wedi dilyn unrhyw hashnodau eto. Pan fyddwch chi'n gwneud hynny, byddan nhw'n ymddangos yma.",
|
"empty_column.followed_tags": "Nid ydych wedi dilyn unrhyw hashnodau eto. Pan fyddwch chi'n gwneud hynny, byddan nhw'n ymddangos yma.",
|
||||||
"empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.",
|
"empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.",
|
||||||
"empty_column.home": "Mae eich ffrwd gartref yn wag! Ymwelwch â {public} neu defnyddiwch y chwilotwr i ddechrau arni ac i gwrdd â defnyddwyr eraill.",
|
"empty_column.home": "Mae eich ffrwd gartref yn wag! Dilynwch fwy o bobl i'w llenwi.",
|
||||||
"empty_column.list": "Does dim yn y rhestr yma eto. Pan fydd aelodau'r rhestr yn cyhoeddi postiad newydd, mi fydd yn ymddangos yma.",
|
"empty_column.list": "Does dim yn y rhestr yma eto. Pan fydd aelodau'r rhestr yn cyhoeddi postiad newydd, mi fydd yn ymddangos yma.",
|
||||||
"empty_column.lists": "Nid oes gennych unrhyw restrau eto. Pan fyddwch yn creu un, mi fydd yn ymddangos yma.",
|
"empty_column.lists": "Nid oes gennych unrhyw restrau eto. Pan fyddwch yn creu un, mi fydd yn ymddangos yma.",
|
||||||
"empty_column.mutes": "Nid ydych wedi tewi unrhyw ddefnyddwyr eto.",
|
"empty_column.mutes": "Nid ydych wedi tewi unrhyw ddefnyddwyr eto.",
|
||||||
@ -299,6 +303,8 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd",
|
"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.select_filter.title": "Hidlo'r postiad hwn",
|
||||||
"filter_modal.title.status": "Hidlo postiad",
|
"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",
|
||||||
"filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo",
|
"filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo",
|
||||||
"firehose.all": "Popeth",
|
"firehose.all": "Popeth",
|
||||||
"firehose.local": "Gweinydd hwn",
|
"firehose.local": "Gweinydd hwn",
|
||||||
@ -347,25 +353,44 @@
|
|||||||
"hashtag.follow": "Dilyn hashnod",
|
"hashtag.follow": "Dilyn hashnod",
|
||||||
"hashtag.unfollow": "Dad-ddilyn hashnod",
|
"hashtag.unfollow": "Dad-ddilyn hashnod",
|
||||||
"hashtags.and_other": "…a {count, plural, other {# more}}",
|
"hashtags.and_other": "…a {count, plural, other {# more}}",
|
||||||
|
"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}",
|
||||||
"home.column_settings.show_reblogs": "Dangos hybiau",
|
"home.column_settings.show_reblogs": "Dangos hybiau",
|
||||||
"home.column_settings.show_replies": "Dangos atebion",
|
"home.column_settings.show_replies": "Dangos atebion",
|
||||||
"home.hide_announcements": "Cuddio cyhoeddiadau",
|
"home.hide_announcements": "Cuddio cyhoeddiadau",
|
||||||
"home.pending_critical_update.body": "Diweddarwch eich gweinydd Mastodon cyn gynted â phosibl!",
|
"home.pending_critical_update.body": "Diweddarwch eich gweinydd Mastodon cyn gynted â phosibl!",
|
||||||
"home.pending_critical_update.link": "Gweld y diweddariadau",
|
"home.pending_critical_update.link": "Gweld diweddariadau",
|
||||||
"home.pending_critical_update.title": "Mae diweddariad diogelwch hanfodol ar gael!",
|
"home.pending_critical_update.title": "Mae diweddariad diogelwch hanfodol ar gael!",
|
||||||
"home.show_announcements": "Dangos cyhoeddiadau",
|
"home.show_announcements": "Dangos cyhoeddiadau",
|
||||||
"interaction_modal.description.favourite": "Gyda chyfrif ar Mastodon, gallwch chi hoffi'r postiad hwn er mwyn roi gwybod i'r awdur eich bod chi'n ei werthfawrogi ac yn ei gadw ar gyfer nes ymlaen.",
|
"ignore_notifications_modal.disclaimer": "Ni all Mastodon hysbysu defnyddwyr eich bod wedi anwybyddu eu hysbysiadau. Ni fydd anwybyddu hysbysiadau yn atal y negeseuon eu hunain rhag cael eu hanfon.",
|
||||||
"interaction_modal.description.follow": "Gyda chyfrif ar Mastodon, gallwch ddilyn {name} i dderbyn eu postiadau yn eich llif cartref.",
|
"ignore_notifications_modal.filter_instead": "Hidlo yn lle hynny",
|
||||||
|
"ignore_notifications_modal.filter_to_act_users": "Byddwch yn dal i allu derbyn, gwrthod neu adrodd ar ddefnyddwyr",
|
||||||
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Mae hidlo yn helpu i osgoi dryswch posibl",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "Gallwch adolygu hysbysiadau wedi'u hidlo ar wahân",
|
||||||
|
"ignore_notifications_modal.ignore": "Anwybyddu hysbysiadau",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "Anwybyddu hysbysiadau o gyfrifon wedi'u cymedroli?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "Anwybyddu hysbysiadau o gyfrifon newydd?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "Anwybyddu hysbysiadau gan bobl nad ydynt yn eich dilyn?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Anwybyddu hysbysiadau gan bobl nad ydych yn eu dilyn?",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "Anwybyddu hysbysiadau o Grybwylliadau Preifat digymell?",
|
||||||
|
"interaction_modal.description.favourite": "Gyda chyfrif ar Mastodon, gallwch chi ffafrio'r postiad hwn er mwyn roi gwybod i'r awdur eich bod chi'n ei werthfawrogi ac yn ei gadw ar gyfer nes ymlaen.",
|
||||||
|
"interaction_modal.description.follow": "Gyda chyfrif ar Mastodon, gallwch ddilyn {name} i dderbyn eu postiadau yn eich ffrwd gartref.",
|
||||||
"interaction_modal.description.reblog": "Gyda chyfrif ar Mastodon, gallwch hybu'r postiad hwn i'w rannu â'ch dilynwyr.",
|
"interaction_modal.description.reblog": "Gyda chyfrif ar Mastodon, gallwch hybu'r postiad hwn i'w rannu â'ch dilynwyr.",
|
||||||
"interaction_modal.description.reply": "Gyda chyfrif ar Mastodon, gallwch ymateb i'r postiad hwn.",
|
"interaction_modal.description.reply": "Gyda chyfrif ar Mastodon, gallwch ymateb i'r postiad hwn.",
|
||||||
"interaction_modal.login.action": "Ewch â fi adref",
|
"interaction_modal.login.action": "Mynd i'm ffrwd gartref",
|
||||||
"interaction_modal.login.prompt": "Parth eich gweinydd cartref, e.e. mastodon.social",
|
"interaction_modal.login.prompt": "Parth eich gweinydd cartref, e.e. mastodon.social",
|
||||||
"interaction_modal.no_account_yet": "Dim ar Mastodon?",
|
"interaction_modal.no_account_yet": "Dim ar Mastodon?",
|
||||||
"interaction_modal.on_another_server": "Ar weinydd gwahanol",
|
"interaction_modal.on_another_server": "Ar weinydd gwahanol",
|
||||||
"interaction_modal.on_this_server": "Ar y gweinydd hwn",
|
"interaction_modal.on_this_server": "Ar y gweinydd hwn",
|
||||||
"interaction_modal.sign_in": "Nid ydych wedi mewngofnodi i'r gweinydd hwn. Ble mae eich cyfrif yn cael ei gynnal?",
|
"interaction_modal.sign_in": "Nid ydych wedi mewngofnodi i'r gweinydd hwn. Ble mae eich cyfrif yn cael ei gynnal?",
|
||||||
"interaction_modal.sign_in_hint": "Awgrym: Dyna'r wefan lle gwnaethoch gofrestru. Os nad ydych yn cofio, edrychwch am yr e-bost croeso yn eich blwch derbyn. Gallwch hefyd nodi eich enw defnyddiwr llawn! (e.e. @Mastodon@mastodon.social)",
|
"interaction_modal.sign_in_hint": "Awgrym: Dyna'r wefan lle gwnaethoch gofrestru. Os nad ydych yn cofio, edrychwch am yr e-bost croeso yn eich blwch derbyn. Gallwch hefyd nodi eich enw defnyddiwr llawn! (e.e. @Mastodon@mastodon.social)",
|
||||||
"interaction_modal.title.favourite": "Hoffi postiad {name}",
|
"interaction_modal.title.favourite": "Ffafrio postiad {name}",
|
||||||
"interaction_modal.title.follow": "Dilyn {name}",
|
"interaction_modal.title.follow": "Dilyn {name}",
|
||||||
"interaction_modal.title.reblog": "Hybu postiad {name}",
|
"interaction_modal.title.reblog": "Hybu postiad {name}",
|
||||||
"interaction_modal.title.reply": "Ymateb i bostiad {name}",
|
"interaction_modal.title.reply": "Ymateb i bostiad {name}",
|
||||||
@ -381,11 +406,11 @@
|
|||||||
"keyboard_shortcuts.direct": "i agor colofn crybwylliadau preifat",
|
"keyboard_shortcuts.direct": "i agor colofn crybwylliadau preifat",
|
||||||
"keyboard_shortcuts.down": "Symud lawr yn y rhestr",
|
"keyboard_shortcuts.down": "Symud lawr yn y rhestr",
|
||||||
"keyboard_shortcuts.enter": "Agor post",
|
"keyboard_shortcuts.enter": "Agor post",
|
||||||
"keyboard_shortcuts.favourite": "Hoffi postiad",
|
"keyboard_shortcuts.favourite": "Ffafrio postiad",
|
||||||
"keyboard_shortcuts.favourites": "Agor rhestr ffefrynnau",
|
"keyboard_shortcuts.favourites": "Agor rhestr ffefrynnau",
|
||||||
"keyboard_shortcuts.federated": "Agor ffrwd y ffederasiwn",
|
"keyboard_shortcuts.federated": "Agor ffrwd y ffederasiwn",
|
||||||
"keyboard_shortcuts.heading": "Bysellau brys",
|
"keyboard_shortcuts.heading": "Bysellau brys",
|
||||||
"keyboard_shortcuts.home": "Agor ffrwd cartref",
|
"keyboard_shortcuts.home": "Agor ffrwd gartref",
|
||||||
"keyboard_shortcuts.hotkey": "Bysell boeth",
|
"keyboard_shortcuts.hotkey": "Bysell boeth",
|
||||||
"keyboard_shortcuts.legend": "Dangos y rhestr hon",
|
"keyboard_shortcuts.legend": "Dangos y rhestr hon",
|
||||||
"keyboard_shortcuts.local": "Agor ffrwd lleol",
|
"keyboard_shortcuts.local": "Agor ffrwd lleol",
|
||||||
@ -415,13 +440,13 @@
|
|||||||
"limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.",
|
"limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.",
|
||||||
"link_preview.author": "Gan {name}",
|
"link_preview.author": "Gan {name}",
|
||||||
"link_preview.more_from_author": "Mwy gan {name}",
|
"link_preview.more_from_author": "Mwy gan {name}",
|
||||||
"link_preview.shares": "{count, plural, one {{counter} post} two {{counter} bost} few {{counter} phost} many {{counter} post} other {{counter} post}}",
|
"link_preview.shares": "{count, plural, one {{counter} ostiad } two {{counter} bostiad } few {{counter} postiad} many {{counter} postiad} other {{counter} postiad}}",
|
||||||
"lists.account.add": "Ychwanegu at restr",
|
"lists.account.add": "Ychwanegu at restr",
|
||||||
"lists.account.remove": "Tynnu o'r rhestr",
|
"lists.account.remove": "Tynnu o'r rhestr",
|
||||||
"lists.delete": "Dileu rhestr",
|
"lists.delete": "Dileu rhestr",
|
||||||
"lists.edit": "Golygu rhestr",
|
"lists.edit": "Golygu rhestr",
|
||||||
"lists.edit.submit": "Newid teitl",
|
"lists.edit.submit": "Newid teitl",
|
||||||
"lists.exclusive": "Cuddiwch y postiadau hyn rhag cartref",
|
"lists.exclusive": "Cuddio'r postiadau hyn o'r ffrwd gartref",
|
||||||
"lists.new.create": "Ychwanegu rhestr",
|
"lists.new.create": "Ychwanegu rhestr",
|
||||||
"lists.new.title_placeholder": "Teitl rhestr newydd",
|
"lists.new.title_placeholder": "Teitl rhestr newydd",
|
||||||
"lists.replies_policy.followed": "Unrhyw ddefnyddiwr sy'n cael ei ddilyn",
|
"lists.replies_policy.followed": "Unrhyw ddefnyddiwr sy'n cael ei ddilyn",
|
||||||
@ -443,9 +468,8 @@
|
|||||||
"mute_modal.title": "Tewi defnyddiwr?",
|
"mute_modal.title": "Tewi defnyddiwr?",
|
||||||
"mute_modal.you_wont_see_mentions": "Welwch chi ddim postiadau sy'n sôn amdanyn nhw.",
|
"mute_modal.you_wont_see_mentions": "Welwch chi ddim postiadau sy'n sôn amdanyn nhw.",
|
||||||
"mute_modal.you_wont_see_posts": "Gallan nhw weld eich postiadau o hyd, ond fyddwch chi ddim yn gweld eu rhai hwy.",
|
"mute_modal.you_wont_see_posts": "Gallan nhw weld eich postiadau o hyd, ond fyddwch chi ddim yn gweld eu rhai hwy.",
|
||||||
"name_and_others": "{name} a(c) {count, plural, one {# arall} other {# eraill}}",
|
|
||||||
"name_and_others_with_link": "{name} a<a>{count, plural, zero {}one {c # arall} two { # eraill} few { # eraill} many { # eraill} other { # eraill}}</a>",
|
|
||||||
"navigation_bar.about": "Ynghylch",
|
"navigation_bar.about": "Ynghylch",
|
||||||
|
"navigation_bar.administration": "Gweinyddiaeth",
|
||||||
"navigation_bar.advanced_interface": "Agor mewn rhyngwyneb gwe uwch",
|
"navigation_bar.advanced_interface": "Agor mewn rhyngwyneb gwe uwch",
|
||||||
"navigation_bar.blocks": "Defnyddwyr wedi eu blocio",
|
"navigation_bar.blocks": "Defnyddwyr wedi eu blocio",
|
||||||
"navigation_bar.bookmarks": "Nodau Tudalen",
|
"navigation_bar.bookmarks": "Nodau Tudalen",
|
||||||
@ -462,6 +486,7 @@
|
|||||||
"navigation_bar.follows_and_followers": "Yn dilyn a dilynwyr",
|
"navigation_bar.follows_and_followers": "Yn dilyn a dilynwyr",
|
||||||
"navigation_bar.lists": "Rhestrau",
|
"navigation_bar.lists": "Rhestrau",
|
||||||
"navigation_bar.logout": "Allgofnodi",
|
"navigation_bar.logout": "Allgofnodi",
|
||||||
|
"navigation_bar.moderation": "Cymedroil",
|
||||||
"navigation_bar.mutes": "Defnyddwyr wedi'u tewi",
|
"navigation_bar.mutes": "Defnyddwyr wedi'u tewi",
|
||||||
"navigation_bar.opened_in_classic_interface": "Mae postiadau, cyfrifon a thudalennau penodol eraill yn cael eu hagor fel rhagosodiad yn y rhyngwyneb gwe clasurol.",
|
"navigation_bar.opened_in_classic_interface": "Mae postiadau, cyfrifon a thudalennau penodol eraill yn cael eu hagor fel rhagosodiad yn y rhyngwyneb gwe clasurol.",
|
||||||
"navigation_bar.personal": "Personol",
|
"navigation_bar.personal": "Personol",
|
||||||
@ -472,14 +497,23 @@
|
|||||||
"navigation_bar.security": "Diogelwch",
|
"navigation_bar.security": "Diogelwch",
|
||||||
"not_signed_in_indicator.not_signed_in": "Rhaid i chi fewngofnodi i weld yr adnodd hwn.",
|
"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": "Adroddwyd ar {name} {target}",
|
||||||
"notification.admin.report_account_other": "Adroddodd {name} {count, plural, one {un post} two {# bost} few {# phost} other {# post}} gan {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_statuses": "Adroddodd {name} {target} ar gyfer {category}",
|
"notification.admin.report_statuses": "Adroddodd {name} {target} ar gyfer {category}",
|
||||||
"notification.admin.report_statuses_other": "Adroddodd {name} {target}",
|
"notification.admin.report_statuses_other": "Adroddodd {name} {target}",
|
||||||
"notification.admin.sign_up": "Cofrestrodd {name}",
|
"notification.admin.sign_up": "Cofrestrodd {name}",
|
||||||
"notification.favourite": "Hoffodd {name} eich postiad",
|
"notification.admin.sign_up.name_and_others": "Cofrestrodd {name} {count, plural, one {ac # arall} other {a # eraill}}",
|
||||||
|
"notification.favourite": "Ffafriodd {name} eich postiad",
|
||||||
|
"notification.favourite.name_and_others_with_link": "Ffafriodd {name} a <a>{count, plural, one {# arall} other {# eraill}}</a> eich postiad",
|
||||||
"notification.follow": "Dilynodd {name} chi",
|
"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_request": "Mae {name} wedi gwneud cais i'ch dilyn",
|
"notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn",
|
||||||
"notification.mention": "Crybwyllodd {name} amdanoch chi",
|
"notification.follow_request.name_and_others": "Mae {name} a{count, plural, one {# other} other {# others}} 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.mention": "Crybwyll",
|
||||||
"notification.moderation-warning.learn_more": "Dysgu mwy",
|
"notification.moderation-warning.learn_more": "Dysgu mwy",
|
||||||
"notification.moderation_warning": "Rydych wedi derbyn rhybudd gan gymedrolwr",
|
"notification.moderation_warning": "Rydych wedi derbyn rhybudd gan gymedrolwr",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Mae rhai o'ch postiadau wedi'u dileu.",
|
"notification.moderation_warning.action_delete_statuses": "Mae rhai o'ch postiadau wedi'u dileu.",
|
||||||
@ -491,8 +525,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Mae eich cyfrif wedi'i hatal.",
|
"notification.moderation_warning.action_suspend": "Mae eich cyfrif wedi'i hatal.",
|
||||||
"notification.own_poll": "Mae eich pleidlais wedi dod i ben",
|
"notification.own_poll": "Mae eich pleidlais wedi dod i ben",
|
||||||
"notification.poll": "Mae arolwg y gwnaethoch bleidleisio ynddo wedi dod i ben",
|
"notification.poll": "Mae arolwg y gwnaethoch bleidleisio ynddo wedi dod i ben",
|
||||||
"notification.private_mention": "Mae {name} wedi eich crybwyll yn breifat",
|
|
||||||
"notification.reblog": "Hybodd {name} eich post",
|
"notification.reblog": "Hybodd {name} eich post",
|
||||||
|
"notification.reblog.name_and_others_with_link": "Mae {name} a <a>{count, plural, one {# other} other {# others}}</a> wedi hybu eich postiad",
|
||||||
"notification.relationships_severance_event": "Wedi colli cysylltiad â {name}",
|
"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.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.",
|
"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.",
|
||||||
@ -501,10 +535,24 @@
|
|||||||
"notification.status": "{name} newydd ei bostio",
|
"notification.status": "{name} newydd ei bostio",
|
||||||
"notification.update": "Golygodd {name} bostiad",
|
"notification.update": "Golygodd {name} bostiad",
|
||||||
"notification_requests.accept": "Derbyn",
|
"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.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?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Diystyru ceisiadau hysbysu?",
|
||||||
"notification_requests.dismiss": "Cau",
|
"notification_requests.dismiss": "Cau",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Diystyru # cais…} two {Diystyru # gais…} few {Diystyru # chais…} other {Diystyru # cais…}}",
|
||||||
|
"notification_requests.edit_selection": "Golygu",
|
||||||
|
"notification_requests.exit_selection": "Iawn",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif wedi'i gyfyngu gan gymedrolwr.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Mae hysbysiadau o'r cyfrif hwn wedi'u hidlo oherwydd bod y cyfrif neu ei weinydd wedi'i gyfyngu gan gymedrolwr.",
|
||||||
"notification_requests.maximize": "Mwyhau",
|
"notification_requests.maximize": "Mwyhau",
|
||||||
|
"notification_requests.minimize_banner": "Lleihau baner hysbysiadau wedi'u hidlo",
|
||||||
"notification_requests.notifications_from": "Hysbysiadau gan {name}",
|
"notification_requests.notifications_from": "Hysbysiadau gan {name}",
|
||||||
"notification_requests.title": "Hysbysiadau wedi'u hidlo",
|
"notification_requests.title": "Hysbysiadau wedi'u hidlo",
|
||||||
|
"notification_requests.view": "Gweld hysbysiadau",
|
||||||
"notifications.clear": "Clirio hysbysiadau",
|
"notifications.clear": "Clirio hysbysiadau",
|
||||||
"notifications.clear_confirmation": "Ydych chi'n siŵr eich bod am glirio'ch holl hysbysiadau am byth?",
|
"notifications.clear_confirmation": "Ydych chi'n siŵr eich bod am glirio'ch holl hysbysiadau am byth?",
|
||||||
"notifications.clear_title": "Clirio hysbysiadau?",
|
"notifications.clear_title": "Clirio hysbysiadau?",
|
||||||
@ -541,6 +589,14 @@
|
|||||||
"notifications.permission_denied": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd cais am ganiatâd porwr a wrthodwyd yn flaenorol",
|
"notifications.permission_denied": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd cais am ganiatâd porwr a wrthodwyd yn flaenorol",
|
||||||
"notifications.permission_denied_alert": "Nid oes modd galluogi hysbysiadau bwrdd gwaith, gan fod caniatâd porwr wedi'i wrthod o'r blaen",
|
"notifications.permission_denied_alert": "Nid oes modd galluogi hysbysiadau bwrdd gwaith, gan fod caniatâd porwr wedi'i wrthod o'r blaen",
|
||||||
"notifications.permission_required": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd na roddwyd y caniatâd gofynnol.",
|
"notifications.permission_required": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd na roddwyd y caniatâd gofynnol.",
|
||||||
|
"notifications.policy.accept": "Derbyn",
|
||||||
|
"notifications.policy.accept_hint": "Dangos mewn hysbysiadau",
|
||||||
|
"notifications.policy.drop": "Anwybyddu",
|
||||||
|
"notifications.policy.drop_hint": "Anfon i'r gwagle, byth i'w gweld eto",
|
||||||
|
"notifications.policy.filter": "Hidlo",
|
||||||
|
"notifications.policy.filter_hint": "Anfon i flwch derbyn hysbysiadau wedi'u hidlo",
|
||||||
|
"notifications.policy.filter_limited_accounts_hint": "Cyfyngedig gan gymedrolwyr gweinydd",
|
||||||
|
"notifications.policy.filter_limited_accounts_title": "Cyfrifon wedi'u cymedroli",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Crëwyd o fewn {days, lluosog, un {yr un diwrnod} arall {y # diwrnod}} diwethaf",
|
"notifications.policy.filter_new_accounts.hint": "Crëwyd o fewn {days, lluosog, un {yr un diwrnod} arall {y # diwrnod}} diwethaf",
|
||||||
"notifications.policy.filter_new_accounts_title": "Cyfrifon newydd",
|
"notifications.policy.filter_new_accounts_title": "Cyfrifon newydd",
|
||||||
"notifications.policy.filter_not_followers_hint": "Gan gynnwys pobl sydd wedi bod yn eich dilyn am llai {days, plural, un {nag un diwrnod} arall {na # diwrnod}}",
|
"notifications.policy.filter_not_followers_hint": "Gan gynnwys pobl sydd wedi bod yn eich dilyn am llai {days, plural, un {nag un diwrnod} arall {na # diwrnod}}",
|
||||||
@ -549,20 +605,20 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Pobl nad ydych yn eu dilyn",
|
"notifications.policy.filter_not_following_title": "Pobl nad ydych yn eu dilyn",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Wedi'i hidlo oni bai ei fod mewn ymateb i'ch crybwylliad eich hun neu os ydych yn dilyn yr anfonwr",
|
"notifications.policy.filter_private_mentions_hint": "Wedi'i hidlo oni bai ei fod mewn ymateb i'ch crybwylliad eich hun neu os ydych yn dilyn yr anfonwr",
|
||||||
"notifications.policy.filter_private_mentions_title": "Crybwylliadau preifat digymell",
|
"notifications.policy.filter_private_mentions_title": "Crybwylliadau preifat digymell",
|
||||||
"notifications.policy.title": "Hidlo hysbysiadau gan…",
|
"notifications.policy.title": "Rheoli hysbysiadau gan…",
|
||||||
"notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith",
|
"notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith",
|
||||||
"notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddan nhw wedi'u galluogi.",
|
"notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddan nhw wedi'u galluogi.",
|
||||||
"notifications_permission_banner.title": "Peidiwch â cholli dim",
|
"notifications_permission_banner.title": "Peidiwch â cholli dim",
|
||||||
"onboarding.action.back": "Ewch â fi yn ôl",
|
"onboarding.action.back": "Ewch â fi nôl",
|
||||||
"onboarding.actions.back": "Ewch â fi yn ôl",
|
"onboarding.actions.back": "Ewch â fi nôl",
|
||||||
"onboarding.actions.go_to_explore": "Gweld beth yw'r tuedd",
|
"onboarding.actions.go_to_explore": "Gweld y pynciau llosg",
|
||||||
"onboarding.actions.go_to_home": "Ewch i'ch ffrwd gartref",
|
"onboarding.actions.go_to_home": "Ewch i'm ffrwd gartref",
|
||||||
"onboarding.compose.template": "Helo, #Mastodon!",
|
"onboarding.compose.template": "Helo, #Mastodon!",
|
||||||
"onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.",
|
"onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.",
|
||||||
"onboarding.follows.lead": "Rydych chi'n curadu eich ffrwd gartref eich hun. Po fwyaf o bobl y byddwch chi'n eu dilyn, y mwyaf egnïol a diddorol fydd hi. Gall y proffiliau hyn fod yn fan cychwyn da - gallwch chi bob amser eu dad-ddilyn yn nes ymlaen:",
|
"onboarding.follows.lead": "Rydych chi'n curadu eich ffrwd gartref eich hun. Po fwyaf o bobl y byddwch chi'n eu dilyn, y mwyaf egnïol a diddorol fydd hi. Gall y proffiliau hyn fod yn fan cychwyn da - gallwch chi bob amser eu dad-ddilyn yn nes ymlaen:",
|
||||||
"onboarding.follows.title": "Yn boblogaidd ar Mastodon",
|
"onboarding.follows.title": "Personolwch eich ffrwd gartref",
|
||||||
"onboarding.profile.discoverable": "Gwnewch fy mhroffil yn un y gellir ei ddarganfod",
|
"onboarding.profile.discoverable": "Gwnewch fy mhroffil yn un y gellir ei ddarganfod",
|
||||||
"onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a thueddiadau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd â diddordebau tebyg i chi.",
|
"onboarding.profile.discoverable_hint": "Pan fyddwch yn optio i mewn i ddarganfodadwyedd ar Mastodon, gall eich postiadau ymddangos mewn canlyniadau chwilio a threndiau, ac efallai y bydd eich proffil yn cael ei awgrymu i bobl sydd â diddordebau tebyg i chi.",
|
||||||
"onboarding.profile.display_name": "Enw dangos",
|
"onboarding.profile.display_name": "Enw dangos",
|
||||||
"onboarding.profile.display_name_hint": "Eich enw llawn neu'ch enw hwyl…",
|
"onboarding.profile.display_name_hint": "Eich enw llawn neu'ch enw hwyl…",
|
||||||
"onboarding.profile.lead": "Gallwch chi bob amser gwblhau hyn yn ddiweddarach yn y gosodiadau, lle mae hyd yn oed mwy o ddewisiadau cyfaddasu ar gael.",
|
"onboarding.profile.lead": "Gallwch chi bob amser gwblhau hyn yn ddiweddarach yn y gosodiadau, lle mae hyd yn oed mwy o ddewisiadau cyfaddasu ar gael.",
|
||||||
@ -580,7 +636,7 @@
|
|||||||
"onboarding.start.skip": "Eisiau mynd syth yn eich blaen?",
|
"onboarding.start.skip": "Eisiau mynd syth yn eich blaen?",
|
||||||
"onboarding.start.title": "Rydych chi wedi cyrraedd!",
|
"onboarding.start.title": "Rydych chi wedi cyrraedd!",
|
||||||
"onboarding.steps.follow_people.body": "Rydych chi'n curadu eich ffrwd eich hun. Gadewch i ni ei lenwi â phobl ddiddorol.",
|
"onboarding.steps.follow_people.body": "Rydych chi'n curadu eich ffrwd eich hun. Gadewch i ni ei lenwi â phobl ddiddorol.",
|
||||||
"onboarding.steps.follow_people.title": "Dilynwch {count, plural, one {one person} other {# people}}",
|
"onboarding.steps.follow_people.title": "Personolwch eich ffrwd gartref",
|
||||||
"onboarding.steps.publish_status.body": "Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn {emoji}",
|
"onboarding.steps.publish_status.body": "Dywedwch helo wrth y byd gyda thestun, lluniau, fideos neu arolygon barn {emoji}",
|
||||||
"onboarding.steps.publish_status.title": "Gwnewch eich postiad cyntaf",
|
"onboarding.steps.publish_status.title": "Gwnewch eich postiad cyntaf",
|
||||||
"onboarding.steps.setup_profile.body": "Mae eraill yn fwy tebygol o ryngweithio â chi gyda phroffil wedi'i lenwi.",
|
"onboarding.steps.setup_profile.body": "Mae eraill yn fwy tebygol o ryngweithio â chi gyda phroffil wedi'i lenwi.",
|
||||||
@ -605,7 +661,7 @@
|
|||||||
"poll_button.add_poll": "Ychwanegu pleidlais",
|
"poll_button.add_poll": "Ychwanegu pleidlais",
|
||||||
"poll_button.remove_poll": "Tynnu pleidlais",
|
"poll_button.remove_poll": "Tynnu pleidlais",
|
||||||
"privacy.change": "Addasu preifatrwdd y post",
|
"privacy.change": "Addasu preifatrwdd y post",
|
||||||
"privacy.direct.long": "Pawb sydd â son amdanyn nhw yn y postiad",
|
"privacy.direct.long": "Pawb sydd â sôn amdanyn nhw yn y postiad",
|
||||||
"privacy.direct.short": "Pobl benodol",
|
"privacy.direct.short": "Pobl benodol",
|
||||||
"privacy.private.long": "Eich dilynwyr yn unig",
|
"privacy.private.long": "Eich dilynwyr yn unig",
|
||||||
"privacy.private.short": "Dilynwyr",
|
"privacy.private.short": "Dilynwyr",
|
||||||
@ -619,7 +675,7 @@
|
|||||||
"recommended": "Argymhellwyd",
|
"recommended": "Argymhellwyd",
|
||||||
"refresh": "Adnewyddu",
|
"refresh": "Adnewyddu",
|
||||||
"regeneration_indicator.label": "Yn llwytho…",
|
"regeneration_indicator.label": "Yn llwytho…",
|
||||||
"regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!",
|
"regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei pharatoi!",
|
||||||
"relative_time.days": "{number}d",
|
"relative_time.days": "{number}d",
|
||||||
"relative_time.full.days": "{number, plural, one {# diwrnod} other {# diwrnod}} yn ôl",
|
"relative_time.full.days": "{number, plural, one {# diwrnod} other {# diwrnod}} yn ôl",
|
||||||
"relative_time.full.hours": "{number, plural, one {# awr} other {# awr}} yn ôl",
|
"relative_time.full.hours": "{number, plural, one {# awr} other {# awr}} yn ôl",
|
||||||
@ -673,7 +729,7 @@
|
|||||||
"report.thanks.title": "Ddim eisiau gweld hwn?",
|
"report.thanks.title": "Ddim eisiau gweld hwn?",
|
||||||
"report.thanks.title_actionable": "Diolch am adrodd, byddwn yn ymchwilio i hyn.",
|
"report.thanks.title_actionable": "Diolch am adrodd, byddwn yn ymchwilio i hyn.",
|
||||||
"report.unfollow": "Dad-ddilyn @{name}",
|
"report.unfollow": "Dad-ddilyn @{name}",
|
||||||
"report.unfollow_explanation": "Rydych chi'n dilyn y cyfrif hwn. I beidio â gweld eu postiadau yn eich porthiant cartref mwyach, dad-ddilynwch nhw.",
|
"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} arall {{count} postiad}} atodwyd",
|
||||||
"report_notification.categories.legal": "Cyfreithiol",
|
"report_notification.categories.legal": "Cyfreithiol",
|
||||||
"report_notification.categories.legal_sentence": "cynnwys anghyfreithlon",
|
"report_notification.categories.legal_sentence": "cynnwys anghyfreithlon",
|
||||||
@ -733,11 +789,9 @@
|
|||||||
"status.edited": "Golygwyd ddiwethaf {date}",
|
"status.edited": "Golygwyd ddiwethaf {date}",
|
||||||
"status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}",
|
"status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}",
|
||||||
"status.embed": "Mewnblannu",
|
"status.embed": "Mewnblannu",
|
||||||
"status.favourite": "Hoffi",
|
"status.favourite": "Ffafrio",
|
||||||
"status.favourites": "{count, plural, one {ffefryn} other {ffefryn}}",
|
"status.favourites": "{count, plural, one {ffefryn} other {ffefryn}}",
|
||||||
"status.filter": "Hidlo'r postiad hwn",
|
"status.filter": "Hidlo'r postiad hwn",
|
||||||
"status.filtered": "Wedi'i hidlo",
|
|
||||||
"status.hide": "Cuddio'r postiad",
|
|
||||||
"status.history.created": "Crëwyd gan {name} {date}",
|
"status.history.created": "Crëwyd gan {name} {date}",
|
||||||
"status.history.edited": "Golygwyd gan {name} {date}",
|
"status.history.edited": "Golygwyd gan {name} {date}",
|
||||||
"status.load_more": "Llwythwch ragor",
|
"status.load_more": "Llwythwch ragor",
|
||||||
@ -765,10 +819,7 @@
|
|||||||
"status.report": "Adrodd ar @{name}",
|
"status.report": "Adrodd ar @{name}",
|
||||||
"status.sensitive_warning": "Cynnwys sensitif",
|
"status.sensitive_warning": "Cynnwys sensitif",
|
||||||
"status.share": "Rhannu",
|
"status.share": "Rhannu",
|
||||||
"status.show_filter_reason": "Dangos beth bynnag",
|
|
||||||
"status.show_less": "Dangos llai",
|
|
||||||
"status.show_less_all": "Dangos llai i bawb",
|
"status.show_less_all": "Dangos llai i bawb",
|
||||||
"status.show_more": "Dangos mwy",
|
|
||||||
"status.show_more_all": "Dangos mwy i bawb",
|
"status.show_more_all": "Dangos mwy i bawb",
|
||||||
"status.show_original": "Dangos y gwreiddiol",
|
"status.show_original": "Dangos y gwreiddiol",
|
||||||
"status.title.with_attachments": "Postiodd {user} {attachmentCount, plural, one {an attachment} other {{attachmentCount} attachments}}",
|
"status.title.with_attachments": "Postiodd {user} {attachmentCount, plural, one {an attachment} other {{attachmentCount} attachments}}",
|
||||||
@ -777,7 +828,7 @@
|
|||||||
"status.uncached_media_warning": "Dim rhagolwg ar gael",
|
"status.uncached_media_warning": "Dim rhagolwg ar gael",
|
||||||
"status.unmute_conversation": "Dad-dewi sgwrs",
|
"status.unmute_conversation": "Dad-dewi sgwrs",
|
||||||
"status.unpin": "Dadbinio o'r proffil",
|
"status.unpin": "Dadbinio o'r proffil",
|
||||||
"subscribed_languages.lead": "Dim ond postiadau mewn ieithoedd penodol fydd yn ymddangos yn eich ffrydiau ar ôl y newid. Dewiswch ddim byd i dderbyn postiadau ym mhob iaith.",
|
"subscribed_languages.lead": "Dim ond postiadau mewn ieithoedd penodol fydd yn ymddangos yn eich ffrydiau cartref a rhestr ar ôl y newid. Dewiswch ddim byd i dderbyn postiadau ym mhob iaith.",
|
||||||
"subscribed_languages.save": "Cadw'r newidiadau",
|
"subscribed_languages.save": "Cadw'r newidiadau",
|
||||||
"subscribed_languages.target": "Newid ieithoedd tanysgrifio {target}",
|
"subscribed_languages.target": "Newid ieithoedd tanysgrifio {target}",
|
||||||
"tabs_bar.home": "Cartref",
|
"tabs_bar.home": "Cartref",
|
||||||
@ -787,12 +838,8 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# munud} other {# munud}} ar ôl",
|
"time_remaining.minutes": "{number, plural, one {# munud} other {# munud}} ar ôl",
|
||||||
"time_remaining.moments": "Munudau yn weddill",
|
"time_remaining.moments": "Munudau yn weddill",
|
||||||
"time_remaining.seconds": "{number, plural, one {# eiliad} other {# eiliad}} ar ôl",
|
"time_remaining.seconds": "{number, plural, one {# eiliad} other {# eiliad}} ar ôl",
|
||||||
"timeline_hint.remote_resource_not_displayed": "Nid yw {resource} o weinyddion eraill yn cael ei ddangos.",
|
|
||||||
"timeline_hint.resources.followers": "Dilynwyr",
|
|
||||||
"timeline_hint.resources.follows": "Yn dilyn",
|
|
||||||
"timeline_hint.resources.statuses": "Postiadau hŷn",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, zero {neb} one {{counter} person} two {{counter} berson} few {{counter} pherson} other {{counter} o bobl}} yn y {days, plural, one {diwrnod diwethaf} two {ddeuddydd diwethaf} other {{days} diwrnod diwethaf}}",
|
"trends.counter_by_accounts": "{count, plural, zero {neb} one {{counter} person} two {{counter} berson} few {{counter} pherson} other {{counter} o bobl}} yn y {days, plural, one {diwrnod diwethaf} two {ddeuddydd diwethaf} other {{days} diwrnod diwethaf}}",
|
||||||
"trends.trending_now": "Yn trendio nawr",
|
"trends.trending_now": "Pynciau llosg",
|
||||||
"ui.beforeunload": "Byddwch yn colli eich drafft os byddwch yn gadael Mastodon.",
|
"ui.beforeunload": "Byddwch yn colli eich drafft os byddwch yn gadael Mastodon.",
|
||||||
"units.short.billion": "{count}biliwn",
|
"units.short.billion": "{count}biliwn",
|
||||||
"units.short.million": "{count}miliwn",
|
"units.short.million": "{count}miliwn",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Blokér domænet {domain}",
|
"account.block_domain": "Blokér domænet {domain}",
|
||||||
"account.block_short": "Bloker",
|
"account.block_short": "Bloker",
|
||||||
"account.blocked": "Blokeret",
|
"account.blocked": "Blokeret",
|
||||||
"account.browse_more_on_origin_server": "Se mere på den oprindelige profil",
|
|
||||||
"account.cancel_follow_request": "Annullér anmodning om at følge",
|
"account.cancel_follow_request": "Annullér anmodning om at følge",
|
||||||
"account.copy": "Kopiér link til profil",
|
"account.copy": "Kopiér link til profil",
|
||||||
"account.direct": "Privat omtale @{name}",
|
"account.direct": "Privat omtale @{name}",
|
||||||
@ -98,6 +97,8 @@
|
|||||||
"block_modal.title": "Blokér bruger?",
|
"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 nævner vedkommende.",
|
||||||
"boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang",
|
"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?",
|
||||||
"bundle_column_error.copy_stacktrace": "Kopiér fejlrapport",
|
"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.body": "Den anmodede side kunne ikke gengives. Dette kan skyldes flere typer fejl.",
|
||||||
"bundle_column_error.error.title": "Åh nej!",
|
"bundle_column_error.error.title": "Åh nej!",
|
||||||
@ -193,6 +194,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Følg ikke længere",
|
"confirmations.unfollow.confirm": "Følg ikke længere",
|
||||||
"confirmations.unfollow.message": "Er du sikker på, at du ikke længere vil følge {name}?",
|
"confirmations.unfollow.message": "Er du sikker på, at du ikke længere vil følge {name}?",
|
||||||
"confirmations.unfollow.title": "Følg ikke længere bruger?",
|
"confirmations.unfollow.title": "Følg ikke længere bruger?",
|
||||||
|
"content_warning.hide": "Skjul indlæg",
|
||||||
|
"content_warning.show": "Vis alligevel",
|
||||||
"conversation.delete": "Slet samtale",
|
"conversation.delete": "Slet samtale",
|
||||||
"conversation.mark_as_read": "Markér som læst",
|
"conversation.mark_as_read": "Markér som læst",
|
||||||
"conversation.open": "Vis samtale",
|
"conversation.open": "Vis samtale",
|
||||||
@ -300,6 +303,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny",
|
"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.select_filter.title": "Filtrér dette indlæg",
|
||||||
"filter_modal.title.status": "Filtrér et indlæg",
|
"filter_modal.title.status": "Filtrér et indlæg",
|
||||||
|
"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.pending_requests": "Fra {count, plural, =0 {ingen} one {én person} other {# personer}}, man måske kender",
|
||||||
"filtered_notifications_banner.title": "Filtrerede notifikationer",
|
"filtered_notifications_banner.title": "Filtrerede notifikationer",
|
||||||
"firehose.all": "Alle",
|
"firehose.all": "Alle",
|
||||||
@ -349,6 +353,14 @@
|
|||||||
"hashtag.follow": "Følg hashtag",
|
"hashtag.follow": "Følg hashtag",
|
||||||
"hashtag.unfollow": "Stop med at følge hashtag",
|
"hashtag.unfollow": "Stop med at følge hashtag",
|
||||||
"hashtags.and_other": "…og {count, plural, one {}other {# flere}}",
|
"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.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Nogle indlæg kan mangle for denne profil.",
|
||||||
|
"hints.profiles.see_more_followers": "Se flere følgere på {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "Se flere fulgte på {domain}",
|
||||||
|
"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 boosts",
|
||||||
"home.column_settings.show_replies": "Vis svar",
|
"home.column_settings.show_replies": "Vis svar",
|
||||||
"home.hide_announcements": "Skjul bekendtgørelser",
|
"home.hide_announcements": "Skjul bekendtgørelser",
|
||||||
@ -356,6 +368,17 @@
|
|||||||
"home.pending_critical_update.link": "Se opdateringer",
|
"home.pending_critical_update.link": "Se opdateringer",
|
||||||
"home.pending_critical_update.title": "Kritisk sikkerhedsopdatering tilgængelig!",
|
"home.pending_critical_update.title": "Kritisk sikkerhedsopdatering tilgængelig!",
|
||||||
"home.show_announcements": "Vis bekendtgørelser",
|
"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_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",
|
||||||
|
"ignore_notifications_modal.ignore": "Ignorér notifikationer",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "Ignorér notifikationer fra modererede konti?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "Ignorér notifikationer fra nye konti?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "Ignorér notifikationer fra folk, som ikke er følgere?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Ignorér notifikationer fra folk, man ikke følger?",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "Ignorér notifikationer fra uopfordrede Private omtaler?",
|
||||||
"interaction_modal.description.favourite": "Med en konto på Mastodon kan dette indlæg gøres til favorit for at lade forfatteren vide, at det værdsættes og gemmes til senere.",
|
"interaction_modal.description.favourite": "Med en konto på Mastodon kan dette indlæg gøres til favorit for at lade forfatteren vide, at det værdsættes og gemmes til senere.",
|
||||||
"interaction_modal.description.follow": "Med en konto på Mastodon kan du følge {name} for at modtage vedkommendes indlæg i dit hjemmefeed.",
|
"interaction_modal.description.follow": "Med en konto på Mastodon kan du følge {name} for at modtage vedkommendes indlæg i dit hjemmefeed.",
|
||||||
"interaction_modal.description.reblog": "Med en konto på Mastodon kan dette indlæg fremhæves så det deles med egne følgere.",
|
"interaction_modal.description.reblog": "Med en konto på Mastodon kan dette indlæg fremhæves så det deles med egne følgere.",
|
||||||
@ -445,9 +468,8 @@
|
|||||||
"mute_modal.title": "Tavsgør bruger?",
|
"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_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.you_wont_see_posts": "Vedkommende kan stadig se dine indlæg, med vedkommendes vise ikke.",
|
||||||
"name_and_others": "{name} og {count, plural, one {# anden} other {# andre}}",
|
|
||||||
"name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a>",
|
|
||||||
"navigation_bar.about": "Om",
|
"navigation_bar.about": "Om",
|
||||||
|
"navigation_bar.administration": "Håndtering",
|
||||||
"navigation_bar.advanced_interface": "Åbn i avanceret webgrænseflade",
|
"navigation_bar.advanced_interface": "Åbn i avanceret webgrænseflade",
|
||||||
"navigation_bar.blocks": "Blokerede brugere",
|
"navigation_bar.blocks": "Blokerede brugere",
|
||||||
"navigation_bar.bookmarks": "Bogmærker",
|
"navigation_bar.bookmarks": "Bogmærker",
|
||||||
@ -464,6 +486,7 @@
|
|||||||
"navigation_bar.follows_and_followers": "Følges og følgere",
|
"navigation_bar.follows_and_followers": "Følges og følgere",
|
||||||
"navigation_bar.lists": "Lister",
|
"navigation_bar.lists": "Lister",
|
||||||
"navigation_bar.logout": "Log af",
|
"navigation_bar.logout": "Log af",
|
||||||
|
"navigation_bar.moderation": "Moderering",
|
||||||
"navigation_bar.mutes": "Skjulte brugere (mutede)",
|
"navigation_bar.mutes": "Skjulte brugere (mutede)",
|
||||||
"navigation_bar.opened_in_classic_interface": "Indlæg, konti og visse andre sider åbnes som standard i den klassiske webgrænseflade.",
|
"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.personal": "Personlig",
|
||||||
@ -479,10 +502,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} anmeldte {target} angående {category}",
|
"notification.admin.report_statuses": "{name} anmeldte {target} angående {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} anmeldte {target}",
|
"notification.admin.report_statuses_other": "{name} anmeldte {target}",
|
||||||
"notification.admin.sign_up": "{name} tilmeldte sig",
|
"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} favoritmarkerede dit indlæg",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a> gjorde dit indlæg til favorit",
|
||||||
"notification.follow": "{name} begyndte at følge dig",
|
"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_request": "{name} har anmodet om at følge dig",
|
"notification.follow_request": "{name} har anmodet om at følge dig",
|
||||||
"notification.mention": "{name} nævnte 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.mention": "Omtale",
|
||||||
"notification.moderation-warning.learn_more": "Læs mere",
|
"notification.moderation-warning.learn_more": "Læs mere",
|
||||||
"notification.moderation_warning": "Du er tildelt en moderationsadvarsel",
|
"notification.moderation_warning": "Du er tildelt en moderationsadvarsel",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.",
|
"notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.",
|
||||||
@ -494,8 +525,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Din konto er suspenderet.",
|
"notification.moderation_warning.action_suspend": "Din konto er suspenderet.",
|
||||||
"notification.own_poll": "Din afstemning er afsluttet",
|
"notification.own_poll": "Din afstemning er afsluttet",
|
||||||
"notification.poll": "En afstemning, hvori du har stemt, er slut",
|
"notification.poll": "En afstemning, hvori du har stemt, er slut",
|
||||||
"notification.private_mention": "{name} nævnte dig privat",
|
|
||||||
"notification.reblog": "{name} boostede dit indlæg",
|
"notification.reblog": "{name} boostede dit indlæg",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} og <a>{count, plural, one {# anden} other {# andre}}</a> boostede dit indlæg",
|
||||||
"notification.relationships_severance_event": "Mistede forbindelser med {name}",
|
"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.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.domain_block": "En admin fra {from} har blokeret {target}, herunder {followersCount} tilhængere og {followingCount, plural, one {# konto, der} other {# konti, som}} følges.",
|
||||||
@ -504,11 +535,24 @@
|
|||||||
"notification.status": "{name} har netop postet",
|
"notification.status": "{name} har netop postet",
|
||||||
"notification.update": "{name} redigerede et indlæg",
|
"notification.update": "{name} redigerede et indlæg",
|
||||||
"notification_requests.accept": "Acceptér",
|
"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.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.title": "Afvis notifikationsanmodninger?",
|
||||||
"notification_requests.dismiss": "Afvis",
|
"notification_requests.dismiss": "Afvis",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Afvis # anmodning…} other {Afvis # anmodninger…}}",
|
||||||
|
"notification_requests.edit_selection": "Redigér",
|
||||||
|
"notification_requests.exit_selection": "Udført",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Notifikationer fra denne konto er blevet filtreret, da kontoen er pålagt restriktioner af en moderator.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Notifikationer fra denne konto er blevet filtreret, da kontoen eller dens server er pålagt restriktioner af en moderator.",
|
||||||
"notification_requests.maximize": "Maksimér",
|
"notification_requests.maximize": "Maksimér",
|
||||||
"notification_requests.minimize_banner": "Minimér filtrerede notifikationsbanner",
|
"notification_requests.minimize_banner": "Minimér filtrerede notifikationsbanner",
|
||||||
"notification_requests.notifications_from": "Notifikationer fra {name}",
|
"notification_requests.notifications_from": "Notifikationer fra {name}",
|
||||||
"notification_requests.title": "Filtrerede notifikationer",
|
"notification_requests.title": "Filtrerede notifikationer",
|
||||||
|
"notification_requests.view": "Vis notifikationer",
|
||||||
"notifications.clear": "Ryd notifikationer",
|
"notifications.clear": "Ryd notifikationer",
|
||||||
"notifications.clear_confirmation": "Er du sikker på, at du vil rydde alle dine notifikationer permanent?",
|
"notifications.clear_confirmation": "Er du sikker på, at du vil rydde alle dine notifikationer permanent?",
|
||||||
"notifications.clear_title": "Ryd notifikationer?",
|
"notifications.clear_title": "Ryd notifikationer?",
|
||||||
@ -545,6 +589,12 @@
|
|||||||
"notifications.permission_denied": "Computernotifikationer er utilgængelige grundet tidligere afvist browsertilladelsesanmodning",
|
"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_alert": "Computernotifikationer kan ikke aktiveres, da browsertilladelse tidligere blev nægtet",
|
||||||
"notifications.permission_required": "Computernotifikationer er utilgængelige, da den krævede tilladelse ikke er tildelt.",
|
"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",
|
||||||
|
"notifications.policy.drop": "Ignorér",
|
||||||
|
"notifications.policy.drop_hint": "Send til intetheden, for aldrig at blive set igen",
|
||||||
|
"notifications.policy.filter": "Filter",
|
||||||
|
"notifications.policy.filter_hint": "Send til filtrerede notifikationsindbakke",
|
||||||
"notifications.policy.filter_limited_accounts_hint": "Begrænset af servermoderatorer",
|
"notifications.policy.filter_limited_accounts_hint": "Begrænset af servermoderatorer",
|
||||||
"notifications.policy.filter_limited_accounts_title": "Modererede konti",
|
"notifications.policy.filter_limited_accounts_title": "Modererede konti",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Oprettet indenfor {days, plural, one {den seneste dag} other {de seneste # dage}}",
|
"notifications.policy.filter_new_accounts.hint": "Oprettet indenfor {days, plural, one {den seneste dag} other {de seneste # dage}}",
|
||||||
@ -555,7 +605,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Folk, du ikke følger",
|
"notifications.policy.filter_not_following_title": "Folk, du ikke følger",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Filtreret, medmindre det er i svar på egen omtale, eller hvis afsenderen følges",
|
"notifications.policy.filter_private_mentions_hint": "Filtreret, medmindre det er i svar på egen omtale, eller hvis afsenderen følges",
|
||||||
"notifications.policy.filter_private_mentions_title": "Uopfordrede private omtaler",
|
"notifications.policy.filter_private_mentions_title": "Uopfordrede private omtaler",
|
||||||
"notifications.policy.title": "Bortfiltrér notifikationer fra…",
|
"notifications.policy.title": "Håndtér notifikationer fra…",
|
||||||
"notifications_permission_banner.enable": "Aktivér computernotifikationer",
|
"notifications_permission_banner.enable": "Aktivér computernotifikationer",
|
||||||
"notifications_permission_banner.how_to_control": "Aktivér computernotifikationer for at få besked, når Mastodon ikke er åben. Når de er aktiveret, kan man via knappen {icon} ovenfor præcist styre, hvilke typer af interaktioner, som genererer computernotifikationer.",
|
"notifications_permission_banner.how_to_control": "Aktivér computernotifikationer for at få besked, når Mastodon ikke er åben. Når de er aktiveret, kan man via knappen {icon} ovenfor præcist styre, hvilke typer af interaktioner, som genererer computernotifikationer.",
|
||||||
"notifications_permission_banner.title": "Gå aldrig glip af noget",
|
"notifications_permission_banner.title": "Gå aldrig glip af noget",
|
||||||
@ -742,8 +792,6 @@
|
|||||||
"status.favourite": "Favorit",
|
"status.favourite": "Favorit",
|
||||||
"status.favourites": "{count, plural, one {# favorit} other {# favoritter}}",
|
"status.favourites": "{count, plural, one {# favorit} other {# favoritter}}",
|
||||||
"status.filter": "Filtrér dette indlæg",
|
"status.filter": "Filtrér dette indlæg",
|
||||||
"status.filtered": "Filtreret",
|
|
||||||
"status.hide": "Skjul indlæg",
|
|
||||||
"status.history.created": "{name} oprettet {date}",
|
"status.history.created": "{name} oprettet {date}",
|
||||||
"status.history.edited": "{name} redigeret {date}",
|
"status.history.edited": "{name} redigeret {date}",
|
||||||
"status.load_more": "Indlæs mere",
|
"status.load_more": "Indlæs mere",
|
||||||
@ -771,10 +819,7 @@
|
|||||||
"status.report": "Anmeld @{name}",
|
"status.report": "Anmeld @{name}",
|
||||||
"status.sensitive_warning": "Følsomt indhold",
|
"status.sensitive_warning": "Følsomt indhold",
|
||||||
"status.share": "Del",
|
"status.share": "Del",
|
||||||
"status.show_filter_reason": "Vis alligevel",
|
|
||||||
"status.show_less": "Vis mindre",
|
|
||||||
"status.show_less_all": "Vis mindre for alle",
|
"status.show_less_all": "Vis mindre for alle",
|
||||||
"status.show_more": "Vis mere",
|
|
||||||
"status.show_more_all": "Vis mere for alle",
|
"status.show_more_all": "Vis mere for alle",
|
||||||
"status.show_original": "Vis original",
|
"status.show_original": "Vis original",
|
||||||
"status.title.with_attachments": "{user} postede {attachmentCount, plural, one {en vedhæftning} other {{attachmentCount} vedhæftninger}}",
|
"status.title.with_attachments": "{user} postede {attachmentCount, plural, one {en vedhæftning} other {{attachmentCount} vedhæftninger}}",
|
||||||
@ -793,10 +838,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minut} other {# minutter}} tilbage",
|
"time_remaining.minutes": "{number, plural, one {# minut} other {# minutter}} tilbage",
|
||||||
"time_remaining.moments": "Få øjeblikke tilbage",
|
"time_remaining.moments": "Få øjeblikke tilbage",
|
||||||
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} tilbage",
|
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} tilbage",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} fra andre servere vises ikke.",
|
|
||||||
"timeline_hint.resources.followers": "Følgere",
|
|
||||||
"timeline_hint.resources.follows": "Følger",
|
|
||||||
"timeline_hint.resources.statuses": "Ældre indlæg",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} {days, plural, one {den seneste dag} other {de seneste {days} dage}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} personer}} {days, plural, one {den seneste dag} other {de seneste {days} dage}}",
|
||||||
"trends.trending_now": "Hot lige nu",
|
"trends.trending_now": "Hot lige nu",
|
||||||
"ui.beforeunload": "Dit udkast går tabt, hvis du lukker Mastodon.",
|
"ui.beforeunload": "Dit udkast går tabt, hvis du lukker Mastodon.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "{domain} sperren",
|
"account.block_domain": "{domain} sperren",
|
||||||
"account.block_short": "Blockieren",
|
"account.block_short": "Blockieren",
|
||||||
"account.blocked": "Blockiert",
|
"account.blocked": "Blockiert",
|
||||||
"account.browse_more_on_origin_server": "Mehr auf dem Originalprofil durchsuchen",
|
|
||||||
"account.cancel_follow_request": "Folgeanfrage zurückziehen",
|
"account.cancel_follow_request": "Folgeanfrage zurückziehen",
|
||||||
"account.copy": "Link zum Profil kopieren",
|
"account.copy": "Link zum Profil kopieren",
|
||||||
"account.direct": "@{name} privat erwähnen",
|
"account.direct": "@{name} privat erwähnen",
|
||||||
@ -97,7 +96,9 @@
|
|||||||
"block_modal.they_will_know": "Es wird erkennbar sein, dass dieses Profil blockiert wurde.",
|
"block_modal.they_will_know": "Es wird erkennbar sein, dass dieses Profil blockiert wurde.",
|
||||||
"block_modal.title": "Profil blockieren?",
|
"block_modal.title": "Profil blockieren?",
|
||||||
"block_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.",
|
"block_modal.you_wont_see_mentions": "Du wirst keine Beiträge sehen, die dieses Profil erwähnen.",
|
||||||
"boost_modal.combo": "Mit {combo} wird dieses Fenster beim nächsten Mal nicht mehr angezeigt",
|
"boost_modal.combo": "Mit {combo} erscheint dieses Fenster beim nächsten Mal nicht mehr",
|
||||||
|
"boost_modal.reblog": "Beitrag teilen?",
|
||||||
|
"boost_modal.undo_reblog": "Beitrag nicht mehr teilen?",
|
||||||
"bundle_column_error.copy_stacktrace": "Fehlerbericht kopieren",
|
"bundle_column_error.copy_stacktrace": "Fehlerbericht kopieren",
|
||||||
"bundle_column_error.error.body": "Die angeforderte Seite konnte nicht dargestellt werden. Dies könnte auf einen Fehler in unserem Code oder auf ein Browser-Kompatibilitätsproblem zurückzuführen sein.",
|
"bundle_column_error.error.body": "Die angeforderte Seite konnte nicht dargestellt werden. Dies könnte auf einen Fehler in unserem Code oder auf ein Browser-Kompatibilitätsproblem zurückzuführen sein.",
|
||||||
"bundle_column_error.error.title": "Oh nein!",
|
"bundle_column_error.error.title": "Oh nein!",
|
||||||
@ -185,7 +186,7 @@
|
|||||||
"confirmations.logout.title": "Abmelden?",
|
"confirmations.logout.title": "Abmelden?",
|
||||||
"confirmations.mute.confirm": "Stummschalten",
|
"confirmations.mute.confirm": "Stummschalten",
|
||||||
"confirmations.redraft.confirm": "Löschen und neu erstellen",
|
"confirmations.redraft.confirm": "Löschen und neu erstellen",
|
||||||
"confirmations.redraft.message": "Möchtest du diesen Beitrag wirklich löschen und neu verfassen? Favoriten und geteilte Beiträge gehen verloren, und Antworten auf den ursprünglichen Beitrag verlieren den Zusammenhang.",
|
"confirmations.redraft.message": "Möchtest du diesen Beitrag wirklich löschen und neu verfassen? Alle Favoriten sowie die bisher geteilten Beiträge werden verloren gehen und Antworten auf den ursprünglichen Beitrag verlieren den Zusammenhang.",
|
||||||
"confirmations.redraft.title": "Beitrag löschen und neu erstellen?",
|
"confirmations.redraft.title": "Beitrag löschen und neu erstellen?",
|
||||||
"confirmations.reply.confirm": "Antworten",
|
"confirmations.reply.confirm": "Antworten",
|
||||||
"confirmations.reply.message": "Wenn du jetzt darauf antwortest, wird der andere Beitrag, an dem du gerade geschrieben hast, verworfen. Möchtest du wirklich fortfahren?",
|
"confirmations.reply.message": "Wenn du jetzt darauf antwortest, wird der andere Beitrag, an dem du gerade geschrieben hast, verworfen. Möchtest du wirklich fortfahren?",
|
||||||
@ -193,6 +194,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Entfolgen",
|
"confirmations.unfollow.confirm": "Entfolgen",
|
||||||
"confirmations.unfollow.message": "Möchtest du {name} wirklich entfolgen?",
|
"confirmations.unfollow.message": "Möchtest du {name} wirklich entfolgen?",
|
||||||
"confirmations.unfollow.title": "Profil entfolgen?",
|
"confirmations.unfollow.title": "Profil entfolgen?",
|
||||||
|
"content_warning.hide": "Beitrag ausblenden",
|
||||||
|
"content_warning.show": "Trotzdem anzeigen",
|
||||||
"conversation.delete": "Unterhaltung löschen",
|
"conversation.delete": "Unterhaltung löschen",
|
||||||
"conversation.mark_as_read": "Als gelesen markieren",
|
"conversation.mark_as_read": "Als gelesen markieren",
|
||||||
"conversation.open": "Unterhaltung anzeigen",
|
"conversation.open": "Unterhaltung anzeigen",
|
||||||
@ -300,6 +303,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen",
|
"filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen",
|
||||||
"filter_modal.select_filter.title": "Diesen Beitrag filtern",
|
"filter_modal.select_filter.title": "Diesen Beitrag filtern",
|
||||||
"filter_modal.title.status": "Beitrag per Filter ausblenden",
|
"filter_modal.title.status": "Beitrag per Filter ausblenden",
|
||||||
|
"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.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",
|
"filtered_notifications_banner.title": "Gefilterte Benachrichtigungen",
|
||||||
"firehose.all": "Alles",
|
"firehose.all": "Alles",
|
||||||
@ -349,6 +353,14 @@
|
|||||||
"hashtag.follow": "Hashtag folgen",
|
"hashtag.follow": "Hashtag folgen",
|
||||||
"hashtag.unfollow": "Hashtag entfolgen",
|
"hashtag.unfollow": "Hashtag entfolgen",
|
||||||
"hashtags.and_other": "… und {count, plural, one{# weiterer} other {# weitere}}",
|
"hashtags.and_other": "… und {count, plural, one{# weiterer} other {# weitere}}",
|
||||||
|
"hints.profiles.followers_may_be_missing": "Möglicherweise werden für dieses Profil nicht alle Follower angezeigt.",
|
||||||
|
"hints.profiles.follows_may_be_missing": "Möglicherweise werden für dieses Profil nicht alle gefolgten Profile angezeigt.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Möglicherweise werden nicht alle Beiträge von diesem Profil angezeigt.",
|
||||||
|
"hints.profiles.see_more_followers": "Weitere Follower auf {domain} ansehen",
|
||||||
|
"hints.profiles.see_more_follows": "Weitere gefolgte Profile auf {domain} ansehen",
|
||||||
|
"hints.profiles.see_more_posts": "Weitere Beiträge auf {domain} ansehen",
|
||||||
|
"hints.threads.replies_may_be_missing": "Möglicherweise werden nicht alle Antworten von anderen Servern angezeigt.",
|
||||||
|
"hints.threads.see_more": "Weitere Antworten auf {domain} ansehen",
|
||||||
"home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
|
"home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
|
||||||
"home.column_settings.show_replies": "Antworten anzeigen",
|
"home.column_settings.show_replies": "Antworten anzeigen",
|
||||||
"home.hide_announcements": "Ankündigungen ausblenden",
|
"home.hide_announcements": "Ankündigungen ausblenden",
|
||||||
@ -356,6 +368,17 @@
|
|||||||
"home.pending_critical_update.link": "Updates ansehen",
|
"home.pending_critical_update.link": "Updates ansehen",
|
||||||
"home.pending_critical_update.title": "Kritisches Sicherheitsupdate verfügbar!",
|
"home.pending_critical_update.title": "Kritisches Sicherheitsupdate verfügbar!",
|
||||||
"home.show_announcements": "Ankündigungen anzeigen",
|
"home.show_announcements": "Ankündigungen anzeigen",
|
||||||
|
"ignore_notifications_modal.disclaimer": "Mastodon kann anderen Nutzer*innen nicht mitteilen, dass du deren Benachrichtigungen ignorierst. Das Ignorieren von Benachrichtigungen wird nicht das Absenden der Nachricht selbst unterbinden.",
|
||||||
|
"ignore_notifications_modal.filter_instead": "Stattdessen filtern",
|
||||||
|
"ignore_notifications_modal.filter_to_act_users": "Du wirst weiterhin die Möglichkeit haben, andere Nutzer*innen zu genehmigen, abzulehnen oder zu melden",
|
||||||
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtern hilft, mögliches Durcheinander zu vermeiden",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "Gefilterte Benachrichtigungen können separat überprüft werden",
|
||||||
|
"ignore_notifications_modal.ignore": "Benachrichtigungen ignorieren",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "Benachrichtigungen von moderierten Konten ignorieren?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "Benachrichtigungen von neuen Konten ignorieren?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "Benachrichtigungen von Profilen ignorieren, die dir nicht folgen?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Benachrichtigungen von Profilen ignorieren, denen du nicht folgst?",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "Benachrichtigungen von unerwünschten privaten Erwähnungen ignorieren?",
|
||||||
"interaction_modal.description.favourite": "Mit einem Mastodon-Konto kannst du diesen Beitrag favorisieren, um deine Wertschätzung auszudrücken, und ihn für einen späteren Zeitpunkt speichern.",
|
"interaction_modal.description.favourite": "Mit einem Mastodon-Konto kannst du diesen Beitrag favorisieren, um deine Wertschätzung auszudrücken, und ihn für einen späteren Zeitpunkt speichern.",
|
||||||
"interaction_modal.description.follow": "Mit einem Mastodon-Konto kannst du {name} folgen, um die Beiträge auf deiner Startseite zu sehen.",
|
"interaction_modal.description.follow": "Mit einem Mastodon-Konto kannst du {name} folgen, um die Beiträge auf deiner Startseite zu sehen.",
|
||||||
"interaction_modal.description.reblog": "Mit einem Mastodon-Konto kannst du die Reichweite dieses Beitrags erhöhen, indem du ihn mit deinen Followern teilst.",
|
"interaction_modal.description.reblog": "Mit einem Mastodon-Konto kannst du die Reichweite dieses Beitrags erhöhen, indem du ihn mit deinen Followern teilst.",
|
||||||
@ -445,9 +468,8 @@
|
|||||||
"mute_modal.title": "Profil stummschalten?",
|
"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_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 weiterhin angesehen werden, aber du wirst deren Beiträge nicht mehr sehen.",
|
||||||
"name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}}",
|
|
||||||
"name_and_others_with_link": "{name} und <a>{count, plural, one {# weitere Person} other {# weitere Personen}}</a>",
|
|
||||||
"navigation_bar.about": "Über",
|
"navigation_bar.about": "Über",
|
||||||
|
"navigation_bar.administration": "Administration",
|
||||||
"navigation_bar.advanced_interface": "Im erweiterten Webinterface öffnen",
|
"navigation_bar.advanced_interface": "Im erweiterten Webinterface öffnen",
|
||||||
"navigation_bar.blocks": "Blockierte Profile",
|
"navigation_bar.blocks": "Blockierte Profile",
|
||||||
"navigation_bar.bookmarks": "Lesezeichen",
|
"navigation_bar.bookmarks": "Lesezeichen",
|
||||||
@ -464,6 +486,7 @@
|
|||||||
"navigation_bar.follows_and_followers": "Follower und Folge ich",
|
"navigation_bar.follows_and_followers": "Follower und Folge ich",
|
||||||
"navigation_bar.lists": "Listen",
|
"navigation_bar.lists": "Listen",
|
||||||
"navigation_bar.logout": "Abmelden",
|
"navigation_bar.logout": "Abmelden",
|
||||||
|
"navigation_bar.moderation": "Moderation",
|
||||||
"navigation_bar.mutes": "Stummgeschaltete Profile",
|
"navigation_bar.mutes": "Stummgeschaltete Profile",
|
||||||
"navigation_bar.opened_in_classic_interface": "Beiträge, Konten und andere bestimmte Seiten werden standardmäßig im klassischen Webinterface geöffnet.",
|
"navigation_bar.opened_in_classic_interface": "Beiträge, Konten und andere bestimmte Seiten werden standardmäßig im klassischen Webinterface geöffnet.",
|
||||||
"navigation_bar.personal": "Persönlich",
|
"navigation_bar.personal": "Persönlich",
|
||||||
@ -479,10 +502,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} meldete {target} wegen {category}",
|
"notification.admin.report_statuses": "{name} meldete {target} wegen {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} meldete {target}",
|
"notification.admin.report_statuses_other": "{name} meldete {target}",
|
||||||
"notification.admin.sign_up": "{name} registrierte sich",
|
"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.favourite": "{name} favorisierte deinen Beitrag",
|
"notification.favourite": "{name} favorisierte deinen Beitrag",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} und <a>{count, plural, one {# weitere Person} other {# weitere Personen}}</a> favorisierten deinen Beitrag",
|
||||||
"notification.follow": "{name} folgt dir",
|
"notification.follow": "{name} folgt dir",
|
||||||
|
"notification.follow.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} folgen dir",
|
||||||
"notification.follow_request": "{name} möchte dir folgen",
|
"notification.follow_request": "{name} möchte dir folgen",
|
||||||
"notification.mention": "{name} erwähnte dich",
|
"notification.follow_request.name_and_others": "{name} und {count, plural, one {# weitere Person} other {# weitere Personen}} 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.moderation-warning.learn_more": "Mehr erfahren",
|
"notification.moderation-warning.learn_more": "Mehr erfahren",
|
||||||
"notification.moderation_warning": "Du wurdest von den Moderator*innen verwarnt",
|
"notification.moderation_warning": "Du wurdest von den Moderator*innen verwarnt",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Einige deiner Beiträge sind entfernt worden.",
|
"notification.moderation_warning.action_delete_statuses": "Einige deiner Beiträge sind entfernt worden.",
|
||||||
@ -494,8 +525,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Dein Konto wurde gesperrt.",
|
"notification.moderation_warning.action_suspend": "Dein Konto wurde gesperrt.",
|
||||||
"notification.own_poll": "Deine Umfrage ist beendet",
|
"notification.own_poll": "Deine Umfrage ist beendet",
|
||||||
"notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet",
|
"notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet",
|
||||||
"notification.private_mention": "{name} hat dich privat erwähnt",
|
|
||||||
"notification.reblog": "{name} teilte deinen Beitrag",
|
"notification.reblog": "{name} teilte deinen Beitrag",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} und <a>{count, plural, one {# weitere Person} other {# weitere Personen}}</a> teilten deinen Beitrag",
|
||||||
"notification.relationships_severance_event": "Verbindungen mit {name} verloren",
|
"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.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.domain_block": "Ein Admin von {from} hat {target} blockiert – darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.",
|
||||||
@ -503,12 +534,25 @@
|
|||||||
"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.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} hat gerade etwas gepostet",
|
||||||
"notification.update": "{name} bearbeitete einen Beitrag",
|
"notification.update": "{name} bearbeitete einen Beitrag",
|
||||||
"notification_requests.accept": "Akzeptieren",
|
"notification_requests.accept": "Genehmigen",
|
||||||
|
"notification_requests.accept_multiple": "{count, plural, one {# Anfrage genehmigen …} other {# Anfragen genehmigen …}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Anfrage genehmigen} other {Anfragen genehmigen}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "Du bist dabei, {{count, plural, one {eine Benachrichtigungsanfrage} other {# Benachrichtigungsanfragen}} zu genehmigen. Möchtest du wirklich fortfahren?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "Benachrichtigungsanfragen genehmigen?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Anfrage ablehnen} other {Anfragen ablehnen}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "Du bist dabei, {count, plural, one {eine Benachrichtigungsanfrage} other {# Benachrichtigungsanfragen}} abzulehnen. Du wirst nicht mehr ohne Weiteres auf {count, plural, one {sie} other {sie}} zugreifen können. Möchtest du wirklich fortfahren?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Benachrichtigungsanfragen ablehnen?",
|
||||||
"notification_requests.dismiss": "Ablehnen",
|
"notification_requests.dismiss": "Ablehnen",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {# Anfrage ablehnen …} other {# Anfragen ablehnen …}}",
|
||||||
|
"notification_requests.edit_selection": "Bearbeiten",
|
||||||
|
"notification_requests.exit_selection": "Fertig",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Benachrichtigungen von diesem Konto wurden gefiltert, weil es durch Moderator*innen eingeschränkt wurde.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Benachrichtigungen von diesem Konto wurden gefiltert, weil deren Konto oder Server durch Moderator*innen eingeschränkt wurde.",
|
||||||
"notification_requests.maximize": "Maximieren",
|
"notification_requests.maximize": "Maximieren",
|
||||||
"notification_requests.minimize_banner": "Banner für gefilterte Benachrichtigungen minimieren",
|
"notification_requests.minimize_banner": "Banner für gefilterte Benachrichtigungen minimieren",
|
||||||
"notification_requests.notifications_from": "Benachrichtigungen von {name}",
|
"notification_requests.notifications_from": "Benachrichtigungen von {name}",
|
||||||
"notification_requests.title": "Gefilterte Benachrichtigungen",
|
"notification_requests.title": "Gefilterte Benachrichtigungen",
|
||||||
|
"notification_requests.view": "Benachrichtigungen anzeigen",
|
||||||
"notifications.clear": "Benachrichtigungen löschen",
|
"notifications.clear": "Benachrichtigungen löschen",
|
||||||
"notifications.clear_confirmation": "Möchtest du wirklich alle Benachrichtigungen für immer löschen?",
|
"notifications.clear_confirmation": "Möchtest du wirklich alle Benachrichtigungen für immer löschen?",
|
||||||
"notifications.clear_title": "Benachrichtigungen löschen?",
|
"notifications.clear_title": "Benachrichtigungen löschen?",
|
||||||
@ -545,15 +589,23 @@
|
|||||||
"notifications.permission_denied": "Desktop-Benachrichtigungen können aufgrund einer zuvor verweigerten Berechtigung nicht aktiviert werden",
|
"notifications.permission_denied": "Desktop-Benachrichtigungen können aufgrund einer zuvor verweigerten Berechtigung nicht aktiviert werden",
|
||||||
"notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde",
|
"notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde",
|
||||||
"notifications.permission_required": "Desktop-Benachrichtigungen sind nicht verfügbar, da die erforderliche Berechtigung nicht erteilt wurde.",
|
"notifications.permission_required": "Desktop-Benachrichtigungen sind nicht verfügbar, da die erforderliche Berechtigung nicht erteilt wurde.",
|
||||||
|
"notifications.policy.accept": "Akzeptieren",
|
||||||
|
"notifications.policy.accept_hint": "In Benachrichtigungen anzeigen",
|
||||||
|
"notifications.policy.drop": "Ignorieren",
|
||||||
|
"notifications.policy.drop_hint": "In die Leere senden und nie wieder sehen",
|
||||||
|
"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_new_accounts.hint": "Innerhalb {days, plural, one {des letzten Tages} other {der letzten # Tagen}} erstellt",
|
"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_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_followers_title": "Profilen, die mir nicht folgen",
|
||||||
"notifications.policy.filter_not_following_hint": "Solange du sie nicht manuell akzeptierst",
|
"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_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_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 herausfiltern von …",
|
"notifications.policy.title": "Benachrichtigungen verwalten von …",
|
||||||
"notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen",
|
"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.",
|
"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.",
|
||||||
"notifications_permission_banner.title": "Nichts verpassen",
|
"notifications_permission_banner.title": "Nichts verpassen",
|
||||||
@ -615,9 +667,9 @@
|
|||||||
"privacy.private.short": "Follower",
|
"privacy.private.short": "Follower",
|
||||||
"privacy.public.long": "Alle in und außerhalb von Mastodon",
|
"privacy.public.long": "Alle in und außerhalb von Mastodon",
|
||||||
"privacy.public.short": "Öffentlich",
|
"privacy.public.short": "Öffentlich",
|
||||||
"privacy.unlisted.additional": "Das Verhalten ist wie bei „Öffentlich“, jedoch erscheint dieser Beitrag nicht in „Live-Feeds“, „Erkunden“, Hashtags oder über die Mastodon-Suchfunktion – selbst wenn du das in den Einstellungen aktiviert hast.",
|
"privacy.unlisted.additional": "Das Verhalten ist wie bei „Öffentlich“, jedoch gibt es einige Einschränkungen. Der Beitrag wird nicht in „Live-Feeds“, „Erkunden“, Hashtags oder über die Mastodon-Suchfunktion auffindbar sein – selbst wenn die zugehörige Einstellung aktiviert wurde.",
|
||||||
"privacy.unlisted.long": "Weniger im Algorithmus berücksichtigt",
|
"privacy.unlisted.long": "Weniger im Algorithmus berücksichtigt",
|
||||||
"privacy.unlisted.short": "Öffentlich (eingeschränkt)",
|
"privacy.unlisted.short": "Öffentlich (still)",
|
||||||
"privacy_policy.last_updated": "Stand: {date}",
|
"privacy_policy.last_updated": "Stand: {date}",
|
||||||
"privacy_policy.title": "Datenschutzerklärung",
|
"privacy_policy.title": "Datenschutzerklärung",
|
||||||
"recommended": "Empfohlen",
|
"recommended": "Empfohlen",
|
||||||
@ -740,8 +792,6 @@
|
|||||||
"status.favourite": "Favorisieren",
|
"status.favourite": "Favorisieren",
|
||||||
"status.favourites": "{count, plural, one {Mal favorisiert} other {Mal favorisiert}}",
|
"status.favourites": "{count, plural, one {Mal favorisiert} other {Mal favorisiert}}",
|
||||||
"status.filter": "Beitrag filtern",
|
"status.filter": "Beitrag filtern",
|
||||||
"status.filtered": "Gefiltert",
|
|
||||||
"status.hide": "Beitrag ausblenden",
|
|
||||||
"status.history.created": "{name} erstellte {date}",
|
"status.history.created": "{name} erstellte {date}",
|
||||||
"status.history.edited": "{name} bearbeitete {date}",
|
"status.history.edited": "{name} bearbeitete {date}",
|
||||||
"status.load_more": "Mehr laden",
|
"status.load_more": "Mehr laden",
|
||||||
@ -769,10 +819,7 @@
|
|||||||
"status.report": "@{name} melden",
|
"status.report": "@{name} melden",
|
||||||
"status.sensitive_warning": "Inhaltswarnung",
|
"status.sensitive_warning": "Inhaltswarnung",
|
||||||
"status.share": "Teilen",
|
"status.share": "Teilen",
|
||||||
"status.show_filter_reason": "Trotzdem anzeigen",
|
|
||||||
"status.show_less": "Weniger anzeigen",
|
|
||||||
"status.show_less_all": "Alles einklappen",
|
"status.show_less_all": "Alles einklappen",
|
||||||
"status.show_more": "Mehr anzeigen",
|
|
||||||
"status.show_more_all": "Alles ausklappen",
|
"status.show_more_all": "Alles ausklappen",
|
||||||
"status.show_original": "Ursprünglichen Beitrag anzeigen",
|
"status.show_original": "Ursprünglichen Beitrag anzeigen",
|
||||||
"status.title.with_attachments": "{user} veröffentlichte {attachmentCount, plural, one {ein Medium} other {{attachmentCount} Medien}}",
|
"status.title.with_attachments": "{user} veröffentlichte {attachmentCount, plural, one {ein Medium} other {{attachmentCount} Medien}}",
|
||||||
@ -791,10 +838,6 @@
|
|||||||
"time_remaining.minutes": "noch {number, plural, one {# Minute} other {# Minuten}}",
|
"time_remaining.minutes": "noch {number, plural, one {# Minute} other {# Minuten}}",
|
||||||
"time_remaining.moments": "Wird gleich beendet",
|
"time_remaining.moments": "Wird gleich beendet",
|
||||||
"time_remaining.seconds": "noch {number, plural, one {# Sekunde} other {# Sekunden}}",
|
"time_remaining.seconds": "noch {number, plural, one {# Sekunde} other {# Sekunden}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} von anderen Servern werden nicht angezeigt.",
|
|
||||||
"timeline_hint.resources.followers": "Follower",
|
|
||||||
"timeline_hint.resources.follows": "„Folge ich“",
|
|
||||||
"timeline_hint.resources.statuses": "Ältere Beiträge",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} Profil} other {{counter} Profile}} {days, plural, one {seit gestern} other {in {days} Tagen}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} Profil} other {{counter} Profile}} {days, plural, one {seit gestern} other {in {days} Tagen}}",
|
||||||
"trends.trending_now": "Aktuelle Trends",
|
"trends.trending_now": "Aktuelle Trends",
|
||||||
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
|
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Αποκλεισμός τομέα {domain}",
|
"account.block_domain": "Αποκλεισμός τομέα {domain}",
|
||||||
"account.block_short": "Αποκλεισμός",
|
"account.block_short": "Αποκλεισμός",
|
||||||
"account.blocked": "Αποκλεισμένος/η",
|
"account.blocked": "Αποκλεισμένος/η",
|
||||||
"account.browse_more_on_origin_server": "Δες περισσότερα στο αρχικό προφίλ",
|
|
||||||
"account.cancel_follow_request": "Απόσυρση αιτήματος παρακολούθησης",
|
"account.cancel_follow_request": "Απόσυρση αιτήματος παρακολούθησης",
|
||||||
"account.copy": "Αντιγραφή συνδέσμου προφίλ",
|
"account.copy": "Αντιγραφή συνδέσμου προφίλ",
|
||||||
"account.direct": "Ιδιωτική αναφορά @{name}",
|
"account.direct": "Ιδιωτική αναφορά @{name}",
|
||||||
@ -349,6 +348,14 @@
|
|||||||
"hashtag.follow": "Παρακολούθηση ετικέτας",
|
"hashtag.follow": "Παρακολούθηση ετικέτας",
|
||||||
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
|
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
|
||||||
"hashtags.and_other": "…και {count, plural, one {}other {# ακόμη}}",
|
"hashtags.and_other": "…και {count, plural, one {}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_reblogs": "Εμφάνιση προωθήσεων",
|
||||||
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
|
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
|
||||||
"home.hide_announcements": "Απόκρυψη ανακοινώσεων",
|
"home.hide_announcements": "Απόκρυψη ανακοινώσεων",
|
||||||
@ -356,6 +363,17 @@
|
|||||||
"home.pending_critical_update.link": "Δείτε ενημερώσεις",
|
"home.pending_critical_update.link": "Δείτε ενημερώσεις",
|
||||||
"home.pending_critical_update.title": "Κρίσιμη ενημέρωση ασφαλείας διαθέσιμη!",
|
"home.pending_critical_update.title": "Κρίσιμη ενημέρωση ασφαλείας διαθέσιμη!",
|
||||||
"home.show_announcements": "Εμφάνιση ανακοινώσεων",
|
"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.favourite": "Με ένα συντάκτη στο Mastodon μπορείς να αγαπήσεις αυτή την ανάρτηση, για να ενημερώσεις τον συγγραφέα ότι την εκτιμάς και να την αποθηκεύσεις για αργότερα.",
|
||||||
"interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.",
|
"interaction_modal.description.follow": "Με έναν λογαριασμό Mastodon, μπορείς να ακολουθήσεις τον/την {name} ώστε να λαμβάνεις τις αναρτήσεις του/της στη δική σου ροή.",
|
||||||
"interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.",
|
"interaction_modal.description.reblog": "Με ένα λογαριασμό Mastodon, μπορείς να ενισχύσεις αυτή την ανάρτηση για να τη μοιραστείς με τους δικούς σου ακολούθους.",
|
||||||
@ -445,8 +463,6 @@
|
|||||||
"mute_modal.title": "Σίγαση χρήστη;",
|
"mute_modal.title": "Σίγαση χρήστη;",
|
||||||
"mute_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.",
|
"mute_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.",
|
||||||
"mute_modal.you_wont_see_posts": "Μπορεί ακόμα να δει τις αναρτήσεις σου, αλλά δε θα βλέπεις τις δικές του.",
|
"mute_modal.you_wont_see_posts": "Μπορεί ακόμα να δει τις αναρτήσεις σου, αλλά δε θα βλέπεις τις δικές του.",
|
||||||
"name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}}",
|
|
||||||
"name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a>",
|
|
||||||
"navigation_bar.about": "Σχετικά με",
|
"navigation_bar.about": "Σχετικά με",
|
||||||
"navigation_bar.advanced_interface": "Άνοιγμα σε προηγμένη διεπαφή ιστού",
|
"navigation_bar.advanced_interface": "Άνοιγμα σε προηγμένη διεπαφή ιστού",
|
||||||
"navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
|
"navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
|
||||||
@ -479,10 +495,18 @@
|
|||||||
"notification.admin.report_statuses": "Ο χρήστης {name} ανέφερε τον χρήστη {target} για {category}",
|
"notification.admin.report_statuses": "Ο χρήστης {name} ανέφερε τον χρήστη {target} για {category}",
|
||||||
"notification.admin.report_statuses_other": "Ο χρήστης {name} ανέφερε τον χρήστη {target}",
|
"notification.admin.report_statuses_other": "Ο χρήστης {name} ανέφερε τον χρήστη {target}",
|
||||||
"notification.admin.sign_up": "{name} έχει εγγραφεί",
|
"notification.admin.sign_up": "{name} έχει εγγραφεί",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} έχουν εγγραφεί",
|
||||||
"notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου",
|
"notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ανάρτησή σου",
|
||||||
"notification.follow": "Ο/Η {name} σε ακολούθησε",
|
"notification.follow": "Ο/Η {name} σε ακολούθησε",
|
||||||
|
"notification.follow.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} σε ακολούθησαν",
|
||||||
"notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει",
|
"notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει",
|
||||||
"notification.mention": "Ο/Η {name} σε επισήμανε",
|
"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.mention": "Επισήμανση",
|
||||||
"notification.moderation-warning.learn_more": "Μάθε περισσότερα",
|
"notification.moderation-warning.learn_more": "Μάθε περισσότερα",
|
||||||
"notification.moderation_warning": "Έχετε λάβει μία προειδοποίηση συντονισμού",
|
"notification.moderation_warning": "Έχετε λάβει μία προειδοποίηση συντονισμού",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Ορισμένες από τις αναρτήσεις σου έχουν αφαιρεθεί.",
|
"notification.moderation_warning.action_delete_statuses": "Ορισμένες από τις αναρτήσεις σου έχουν αφαιρεθεί.",
|
||||||
@ -494,8 +518,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Ο λογαριασμός σου έχει ανασταλεί.",
|
"notification.moderation_warning.action_suspend": "Ο λογαριασμός σου έχει ανασταλεί.",
|
||||||
"notification.own_poll": "Η δημοσκόπησή σου έληξε",
|
"notification.own_poll": "Η δημοσκόπησή σου έληξε",
|
||||||
"notification.poll": "Μία ψηφοφορία στην οποία συμμετείχες έχει τελειώσει",
|
"notification.poll": "Μία ψηφοφορία στην οποία συμμετείχες έχει τελειώσει",
|
||||||
"notification.private_mention": "{name} σέ επισήμανε ιδιωτικά",
|
|
||||||
"notification.reblog": "Ο/Η {name} ενίσχυσε τη δημοσίευσή σου",
|
"notification.reblog": "Ο/Η {name} ενίσχυσε τη δημοσίευσή σου",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> ενίσχυσαν την ανάρτησή σου",
|
||||||
"notification.relationships_severance_event": "Χάθηκε η σύνδεση με το {name}",
|
"notification.relationships_severance_event": "Χάθηκε η σύνδεση με το {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Ένας διαχειριστής από το {from} ανέστειλε το {target}, πράγμα που σημαίνει ότι δεν μπορείς πλέον να λαμβάνεις ενημερώσεις από αυτούς ή να αλληλεπιδράς μαζί τους.",
|
"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.domain_block": "Ένας διαχειριστής από {from} έχει μπλοκάρει το {target}, συμπεριλαμβανομένων {followersCount} από τους ακόλουθούς σου και {followingCount, plural, one {# λογαριασμό} other {# λογαριασμοί}} που ακολουθείς.",
|
||||||
@ -504,11 +528,24 @@
|
|||||||
"notification.status": "Ο/Η {name} μόλις ανέρτησε κάτι",
|
"notification.status": "Ο/Η {name} μόλις ανέρτησε κάτι",
|
||||||
"notification.update": "ο/η {name} επεξεργάστηκε μια ανάρτηση",
|
"notification.update": "ο/η {name} επεξεργάστηκε μια ανάρτηση",
|
||||||
"notification_requests.accept": "Αποδοχή",
|
"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": "Απόρριψη",
|
||||||
|
"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.maximize": "Μεγιστοποίηση",
|
||||||
"notification_requests.minimize_banner": "Ελαχιστοποίηση μπάνερ φιλτραρισμένων ειδοποιήσεων",
|
"notification_requests.minimize_banner": "Ελαχιστοποίηση μπάνερ φιλτραρισμένων ειδοποιήσεων",
|
||||||
"notification_requests.notifications_from": "Ειδοποιήσεις από {name}",
|
"notification_requests.notifications_from": "Ειδοποιήσεις από {name}",
|
||||||
"notification_requests.title": "Φιλτραρισμένες ειδοποιήσεις",
|
"notification_requests.title": "Φιλτραρισμένες ειδοποιήσεις",
|
||||||
|
"notification_requests.view": "Προβολή ειδοποιήσεων",
|
||||||
"notifications.clear": "Καθαρισμός ειδοποιήσεων",
|
"notifications.clear": "Καθαρισμός ειδοποιήσεων",
|
||||||
"notifications.clear_confirmation": "Σίγουρα θέλεις να καθαρίσεις μόνιμα όλες τις ειδοποιήσεις σου;",
|
"notifications.clear_confirmation": "Σίγουρα θέλεις να καθαρίσεις μόνιμα όλες τις ειδοποιήσεις σου;",
|
||||||
"notifications.clear_title": "Εκκαθάριση ειδοποιήσεων;",
|
"notifications.clear_title": "Εκκαθάριση ειδοποιήσεων;",
|
||||||
@ -545,6 +582,14 @@
|
|||||||
"notifications.permission_denied": "Οι ειδοποιήσεις στην επιφάνεια εργασίας δεν είναι διαθέσιμες διότι έχει απορριφθεί κάποιο προηγούμενο αίτημα άδειας",
|
"notifications.permission_denied": "Οι ειδοποιήσεις στην επιφάνεια εργασίας δεν είναι διαθέσιμες διότι έχει απορριφθεί κάποιο προηγούμενο αίτημα άδειας",
|
||||||
"notifications.permission_denied_alert": "Δεν είναι δυνατή η ενεργοποίηση των ειδοποιήσεων της επιφάνειας εργασίας, καθώς η άδεια του προγράμματος περιήγησης έχει απορριφθεί νωρίτερα",
|
"notifications.permission_denied_alert": "Δεν είναι δυνατή η ενεργοποίηση των ειδοποιήσεων της επιφάνειας εργασίας, καθώς η άδεια του προγράμματος περιήγησης έχει απορριφθεί νωρίτερα",
|
||||||
"notifications.permission_required": "Οι ειδοποιήσεις δεν είναι διαθέσιμες επειδή δεν έχει δοθεί η απαιτούμενη άδεια.",
|
"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 {των τελευταίων # ημερών}}",
|
"notifications.policy.filter_new_accounts.hint": "Δημιουργήθηκε εντός {days, plural, one {της τελευταίας ημέρας} other {των τελευταίων # ημερών}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Νέοι λογαριασμοί",
|
"notifications.policy.filter_new_accounts_title": "Νέοι λογαριασμοί",
|
||||||
"notifications.policy.filter_not_followers_hint": "Συμπεριλαμβανομένων των ατόμων που σας έχουν ακολουθήσει λιγότερο από {days, plural, one {μια ημέρα} other {# ημέρες}} πριν",
|
"notifications.policy.filter_not_followers_hint": "Συμπεριλαμβανομένων των ατόμων που σας έχουν ακολουθήσει λιγότερο από {days, plural, one {μια ημέρα} other {# ημέρες}} πριν",
|
||||||
@ -553,7 +598,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Άτομα που δεν ακολουθείς",
|
"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.filter_private_mentions_title": "Μη συναινετικές ιδιωτικές αναφορές",
|
||||||
"notifications.policy.title": "Φιλτράρισμα ειδοποιήσεων από…",
|
"notifications.policy.title": "Διαχείριση ειδοποιήσεων από…",
|
||||||
"notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας",
|
"notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας",
|
||||||
"notifications_permission_banner.how_to_control": "Για να λαμβάνεις ειδοποιήσεις όταν το Mastodon δεν είναι ανοιχτό, ενεργοποίησε τις ειδοποιήσεις επιφάνειας εργασίας. Μπορείς να ελέγξεις με ακρίβεια ποιοι τύποι αλληλεπιδράσεων δημιουργούν ειδοποιήσεις επιφάνειας εργασίας μέσω του κουμπιού {icon} μόλις ενεργοποιηθούν.",
|
"notifications_permission_banner.how_to_control": "Για να λαμβάνεις ειδοποιήσεις όταν το Mastodon δεν είναι ανοιχτό, ενεργοποίησε τις ειδοποιήσεις επιφάνειας εργασίας. Μπορείς να ελέγξεις με ακρίβεια ποιοι τύποι αλληλεπιδράσεων δημιουργούν ειδοποιήσεις επιφάνειας εργασίας μέσω του κουμπιού {icon} μόλις ενεργοποιηθούν.",
|
||||||
"notifications_permission_banner.title": "Μη χάσεις στιγμή",
|
"notifications_permission_banner.title": "Μη χάσεις στιγμή",
|
||||||
@ -740,8 +785,6 @@
|
|||||||
"status.favourite": "Αγαπημένα",
|
"status.favourite": "Αγαπημένα",
|
||||||
"status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}",
|
"status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}",
|
||||||
"status.filter": "Φιλτράρισμα αυτής της ανάρτησης",
|
"status.filter": "Φιλτράρισμα αυτής της ανάρτησης",
|
||||||
"status.filtered": "Φιλτραρισμένα",
|
|
||||||
"status.hide": "Απόκρυψη ανάρτησης",
|
|
||||||
"status.history.created": "{name} δημιούργησε στις {date}",
|
"status.history.created": "{name} δημιούργησε στις {date}",
|
||||||
"status.history.edited": "{name} επεξεργάστηκε στις {date}",
|
"status.history.edited": "{name} επεξεργάστηκε στις {date}",
|
||||||
"status.load_more": "Φόρτωσε περισσότερα",
|
"status.load_more": "Φόρτωσε περισσότερα",
|
||||||
@ -769,10 +812,7 @@
|
|||||||
"status.report": "Αναφορά @{name}",
|
"status.report": "Αναφορά @{name}",
|
||||||
"status.sensitive_warning": "Ευαίσθητο περιεχόμενο",
|
"status.sensitive_warning": "Ευαίσθητο περιεχόμενο",
|
||||||
"status.share": "Κοινοποίηση",
|
"status.share": "Κοινοποίηση",
|
||||||
"status.show_filter_reason": "Εμφάνιση παρ' όλα αυτά",
|
|
||||||
"status.show_less": "Δείξε λιγότερα",
|
|
||||||
"status.show_less_all": "Δείξε λιγότερα για όλα",
|
"status.show_less_all": "Δείξε λιγότερα για όλα",
|
||||||
"status.show_more": "Δείξε περισσότερα",
|
|
||||||
"status.show_more_all": "Δείξε περισσότερα για όλα",
|
"status.show_more_all": "Δείξε περισσότερα για όλα",
|
||||||
"status.show_original": "Εμφάνιση αρχικού",
|
"status.show_original": "Εμφάνιση αρχικού",
|
||||||
"status.title.with_attachments": "{user} δημοσίευσε {attachmentCount, plural, one {ένα συνημμένο} other {{attachmentCount} συνημμένα}}",
|
"status.title.with_attachments": "{user} δημοσίευσε {attachmentCount, plural, one {ένα συνημμένο} other {{attachmentCount} συνημμένα}}",
|
||||||
@ -791,10 +831,6 @@
|
|||||||
"time_remaining.minutes": "απομένουν {number, plural, one {# λεπτό} other {# λεπτά}}",
|
"time_remaining.minutes": "απομένουν {number, plural, one {# λεπτό} other {# λεπτά}}",
|
||||||
"time_remaining.moments": "Στιγμές που απομένουν",
|
"time_remaining.moments": "Στιγμές που απομένουν",
|
||||||
"time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}",
|
"time_remaining.seconds": "απομένουν {number, plural, one {# δευτερόλεπτο} other {# δευτερόλεπτα}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} από άλλους διακομιστές δεν εμφανίζονται.",
|
|
||||||
"timeline_hint.resources.followers": "Ακόλουθοι",
|
|
||||||
"timeline_hint.resources.follows": "Ακολουθείς",
|
|
||||||
"timeline_hint.resources.statuses": "Παλαιότερες αναρτήσεις",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} άτομο} 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": "Δημοφιλή τώρα",
|
"trends.trending_now": "Δημοφιλή τώρα",
|
||||||
"ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.",
|
"ui.beforeunload": "Το προσχέδιό σου θα χαθεί αν φύγεις από το Mastodon.",
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
"about.not_available": "This information has not been made available on this server.",
|
"about.not_available": "This information has not been made available on this server.",
|
||||||
"about.powered_by": "Decentralised social media powered by {mastodon}",
|
"about.powered_by": "Decentralised social media powered by {mastodon}",
|
||||||
"about.rules": "Server rules",
|
"about.rules": "Server rules",
|
||||||
|
"account.account_note_header": "Personal note",
|
||||||
"account.add_or_remove_from_list": "Add or Remove from lists",
|
"account.add_or_remove_from_list": "Add or Remove from lists",
|
||||||
"account.badges.bot": "Automated",
|
"account.badges.bot": "Automated",
|
||||||
"account.badges.group": "Group",
|
"account.badges.group": "Group",
|
||||||
@ -18,7 +19,6 @@
|
|||||||
"account.block_domain": "Block domain {domain}",
|
"account.block_domain": "Block domain {domain}",
|
||||||
"account.block_short": "Block",
|
"account.block_short": "Block",
|
||||||
"account.blocked": "Blocked",
|
"account.blocked": "Blocked",
|
||||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
|
||||||
"account.cancel_follow_request": "Cancel follow",
|
"account.cancel_follow_request": "Cancel follow",
|
||||||
"account.copy": "Copy link to profile",
|
"account.copy": "Copy link to profile",
|
||||||
"account.direct": "Privately mention @{name}",
|
"account.direct": "Privately mention @{name}",
|
||||||
@ -97,6 +97,8 @@
|
|||||||
"block_modal.title": "Block user?",
|
"block_modal.title": "Block user?",
|
||||||
"block_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
"block_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
||||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||||
|
"boost_modal.reblog": "Boost post?",
|
||||||
|
"boost_modal.undo_reblog": "Unboost post?",
|
||||||
"bundle_column_error.copy_stacktrace": "Copy error report",
|
"bundle_column_error.copy_stacktrace": "Copy error report",
|
||||||
"bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.",
|
"bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.",
|
||||||
"bundle_column_error.error.title": "Oh, no!",
|
"bundle_column_error.error.title": "Oh, no!",
|
||||||
@ -170,21 +172,30 @@
|
|||||||
"confirmations.block.confirm": "Block",
|
"confirmations.block.confirm": "Block",
|
||||||
"confirmations.delete.confirm": "Delete",
|
"confirmations.delete.confirm": "Delete",
|
||||||
"confirmations.delete.message": "Are you sure you want to delete this post?",
|
"confirmations.delete.message": "Are you sure you want to delete this post?",
|
||||||
|
"confirmations.delete.title": "Delete post?",
|
||||||
"confirmations.delete_list.confirm": "Delete",
|
"confirmations.delete_list.confirm": "Delete",
|
||||||
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
|
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
|
||||||
|
"confirmations.delete_list.title": "Delete list?",
|
||||||
"confirmations.discard_edit_media.confirm": "Discard",
|
"confirmations.discard_edit_media.confirm": "Discard",
|
||||||
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
|
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
|
||||||
"confirmations.edit.confirm": "Edit",
|
"confirmations.edit.confirm": "Edit",
|
||||||
"confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?",
|
"confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?",
|
||||||
|
"confirmations.edit.title": "Overwrite post?",
|
||||||
"confirmations.logout.confirm": "Log out",
|
"confirmations.logout.confirm": "Log out",
|
||||||
"confirmations.logout.message": "Are you sure you want to log out?",
|
"confirmations.logout.message": "Are you sure you want to log out?",
|
||||||
|
"confirmations.logout.title": "Log out?",
|
||||||
"confirmations.mute.confirm": "Mute",
|
"confirmations.mute.confirm": "Mute",
|
||||||
"confirmations.redraft.confirm": "Delete & redraft",
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
"confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
|
"confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
|
||||||
|
"confirmations.redraft.title": "Delete & redraft post?",
|
||||||
"confirmations.reply.confirm": "Reply",
|
"confirmations.reply.confirm": "Reply",
|
||||||
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
|
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
|
||||||
|
"confirmations.reply.title": "Overwrite post?",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
|
"confirmations.unfollow.title": "Unfollow user?",
|
||||||
|
"content_warning.hide": "Hide post",
|
||||||
|
"content_warning.show": "Show anyway",
|
||||||
"conversation.delete": "Delete conversation",
|
"conversation.delete": "Delete conversation",
|
||||||
"conversation.mark_as_read": "Mark as read",
|
"conversation.mark_as_read": "Mark as read",
|
||||||
"conversation.open": "View conversation",
|
"conversation.open": "View conversation",
|
||||||
@ -292,6 +303,8 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
|
"filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
|
||||||
"filter_modal.select_filter.title": "Filter this post",
|
"filter_modal.select_filter.title": "Filter this post",
|
||||||
"filter_modal.title.status": "Filter a post",
|
"filter_modal.title.status": "Filter a post",
|
||||||
|
"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",
|
"filtered_notifications_banner.title": "Filtered notifications",
|
||||||
"firehose.all": "All",
|
"firehose.all": "All",
|
||||||
"firehose.local": "This server",
|
"firehose.local": "This server",
|
||||||
@ -340,6 +353,14 @@
|
|||||||
"hashtag.follow": "Follow hashtag",
|
"hashtag.follow": "Follow hashtag",
|
||||||
"hashtag.unfollow": "Unfollow hashtag",
|
"hashtag.unfollow": "Unfollow hashtag",
|
||||||
"hashtags.and_other": "…and {count, plural, one {one more} other {# more}}",
|
"hashtags.and_other": "…and {count, plural, one {one more} other {# more}}",
|
||||||
|
"hints.profiles.followers_may_be_missing": "Followers for this profile may be missing.",
|
||||||
|
"hints.profiles.follows_may_be_missing": "Follows for this profile may be missing.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Some posts from this profile may be missing.",
|
||||||
|
"hints.profiles.see_more_followers": "See more followers on {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "See more follows on {domain}",
|
||||||
|
"hints.profiles.see_more_posts": "See more posts on {domain}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Replies from other servers may be missing.",
|
||||||
|
"hints.threads.see_more": "See more replies on {domain}",
|
||||||
"home.column_settings.show_reblogs": "Show boosts",
|
"home.column_settings.show_reblogs": "Show boosts",
|
||||||
"home.column_settings.show_replies": "Show replies",
|
"home.column_settings.show_replies": "Show replies",
|
||||||
"home.hide_announcements": "Hide announcements",
|
"home.hide_announcements": "Hide announcements",
|
||||||
@ -347,6 +368,17 @@
|
|||||||
"home.pending_critical_update.link": "See updates",
|
"home.pending_critical_update.link": "See updates",
|
||||||
"home.pending_critical_update.title": "Critical security update available!",
|
"home.pending_critical_update.title": "Critical security update available!",
|
||||||
"home.show_announcements": "Show announcements",
|
"home.show_announcements": "Show announcements",
|
||||||
|
"ignore_notifications_modal.disclaimer": "Mastodon cannot inform users that you've ignored their notifications. Ignoring notifications will not stop the messages themselves from being sent.",
|
||||||
|
"ignore_notifications_modal.filter_instead": "Filter instead",
|
||||||
|
"ignore_notifications_modal.filter_to_act_users": "You'll still be able to accept, reject, or report users",
|
||||||
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtering helps avoid potential confusion",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "You can review filtered notifications separately",
|
||||||
|
"ignore_notifications_modal.ignore": "Ignore notifications",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "Ignore notifications from restricted accounts?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "Ignore notifications from new accounts?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "Ignore notifications from people not following you?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Ignore notifications from people you don't follow?",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "Ignore notifications from unsolicited Private Mentions?",
|
||||||
"interaction_modal.description.favourite": "With an account on Mastodon, you can favourite this post to let the author know you appreciate it and save it for later.",
|
"interaction_modal.description.favourite": "With an account on Mastodon, you can favourite this post to let the author know you appreciate it and save it for later.",
|
||||||
"interaction_modal.description.follow": "With an account on Mastodon, you can follow {name} to receive their posts in your home feed.",
|
"interaction_modal.description.follow": "With an account on Mastodon, you can follow {name} to receive their posts in your home feed.",
|
||||||
"interaction_modal.description.reblog": "With an account on Mastodon, you can boost this post to share it with your own followers.",
|
"interaction_modal.description.reblog": "With an account on Mastodon, you can boost this post to share it with your own followers.",
|
||||||
@ -436,9 +468,8 @@
|
|||||||
"mute_modal.title": "Mute user?",
|
"mute_modal.title": "Mute user?",
|
||||||
"mute_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
"mute_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
||||||
"mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.",
|
"mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.",
|
||||||
"name_and_others": "{name} and {count, plural, one {# other} other {# others}}",
|
|
||||||
"name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a>",
|
|
||||||
"navigation_bar.about": "About",
|
"navigation_bar.about": "About",
|
||||||
|
"navigation_bar.administration": "Administration",
|
||||||
"navigation_bar.advanced_interface": "Open in advanced web interface",
|
"navigation_bar.advanced_interface": "Open in advanced web interface",
|
||||||
"navigation_bar.blocks": "Blocked users",
|
"navigation_bar.blocks": "Blocked users",
|
||||||
"navigation_bar.bookmarks": "Bookmarks",
|
"navigation_bar.bookmarks": "Bookmarks",
|
||||||
@ -455,6 +486,7 @@
|
|||||||
"navigation_bar.follows_and_followers": "Follows and followers",
|
"navigation_bar.follows_and_followers": "Follows and followers",
|
||||||
"navigation_bar.lists": "Lists",
|
"navigation_bar.lists": "Lists",
|
||||||
"navigation_bar.logout": "Logout",
|
"navigation_bar.logout": "Logout",
|
||||||
|
"navigation_bar.moderation": "Moderation",
|
||||||
"navigation_bar.mutes": "Muted users",
|
"navigation_bar.mutes": "Muted users",
|
||||||
"navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.",
|
"navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.",
|
||||||
"navigation_bar.personal": "Personal",
|
"navigation_bar.personal": "Personal",
|
||||||
@ -470,10 +502,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} reported {target} for {category}",
|
"notification.admin.report_statuses": "{name} reported {target} for {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} reported {target}",
|
"notification.admin.report_statuses_other": "{name} reported {target}",
|
||||||
"notification.admin.sign_up": "{name} signed up",
|
"notification.admin.sign_up": "{name} signed up",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} and {count, plural, one {# other} other {# others}} signed up",
|
||||||
"notification.favourite": "{name} favourited your post",
|
"notification.favourite": "{name} favourited your post",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a> favourited your post",
|
||||||
"notification.follow": "{name} followed you",
|
"notification.follow": "{name} 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} has requested to follow you",
|
||||||
"notification.mention": "{name} mentioned you",
|
"notification.follow_request.name_and_others": "{name} and {count, plural, one {# other} other {# others}} has requested to follow you",
|
||||||
|
"notification.label.mention": "Mention",
|
||||||
|
"notification.label.private_mention": "Private mention",
|
||||||
|
"notification.label.private_reply": "Private reply",
|
||||||
|
"notification.label.reply": "Reply",
|
||||||
|
"notification.mention": "Mention",
|
||||||
"notification.moderation-warning.learn_more": "Learn more",
|
"notification.moderation-warning.learn_more": "Learn more",
|
||||||
"notification.moderation_warning": "You have received a moderation warning",
|
"notification.moderation_warning": "You have received a moderation warning",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.",
|
"notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.",
|
||||||
@ -485,8 +525,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Your account has been suspended.",
|
"notification.moderation_warning.action_suspend": "Your account has been suspended.",
|
||||||
"notification.own_poll": "Your poll has ended",
|
"notification.own_poll": "Your poll has ended",
|
||||||
"notification.poll": "A poll you voted in has ended",
|
"notification.poll": "A poll you voted in has ended",
|
||||||
"notification.private_mention": "{name} privately mentioned you",
|
|
||||||
"notification.reblog": "{name} boosted your status",
|
"notification.reblog": "{name} boosted your status",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a> boosted your post",
|
||||||
"notification.relationships_severance_event": "Lost connections with {name}",
|
"notification.relationships_severance_event": "Lost connections with {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "An admin from {from} has suspended {target}, which means you can no longer receive updates from them or interact with them.",
|
"notification.relationships_severance_event.account_suspension": "An admin from {from} has suspended {target}, which means you can no longer receive updates from them or interact with them.",
|
||||||
"notification.relationships_severance_event.domain_block": "An admin from {from} has blocked {target}, including {followersCount} of your followers and {followingCount, plural, one {# account} other {# accounts}} you follow.",
|
"notification.relationships_severance_event.domain_block": "An admin from {from} has blocked {target}, including {followersCount} of your followers and {followingCount, plural, one {# account} other {# accounts}} you follow.",
|
||||||
@ -495,11 +535,27 @@
|
|||||||
"notification.status": "{name} just posted",
|
"notification.status": "{name} just posted",
|
||||||
"notification.update": "{name} edited a post",
|
"notification.update": "{name} edited a post",
|
||||||
"notification_requests.accept": "Accept",
|
"notification_requests.accept": "Accept",
|
||||||
|
"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": "You are about to accept {count, plural, one {one notification request} other {# notification requests}}. Are you sure you want to proceed?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "Accept notification requests?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Dismiss request} other {Dismiss requests}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "You are about to dismiss {count, plural, one {one notification request} other {# notification requests}}. You won't be able to easily access {count, plural, one {it} other {them}} again. Are you sure you want to proceed?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Dismiss notification requests?",
|
||||||
"notification_requests.dismiss": "Dismiss",
|
"notification_requests.dismiss": "Dismiss",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Dismiss # request…} other {Dismiss # requests…}}",
|
||||||
|
"notification_requests.edit_selection": "Edit",
|
||||||
|
"notification_requests.exit_selection": "Done",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Notifications from this account have been filtered because the account has been limited by a moderator.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Notifications from this account have been filtered because the account or its server has been limited by a moderator.",
|
||||||
|
"notification_requests.maximize": "Maximise",
|
||||||
|
"notification_requests.minimize_banner": "Minimize filtered notifications banner",
|
||||||
"notification_requests.notifications_from": "Notifications from {name}",
|
"notification_requests.notifications_from": "Notifications from {name}",
|
||||||
"notification_requests.title": "Filtered notifications",
|
"notification_requests.title": "Filtered notifications",
|
||||||
|
"notification_requests.view": "View notifications",
|
||||||
"notifications.clear": "Clear notifications",
|
"notifications.clear": "Clear notifications",
|
||||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||||
|
"notifications.clear_title": "Clear notifications?",
|
||||||
"notifications.column_settings.admin.report": "New reports:",
|
"notifications.column_settings.admin.report": "New reports:",
|
||||||
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
||||||
"notifications.column_settings.alert": "Desktop notifications",
|
"notifications.column_settings.alert": "Desktop notifications",
|
||||||
@ -533,6 +589,14 @@
|
|||||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||||
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
|
"notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.",
|
||||||
|
"notifications.policy.accept": "Accept",
|
||||||
|
"notifications.policy.accept_hint": "Show in notifications",
|
||||||
|
"notifications.policy.drop": "Ignore",
|
||||||
|
"notifications.policy.drop_hint": "Send to the void, never to be seen again",
|
||||||
|
"notifications.policy.filter": "Filter",
|
||||||
|
"notifications.policy.filter_hint": "Send to filtered notifications inbox",
|
||||||
|
"notifications.policy.filter_limited_accounts_hint": "Limited by server moderators",
|
||||||
|
"notifications.policy.filter_limited_accounts_title": "Moderated accounts",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Created within the past {days, plural, one {one day} other {# days}}",
|
"notifications.policy.filter_new_accounts.hint": "Created within the past {days, plural, one {one day} other {# days}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "New accounts",
|
"notifications.policy.filter_new_accounts_title": "New accounts",
|
||||||
"notifications.policy.filter_not_followers_hint": "Including people who have been following you fewer than {days, plural, one {one day} other {# days}}",
|
"notifications.policy.filter_not_followers_hint": "Including people who have been following you fewer than {days, plural, one {one day} other {# days}}",
|
||||||
@ -541,7 +605,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "People you don't follow",
|
"notifications.policy.filter_not_following_title": "People you don't follow",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Filtered unless it's in reply to your own mention or if you follow the sender",
|
"notifications.policy.filter_private_mentions_hint": "Filtered unless it's in reply to your own mention or if you follow the sender",
|
||||||
"notifications.policy.filter_private_mentions_title": "Unsolicited private mentions",
|
"notifications.policy.filter_private_mentions_title": "Unsolicited private mentions",
|
||||||
"notifications.policy.title": "Filter out notifications from…",
|
"notifications.policy.title": "Manage notifications from…",
|
||||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||||
"notifications_permission_banner.title": "Never miss a thing",
|
"notifications_permission_banner.title": "Never miss a thing",
|
||||||
@ -728,8 +792,6 @@
|
|||||||
"status.favourite": "Favourite",
|
"status.favourite": "Favourite",
|
||||||
"status.favourites": "{count, plural, one {favorite} other {favorites}}",
|
"status.favourites": "{count, plural, one {favorite} other {favorites}}",
|
||||||
"status.filter": "Filter this post",
|
"status.filter": "Filter this post",
|
||||||
"status.filtered": "Filtered",
|
|
||||||
"status.hide": "Hide post",
|
|
||||||
"status.history.created": "{name} created {date}",
|
"status.history.created": "{name} created {date}",
|
||||||
"status.history.edited": "{name} edited {date}",
|
"status.history.edited": "{name} edited {date}",
|
||||||
"status.load_more": "Load more",
|
"status.load_more": "Load more",
|
||||||
@ -757,10 +819,7 @@
|
|||||||
"status.report": "Report @{name}",
|
"status.report": "Report @{name}",
|
||||||
"status.sensitive_warning": "Sensitive content",
|
"status.sensitive_warning": "Sensitive content",
|
||||||
"status.share": "Share",
|
"status.share": "Share",
|
||||||
"status.show_filter_reason": "Show anyway",
|
|
||||||
"status.show_less": "Show less",
|
|
||||||
"status.show_less_all": "Show less for all",
|
"status.show_less_all": "Show less for all",
|
||||||
"status.show_more": "Show more",
|
|
||||||
"status.show_more_all": "Show more for all",
|
"status.show_more_all": "Show more for all",
|
||||||
"status.show_original": "Show original",
|
"status.show_original": "Show original",
|
||||||
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {{attachmentCount} attachments}}",
|
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {{attachmentCount} attachments}}",
|
||||||
@ -779,10 +838,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
||||||
"time_remaining.moments": "Moments remaining",
|
"time_remaining.moments": "Moments remaining",
|
||||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
|
|
||||||
"timeline_hint.resources.followers": "Followers",
|
|
||||||
"timeline_hint.resources.follows": "Follows",
|
|
||||||
"timeline_hint.resources.statuses": "Older posts",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}",
|
||||||
"trends.trending_now": "Trending now",
|
"trends.trending_now": "Trending now",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Block domain {domain}",
|
"account.block_domain": "Block domain {domain}",
|
||||||
"account.block_short": "Block",
|
"account.block_short": "Block",
|
||||||
"account.blocked": "Blocked",
|
"account.blocked": "Blocked",
|
||||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
|
||||||
"account.cancel_follow_request": "Cancel follow",
|
"account.cancel_follow_request": "Cancel follow",
|
||||||
"account.copy": "Copy link to profile",
|
"account.copy": "Copy link to profile",
|
||||||
"account.direct": "Privately mention @{name}",
|
"account.direct": "Privately mention @{name}",
|
||||||
@ -98,6 +97,8 @@
|
|||||||
"block_modal.title": "Block user?",
|
"block_modal.title": "Block user?",
|
||||||
"block_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
"block_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
||||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||||
|
"boost_modal.reblog": "Boost post?",
|
||||||
|
"boost_modal.undo_reblog": "Unboost post?",
|
||||||
"bundle_column_error.copy_stacktrace": "Copy error report",
|
"bundle_column_error.copy_stacktrace": "Copy error report",
|
||||||
"bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.",
|
"bundle_column_error.error.body": "The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.",
|
||||||
"bundle_column_error.error.title": "Oh, no!",
|
"bundle_column_error.error.title": "Oh, no!",
|
||||||
@ -193,6 +194,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Unfollow",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"confirmations.unfollow.title": "Unfollow user?",
|
"confirmations.unfollow.title": "Unfollow user?",
|
||||||
|
"content_warning.hide": "Hide post",
|
||||||
|
"content_warning.show": "Show anyway",
|
||||||
"conversation.delete": "Delete conversation",
|
"conversation.delete": "Delete conversation",
|
||||||
"conversation.mark_as_read": "Mark as read",
|
"conversation.mark_as_read": "Mark as read",
|
||||||
"conversation.open": "View conversation",
|
"conversation.open": "View conversation",
|
||||||
@ -300,6 +303,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
|
"filter_modal.select_filter.subtitle": "Use an existing category or create a new one",
|
||||||
"filter_modal.select_filter.title": "Filter this post",
|
"filter_modal.select_filter.title": "Filter this post",
|
||||||
"filter_modal.title.status": "Filter a post",
|
"filter_modal.title.status": "Filter a post",
|
||||||
|
"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.pending_requests": "From {count, plural, =0 {no one} one {one person} other {# people}} you may know",
|
||||||
"filtered_notifications_banner.title": "Filtered notifications",
|
"filtered_notifications_banner.title": "Filtered notifications",
|
||||||
"firehose.all": "All",
|
"firehose.all": "All",
|
||||||
@ -349,6 +353,14 @@
|
|||||||
"hashtag.follow": "Follow hashtag",
|
"hashtag.follow": "Follow hashtag",
|
||||||
"hashtag.unfollow": "Unfollow hashtag",
|
"hashtag.unfollow": "Unfollow hashtag",
|
||||||
"hashtags.and_other": "…and {count, plural, other {# more}}",
|
"hashtags.and_other": "…and {count, plural, other {# more}}",
|
||||||
|
"hints.profiles.followers_may_be_missing": "Followers for this profile may be missing.",
|
||||||
|
"hints.profiles.follows_may_be_missing": "Follows for this profile may be missing.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Some posts from this profile may be missing.",
|
||||||
|
"hints.profiles.see_more_followers": "See more followers on {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "See more follows on {domain}",
|
||||||
|
"hints.profiles.see_more_posts": "See more posts on {domain}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Replies from other servers may be missing.",
|
||||||
|
"hints.threads.see_more": "See more replies on {domain}",
|
||||||
"home.column_settings.show_reblogs": "Show boosts",
|
"home.column_settings.show_reblogs": "Show boosts",
|
||||||
"home.column_settings.show_replies": "Show replies",
|
"home.column_settings.show_replies": "Show replies",
|
||||||
"home.hide_announcements": "Hide announcements",
|
"home.hide_announcements": "Hide announcements",
|
||||||
@ -358,9 +370,9 @@
|
|||||||
"home.show_announcements": "Show announcements",
|
"home.show_announcements": "Show announcements",
|
||||||
"ignore_notifications_modal.disclaimer": "Mastodon cannot inform users that you've ignored their notifications. Ignoring notifications will not stop the messages themselves from being sent.",
|
"ignore_notifications_modal.disclaimer": "Mastodon cannot inform users that you've ignored their notifications. Ignoring notifications will not stop the messages themselves from being sent.",
|
||||||
"ignore_notifications_modal.filter_instead": "Filter instead",
|
"ignore_notifications_modal.filter_instead": "Filter instead",
|
||||||
"ignore_notifications_modal.filter_to_act_users": "Filtering helps avoid potential confusion",
|
"ignore_notifications_modal.filter_to_act_users": "You'll still be able to accept, reject, or report users",
|
||||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtering helps avoid potential confusion",
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtering helps avoid potential confusion",
|
||||||
"ignore_notifications_modal.filter_to_review_separately": "You can review filtered notifications speparately",
|
"ignore_notifications_modal.filter_to_review_separately": "You can review filtered notifications separately",
|
||||||
"ignore_notifications_modal.ignore": "Ignore notifications",
|
"ignore_notifications_modal.ignore": "Ignore notifications",
|
||||||
"ignore_notifications_modal.limited_accounts_title": "Ignore notifications from moderated accounts?",
|
"ignore_notifications_modal.limited_accounts_title": "Ignore notifications from moderated accounts?",
|
||||||
"ignore_notifications_modal.new_accounts_title": "Ignore notifications from new accounts?",
|
"ignore_notifications_modal.new_accounts_title": "Ignore notifications from new accounts?",
|
||||||
@ -456,9 +468,8 @@
|
|||||||
"mute_modal.title": "Mute user?",
|
"mute_modal.title": "Mute user?",
|
||||||
"mute_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
"mute_modal.you_wont_see_mentions": "You won't see posts that mention them.",
|
||||||
"mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.",
|
"mute_modal.you_wont_see_posts": "They can still see your posts, but you won't see theirs.",
|
||||||
"name_and_others": "{name} and {count, plural, one {# other} other {# others}}",
|
|
||||||
"name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a>",
|
|
||||||
"navigation_bar.about": "About",
|
"navigation_bar.about": "About",
|
||||||
|
"navigation_bar.administration": "Administration",
|
||||||
"navigation_bar.advanced_interface": "Open in advanced web interface",
|
"navigation_bar.advanced_interface": "Open in advanced web interface",
|
||||||
"navigation_bar.blocks": "Blocked users",
|
"navigation_bar.blocks": "Blocked users",
|
||||||
"navigation_bar.bookmarks": "Bookmarks",
|
"navigation_bar.bookmarks": "Bookmarks",
|
||||||
@ -475,6 +486,7 @@
|
|||||||
"navigation_bar.follows_and_followers": "Follows and followers",
|
"navigation_bar.follows_and_followers": "Follows and followers",
|
||||||
"navigation_bar.lists": "Lists",
|
"navigation_bar.lists": "Lists",
|
||||||
"navigation_bar.logout": "Logout",
|
"navigation_bar.logout": "Logout",
|
||||||
|
"navigation_bar.moderation": "Moderation",
|
||||||
"navigation_bar.mutes": "Muted users",
|
"navigation_bar.mutes": "Muted users",
|
||||||
"navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.",
|
"navigation_bar.opened_in_classic_interface": "Posts, accounts, and other specific pages are opened by default in the classic web interface.",
|
||||||
"navigation_bar.personal": "Personal",
|
"navigation_bar.personal": "Personal",
|
||||||
@ -490,9 +502,13 @@
|
|||||||
"notification.admin.report_statuses": "{name} reported {target} for {category}",
|
"notification.admin.report_statuses": "{name} reported {target} for {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} reported {target}",
|
"notification.admin.report_statuses_other": "{name} reported {target}",
|
||||||
"notification.admin.sign_up": "{name} signed up",
|
"notification.admin.sign_up": "{name} signed up",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} and {count, plural, one {# other} other {# others}} signed up",
|
||||||
"notification.favourite": "{name} favorited your post",
|
"notification.favourite": "{name} favorited your post",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a> favorited your post",
|
||||||
"notification.follow": "{name} followed you",
|
"notification.follow": "{name} 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} 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",
|
"notification.label.mention": "Mention",
|
||||||
"notification.label.private_mention": "Private mention",
|
"notification.label.private_mention": "Private mention",
|
||||||
"notification.label.private_reply": "Private reply",
|
"notification.label.private_reply": "Private reply",
|
||||||
@ -510,6 +526,7 @@
|
|||||||
"notification.own_poll": "Your poll has ended",
|
"notification.own_poll": "Your poll has ended",
|
||||||
"notification.poll": "A poll you voted in has ended",
|
"notification.poll": "A poll you voted in has ended",
|
||||||
"notification.reblog": "{name} boosted your post",
|
"notification.reblog": "{name} boosted your post",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} and <a>{count, plural, one {# other} other {# others}}</a> boosted your post",
|
||||||
"notification.relationships_severance_event": "Lost connections with {name}",
|
"notification.relationships_severance_event": "Lost connections with {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "An admin from {from} has suspended {target}, which means you can no longer receive updates from them or interact with them.",
|
"notification.relationships_severance_event.account_suspension": "An admin from {from} has suspended {target}, which means you can no longer receive updates from them or interact with them.",
|
||||||
"notification.relationships_severance_event.domain_block": "An admin from {from} has blocked {target}, including {followersCount} of your followers and {followingCount, plural, one {# account} other {# accounts}} you follow.",
|
"notification.relationships_severance_event.domain_block": "An admin from {from} has blocked {target}, including {followersCount} of your followers and {followingCount, plural, one {# account} other {# accounts}} you follow.",
|
||||||
@ -518,13 +535,24 @@
|
|||||||
"notification.status": "{name} just posted",
|
"notification.status": "{name} just posted",
|
||||||
"notification.update": "{name} edited a post",
|
"notification.update": "{name} edited a post",
|
||||||
"notification_requests.accept": "Accept",
|
"notification_requests.accept": "Accept",
|
||||||
|
"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": "You are about to accept {count, plural, one {one notification request} other {# notification requests}}. Are you sure you want to proceed?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "Accept notification requests?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Dismiss request} other {Dismiss requests}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "You are about to dismiss {count, plural, one {one notification request} other {# notification requests}}. You won't be able to easily access {count, plural, one {it} other {them}} again. Are you sure you want to proceed?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Dismiss notification requests?",
|
||||||
"notification_requests.dismiss": "Dismiss",
|
"notification_requests.dismiss": "Dismiss",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Dismiss # request…} other {Dismiss # requests…}}",
|
||||||
|
"notification_requests.edit_selection": "Edit",
|
||||||
|
"notification_requests.exit_selection": "Done",
|
||||||
"notification_requests.explainer_for_limited_account": "Notifications from this account have been filtered because the account has been limited by a moderator.",
|
"notification_requests.explainer_for_limited_account": "Notifications from this account have been filtered because the account has been limited by a moderator.",
|
||||||
"notification_requests.explainer_for_limited_remote_account": "Notifications from this account have been filtered because the account or its server has been limited by a moderator.",
|
"notification_requests.explainer_for_limited_remote_account": "Notifications from this account have been filtered because the account or its server has been limited by a moderator.",
|
||||||
"notification_requests.maximize": "Maximize",
|
"notification_requests.maximize": "Maximize",
|
||||||
"notification_requests.minimize_banner": "Minimize filtered notifications banner",
|
"notification_requests.minimize_banner": "Minimize filtered notifications banner",
|
||||||
"notification_requests.notifications_from": "Notifications from {name}",
|
"notification_requests.notifications_from": "Notifications from {name}",
|
||||||
"notification_requests.title": "Filtered notifications",
|
"notification_requests.title": "Filtered notifications",
|
||||||
|
"notification_requests.view": "View notifications",
|
||||||
"notifications.clear": "Clear notifications",
|
"notifications.clear": "Clear notifications",
|
||||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||||
"notifications.clear_title": "Clear notifications?",
|
"notifications.clear_title": "Clear notifications?",
|
||||||
@ -764,8 +792,6 @@
|
|||||||
"status.favourite": "Favorite",
|
"status.favourite": "Favorite",
|
||||||
"status.favourites": "{count, plural, one {favorite} other {favorites}}",
|
"status.favourites": "{count, plural, one {favorite} other {favorites}}",
|
||||||
"status.filter": "Filter this post",
|
"status.filter": "Filter this post",
|
||||||
"status.filtered": "Filtered",
|
|
||||||
"status.hide": "Hide post",
|
|
||||||
"status.history.created": "{name} created {date}",
|
"status.history.created": "{name} created {date}",
|
||||||
"status.history.edited": "{name} edited {date}",
|
"status.history.edited": "{name} edited {date}",
|
||||||
"status.load_more": "Load more",
|
"status.load_more": "Load more",
|
||||||
@ -793,10 +819,7 @@
|
|||||||
"status.report": "Report @{name}",
|
"status.report": "Report @{name}",
|
||||||
"status.sensitive_warning": "Sensitive content",
|
"status.sensitive_warning": "Sensitive content",
|
||||||
"status.share": "Share",
|
"status.share": "Share",
|
||||||
"status.show_filter_reason": "Show anyway",
|
|
||||||
"status.show_less": "Show less",
|
|
||||||
"status.show_less_all": "Show less for all",
|
"status.show_less_all": "Show less for all",
|
||||||
"status.show_more": "Show more",
|
|
||||||
"status.show_more_all": "Show more for all",
|
"status.show_more_all": "Show more for all",
|
||||||
"status.show_original": "Show original",
|
"status.show_original": "Show original",
|
||||||
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {{attachmentCount} attachments}}",
|
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {{attachmentCount} attachments}}",
|
||||||
@ -815,10 +838,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
||||||
"time_remaining.moments": "Moments remaining",
|
"time_remaining.moments": "Moments remaining",
|
||||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
|
|
||||||
"timeline_hint.resources.followers": "Followers",
|
|
||||||
"timeline_hint.resources.follows": "Follows",
|
|
||||||
"timeline_hint.resources.statuses": "Older posts",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} in the past {days, plural, one {day} other {{days} days}}",
|
||||||
"trends.trending_now": "Trending now",
|
"trends.trending_now": "Trending now",
|
||||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
"about.not_available": "Ĉi tiu informo ne estas disponebla ĉe ĉi tiu servilo.",
|
"about.not_available": "Ĉi tiu informo ne estas disponebla ĉe ĉi tiu servilo.",
|
||||||
"about.powered_by": "Malcentrigita socia retejo pere de {mastodon}",
|
"about.powered_by": "Malcentrigita socia retejo pere de {mastodon}",
|
||||||
"about.rules": "Regularo de la servilo",
|
"about.rules": "Regularo de la servilo",
|
||||||
|
"account.account_note_header": "Personaj notoj",
|
||||||
"account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj",
|
"account.add_or_remove_from_list": "Aldoni al aŭ forigi el listoj",
|
||||||
"account.badges.bot": "Roboto",
|
"account.badges.bot": "Roboto",
|
||||||
"account.badges.group": "Grupo",
|
"account.badges.group": "Grupo",
|
||||||
@ -18,7 +19,6 @@
|
|||||||
"account.block_domain": "Bloki la domajnon {domain}",
|
"account.block_domain": "Bloki la domajnon {domain}",
|
||||||
"account.block_short": "Bloko",
|
"account.block_short": "Bloko",
|
||||||
"account.blocked": "Blokita",
|
"account.blocked": "Blokita",
|
||||||
"account.browse_more_on_origin_server": "Foliumi pli ĉe la originala profilo",
|
|
||||||
"account.cancel_follow_request": "Nuligi peton por sekvado",
|
"account.cancel_follow_request": "Nuligi peton por sekvado",
|
||||||
"account.copy": "Kopii ligilon al profilo",
|
"account.copy": "Kopii ligilon al profilo",
|
||||||
"account.direct": "Private mencii @{name}",
|
"account.direct": "Private mencii @{name}",
|
||||||
@ -34,7 +34,9 @@
|
|||||||
"account.follow_back": "Sekvu reen",
|
"account.follow_back": "Sekvu reen",
|
||||||
"account.followers": "Sekvantoj",
|
"account.followers": "Sekvantoj",
|
||||||
"account.followers.empty": "Ankoraŭ neniu sekvas ĉi tiun uzanton.",
|
"account.followers.empty": "Ankoraŭ neniu sekvas ĉi tiun uzanton.",
|
||||||
|
"account.followers_counter": "{count, plural, one{{counter} sekvanto} other {{counter} sekvantoj}}",
|
||||||
"account.following": "Sekvatoj",
|
"account.following": "Sekvatoj",
|
||||||
|
"account.following_counter": "{count, plural, one {{counter} sekvato} other {{counter} sekvatoj}}",
|
||||||
"account.follows.empty": "La uzanto ankoraŭ ne sekvas iun ajn.",
|
"account.follows.empty": "La uzanto ankoraŭ ne sekvas iun ajn.",
|
||||||
"account.go_to_profile": "Iri al profilo",
|
"account.go_to_profile": "Iri al profilo",
|
||||||
"account.hide_reblogs": "Kaŝi diskonigojn de @{name}",
|
"account.hide_reblogs": "Kaŝi diskonigojn de @{name}",
|
||||||
@ -60,6 +62,7 @@
|
|||||||
"account.requested_follow": "{name} petis sekvi vin",
|
"account.requested_follow": "{name} petis sekvi vin",
|
||||||
"account.share": "Diskonigi la profilon de @{name}",
|
"account.share": "Diskonigi la profilon de @{name}",
|
||||||
"account.show_reblogs": "Montri diskonigojn de @{name}",
|
"account.show_reblogs": "Montri diskonigojn de @{name}",
|
||||||
|
"account.statuses_counter": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}",
|
||||||
"account.unblock": "Malbloki @{name}",
|
"account.unblock": "Malbloki @{name}",
|
||||||
"account.unblock_domain": "Malbloki la domajnon {domain}",
|
"account.unblock_domain": "Malbloki la domajnon {domain}",
|
||||||
"account.unblock_short": "Malbloki",
|
"account.unblock_short": "Malbloki",
|
||||||
@ -85,6 +88,14 @@
|
|||||||
"announcement.announcement": "Anoncoj",
|
"announcement.announcement": "Anoncoj",
|
||||||
"attachments_list.unprocessed": "(neprilaborita)",
|
"attachments_list.unprocessed": "(neprilaborita)",
|
||||||
"audio.hide": "Kaŝi aŭdion",
|
"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.",
|
||||||
|
"block_modal.show_less": "Montri malpli",
|
||||||
|
"block_modal.show_more": "Montri pli",
|
||||||
|
"block_modal.they_cant_mention": "Ili ne povas mencii aŭ sekvi vin.",
|
||||||
|
"block_modal.they_cant_see_posts": "Ili ne povas vidi viajn afiŝojn kaj vi ne povas vidi iliajn.",
|
||||||
|
"block_modal.they_will_know": "Ili povas vidi, ke ili estas blokita.",
|
||||||
|
"block_modal.title": "Ĉu bloki uzanton?",
|
||||||
|
"block_modal.you_wont_see_mentions": "Vi ne vidos afiŝojn, ke mencii ilin.",
|
||||||
"boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje",
|
"boost_modal.combo": "Vi povas premi {combo} por preterpasi sekvafoje",
|
||||||
"bundle_column_error.copy_stacktrace": "Kopii la eraran raporton",
|
"bundle_column_error.copy_stacktrace": "Kopii la eraran raporton",
|
||||||
"bundle_column_error.error.body": "La petita paĝo ne povas redonitis. Eble estas eraro.",
|
"bundle_column_error.error.body": "La petita paĝo ne povas redonitis. Eble estas eraro.",
|
||||||
@ -142,26 +153,39 @@
|
|||||||
"compose_form.lock_disclaimer.lock": "ŝlosita",
|
"compose_form.lock_disclaimer.lock": "ŝlosita",
|
||||||
"compose_form.placeholder": "Kion vi pensas?",
|
"compose_form.placeholder": "Kion vi pensas?",
|
||||||
"compose_form.poll.duration": "Daŭro de la balotenketo",
|
"compose_form.poll.duration": "Daŭro de la balotenketo",
|
||||||
|
"compose_form.poll.multiple": "Multobla elekto",
|
||||||
|
"compose_form.poll.option_placeholder": "Opcio {number}",
|
||||||
|
"compose_form.poll.single": "Elektu unu",
|
||||||
"compose_form.poll.switch_to_multiple": "Ŝanĝi la balotenketon por permesi multajn elektojn",
|
"compose_form.poll.switch_to_multiple": "Ŝanĝi la balotenketon por permesi multajn elektojn",
|
||||||
"compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton",
|
"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": "Afiŝi",
|
||||||
|
"compose_form.reply": "Respondi",
|
||||||
|
"compose_form.save_changes": "Ĝisdatigi",
|
||||||
"compose_form.spoiler.marked": "Forigi la averton de enhavo",
|
"compose_form.spoiler.marked": "Forigi la averton de enhavo",
|
||||||
"compose_form.spoiler.unmarked": "Aldoni averton de enhavo",
|
"compose_form.spoiler.unmarked": "Aldoni averton de enhavo",
|
||||||
|
"compose_form.spoiler_placeholder": "Enhava Averto (nedeviga)",
|
||||||
"confirmation_modal.cancel": "Nuligi",
|
"confirmation_modal.cancel": "Nuligi",
|
||||||
"confirmations.block.confirm": "Bloki",
|
"confirmations.block.confirm": "Bloki",
|
||||||
"confirmations.delete.confirm": "Forigi",
|
"confirmations.delete.confirm": "Forigi",
|
||||||
"confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun afiŝon?",
|
"confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun afiŝon?",
|
||||||
|
"confirmations.delete.title": "Ĉu forigi Afiŝon?",
|
||||||
"confirmations.delete_list.confirm": "Forigi",
|
"confirmations.delete_list.confirm": "Forigi",
|
||||||
"confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?",
|
"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.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ŭmontro de la plurmedio, ĉu vi forĵetu ilin malgraŭe?",
|
||||||
"confirmations.edit.confirm": "Redakti",
|
"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.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.confirm": "Adiaŭi",
|
||||||
"confirmations.logout.message": "Ĉu vi certas ke vi volas adiaŭi?",
|
"confirmations.logout.message": "Ĉu vi certas ke vi volas adiaŭi?",
|
||||||
|
"confirmations.logout.title": "Ĉu elsaluti?",
|
||||||
"confirmations.mute.confirm": "Silentigi",
|
"confirmations.mute.confirm": "Silentigi",
|
||||||
"confirmations.redraft.confirm": "Forigi kaj reskribi",
|
"confirmations.redraft.confirm": "Forigi kaj reskribi",
|
||||||
"confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi tiun afiŝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos senparentaj.",
|
"confirmations.redraft.message": "Ĉu vi certas ke vi volas forigi tiun afiŝon kaj reskribi ĝin? Ĉiuj diskonigoj kaj stelumoj estos perditaj, kaj respondoj al la originala mesaĝo estos senparentaj.",
|
||||||
|
"confirmations.redraft.title": "Ĉu forigi kaj redakcii afiŝon?",
|
||||||
"confirmations.reply.confirm": "Respondi",
|
"confirmations.reply.confirm": "Respondi",
|
||||||
"confirmations.reply.message": "Respondi nun anstataŭigos la skribatan afiŝon. Ĉu vi certas, ke vi volas daŭrigi?",
|
"confirmations.reply.message": "Respondi nun anstataŭigos la skribatan afiŝon. Ĉu vi certas, ke vi volas daŭrigi?",
|
||||||
"confirmations.unfollow.confirm": "Ne plu sekvi",
|
"confirmations.unfollow.confirm": "Ne plu sekvi",
|
||||||
@ -399,7 +423,6 @@
|
|||||||
"notification.favourite": "{name} stelumis vian afiŝon",
|
"notification.favourite": "{name} stelumis vian afiŝon",
|
||||||
"notification.follow": "{name} eksekvis vin",
|
"notification.follow": "{name} eksekvis vin",
|
||||||
"notification.follow_request": "{name} petis sekvi vin",
|
"notification.follow_request": "{name} petis sekvi vin",
|
||||||
"notification.mention": "{name} menciis vin",
|
|
||||||
"notification.own_poll": "Via enketo finiĝis",
|
"notification.own_poll": "Via enketo finiĝis",
|
||||||
"notification.reblog": "{name} diskonigis vian afiŝon",
|
"notification.reblog": "{name} diskonigis vian afiŝon",
|
||||||
"notification.status": "{name} ĵus afiŝis",
|
"notification.status": "{name} ĵus afiŝis",
|
||||||
@ -609,8 +632,6 @@
|
|||||||
"status.embed": "Enkorpigi",
|
"status.embed": "Enkorpigi",
|
||||||
"status.favourite": "Ŝatata",
|
"status.favourite": "Ŝatata",
|
||||||
"status.filter": "Filtri ĉi tiun afiŝon",
|
"status.filter": "Filtri ĉi tiun afiŝon",
|
||||||
"status.filtered": "Filtrita",
|
|
||||||
"status.hide": "Kaŝi mesaĝon",
|
|
||||||
"status.history.created": "{name} kreis {date}",
|
"status.history.created": "{name} kreis {date}",
|
||||||
"status.history.edited": "{name} redaktis {date}",
|
"status.history.edited": "{name} redaktis {date}",
|
||||||
"status.load_more": "Ŝargi pli",
|
"status.load_more": "Ŝargi pli",
|
||||||
@ -637,10 +658,7 @@
|
|||||||
"status.report": "Raporti @{name}",
|
"status.report": "Raporti @{name}",
|
||||||
"status.sensitive_warning": "Tikla enhavo",
|
"status.sensitive_warning": "Tikla enhavo",
|
||||||
"status.share": "Kundividi",
|
"status.share": "Kundividi",
|
||||||
"status.show_filter_reason": "Ĉial montri",
|
|
||||||
"status.show_less": "Montri malpli",
|
|
||||||
"status.show_less_all": "Montri malpli ĉiun",
|
"status.show_less_all": "Montri malpli ĉiun",
|
||||||
"status.show_more": "Montri pli",
|
|
||||||
"status.show_more_all": "Montri pli ĉiun",
|
"status.show_more_all": "Montri pli ĉiun",
|
||||||
"status.show_original": "Montru originalon",
|
"status.show_original": "Montru originalon",
|
||||||
"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 {# attachments}}",
|
||||||
@ -659,10 +677,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restas",
|
"time_remaining.minutes": "{number, plural, one {# minuto} other {# minutoj}} restas",
|
||||||
"time_remaining.moments": "Momenteto restas",
|
"time_remaining.moments": "Momenteto restas",
|
||||||
"time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restas",
|
"time_remaining.seconds": "{number, plural, one {# sekundo} other {# sekundoj}} restas",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} de aliaj serviloj ne estas montrata.",
|
|
||||||
"timeline_hint.resources.followers": "Sekvantoj",
|
|
||||||
"timeline_hint.resources.follows": "Sekvatoj",
|
|
||||||
"timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} dum la pasinta{days, plural, one { tago} other {j {days} tagoj}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} dum la pasinta{days, plural, one { tago} other {j {days} tagoj}}",
|
||||||
"trends.trending_now": "Nunaj furoraĵoj",
|
"trends.trending_now": "Nunaj furoraĵoj",
|
||||||
"ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
|
"ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Bloquear dominio {domain}",
|
"account.block_domain": "Bloquear dominio {domain}",
|
||||||
"account.block_short": "Bloquear",
|
"account.block_short": "Bloquear",
|
||||||
"account.blocked": "Bloqueado",
|
"account.blocked": "Bloqueado",
|
||||||
"account.browse_more_on_origin_server": "Explorar más en el perfil original",
|
|
||||||
"account.cancel_follow_request": "Dejar de seguir",
|
"account.cancel_follow_request": "Dejar de seguir",
|
||||||
"account.copy": "Copiar enlace al perfil",
|
"account.copy": "Copiar enlace al perfil",
|
||||||
"account.direct": "Mención privada a @{name}",
|
"account.direct": "Mención privada a @{name}",
|
||||||
@ -98,6 +97,8 @@
|
|||||||
"block_modal.title": "¿Bloquear usuario?",
|
"block_modal.title": "¿Bloquear usuario?",
|
||||||
"block_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.",
|
"block_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.",
|
||||||
"boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez",
|
"boost_modal.combo": "Podés hacer clic en {combo} para saltar esto la próxima vez",
|
||||||
|
"boost_modal.reblog": "¿Adherir al mensaje?",
|
||||||
|
"boost_modal.undo_reblog": "¿Dejar de adherir al mensaje?",
|
||||||
"bundle_column_error.copy_stacktrace": "Copiar informe de error",
|
"bundle_column_error.copy_stacktrace": "Copiar informe de error",
|
||||||
"bundle_column_error.error.body": "La página solicitada no pudo ser cargada. Podría deberse a un error de programación en nuestro código o a un problema de compatibilidad con el navegador web.",
|
"bundle_column_error.error.body": "La página solicitada no pudo ser cargada. Podría deberse a un error de programación en nuestro código o a un problema de compatibilidad con el navegador web.",
|
||||||
"bundle_column_error.error.title": "¡Epa!",
|
"bundle_column_error.error.title": "¡Epa!",
|
||||||
@ -193,6 +194,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Dejar de seguir",
|
"confirmations.unfollow.confirm": "Dejar de seguir",
|
||||||
"confirmations.unfollow.message": "¿Estás seguro que querés dejar de seguir a {name}?",
|
"confirmations.unfollow.message": "¿Estás seguro que querés dejar de seguir a {name}?",
|
||||||
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
|
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
|
||||||
|
"content_warning.hide": "Ocultar mensaje",
|
||||||
|
"content_warning.show": "Mostrar de todos modos",
|
||||||
"conversation.delete": "Eliminar conversación",
|
"conversation.delete": "Eliminar conversación",
|
||||||
"conversation.mark_as_read": "Marcar como leída",
|
"conversation.mark_as_read": "Marcar como leída",
|
||||||
"conversation.open": "Ver conversación",
|
"conversation.open": "Ver conversación",
|
||||||
@ -300,6 +303,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
||||||
"filter_modal.select_filter.title": "Filtrar este mensaje",
|
"filter_modal.select_filter.title": "Filtrar este mensaje",
|
||||||
"filter_modal.title.status": "Filtrar un mensaje",
|
"filter_modal.title.status": "Filtrar un mensaje",
|
||||||
|
"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.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer",
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todos",
|
"firehose.all": "Todos",
|
||||||
@ -349,6 +353,14 @@
|
|||||||
"hashtag.follow": "Seguir etiqueta",
|
"hashtag.follow": "Seguir etiqueta",
|
||||||
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
||||||
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
||||||
|
"hints.profiles.followers_may_be_missing": "Es posible que falten seguidores de este perfil.",
|
||||||
|
"hints.profiles.follows_may_be_missing": "Es posible que falten seguimientos a este perfil.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Es posible que falten mensajes de este perfil.",
|
||||||
|
"hints.profiles.see_more_followers": "Ver más seguidores en {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "Ver más seguimientos en {domain}",
|
||||||
|
"hints.profiles.see_more_posts": "Ver más mensajes en {domain}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Es posible que falten respuestas de otros servidores.",
|
||||||
|
"hints.threads.see_more": "Ver más respuestas en {domain}",
|
||||||
"home.column_settings.show_reblogs": "Mostrar adhesiones",
|
"home.column_settings.show_reblogs": "Mostrar adhesiones",
|
||||||
"home.column_settings.show_replies": "Mostrar respuestas",
|
"home.column_settings.show_replies": "Mostrar respuestas",
|
||||||
"home.hide_announcements": "Ocultar anuncios",
|
"home.hide_announcements": "Ocultar anuncios",
|
||||||
@ -356,6 +368,17 @@
|
|||||||
"home.pending_critical_update.link": "Ver actualizaciones",
|
"home.pending_critical_update.link": "Ver actualizaciones",
|
||||||
"home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!",
|
"home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!",
|
||||||
"home.show_announcements": "Mostrar anuncios",
|
"home.show_announcements": "Mostrar anuncios",
|
||||||
|
"ignore_notifications_modal.disclaimer": "Mastodon no puede informar a los usuarios que ignoraste 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 denunciar a usuarios",
|
||||||
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrar ayuda a evitar confusiones potenciales",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "Podés revisar las notificaciones filtradas por separado",
|
||||||
|
"ignore_notifications_modal.ignore": "Ignorar notificaciones",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "¿Ignorar notificaciones de cuentas moderadas?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "¿Ignorar notificaciones de cuentas nuevas?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "¿Ignorar notificaciones de cuentas que no te siguen?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "¿Ignorar notificaciones de cuentas a las que no seguís?",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "¿Ignorar notificaciones de menciones privadas no solicitadas?",
|
||||||
"interaction_modal.description.favourite": "Con una cuenta en Mastodon, podés marcar este mensaje como favorito para que el autor sepa que lo apreciás y lo guardás para más adelante.",
|
"interaction_modal.description.favourite": "Con una cuenta en Mastodon, podés marcar este mensaje como favorito para que el autor sepa que lo apreciás y lo guardás para más adelante.",
|
||||||
"interaction_modal.description.follow": "Con una cuenta en Mastodon, podés seguir a {name} para recibir sus mensajes en tu línea temporal principal.",
|
"interaction_modal.description.follow": "Con una cuenta en Mastodon, podés seguir a {name} para recibir sus mensajes en tu línea temporal principal.",
|
||||||
"interaction_modal.description.reblog": "Con una cuenta en Mastodon, podés adherir a este mensaje para compartirlo con tus propios seguidores.",
|
"interaction_modal.description.reblog": "Con una cuenta en Mastodon, podés adherir a este mensaje para compartirlo con tus propios seguidores.",
|
||||||
@ -445,9 +468,8 @@
|
|||||||
"mute_modal.title": "¿Silenciar usuario?",
|
"mute_modal.title": "¿Silenciar usuario?",
|
||||||
"mute_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.",
|
"mute_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.",
|
||||||
"mute_modal.you_wont_see_posts": "Todavía pueden ver tus mensajes, pero vos no verás los suyos.",
|
"mute_modal.you_wont_see_posts": "Todavía pueden ver tus mensajes, pero vos no verás los suyos.",
|
||||||
"name_and_others": "{name} y {count, plural, one {# cuenta más} other {# cuentas más}}",
|
|
||||||
"name_and_others_with_link": "{name} y <a>{count, plural, one {# cuenta más} other {# cuentas más}}</a>",
|
|
||||||
"navigation_bar.about": "Información",
|
"navigation_bar.about": "Información",
|
||||||
|
"navigation_bar.administration": "Administración",
|
||||||
"navigation_bar.advanced_interface": "Abrir en interface web avanzada",
|
"navigation_bar.advanced_interface": "Abrir en interface web avanzada",
|
||||||
"navigation_bar.blocks": "Usuarios bloqueados",
|
"navigation_bar.blocks": "Usuarios bloqueados",
|
||||||
"navigation_bar.bookmarks": "Marcadores",
|
"navigation_bar.bookmarks": "Marcadores",
|
||||||
@ -464,6 +486,7 @@
|
|||||||
"navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores",
|
"navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores",
|
||||||
"navigation_bar.lists": "Listas",
|
"navigation_bar.lists": "Listas",
|
||||||
"navigation_bar.logout": "Cerrar sesión",
|
"navigation_bar.logout": "Cerrar sesión",
|
||||||
|
"navigation_bar.moderation": "Moderación",
|
||||||
"navigation_bar.mutes": "Usuarios silenciados",
|
"navigation_bar.mutes": "Usuarios silenciados",
|
||||||
"navigation_bar.opened_in_classic_interface": "Los mensajes, las cuentas y otras páginas específicas se abren predeterminadamente en la interface web clásica.",
|
"navigation_bar.opened_in_classic_interface": "Los mensajes, las cuentas y otras páginas específicas se abren predeterminadamente en la interface web clásica.",
|
||||||
"navigation_bar.personal": "Personal",
|
"navigation_bar.personal": "Personal",
|
||||||
@ -479,10 +502,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} denunció a {target} por {category}",
|
"notification.admin.report_statuses": "{name} denunció a {target} por {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} denunció a {target}",
|
"notification.admin.report_statuses_other": "{name} denunció a {target}",
|
||||||
"notification.admin.sign_up": "Se registró {name}",
|
"notification.admin.sign_up": "Se registró {name}",
|
||||||
|
"notification.admin.sign_up.name_and_others": "Se registraron {name} y {count, plural, one {# cuenta más} other {# cuentas más}}",
|
||||||
"notification.favourite": "{name} marcó tu mensaje como favorito",
|
"notification.favourite": "{name} marcó tu mensaje como favorito",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} y <a>{count, plural, one {# cuenta más} other {# cuentas más}}</a> marcaron tu mensaje como favorito",
|
||||||
"notification.follow": "{name} te empezó a seguir",
|
"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_request": "{name} solicitó seguirte",
|
"notification.follow_request": "{name} solicitó seguirte",
|
||||||
"notification.mention": "{name} te mencionó",
|
"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",
|
||||||
|
"notification.label.private_mention": "Mención privada",
|
||||||
|
"notification.label.private_reply": "Respuesta privada",
|
||||||
|
"notification.label.reply": "Respuesta",
|
||||||
|
"notification.mention": "Mención",
|
||||||
"notification.moderation-warning.learn_more": "Aprendé más",
|
"notification.moderation-warning.learn_more": "Aprendé más",
|
||||||
"notification.moderation_warning": "Recibiste una advertencia de moderación",
|
"notification.moderation_warning": "Recibiste una advertencia de moderación",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Se eliminaron algunos de tus mensajes.",
|
"notification.moderation_warning.action_delete_statuses": "Se eliminaron algunos de tus mensajes.",
|
||||||
@ -494,8 +525,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Tu cuenta fue suspendida.",
|
"notification.moderation_warning.action_suspend": "Tu cuenta fue suspendida.",
|
||||||
"notification.own_poll": "Tu encuesta finalizó",
|
"notification.own_poll": "Tu encuesta finalizó",
|
||||||
"notification.poll": "Finalizó una encuesta en la que votaste",
|
"notification.poll": "Finalizó una encuesta en la que votaste",
|
||||||
"notification.private_mention": "{name} te mencionó en privado",
|
|
||||||
"notification.reblog": "{name} adhirió a tu mensaje",
|
"notification.reblog": "{name} adhirió a tu mensaje",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} y <a>{count, plural, one {# cuenta más} other {# cuentas más}}</a> marcaron tu mensaje como favorito",
|
||||||
"notification.relationships_severance_event": "Conexiones perdidas con {name}",
|
"notification.relationships_severance_event": "Conexiones perdidas con {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Un administrador de {from} suspendió a {target}, lo que significa que ya no podés recibir actualizaciones de esa cuenta o interactuar con la misma.",
|
"notification.relationships_severance_event.account_suspension": "Un administrador de {from} suspendió a {target}, lo que significa que ya no podés recibir actualizaciones de esa cuenta o interactuar con la misma.",
|
||||||
"notification.relationships_severance_event.domain_block": "Un administrador de {from} bloqueó a {target}, incluyendo {followersCount} de tus seguidores y {followingCount, plural, one {# cuenta} other {# cuentas}} que seguís.",
|
"notification.relationships_severance_event.domain_block": "Un administrador de {from} bloqueó a {target}, incluyendo {followersCount} de tus seguidores y {followingCount, plural, one {# cuenta} other {# cuentas}} que seguís.",
|
||||||
@ -504,11 +535,24 @@
|
|||||||
"notification.status": "{name} acaba de enviar un mensaje",
|
"notification.status": "{name} acaba de enviar un mensaje",
|
||||||
"notification.update": "{name} editó un mensaje",
|
"notification.update": "{name} editó un mensaje",
|
||||||
"notification_requests.accept": "Aceptar",
|
"notification_requests.accept": "Aceptar",
|
||||||
|
"notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud…} other {Aceptar # solicitudes…}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceptar solicitud} other {Aceptar solicitudes}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "Estás a punto de aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Estás seguro de que querés continuar?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "¿Aceptar solicitudes de notificación?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Descartar solicitud} other {Descartar solicitudes}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "Estás a punto de descartar {count, plural, one {una solicitud} other {# solicitudes}}. No vas a poder acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Estás seguro de que querés continuar?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "¿Descartar solicitudes de notificación?",
|
||||||
"notification_requests.dismiss": "Descartar",
|
"notification_requests.dismiss": "Descartar",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud…} other {Descartar # solicitudes…}}",
|
||||||
|
"notification_requests.edit_selection": "Editar",
|
||||||
|
"notification_requests.exit_selection": "Listo",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Las notificaciones de esta cuenta fueron filtradas porque la misma fue limitada por un moderador.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Las notificaciones de esta cuenta fueron filtradas porque la cuenta o su servidor fueron limitados por un moderador.",
|
||||||
"notification_requests.maximize": "Maximizar",
|
"notification_requests.maximize": "Maximizar",
|
||||||
"notification_requests.minimize_banner": "Minimizar la barra de notificaciones filtradas",
|
"notification_requests.minimize_banner": "Minimizar la barra de notificaciones filtradas",
|
||||||
"notification_requests.notifications_from": "Notificaciones de {name}",
|
"notification_requests.notifications_from": "Notificaciones de {name}",
|
||||||
"notification_requests.title": "Notificaciones filtradas",
|
"notification_requests.title": "Notificaciones filtradas",
|
||||||
|
"notification_requests.view": "Ver notificaciones",
|
||||||
"notifications.clear": "Limpiar notificaciones",
|
"notifications.clear": "Limpiar notificaciones",
|
||||||
"notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?",
|
"notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?",
|
||||||
"notifications.clear_title": "¿Limpiar notificaciones?",
|
"notifications.clear_title": "¿Limpiar notificaciones?",
|
||||||
@ -545,6 +589,12 @@
|
|||||||
"notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada",
|
"notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada",
|
||||||
"notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes",
|
"notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes",
|
||||||
"notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se concedió el permiso requerido.",
|
"notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se concedió el permiso requerido.",
|
||||||
|
"notifications.policy.accept": "Aceptar",
|
||||||
|
"notifications.policy.accept_hint": "Mostrar en notificaciones",
|
||||||
|
"notifications.policy.drop": "Ignorar",
|
||||||
|
"notifications.policy.drop_hint": "Enviar al vacío, no volver a mostrar nunca",
|
||||||
|
"notifications.policy.filter": "Filtrar",
|
||||||
|
"notifications.policy.filter_hint": "Enviar a la bandeja de entrada de notificaciones filtradas",
|
||||||
"notifications.policy.filter_limited_accounts_hint": "Limitada por los moderadores del servidor",
|
"notifications.policy.filter_limited_accounts_hint": "Limitada por los moderadores del servidor",
|
||||||
"notifications.policy.filter_limited_accounts_title": "Cuentas moderadas",
|
"notifications.policy.filter_limited_accounts_title": "Cuentas moderadas",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Creada hace {days, plural, one {un día} other {# días}}",
|
"notifications.policy.filter_new_accounts.hint": "Creada hace {days, plural, one {un día} other {# días}}",
|
||||||
@ -555,7 +605,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Cuentas que no seguís",
|
"notifications.policy.filter_not_following_title": "Cuentas que no seguís",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Filtradas, a menos que sea en respuesta a tu propia mención o si seguís al remitente",
|
"notifications.policy.filter_private_mentions_hint": "Filtradas, a menos que sea en respuesta a tu propia mención o si seguís al remitente",
|
||||||
"notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas",
|
"notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas",
|
||||||
"notifications.policy.title": "Filtrar notificaciones de…",
|
"notifications.policy.title": "Administrar notificaciones de…",
|
||||||
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
|
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
|
||||||
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.",
|
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.",
|
||||||
"notifications_permission_banner.title": "No te pierdas nada",
|
"notifications_permission_banner.title": "No te pierdas nada",
|
||||||
@ -742,8 +792,6 @@
|
|||||||
"status.favourite": "Marcar como favorito",
|
"status.favourite": "Marcar como favorito",
|
||||||
"status.favourites": "{count, plural, one {# voto} other {# votos}}",
|
"status.favourites": "{count, plural, one {# voto} other {# votos}}",
|
||||||
"status.filter": "Filtrar este mensaje",
|
"status.filter": "Filtrar este mensaje",
|
||||||
"status.filtered": "Filtrado",
|
|
||||||
"status.hide": "Ocultar mensaje",
|
|
||||||
"status.history.created": "Creado por {name}, {date}",
|
"status.history.created": "Creado por {name}, {date}",
|
||||||
"status.history.edited": "Editado por {name}, {date}",
|
"status.history.edited": "Editado por {name}, {date}",
|
||||||
"status.load_more": "Cargar más",
|
"status.load_more": "Cargar más",
|
||||||
@ -771,10 +819,7 @@
|
|||||||
"status.report": "Denunciar a @{name}",
|
"status.report": "Denunciar a @{name}",
|
||||||
"status.sensitive_warning": "Contenido sensible",
|
"status.sensitive_warning": "Contenido sensible",
|
||||||
"status.share": "Compartir",
|
"status.share": "Compartir",
|
||||||
"status.show_filter_reason": "Mostrar de todos modos",
|
|
||||||
"status.show_less": "Mostrar menos",
|
|
||||||
"status.show_less_all": "Mostrar menos para todo",
|
"status.show_less_all": "Mostrar menos para todo",
|
||||||
"status.show_more": "Mostrar más",
|
|
||||||
"status.show_more_all": "Mostrar más para todo",
|
"status.show_more_all": "Mostrar más para todo",
|
||||||
"status.show_original": "Mostrar original",
|
"status.show_original": "Mostrar original",
|
||||||
"status.title.with_attachments": "{user} envió {attachmentCount, plural, one {un adjunto} other {{attachmentCount} adjuntos}}",
|
"status.title.with_attachments": "{user} envió {attachmentCount, plural, one {un adjunto} other {{attachmentCount} adjuntos}}",
|
||||||
@ -793,10 +838,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural,one {queda # minuto} other {quedan # minutos}}",
|
"time_remaining.minutes": "{number, plural,one {queda # minuto} other {quedan # minutos}}",
|
||||||
"time_remaining.moments": "Momentos restantes",
|
"time_remaining.moments": "Momentos restantes",
|
||||||
"time_remaining.seconds": "{number, plural,one {queda # segundo} other {quedan # segundos}}",
|
"time_remaining.seconds": "{number, plural,one {queda # segundo} other {quedan # segundos}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} desde otros servidores no se muestran.",
|
|
||||||
"timeline_hint.resources.followers": "Tus seguidores",
|
|
||||||
"timeline_hint.resources.follows": "Las cuentas que seguís",
|
|
||||||
"timeline_hint.resources.statuses": "Mensajes más antiguos",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en {days, plural, one {el pasado día} other {los pasados {days} días}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} en {days, plural, one {el pasado día} other {los pasados {days} días}}",
|
||||||
"trends.trending_now": "Tendencia ahora",
|
"trends.trending_now": "Tendencia ahora",
|
||||||
"ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.",
|
"ui.beforeunload": "Tu borrador se perderá si abandonás Mastodon.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Bloquear dominio {domain}",
|
"account.block_domain": "Bloquear dominio {domain}",
|
||||||
"account.block_short": "Bloquear",
|
"account.block_short": "Bloquear",
|
||||||
"account.blocked": "Bloqueado",
|
"account.blocked": "Bloqueado",
|
||||||
"account.browse_more_on_origin_server": "Ver más en el perfil original",
|
|
||||||
"account.cancel_follow_request": "Retirar solicitud de seguimiento",
|
"account.cancel_follow_request": "Retirar solicitud de seguimiento",
|
||||||
"account.copy": "Copiar enlace al perfil",
|
"account.copy": "Copiar enlace al perfil",
|
||||||
"account.direct": "Mención privada @{name}",
|
"account.direct": "Mención privada @{name}",
|
||||||
@ -193,6 +192,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Dejar de seguir",
|
"confirmations.unfollow.confirm": "Dejar de seguir",
|
||||||
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
|
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
|
||||||
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
|
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
|
||||||
|
"content_warning.hide": "Ocultar publicación",
|
||||||
|
"content_warning.show": "Mostrar de todos modos",
|
||||||
"conversation.delete": "Borrar conversación",
|
"conversation.delete": "Borrar conversación",
|
||||||
"conversation.mark_as_read": "Marcar como leído",
|
"conversation.mark_as_read": "Marcar como leído",
|
||||||
"conversation.open": "Ver conversación",
|
"conversation.open": "Ver conversación",
|
||||||
@ -300,6 +301,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
"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.select_filter.title": "Filtrar esta publicación",
|
||||||
"filter_modal.title.status": "Filtrar una publicación",
|
"filter_modal.title.status": "Filtrar una publicación",
|
||||||
|
"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.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas",
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todas",
|
"firehose.all": "Todas",
|
||||||
@ -349,6 +351,14 @@
|
|||||||
"hashtag.follow": "Seguir etiqueta",
|
"hashtag.follow": "Seguir etiqueta",
|
||||||
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
||||||
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
||||||
|
"hints.profiles.followers_may_be_missing": "Puede que no se muestren todos los seguidores de este perfil.",
|
||||||
|
"hints.profiles.follows_may_be_missing": "Puede que no se muestren todas las cuentas seguidas por este perfil.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Puede que no se muestren todas las publicaciones de este perfil.",
|
||||||
|
"hints.profiles.see_more_followers": "Ver más seguidores en {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "Ver más perfiles seguidos en {domain}",
|
||||||
|
"hints.profiles.see_more_posts": "Ver más publicaciones en {domain}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Puede que no se muestren algunas respuestas de otros servidores.",
|
||||||
|
"hints.threads.see_more": "Ver más respuestas en {domain}",
|
||||||
"home.column_settings.show_reblogs": "Mostrar retoots",
|
"home.column_settings.show_reblogs": "Mostrar retoots",
|
||||||
"home.column_settings.show_replies": "Mostrar respuestas",
|
"home.column_settings.show_replies": "Mostrar respuestas",
|
||||||
"home.hide_announcements": "Ocultar anuncios",
|
"home.hide_announcements": "Ocultar anuncios",
|
||||||
@ -356,6 +366,17 @@
|
|||||||
"home.pending_critical_update.link": "Ver actualizaciones",
|
"home.pending_critical_update.link": "Ver actualizaciones",
|
||||||
"home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!",
|
"home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!",
|
||||||
"home.show_announcements": "Mostrar anuncios",
|
"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.",
|
||||||
|
"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",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "Puedes revisar las notificaciones filtradas por separado",
|
||||||
|
"ignore_notifications_modal.ignore": "Ignorar notificaciones",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "¿Ignorar notificaciones de cuentas moderadas?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "¿Ignorar notificaciones de cuentas nuevas?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "¿Ignorar notificaciones de personas que no te sigue?",
|
||||||
|
"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.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 fuente de inicio.",
|
"interaction_modal.description.follow": "Con una cuenta en Mastodon, puedes seguir {name} para recibir sus publicaciones en tu fuente 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.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.",
|
||||||
@ -445,8 +466,6 @@
|
|||||||
"mute_modal.title": "¿Silenciar usuario?",
|
"mute_modal.title": "¿Silenciar usuario?",
|
||||||
"mute_modal.you_wont_see_mentions": "No verás publicaciones que los mencionen.",
|
"mute_modal.you_wont_see_mentions": "No verás publicaciones que los mencionen.",
|
||||||
"mute_modal.you_wont_see_posts": "Todavía pueden ver tus publicaciones, pero tú no verás las de ellos.",
|
"mute_modal.you_wont_see_posts": "Todavía pueden ver tus publicaciones, pero tú no verás las de ellos.",
|
||||||
"name_and_others": "{name} y {count, plural, one {# más} other {# más}}",
|
|
||||||
"name_and_others_with_link": "{name} y <a>{count, plural, one {# más} other {# más}}</a>",
|
|
||||||
"navigation_bar.about": "Acerca de",
|
"navigation_bar.about": "Acerca de",
|
||||||
"navigation_bar.advanced_interface": "Abrir en interfaz web avanzada",
|
"navigation_bar.advanced_interface": "Abrir en interfaz web avanzada",
|
||||||
"navigation_bar.blocks": "Usuarios bloqueados",
|
"navigation_bar.blocks": "Usuarios bloqueados",
|
||||||
@ -479,10 +498,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} informó de {target} por {category}",
|
"notification.admin.report_statuses": "{name} informó de {target} por {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} informó de {target}",
|
"notification.admin.report_statuses_other": "{name} informó de {target}",
|
||||||
"notification.admin.sign_up": "{name} se unio",
|
"notification.admin.sign_up": "{name} se unio",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} y {count, plural, one {# más} other {# más}} se registraron",
|
||||||
"notification.favourite": "{name} marcó como favorita tu publicación",
|
"notification.favourite": "{name} marcó como favorita tu publicación",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} y <a>{count, plural, one {# más} other {# más}}</a> marcaron tu publicación como favorita",
|
||||||
"notification.follow": "{name} te empezó a seguir",
|
"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_request": "{name} ha solicitado seguirte",
|
"notification.follow_request": "{name} ha solicitado seguirte",
|
||||||
"notification.mention": "{name} te ha mencionado",
|
"notification.follow_request.name_and_others": "{name} y {count, plural, one {# más} other {# más}} han solicitado seguirte",
|
||||||
|
"notification.label.mention": "Mención",
|
||||||
|
"notification.label.private_mention": "Mención privada",
|
||||||
|
"notification.label.private_reply": "Respuesta privada",
|
||||||
|
"notification.label.reply": "Respuesta",
|
||||||
|
"notification.mention": "Mención",
|
||||||
"notification.moderation-warning.learn_more": "Saber más",
|
"notification.moderation-warning.learn_more": "Saber más",
|
||||||
"notification.moderation_warning": "Has recibido una advertencia de moderación",
|
"notification.moderation_warning": "Has recibido una advertencia de moderación",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
|
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
|
||||||
@ -494,8 +521,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Tu cuenta ha sido suspendida.",
|
"notification.moderation_warning.action_suspend": "Tu cuenta ha sido suspendida.",
|
||||||
"notification.own_poll": "Tu encuesta ha terminado",
|
"notification.own_poll": "Tu encuesta ha terminado",
|
||||||
"notification.poll": "Una encuesta ha terminado",
|
"notification.poll": "Una encuesta ha terminado",
|
||||||
"notification.private_mention": "{name} te mencionó en privado",
|
|
||||||
"notification.reblog": "{name} ha retooteado tu estado",
|
"notification.reblog": "{name} ha retooteado tu estado",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} y <a>{count, plural, one {# más} other {# más}}</a> impulsaron tu publicación",
|
||||||
"notification.relationships_severance_event": "Conexiones perdidas con {name}",
|
"notification.relationships_severance_event": "Conexiones perdidas con {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Un administrador de {from} ha suspendido {target}, lo que significa que ya no puedes recibir actualizaciones de sus cuentas o interactuar con ellas.",
|
"notification.relationships_severance_event.account_suspension": "Un administrador de {from} ha suspendido {target}, lo que significa que ya no puedes recibir actualizaciones de sus cuentas o interactuar con ellas.",
|
||||||
"notification.relationships_severance_event.domain_block": "Un administrador de {from} ha bloqueado {target}, incluyendo {followersCount} de tus seguidores y {followingCount, plural, one {# cuenta} other {# cuentas}} que sigues.",
|
"notification.relationships_severance_event.domain_block": "Un administrador de {from} ha bloqueado {target}, incluyendo {followersCount} de tus seguidores y {followingCount, plural, one {# cuenta} other {# cuentas}} que sigues.",
|
||||||
@ -504,11 +531,24 @@
|
|||||||
"notification.status": "{name} acaba de publicar",
|
"notification.status": "{name} acaba de publicar",
|
||||||
"notification.update": "{name} editó una publicación",
|
"notification.update": "{name} editó una publicación",
|
||||||
"notification_requests.accept": "Aceptar",
|
"notification_requests.accept": "Aceptar",
|
||||||
|
"notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud…} other {Aceptar # solicitudes…}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceptar solicitud} other {Aceptar solicitudes}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "Vas a aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Quieres continuar?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "¿Aceptar las solicitudes?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Descartar solicitud} other {Descartar solicitudes}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "Vas a descartar {count, plural, one {una solicitud} other {# solicitudes}}. No podrás volver a acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Seguro que quieres continuar?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "¿Descartar las solicitudes?",
|
||||||
"notification_requests.dismiss": "Descartar",
|
"notification_requests.dismiss": "Descartar",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud…} other {Descartar # solicitudes…}}",
|
||||||
|
"notification_requests.edit_selection": "Editar",
|
||||||
|
"notification_requests.exit_selection": "Hecho",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta ha sido limitada por un moderador.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta o su servidor ha sido limitada por un moderador.",
|
||||||
"notification_requests.maximize": "Maximizar",
|
"notification_requests.maximize": "Maximizar",
|
||||||
"notification_requests.minimize_banner": "Minimizar banner de notificaciones filtradas",
|
"notification_requests.minimize_banner": "Minimizar banner de notificaciones filtradas",
|
||||||
"notification_requests.notifications_from": "Notificaciones de {name}",
|
"notification_requests.notifications_from": "Notificaciones de {name}",
|
||||||
"notification_requests.title": "Notificaciones filtradas",
|
"notification_requests.title": "Notificaciones filtradas",
|
||||||
|
"notification_requests.view": "Ver notificaciones",
|
||||||
"notifications.clear": "Limpiar notificaciones",
|
"notifications.clear": "Limpiar notificaciones",
|
||||||
"notifications.clear_confirmation": "¿Seguro de querer borrar permanentemente todas tus notificaciones?",
|
"notifications.clear_confirmation": "¿Seguro de querer borrar permanentemente todas tus notificaciones?",
|
||||||
"notifications.clear_title": "¿Borrar notificaciones?",
|
"notifications.clear_title": "¿Borrar notificaciones?",
|
||||||
@ -545,6 +585,14 @@
|
|||||||
"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_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.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.",
|
||||||
|
"notifications.policy.accept": "Aceptar",
|
||||||
|
"notifications.policy.accept_hint": "Mostrar en notificaciones",
|
||||||
|
"notifications.policy.drop": "Ignorar",
|
||||||
|
"notifications.policy.drop_hint": "Enviar al vacío, no volver a mostrar nunca",
|
||||||
|
"notifications.policy.filter": "Filtrar",
|
||||||
|
"notifications.policy.filter_hint": "Enviar a la bandeja de entrada de notificaciones filtradas",
|
||||||
|
"notifications.policy.filter_limited_accounts_hint": "Limitadas por los moderadores del servidor",
|
||||||
|
"notifications.policy.filter_limited_accounts_title": "Cuentas moderadas",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Creadas durante {days, plural, one {el último día} other {los últimos # días}}",
|
"notifications.policy.filter_new_accounts.hint": "Creadas durante {days, plural, one {el último día} other {los últimos # días}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Cuentas nuevas",
|
"notifications.policy.filter_new_accounts_title": "Cuentas nuevas",
|
||||||
"notifications.policy.filter_not_followers_hint": "Incluyendo personas que te han estado siguiendo desde hace menos de {days, plural, one {un día} other {# días}}",
|
"notifications.policy.filter_not_followers_hint": "Incluyendo personas que te han estado siguiendo desde hace menos de {days, plural, one {un día} other {# días}}",
|
||||||
@ -553,7 +601,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Personas que no sigues",
|
"notifications.policy.filter_not_following_title": "Personas que no sigues",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Filtrada, a menos que sea en respuesta a tu propia mención, o si sigues al remitente",
|
"notifications.policy.filter_private_mentions_hint": "Filtrada, a menos que sea en respuesta a tu propia mención, o si sigues al remitente",
|
||||||
"notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas",
|
"notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas",
|
||||||
"notifications.policy.title": "Filtrar notificaciones de…",
|
"notifications.policy.title": "Gestionar notificaciones de…",
|
||||||
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
|
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
|
||||||
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
|
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
|
||||||
"notifications_permission_banner.title": "Nunca te pierdas nada",
|
"notifications_permission_banner.title": "Nunca te pierdas nada",
|
||||||
@ -740,8 +788,6 @@
|
|||||||
"status.favourite": "Favorito",
|
"status.favourite": "Favorito",
|
||||||
"status.favourites": "{count, plural, one {favorito} other {favoritos}}",
|
"status.favourites": "{count, plural, one {favorito} other {favoritos}}",
|
||||||
"status.filter": "Filtrar esta publicación",
|
"status.filter": "Filtrar esta publicación",
|
||||||
"status.filtered": "Filtrado",
|
|
||||||
"status.hide": "Ocultar toot",
|
|
||||||
"status.history.created": "{name} creó {date}",
|
"status.history.created": "{name} creó {date}",
|
||||||
"status.history.edited": "{name} editado {date}",
|
"status.history.edited": "{name} editado {date}",
|
||||||
"status.load_more": "Cargar más",
|
"status.load_more": "Cargar más",
|
||||||
@ -769,10 +815,7 @@
|
|||||||
"status.report": "Reportar",
|
"status.report": "Reportar",
|
||||||
"status.sensitive_warning": "Contenido sensible",
|
"status.sensitive_warning": "Contenido sensible",
|
||||||
"status.share": "Compartir",
|
"status.share": "Compartir",
|
||||||
"status.show_filter_reason": "Mostrar de todos modos",
|
|
||||||
"status.show_less": "Mostrar menos",
|
|
||||||
"status.show_less_all": "Mostrar menos para todo",
|
"status.show_less_all": "Mostrar menos para todo",
|
||||||
"status.show_more": "Mostrar más",
|
|
||||||
"status.show_more_all": "Mostrar más para todo",
|
"status.show_more_all": "Mostrar más para todo",
|
||||||
"status.show_original": "Mostrar original",
|
"status.show_original": "Mostrar original",
|
||||||
"status.title.with_attachments": "{user} ha publicado {attachmentCount, plural, one {un adjunto} other {{attachmentCount} adjuntos}}",
|
"status.title.with_attachments": "{user} ha publicado {attachmentCount, plural, one {un adjunto} other {{attachmentCount} adjuntos}}",
|
||||||
@ -791,10 +834,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}",
|
"time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}",
|
||||||
"time_remaining.moments": "Momentos restantes",
|
"time_remaining.moments": "Momentos restantes",
|
||||||
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
|
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} de otros servidores no se muestran.",
|
|
||||||
"timeline_hint.resources.followers": "Seguidores",
|
|
||||||
"timeline_hint.resources.follows": "Seguidos",
|
|
||||||
"timeline_hint.resources.statuses": "Toots más antiguos",
|
|
||||||
"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.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",
|
"trends.trending_now": "Tendencia ahora",
|
||||||
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
|
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Bloquear dominio {domain}",
|
"account.block_domain": "Bloquear dominio {domain}",
|
||||||
"account.block_short": "Bloquear",
|
"account.block_short": "Bloquear",
|
||||||
"account.blocked": "Bloqueado",
|
"account.blocked": "Bloqueado",
|
||||||
"account.browse_more_on_origin_server": "Ver más en el perfil original",
|
|
||||||
"account.cancel_follow_request": "Retirar solicitud de seguimiento",
|
"account.cancel_follow_request": "Retirar solicitud de seguimiento",
|
||||||
"account.copy": "Copiar enlace al perfil",
|
"account.copy": "Copiar enlace al perfil",
|
||||||
"account.direct": "Mención privada a @{name}",
|
"account.direct": "Mención privada a @{name}",
|
||||||
@ -193,6 +192,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Dejar de seguir",
|
"confirmations.unfollow.confirm": "Dejar de seguir",
|
||||||
"confirmations.unfollow.message": "¿Seguro que quieres dejar de seguir a {name}?",
|
"confirmations.unfollow.message": "¿Seguro que quieres dejar de seguir a {name}?",
|
||||||
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
|
"confirmations.unfollow.title": "¿Dejar de seguir al usuario?",
|
||||||
|
"content_warning.hide": "Ocultar publicación",
|
||||||
|
"content_warning.show": "Mostrar de todos modos",
|
||||||
"conversation.delete": "Borrar conversación",
|
"conversation.delete": "Borrar conversación",
|
||||||
"conversation.mark_as_read": "Marcar como leído",
|
"conversation.mark_as_read": "Marcar como leído",
|
||||||
"conversation.open": "Ver conversación",
|
"conversation.open": "Ver conversación",
|
||||||
@ -300,6 +301,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva",
|
"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.select_filter.title": "Filtrar esta publicación",
|
||||||
"filter_modal.title.status": "Filtrar una publicación",
|
"filter_modal.title.status": "Filtrar una publicación",
|
||||||
|
"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.pending_requests": "De {count, plural, =0 {nadie} one {una persona} other {# personas}} que puede que conozcas",
|
||||||
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
"filtered_notifications_banner.title": "Notificaciones filtradas",
|
||||||
"firehose.all": "Todas",
|
"firehose.all": "Todas",
|
||||||
@ -349,6 +351,14 @@
|
|||||||
"hashtag.follow": "Seguir etiqueta",
|
"hashtag.follow": "Seguir etiqueta",
|
||||||
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
"hashtag.unfollow": "Dejar de seguir etiqueta",
|
||||||
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
"hashtags.and_other": "…y {count, plural, other {# más}}",
|
||||||
|
"hints.profiles.followers_may_be_missing": "Puede que no se muestren todos los seguidores de este perfil.",
|
||||||
|
"hints.profiles.follows_may_be_missing": "Puede que no se muestren todas las cuentas seguidas por este perfil.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Puede que no se muestren todas las publicaciones de este perfil.",
|
||||||
|
"hints.profiles.see_more_followers": "Ver más seguidores en {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "Ver más perfiles seguidos en {domain}",
|
||||||
|
"hints.profiles.see_more_posts": "Ver más publicaciones en {domain}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Puede que no se muestren algunas respuestas de otros servidores.",
|
||||||
|
"hints.threads.see_more": "Ver más respuestas en {domain}",
|
||||||
"home.column_settings.show_reblogs": "Mostrar impulsos",
|
"home.column_settings.show_reblogs": "Mostrar impulsos",
|
||||||
"home.column_settings.show_replies": "Mostrar respuestas",
|
"home.column_settings.show_replies": "Mostrar respuestas",
|
||||||
"home.hide_announcements": "Ocultar anuncios",
|
"home.hide_announcements": "Ocultar anuncios",
|
||||||
@ -356,6 +366,17 @@
|
|||||||
"home.pending_critical_update.link": "Ver actualizaciones",
|
"home.pending_critical_update.link": "Ver actualizaciones",
|
||||||
"home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!",
|
"home.pending_critical_update.title": "¡Actualización de seguridad crítica disponible!",
|
||||||
"home.show_announcements": "Mostrar anuncios",
|
"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.",
|
||||||
|
"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",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "Puedes revisar las notificaciones filtradas por separado",
|
||||||
|
"ignore_notifications_modal.ignore": "Ignorar notificaciones",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "¿Ignorar notificaciones de cuentas moderadas?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "¿Ignorar notificaciones de cuentas nuevas?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "¿Ignorar notificaciones de personas que no te sigue?",
|
||||||
|
"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.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 línea temporal 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.reblog": "Con una cuenta en Mastodon, puedes impulsar esta publicación para compartirla con tus propios seguidores.",
|
||||||
@ -445,8 +466,6 @@
|
|||||||
"mute_modal.title": "¿Silenciar usuario?",
|
"mute_modal.title": "¿Silenciar usuario?",
|
||||||
"mute_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.",
|
"mute_modal.you_wont_see_mentions": "No verás mensajes que los mencionen.",
|
||||||
"mute_modal.you_wont_see_posts": "Todavía pueden ver tus publicaciones, pero tú no verás las suyas.",
|
"mute_modal.you_wont_see_posts": "Todavía pueden ver tus publicaciones, pero tú no verás las suyas.",
|
||||||
"name_and_others": "{name} y {count, plural, one {# más} other {# más}}",
|
|
||||||
"name_and_others_with_link": "{name} y <a>{count, plural, one {# más} other {# más}}</a>",
|
|
||||||
"navigation_bar.about": "Acerca de",
|
"navigation_bar.about": "Acerca de",
|
||||||
"navigation_bar.advanced_interface": "Abrir en la interfaz web avanzada",
|
"navigation_bar.advanced_interface": "Abrir en la interfaz web avanzada",
|
||||||
"navigation_bar.blocks": "Usuarios bloqueados",
|
"navigation_bar.blocks": "Usuarios bloqueados",
|
||||||
@ -479,10 +498,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} informó de {target} por {category}",
|
"notification.admin.report_statuses": "{name} informó de {target} por {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} informó de {target}",
|
"notification.admin.report_statuses_other": "{name} informó de {target}",
|
||||||
"notification.admin.sign_up": "{name} se registró",
|
"notification.admin.sign_up": "{name} se registró",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} y {count, plural, one {# más} other {# más}} se registraron",
|
||||||
"notification.favourite": "{name} marcó como favorita tu publicación",
|
"notification.favourite": "{name} marcó como favorita tu publicación",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} y <a>{count, plural, one {# más} other {# más}}</a> marcaron tu publicación como favorita",
|
||||||
"notification.follow": "{name} te empezó a seguir",
|
"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_request": "{name} ha solicitado seguirte",
|
"notification.follow_request": "{name} ha solicitado seguirte",
|
||||||
"notification.mention": "{name} te ha mencionado",
|
"notification.follow_request.name_and_others": "{name} y {count, plural, one {# más} other {# más}} han solicitado seguirte",
|
||||||
|
"notification.label.mention": "Mención",
|
||||||
|
"notification.label.private_mention": "Mención privada",
|
||||||
|
"notification.label.private_reply": "Respuesta privada",
|
||||||
|
"notification.label.reply": "Respuesta",
|
||||||
|
"notification.mention": "Mención",
|
||||||
"notification.moderation-warning.learn_more": "Saber más",
|
"notification.moderation-warning.learn_more": "Saber más",
|
||||||
"notification.moderation_warning": "Has recibido una advertencia de moderación",
|
"notification.moderation_warning": "Has recibido una advertencia de moderación",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
|
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
|
||||||
@ -494,8 +521,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Tu cuenta ha sido suspendida.",
|
"notification.moderation_warning.action_suspend": "Tu cuenta ha sido suspendida.",
|
||||||
"notification.own_poll": "Tu encuesta ha terminado",
|
"notification.own_poll": "Tu encuesta ha terminado",
|
||||||
"notification.poll": "Una encuesta ha terminado",
|
"notification.poll": "Una encuesta ha terminado",
|
||||||
"notification.private_mention": "{name} te mencionó en privado",
|
|
||||||
"notification.reblog": "{name} ha impulsado tu publicación",
|
"notification.reblog": "{name} ha impulsado tu publicación",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} y <a>{count, plural, one {# más} other {# más}}</a> impulsaron tu publicación",
|
||||||
"notification.relationships_severance_event": "Conexiones perdidas con {name}",
|
"notification.relationships_severance_event": "Conexiones perdidas con {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Un administrador de {from} ha suspendido {target}, lo que significa que ya no puedes recibir actualizaciones de sus cuentas o interactuar con ellas.",
|
"notification.relationships_severance_event.account_suspension": "Un administrador de {from} ha suspendido {target}, lo que significa que ya no puedes recibir actualizaciones de sus cuentas o interactuar con ellas.",
|
||||||
"notification.relationships_severance_event.domain_block": "Un administrador de {from} ha bloqueado {target}, incluyendo {followersCount} de tus seguidores y {followingCount, plural, one {# cuenta} other {# cuentas}} que sigues.",
|
"notification.relationships_severance_event.domain_block": "Un administrador de {from} ha bloqueado {target}, incluyendo {followersCount} de tus seguidores y {followingCount, plural, one {# cuenta} other {# cuentas}} que sigues.",
|
||||||
@ -504,11 +531,24 @@
|
|||||||
"notification.status": "{name} acaba de publicar",
|
"notification.status": "{name} acaba de publicar",
|
||||||
"notification.update": "{name} editó una publicación",
|
"notification.update": "{name} editó una publicación",
|
||||||
"notification_requests.accept": "Aceptar",
|
"notification_requests.accept": "Aceptar",
|
||||||
|
"notification_requests.accept_multiple": "{count, plural, one {Aceptar # solicitud…} other {Aceptar # solicitudes…}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceptar solicitud} other {Aceptar solicitudes}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "Vas a aceptar {count, plural, one {una solicitud} other {# solicitudes}}. ¿Quieres continuar?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "¿Aceptar las solicitudes?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Descartar solicitud} other {Descartar solicitudes}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "Vas a descartar {count, plural, one {una solicitud} other {# solicitudes}}. No podrás volver a acceder fácilmente a {count, plural, one {ella} other {ellas}} de nuevo. ¿Seguro que quieres continuar?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "¿Descartar las solicitudes?",
|
||||||
"notification_requests.dismiss": "Descartar",
|
"notification_requests.dismiss": "Descartar",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Descartar # solicitud…} other {Descartar # solicitudes…}}",
|
||||||
|
"notification_requests.edit_selection": "Editar",
|
||||||
|
"notification_requests.exit_selection": "Hecho",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta ha sido limitada por un moderador.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Las notificaciones de esta cuenta han sido filtradas porque la cuenta o su servidor ha sido limitada por un moderador.",
|
||||||
"notification_requests.maximize": "Maximizar",
|
"notification_requests.maximize": "Maximizar",
|
||||||
"notification_requests.minimize_banner": "Minimizar banner de notificaciones filtradas",
|
"notification_requests.minimize_banner": "Minimizar banner de notificaciones filtradas",
|
||||||
"notification_requests.notifications_from": "Notificaciones de {name}",
|
"notification_requests.notifications_from": "Notificaciones de {name}",
|
||||||
"notification_requests.title": "Notificaciones filtradas",
|
"notification_requests.title": "Notificaciones filtradas",
|
||||||
|
"notification_requests.view": "Ver notificaciones",
|
||||||
"notifications.clear": "Limpiar notificaciones",
|
"notifications.clear": "Limpiar notificaciones",
|
||||||
"notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?",
|
"notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?",
|
||||||
"notifications.clear_title": "¿Borrar notificaciones?",
|
"notifications.clear_title": "¿Borrar notificaciones?",
|
||||||
@ -545,6 +585,14 @@
|
|||||||
"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_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.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.",
|
||||||
|
"notifications.policy.accept": "Aceptar",
|
||||||
|
"notifications.policy.accept_hint": "Mostrar en notificaciones",
|
||||||
|
"notifications.policy.drop": "Ignorar",
|
||||||
|
"notifications.policy.drop_hint": "Enviar al vacío, no volver a mostrar nunca",
|
||||||
|
"notifications.policy.filter": "Filtrar",
|
||||||
|
"notifications.policy.filter_hint": "Enviar a la bandeja de entrada de notificaciones filtradas",
|
||||||
|
"notifications.policy.filter_limited_accounts_hint": "Limitadas por los moderadores del servidor",
|
||||||
|
"notifications.policy.filter_limited_accounts_title": "Cuentas moderadas",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Creadas durante {days, plural, one {el último día} other {los últimos # días}}",
|
"notifications.policy.filter_new_accounts.hint": "Creadas durante {days, plural, one {el último día} other {los últimos # días}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Cuentas nuevas",
|
"notifications.policy.filter_new_accounts_title": "Cuentas nuevas",
|
||||||
"notifications.policy.filter_not_followers_hint": "Incluyendo personas que te han estado siguiendo desde hace menos de {days, plural, one {un día} other {# días}}",
|
"notifications.policy.filter_not_followers_hint": "Incluyendo personas que te han estado siguiendo desde hace menos de {days, plural, one {un día} other {# días}}",
|
||||||
@ -553,7 +601,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Personas que no sigues",
|
"notifications.policy.filter_not_following_title": "Personas que no sigues",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Filtradas a menos que sea en respuesta a tu propia mención, o si sigues al remitente",
|
"notifications.policy.filter_private_mentions_hint": "Filtradas a menos que sea en respuesta a tu propia mención, o si sigues al remitente",
|
||||||
"notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas",
|
"notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas",
|
||||||
"notifications.policy.title": "Filtrar notificaciones de…",
|
"notifications.policy.title": "Gestionar notificaciones de…",
|
||||||
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
|
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
|
||||||
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
|
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
|
||||||
"notifications_permission_banner.title": "Nunca te pierdas nada",
|
"notifications_permission_banner.title": "Nunca te pierdas nada",
|
||||||
@ -740,8 +788,6 @@
|
|||||||
"status.favourite": "Favorito",
|
"status.favourite": "Favorito",
|
||||||
"status.favourites": "{count, plural, one {favorito} other {favoritos}}",
|
"status.favourites": "{count, plural, one {favorito} other {favoritos}}",
|
||||||
"status.filter": "Filtrar esta publicación",
|
"status.filter": "Filtrar esta publicación",
|
||||||
"status.filtered": "Filtrado",
|
|
||||||
"status.hide": "Ocultar publicación",
|
|
||||||
"status.history.created": "{name} creó {date}",
|
"status.history.created": "{name} creó {date}",
|
||||||
"status.history.edited": "{name} editó {date}",
|
"status.history.edited": "{name} editó {date}",
|
||||||
"status.load_more": "Cargar más",
|
"status.load_more": "Cargar más",
|
||||||
@ -769,10 +815,7 @@
|
|||||||
"status.report": "Reportar",
|
"status.report": "Reportar",
|
||||||
"status.sensitive_warning": "Contenido sensible",
|
"status.sensitive_warning": "Contenido sensible",
|
||||||
"status.share": "Compartir",
|
"status.share": "Compartir",
|
||||||
"status.show_filter_reason": "Mostrar de todos modos",
|
|
||||||
"status.show_less": "Mostrar menos",
|
|
||||||
"status.show_less_all": "Mostrar menos para todo",
|
"status.show_less_all": "Mostrar menos para todo",
|
||||||
"status.show_more": "Mostrar más",
|
|
||||||
"status.show_more_all": "Mostrar más para todo",
|
"status.show_more_all": "Mostrar más para todo",
|
||||||
"status.show_original": "Mostrar original",
|
"status.show_original": "Mostrar original",
|
||||||
"status.title.with_attachments": "{user} ha publicado {attachmentCount, plural, one {un adjunto} other {{attachmentCount} adjuntos}}",
|
"status.title.with_attachments": "{user} ha publicado {attachmentCount, plural, one {un adjunto} other {{attachmentCount} adjuntos}}",
|
||||||
@ -791,10 +834,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}",
|
"time_remaining.minutes": "{number, plural, one {# minuto restante} other {# minutos restantes}}",
|
||||||
"time_remaining.moments": "Momentos restantes",
|
"time_remaining.moments": "Momentos restantes",
|
||||||
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
|
"time_remaining.seconds": "{number, plural, one {# segundo restante} other {# segundos restantes}}",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} de otros servidores no se muestran.",
|
|
||||||
"timeline_hint.resources.followers": "Seguidores",
|
|
||||||
"timeline_hint.resources.follows": "Seguidos",
|
|
||||||
"timeline_hint.resources.statuses": "Publicaciones más antiguas",
|
|
||||||
"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.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",
|
"trends.trending_now": "Tendencia ahora",
|
||||||
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
|
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
"account.block_domain": "Peida kõik domeenist {domain}",
|
"account.block_domain": "Peida kõik domeenist {domain}",
|
||||||
"account.block_short": "Blokeerimine",
|
"account.block_short": "Blokeerimine",
|
||||||
"account.blocked": "Blokeeritud",
|
"account.blocked": "Blokeeritud",
|
||||||
"account.browse_more_on_origin_server": "Vaata rohkem algsel profiilil",
|
|
||||||
"account.cancel_follow_request": "Võta jälgimistaotlus tagasi",
|
"account.cancel_follow_request": "Võta jälgimistaotlus tagasi",
|
||||||
"account.copy": "Kopeeri profiili link",
|
"account.copy": "Kopeeri profiili link",
|
||||||
"account.direct": "Maini privaatselt @{name}",
|
"account.direct": "Maini privaatselt @{name}",
|
||||||
@ -34,7 +33,9 @@
|
|||||||
"account.follow_back": "Jälgi vastu",
|
"account.follow_back": "Jälgi vastu",
|
||||||
"account.followers": "Jälgijad",
|
"account.followers": "Jälgijad",
|
||||||
"account.followers.empty": "Keegi ei jälgi veel seda kasutajat.",
|
"account.followers.empty": "Keegi ei jälgi veel seda kasutajat.",
|
||||||
|
"account.followers_counter": "{count, plural, one {{counter} jälgija} other {{counter} jälgijat}}",
|
||||||
"account.following": "Jälgib",
|
"account.following": "Jälgib",
|
||||||
|
"account.following_counter": "{count, plural, one {{counter} jälgib} other {{counter} jälgib}}",
|
||||||
"account.follows.empty": "See kasutaja ei jälgi veel kedagi.",
|
"account.follows.empty": "See kasutaja ei jälgi veel kedagi.",
|
||||||
"account.go_to_profile": "Mine profiilile",
|
"account.go_to_profile": "Mine profiilile",
|
||||||
"account.hide_reblogs": "Peida @{name} jagamised",
|
"account.hide_reblogs": "Peida @{name} jagamised",
|
||||||
@ -60,6 +61,7 @@
|
|||||||
"account.requested_follow": "{name} on taodelnud sinu jälgimist",
|
"account.requested_follow": "{name} on taodelnud sinu jälgimist",
|
||||||
"account.share": "Jaga @{name} profiili",
|
"account.share": "Jaga @{name} profiili",
|
||||||
"account.show_reblogs": "Näita @{name} jagamisi",
|
"account.show_reblogs": "Näita @{name} jagamisi",
|
||||||
|
"account.statuses_counter": "{count, plural, one {{counter} postitus} other {{counter} postitust}}",
|
||||||
"account.unblock": "Eemalda blokeering @{name}",
|
"account.unblock": "Eemalda blokeering @{name}",
|
||||||
"account.unblock_domain": "Tee {domain} nähtavaks",
|
"account.unblock_domain": "Tee {domain} nähtavaks",
|
||||||
"account.unblock_short": "Eemalda blokeering",
|
"account.unblock_short": "Eemalda blokeering",
|
||||||
@ -464,7 +466,6 @@
|
|||||||
"notification.favourite": "{name} märkis su postituse lemmikuks",
|
"notification.favourite": "{name} märkis su postituse lemmikuks",
|
||||||
"notification.follow": "{name} alustas su jälgimist",
|
"notification.follow": "{name} alustas su jälgimist",
|
||||||
"notification.follow_request": "{name} soovib sind jälgida",
|
"notification.follow_request": "{name} soovib sind jälgida",
|
||||||
"notification.mention": "{name} mainis sind",
|
|
||||||
"notification.moderation-warning.learn_more": "Vaata lisa",
|
"notification.moderation-warning.learn_more": "Vaata lisa",
|
||||||
"notification.moderation_warning": "Said modereerimise hoiatuse",
|
"notification.moderation_warning": "Said modereerimise hoiatuse",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Mõni su postitus on eemaldatud.",
|
"notification.moderation_warning.action_delete_statuses": "Mõni su postitus on eemaldatud.",
|
||||||
@ -528,7 +529,6 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Inimesed, keda sa ei jälgi",
|
"notifications.policy.filter_not_following_title": "Inimesed, keda sa ei jälgi",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Filtreeritud, kui see pole vastus sinupoolt mainimisele või kui jälgid saatjat",
|
"notifications.policy.filter_private_mentions_hint": "Filtreeritud, kui see pole vastus sinupoolt mainimisele või kui jälgid saatjat",
|
||||||
"notifications.policy.filter_private_mentions_title": "Soovimatud privaatsed mainimised",
|
"notifications.policy.filter_private_mentions_title": "Soovimatud privaatsed mainimised",
|
||||||
"notifications.policy.title": "Filtreeri välja teavitused kohast…",
|
|
||||||
"notifications_permission_banner.enable": "Luba töölaua märguanded",
|
"notifications_permission_banner.enable": "Luba töölaua märguanded",
|
||||||
"notifications_permission_banner.how_to_control": "Et saada teateid, ajal mil Mastodon pole avatud, luba töölauamärguanded. Saad täpselt määrata, mis tüüpi tegevused tekitavad märguandeid, kasutates peale teadaannete sisse lülitamist üleval olevat nuppu {icon}.",
|
"notifications_permission_banner.how_to_control": "Et saada teateid, ajal mil Mastodon pole avatud, luba töölauamärguanded. Saad täpselt määrata, mis tüüpi tegevused tekitavad märguandeid, kasutates peale teadaannete sisse lülitamist üleval olevat nuppu {icon}.",
|
||||||
"notifications_permission_banner.title": "Ära jää millestki ilma",
|
"notifications_permission_banner.title": "Ära jää millestki ilma",
|
||||||
@ -711,8 +711,6 @@
|
|||||||
"status.favourite": "Lemmik",
|
"status.favourite": "Lemmik",
|
||||||
"status.favourites": "{count, plural, one {lemmik} other {lemmikud}}",
|
"status.favourites": "{count, plural, one {lemmik} other {lemmikud}}",
|
||||||
"status.filter": "Filtreeri seda postitust",
|
"status.filter": "Filtreeri seda postitust",
|
||||||
"status.filtered": "Filtreeritud",
|
|
||||||
"status.hide": "Peida postitus",
|
|
||||||
"status.history.created": "{name} lõi {date}",
|
"status.history.created": "{name} lõi {date}",
|
||||||
"status.history.edited": "{name} muutis {date}",
|
"status.history.edited": "{name} muutis {date}",
|
||||||
"status.load_more": "Lae rohkem",
|
"status.load_more": "Lae rohkem",
|
||||||
@ -740,10 +738,7 @@
|
|||||||
"status.report": "Raporteeri @{name}",
|
"status.report": "Raporteeri @{name}",
|
||||||
"status.sensitive_warning": "Tundlik sisu",
|
"status.sensitive_warning": "Tundlik sisu",
|
||||||
"status.share": "Jaga",
|
"status.share": "Jaga",
|
||||||
"status.show_filter_reason": "Näita ikka",
|
|
||||||
"status.show_less": "Peida sisu",
|
|
||||||
"status.show_less_all": "Peida kogu tundlik sisu",
|
"status.show_less_all": "Peida kogu tundlik sisu",
|
||||||
"status.show_more": "Näita sisu",
|
|
||||||
"status.show_more_all": "Näita kogu tundlikku sisu",
|
"status.show_more_all": "Näita kogu tundlikku sisu",
|
||||||
"status.show_original": "Näita algset",
|
"status.show_original": "Näita algset",
|
||||||
"status.title.with_attachments": "{user} postitas {attachmentCount, plural, one {manuse} other {{attachmentCount} manust}}",
|
"status.title.with_attachments": "{user} postitas {attachmentCount, plural, one {manuse} other {{attachmentCount} manust}}",
|
||||||
@ -762,10 +757,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minut} other {# minutit}} jäänud",
|
"time_remaining.minutes": "{number, plural, one {# minut} other {# minutit}} jäänud",
|
||||||
"time_remaining.moments": "Hetked jäänud",
|
"time_remaining.moments": "Hetked jäänud",
|
||||||
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekundit}} jäänud",
|
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekundit}} jäänud",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} teistest serveritest ei kuvata.",
|
|
||||||
"timeline_hint.resources.followers": "Jälgijaid",
|
|
||||||
"timeline_hint.resources.follows": "Jälgimisi",
|
|
||||||
"timeline_hint.resources.statuses": "Eelnevaid postitusi",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} inimene} other {{counter} inimest}} viimase {days, plural, one {päeva} other {{days} päeva}} jooksul",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} inimene} other {{counter} inimest}} viimase {days, plural, one {päeva} other {{days} päeva}} jooksul",
|
||||||
"trends.trending_now": "Hetkel populaarne",
|
"trends.trending_now": "Hetkel populaarne",
|
||||||
"ui.beforeunload": "Mustand läheb kaotsi, kui lahkud Mastodonist.",
|
"ui.beforeunload": "Mustand läheb kaotsi, kui lahkud Mastodonist.",
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
"about.not_available": "Zerbitzari honek ez du informazio hau eskuragarri jarri.",
|
"about.not_available": "Zerbitzari honek ez du informazio hau eskuragarri jarri.",
|
||||||
"about.powered_by": "{mastodon} erabiltzen duen sare sozial deszentralizatua",
|
"about.powered_by": "{mastodon} erabiltzen duen sare sozial deszentralizatua",
|
||||||
"about.rules": "Zerbitzariaren arauak",
|
"about.rules": "Zerbitzariaren arauak",
|
||||||
|
"account.account_note_header": "Ohar pertsonala",
|
||||||
"account.add_or_remove_from_list": "Gehitu edo kendu zerrendetatik",
|
"account.add_or_remove_from_list": "Gehitu edo kendu zerrendetatik",
|
||||||
"account.badges.bot": "Bot-a",
|
"account.badges.bot": "Bot-a",
|
||||||
"account.badges.group": "Taldea",
|
"account.badges.group": "Taldea",
|
||||||
@ -18,7 +19,6 @@
|
|||||||
"account.block_domain": "Blokeatu {domain} domeinua",
|
"account.block_domain": "Blokeatu {domain} domeinua",
|
||||||
"account.block_short": "Blokeatu",
|
"account.block_short": "Blokeatu",
|
||||||
"account.blocked": "Blokeatuta",
|
"account.blocked": "Blokeatuta",
|
||||||
"account.browse_more_on_origin_server": "Arakatu gehiago jatorrizko profilean",
|
|
||||||
"account.cancel_follow_request": "Baztertu jarraitzeko eskaera",
|
"account.cancel_follow_request": "Baztertu jarraitzeko eskaera",
|
||||||
"account.copy": "Kopiatu profilerako esteka",
|
"account.copy": "Kopiatu profilerako esteka",
|
||||||
"account.direct": "Aipatu pribatuki @{name}",
|
"account.direct": "Aipatu pribatuki @{name}",
|
||||||
@ -34,7 +34,9 @@
|
|||||||
"account.follow_back": "Jarraitu bueltan",
|
"account.follow_back": "Jarraitu bueltan",
|
||||||
"account.followers": "Jarraitzaileak",
|
"account.followers": "Jarraitzaileak",
|
||||||
"account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.",
|
"account.followers.empty": "Ez du inork erabiltzaile hau jarraitzen oraindik.",
|
||||||
|
"account.followers_counter": "{count, plural, one {{counter} jarraitzaile} other {{counter} jarraitzaile}}",
|
||||||
"account.following": "Jarraitzen",
|
"account.following": "Jarraitzen",
|
||||||
|
"account.following_counter": "{count, plural, one {{counter} jarraitzen} other {{counter} jarraitzen}}",
|
||||||
"account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.",
|
"account.follows.empty": "Erabiltzaile honek ez du inor jarraitzen oraindik.",
|
||||||
"account.go_to_profile": "Joan profilera",
|
"account.go_to_profile": "Joan profilera",
|
||||||
"account.hide_reblogs": "Ezkutatu @{name} erabiltzailearen bultzadak",
|
"account.hide_reblogs": "Ezkutatu @{name} erabiltzailearen bultzadak",
|
||||||
@ -60,6 +62,7 @@
|
|||||||
"account.requested_follow": "{name}-(e)k zu jarraitzeko eskaera egin du",
|
"account.requested_follow": "{name}-(e)k zu jarraitzeko eskaera egin du",
|
||||||
"account.share": "Partekatu @{name} erabiltzailearen profila",
|
"account.share": "Partekatu @{name} erabiltzailearen profila",
|
||||||
"account.show_reblogs": "Erakutsi @{name} erabiltzailearen bultzadak",
|
"account.show_reblogs": "Erakutsi @{name} erabiltzailearen bultzadak",
|
||||||
|
"account.statuses_counter": "{count, plural, one {{counter} bidalketa} other {{counter} bidalketa}}",
|
||||||
"account.unblock": "Desblokeatu @{name}",
|
"account.unblock": "Desblokeatu @{name}",
|
||||||
"account.unblock_domain": "Berriz erakutsi {domain}",
|
"account.unblock_domain": "Berriz erakutsi {domain}",
|
||||||
"account.unblock_short": "Desblokeatu",
|
"account.unblock_short": "Desblokeatu",
|
||||||
@ -175,6 +178,7 @@
|
|||||||
"confirmations.discard_edit_media.message": "Multimediaren deskribapen edo aurrebistan gorde gabeko aldaketak daude, baztertu nahi dituzu?",
|
"confirmations.discard_edit_media.message": "Multimediaren deskribapen edo aurrebistan gorde gabeko aldaketak daude, baztertu nahi dituzu?",
|
||||||
"confirmations.edit.confirm": "Editatu",
|
"confirmations.edit.confirm": "Editatu",
|
||||||
"confirmations.edit.message": "Orain editatzen baduzu, une honetan idazten ari zaren mezua gainidatziko da. Ziur jarraitu nahi duzula?",
|
"confirmations.edit.message": "Orain editatzen baduzu, une honetan idazten ari zaren mezua gainidatziko da. Ziur jarraitu nahi duzula?",
|
||||||
|
"confirmations.edit.title": "Gainidatzi bidalketa?",
|
||||||
"confirmations.logout.confirm": "Amaitu saioa",
|
"confirmations.logout.confirm": "Amaitu saioa",
|
||||||
"confirmations.logout.message": "Ziur saioa amaitu nahi duzula?",
|
"confirmations.logout.message": "Ziur saioa amaitu nahi duzula?",
|
||||||
"confirmations.logout.title": "Itxi saioa?",
|
"confirmations.logout.title": "Itxi saioa?",
|
||||||
@ -184,8 +188,10 @@
|
|||||||
"confirmations.redraft.title": "Ezabatu eta berridatzi bidalketa?",
|
"confirmations.redraft.title": "Ezabatu eta berridatzi bidalketa?",
|
||||||
"confirmations.reply.confirm": "Erantzun",
|
"confirmations.reply.confirm": "Erantzun",
|
||||||
"confirmations.reply.message": "Orain erantzuteak idazten ari zaren mezua gainidatziko du. Ziur jarraitu nahi duzula?",
|
"confirmations.reply.message": "Orain erantzuteak idazten ari zaren mezua gainidatziko du. Ziur jarraitu nahi duzula?",
|
||||||
|
"confirmations.reply.title": "Gainidatzi bidalketa?",
|
||||||
"confirmations.unfollow.confirm": "Utzi jarraitzeari",
|
"confirmations.unfollow.confirm": "Utzi jarraitzeari",
|
||||||
"confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?",
|
"confirmations.unfollow.message": "Ziur {name} jarraitzeari utzi nahi diozula?",
|
||||||
|
"confirmations.unfollow.title": "Erabiltzailea jarraitzeari utzi?",
|
||||||
"conversation.delete": "Ezabatu elkarrizketa",
|
"conversation.delete": "Ezabatu elkarrizketa",
|
||||||
"conversation.mark_as_read": "Markatu irakurrita bezala",
|
"conversation.mark_as_read": "Markatu irakurrita bezala",
|
||||||
"conversation.open": "Ikusi elkarrizketa",
|
"conversation.open": "Ikusi elkarrizketa",
|
||||||
@ -348,6 +354,12 @@
|
|||||||
"home.pending_critical_update.link": "Ikusi eguneraketak",
|
"home.pending_critical_update.link": "Ikusi eguneraketak",
|
||||||
"home.pending_critical_update.title": "Segurtasun eguneraketa kritikoa eskuragarri!",
|
"home.pending_critical_update.title": "Segurtasun eguneraketa kritikoa eskuragarri!",
|
||||||
"home.show_announcements": "Erakutsi iragarpenak",
|
"home.show_announcements": "Erakutsi iragarpenak",
|
||||||
|
"ignore_notifications_modal.filter_instead": "Iragazi ez ikusiarena egin beharrean",
|
||||||
|
"ignore_notifications_modal.ignore": "Ezikusi jakinarazpenak",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "Moderatutako kontuen jakinarazpenei ez ikusiarena egin?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "Kontu berrien jakinarazpenei ez ikusiarena egin?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "Jarraitzen ez zaituzten pertsonen jakinarazpenei ez ikusiarena egin?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Jarraitzen ez dituzun pertsonen jakinarazpenei ez ikusiarena egin?",
|
||||||
"interaction_modal.description.favourite": "Mastodon kontu batekin bidalketa hau gogoko egin dezakezu, egileari eskertzeko eta gerorako gordetzeko.",
|
"interaction_modal.description.favourite": "Mastodon kontu batekin bidalketa hau gogoko egin dezakezu, egileari eskertzeko eta gerorako gordetzeko.",
|
||||||
"interaction_modal.description.follow": "Mastodon kontu batekin {name} jarraitu dezakezu bere bidalketak zure hasierako denbora lerroan jasotzeko.",
|
"interaction_modal.description.follow": "Mastodon kontu batekin {name} jarraitu dezakezu bere bidalketak zure hasierako denbora lerroan jasotzeko.",
|
||||||
"interaction_modal.description.reblog": "Mastodon kontu batekin bidalketa hau bultzatu dezakezu, zure jarraitzaileekin partekatzeko.",
|
"interaction_modal.description.reblog": "Mastodon kontu batekin bidalketa hau bultzatu dezakezu, zure jarraitzaileekin partekatzeko.",
|
||||||
@ -466,7 +478,11 @@
|
|||||||
"notification.favourite": "{name}(e)k zure bidalketa gogoko du",
|
"notification.favourite": "{name}(e)k zure bidalketa gogoko du",
|
||||||
"notification.follow": "{name}(e)k jarraitzen dizu",
|
"notification.follow": "{name}(e)k jarraitzen dizu",
|
||||||
"notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du",
|
"notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du",
|
||||||
"notification.mention": "{name}(e)k aipatu zaitu",
|
"notification.label.mention": "Aipamena",
|
||||||
|
"notification.label.private_mention": "Aipamen pribatua",
|
||||||
|
"notification.label.private_reply": "Erantzun pribatua",
|
||||||
|
"notification.label.reply": "Erantzuna",
|
||||||
|
"notification.mention": "Aipamena",
|
||||||
"notification.moderation-warning.learn_more": "Informazio gehiago",
|
"notification.moderation-warning.learn_more": "Informazio gehiago",
|
||||||
"notification.moderation_warning": "Moderazio-abisu bat jaso duzu",
|
"notification.moderation_warning": "Moderazio-abisu bat jaso duzu",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Argitalpen batzuk kendu dira.",
|
"notification.moderation_warning.action_delete_statuses": "Argitalpen batzuk kendu dira.",
|
||||||
@ -477,6 +493,7 @@
|
|||||||
"notification.moderation_warning.action_silence": "Kontua murriztu egin da.",
|
"notification.moderation_warning.action_silence": "Kontua murriztu egin da.",
|
||||||
"notification.moderation_warning.action_suspend": "Kontua itxi da.",
|
"notification.moderation_warning.action_suspend": "Kontua itxi da.",
|
||||||
"notification.own_poll": "Zure inkesta amaitu da",
|
"notification.own_poll": "Zure inkesta amaitu da",
|
||||||
|
"notification.poll": "Zuk erantzun duzun inkesta bat bukatu da",
|
||||||
"notification.reblog": "{name}(e)k bultzada eman dio zure bidalketari",
|
"notification.reblog": "{name}(e)k bultzada eman dio zure bidalketari",
|
||||||
"notification.relationships_severance_event": "{name} erabiltzailearekin galdutako konexioak",
|
"notification.relationships_severance_event": "{name} erabiltzailearekin galdutako konexioak",
|
||||||
"notification.relationships_severance_event.account_suspension": "{from} zerbitzariko administratzaile batek {target} bertan behera utzi du, hau da, ezin izango dituzu jaso hango eguneratzerik edo hangoekin elkarreragin.",
|
"notification.relationships_severance_event.account_suspension": "{from} zerbitzariko administratzaile batek {target} bertan behera utzi du, hau da, ezin izango dituzu jaso hango eguneratzerik edo hangoekin elkarreragin.",
|
||||||
@ -485,8 +502,10 @@
|
|||||||
"notification.update": "{name} erabiltzaileak bidalketa bat editatu du",
|
"notification.update": "{name} erabiltzaileak bidalketa bat editatu du",
|
||||||
"notification_requests.accept": "Onartu",
|
"notification_requests.accept": "Onartu",
|
||||||
"notification_requests.dismiss": "Baztertu",
|
"notification_requests.dismiss": "Baztertu",
|
||||||
|
"notification_requests.maximize": "Maximizatu",
|
||||||
"notification_requests.notifications_from": "{name} erabiltzailearen jakinarazpenak",
|
"notification_requests.notifications_from": "{name} erabiltzailearen jakinarazpenak",
|
||||||
"notification_requests.title": "Iragazitako jakinarazpenak",
|
"notification_requests.title": "Iragazitako jakinarazpenak",
|
||||||
|
"notification_requests.view": "Ikusi jakinarazpenak",
|
||||||
"notifications.clear": "Garbitu jakinarazpenak",
|
"notifications.clear": "Garbitu jakinarazpenak",
|
||||||
"notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?",
|
"notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?",
|
||||||
"notifications.clear_title": "Garbitu jakinarazpenak?",
|
"notifications.clear_title": "Garbitu jakinarazpenak?",
|
||||||
@ -523,6 +542,14 @@
|
|||||||
"notifications.permission_denied": "Mahaigaineko jakinarazpenak ez daude erabilgarri, nabigatzaileari baimen eskaera ukatu zitzaiolako",
|
"notifications.permission_denied": "Mahaigaineko jakinarazpenak ez daude erabilgarri, nabigatzaileari baimen eskaera ukatu zitzaiolako",
|
||||||
"notifications.permission_denied_alert": "Mahaigaineko jakinarazpenak ezin dira gaitu, nabigatzaileari baimena ukatu zitzaiolako",
|
"notifications.permission_denied_alert": "Mahaigaineko jakinarazpenak ezin dira gaitu, nabigatzaileari baimena ukatu zitzaiolako",
|
||||||
"notifications.permission_required": "Mahaigaineko jakinarazpenak ez daude erabilgarri, horretarako behar den baimena ez delako eman.",
|
"notifications.permission_required": "Mahaigaineko jakinarazpenak ez daude erabilgarri, horretarako behar den baimena ez delako eman.",
|
||||||
|
"notifications.policy.accept": "Onartu",
|
||||||
|
"notifications.policy.accept_hint": "Erakutsi jakinarazpenetan",
|
||||||
|
"notifications.policy.drop": "Ezikusi",
|
||||||
|
"notifications.policy.drop_hint": "Hutsera bidali, ez erakutsi inoiz gehiago",
|
||||||
|
"notifications.policy.filter": "Iragazi",
|
||||||
|
"notifications.policy.filter_hint": "Bidali filtratutako jakinarazpenen sarrerako ontzira",
|
||||||
|
"notifications.policy.filter_limited_accounts_hint": "Zerbitzariaren moderatzaileek mugatuta",
|
||||||
|
"notifications.policy.filter_limited_accounts_title": "Moderatutako kontuak",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Azken {days, plural, one {egunean} other {# egunetan}} sortua",
|
"notifications.policy.filter_new_accounts.hint": "Azken {days, plural, one {egunean} other {# egunetan}} sortua",
|
||||||
"notifications.policy.filter_new_accounts_title": "Kontu berriak",
|
"notifications.policy.filter_new_accounts_title": "Kontu berriak",
|
||||||
"notifications.policy.filter_not_followers_hint": "{days, plural, one {Egun batez} other {# egunez}} baino gutxiago jarraitu zaituen jendea barne",
|
"notifications.policy.filter_not_followers_hint": "{days, plural, one {Egun batez} other {# egunez}} baino gutxiago jarraitu zaituen jendea barne",
|
||||||
@ -531,7 +558,7 @@
|
|||||||
"notifications.policy.filter_not_following_title": "Jarraitzen ez duzun jendea",
|
"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_hint": "Iragazita, baldin eta zure aipamenaren erantzuna bada edo bidaltzailea jarraitzen baduzu",
|
||||||
"notifications.policy.filter_private_mentions_title": "Eskatu gabeko aipamen pribatuak",
|
"notifications.policy.filter_private_mentions_title": "Eskatu gabeko aipamen pribatuak",
|
||||||
"notifications.policy.title": "Ez iragazi hemengo jakinarazpenak…",
|
"notifications.policy.title": "Kudeatu honen jakinarazpaenak…",
|
||||||
"notifications_permission_banner.enable": "Gaitu mahaigaineko 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.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",
|
"notifications_permission_banner.title": "Ez galdu ezer inoiz",
|
||||||
@ -658,6 +685,7 @@
|
|||||||
"report.unfollow_explanation": "Kontu hau jarraitzen ari zara. Zure denbora-lerro nagusian bere bidalketak ez ikusteko, jarraitzeari utzi.",
|
"report.unfollow_explanation": "Kontu hau jarraitzen ari zara. Zure denbora-lerro nagusian bere bidalketak ez ikusteko, jarraitzeari utzi.",
|
||||||
"report_notification.attached_statuses": "{count, plural, one {Bidalketa {count}} other {{count} bidalketa}} erantsita",
|
"report_notification.attached_statuses": "{count, plural, one {Bidalketa {count}} other {{count} bidalketa}} erantsita",
|
||||||
"report_notification.categories.legal": "Legala",
|
"report_notification.categories.legal": "Legala",
|
||||||
|
"report_notification.categories.legal_sentence": "eduki ilegala",
|
||||||
"report_notification.categories.other": "Bestelakoak",
|
"report_notification.categories.other": "Bestelakoak",
|
||||||
"report_notification.categories.other_sentence": "bestelakoak",
|
"report_notification.categories.other_sentence": "bestelakoak",
|
||||||
"report_notification.categories.spam": "Spam",
|
"report_notification.categories.spam": "Spam",
|
||||||
@ -693,6 +721,7 @@
|
|||||||
"server_banner.administered_by": "Administratzailea(k):",
|
"server_banner.administered_by": "Administratzailea(k):",
|
||||||
"server_banner.server_stats": "Zerbitzariaren estatistikak:",
|
"server_banner.server_stats": "Zerbitzariaren estatistikak:",
|
||||||
"sign_in_banner.create_account": "Sortu kontua",
|
"sign_in_banner.create_account": "Sortu kontua",
|
||||||
|
"sign_in_banner.mastodon_is": "Mastodon gertatzen ari denari buruz egunean egoteko modurik onena da.",
|
||||||
"sign_in_banner.sign_in": "Hasi saioa",
|
"sign_in_banner.sign_in": "Hasi saioa",
|
||||||
"sign_in_banner.sso_redirect": "Hasi saioa edo izena eman",
|
"sign_in_banner.sso_redirect": "Hasi saioa edo izena eman",
|
||||||
"status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
|
"status.admin_account": "Ireki @{name} erabiltzailearen moderazio interfazea",
|
||||||
@ -714,8 +743,6 @@
|
|||||||
"status.favourite": "Gogokoa",
|
"status.favourite": "Gogokoa",
|
||||||
"status.favourites": "{count, plural, one {gogoko} other {gogoko}}",
|
"status.favourites": "{count, plural, one {gogoko} other {gogoko}}",
|
||||||
"status.filter": "Iragazi bidalketa hau",
|
"status.filter": "Iragazi bidalketa hau",
|
||||||
"status.filtered": "Iragazita",
|
|
||||||
"status.hide": "Tuta ezkutatu",
|
|
||||||
"status.history.created": "{name} erabiltzaileak sortua {date}",
|
"status.history.created": "{name} erabiltzaileak sortua {date}",
|
||||||
"status.history.edited": "{name} erabiltzaileak editatua {date}",
|
"status.history.edited": "{name} erabiltzaileak editatua {date}",
|
||||||
"status.load_more": "Kargatu gehiago",
|
"status.load_more": "Kargatu gehiago",
|
||||||
@ -743,10 +770,7 @@
|
|||||||
"status.report": "Salatu @{name}",
|
"status.report": "Salatu @{name}",
|
||||||
"status.sensitive_warning": "Kontuz: Eduki hunkigarria",
|
"status.sensitive_warning": "Kontuz: Eduki hunkigarria",
|
||||||
"status.share": "Partekatu",
|
"status.share": "Partekatu",
|
||||||
"status.show_filter_reason": "Erakutsi hala ere",
|
|
||||||
"status.show_less": "Erakutsi gutxiago",
|
|
||||||
"status.show_less_all": "Erakutsi denetarik gutxiago",
|
"status.show_less_all": "Erakutsi denetarik gutxiago",
|
||||||
"status.show_more": "Erakutsi gehiago",
|
|
||||||
"status.show_more_all": "Erakutsi denetarik gehiago",
|
"status.show_more_all": "Erakutsi denetarik gehiago",
|
||||||
"status.show_original": "Erakutsi jatorrizkoa",
|
"status.show_original": "Erakutsi jatorrizkoa",
|
||||||
"status.title.with_attachments": "{user} erabiltzaileak {attachmentCount, plural, one {eranskin bat} other {{attachmentCount} eranskin}} argitaratu d(it)u",
|
"status.title.with_attachments": "{user} erabiltzaileak {attachmentCount, plural, one {eranskin bat} other {{attachmentCount} eranskin}} argitaratu d(it)u",
|
||||||
@ -765,10 +789,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko",
|
"time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko",
|
||||||
"time_remaining.moments": "Amaitzekotan",
|
"time_remaining.moments": "Amaitzekotan",
|
||||||
"time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko",
|
"time_remaining.seconds": "{number, plural, one {segundo #} other {# segundo}} amaitzeko",
|
||||||
"timeline_hint.remote_resource_not_displayed": "Beste zerbitzarietako {resource} ez da bistaratzen.",
|
|
||||||
"timeline_hint.resources.followers": "Jarraitzaileak",
|
|
||||||
"timeline_hint.resources.follows": "Jarraitzen",
|
|
||||||
"timeline_hint.resources.statuses": "Bidalketa zaharragoak",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {Pertsona {counter}} other {{counter} pertsona}} azken {days, plural, one {egunean} other {{days} egunetan}}",
|
"trends.counter_by_accounts": "{count, plural, one {Pertsona {counter}} other {{counter} pertsona}} azken {days, plural, one {egunean} other {{days} egunetan}}",
|
||||||
"trends.trending_now": "Joera orain",
|
"trends.trending_now": "Joera orain",
|
||||||
"ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
|
"ui.beforeunload": "Zure zirriborroa galduko da Mastodon uzten baduzu.",
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
"account.block_domain": "انسداد دامنهٔ {domain}",
|
"account.block_domain": "انسداد دامنهٔ {domain}",
|
||||||
"account.block_short": "انسداد",
|
"account.block_short": "انسداد",
|
||||||
"account.blocked": "مسدود",
|
"account.blocked": "مسدود",
|
||||||
"account.browse_more_on_origin_server": "مرور بیشتر روی نمایهٔ اصلی",
|
|
||||||
"account.cancel_follow_request": "رد کردن درخواست پیگیری",
|
"account.cancel_follow_request": "رد کردن درخواست پیگیری",
|
||||||
"account.copy": "رونوشت از پیوند به نمایه",
|
"account.copy": "رونوشت از پیوند به نمایه",
|
||||||
"account.direct": "اشارهٔ خصوصی به @{name}",
|
"account.direct": "اشارهٔ خصوصی به @{name}",
|
||||||
@ -435,7 +434,6 @@
|
|||||||
"notification.favourite": "{name} فرستهتان را برگزید",
|
"notification.favourite": "{name} فرستهتان را برگزید",
|
||||||
"notification.follow": "{name} پیگیرتان شد",
|
"notification.follow": "{name} پیگیرتان شد",
|
||||||
"notification.follow_request": "{name} درخواست پیگیریتان را داد",
|
"notification.follow_request": "{name} درخواست پیگیریتان را داد",
|
||||||
"notification.mention": "{name} به شما اشاره کرد",
|
|
||||||
"notification.moderation-warning.learn_more": "بیشتر بدانید",
|
"notification.moderation-warning.learn_more": "بیشتر بدانید",
|
||||||
"notification.own_poll": "نظرسنجیتان پایان یافت",
|
"notification.own_poll": "نظرسنجیتان پایان یافت",
|
||||||
"notification.reblog": "{name} فرستهتان را تقویت کرد",
|
"notification.reblog": "{name} فرستهتان را تقویت کرد",
|
||||||
@ -659,8 +657,6 @@
|
|||||||
"status.embed": "جاسازی",
|
"status.embed": "جاسازی",
|
||||||
"status.favourite": "برگزیده",
|
"status.favourite": "برگزیده",
|
||||||
"status.filter": "پالایش این فرسته",
|
"status.filter": "پالایش این فرسته",
|
||||||
"status.filtered": "پالوده",
|
|
||||||
"status.hide": "نهفتن فرسته",
|
|
||||||
"status.history.created": "توسط {name} در {date} ایجاد شد",
|
"status.history.created": "توسط {name} در {date} ایجاد شد",
|
||||||
"status.history.edited": "توسط {name} در {date} ویرایش شد",
|
"status.history.edited": "توسط {name} در {date} ویرایش شد",
|
||||||
"status.load_more": "بار کردن بیشتر",
|
"status.load_more": "بار کردن بیشتر",
|
||||||
@ -687,10 +683,7 @@
|
|||||||
"status.report": "گزارش @{name}",
|
"status.report": "گزارش @{name}",
|
||||||
"status.sensitive_warning": "محتوای حساس",
|
"status.sensitive_warning": "محتوای حساس",
|
||||||
"status.share": "همرسانی",
|
"status.share": "همرسانی",
|
||||||
"status.show_filter_reason": "به هر روی نشان داده شود",
|
|
||||||
"status.show_less": "نمایش کمتر",
|
|
||||||
"status.show_less_all": "نمایش کمتر همه",
|
"status.show_less_all": "نمایش کمتر همه",
|
||||||
"status.show_more": "نمایش بیشتر",
|
|
||||||
"status.show_more_all": "نمایش بیشتر همه",
|
"status.show_more_all": "نمایش بیشتر همه",
|
||||||
"status.show_original": "نمایش اصلی",
|
"status.show_original": "نمایش اصلی",
|
||||||
"status.title.with_attachments": "{user} {attachmentCount, plural, one {یک پیوست} other {{attachmentCount} پیوست}} فرستاد",
|
"status.title.with_attachments": "{user} {attachmentCount, plural, one {یک پیوست} other {{attachmentCount} پیوست}} فرستاد",
|
||||||
@ -709,10 +702,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}} باقی مانده",
|
"time_remaining.minutes": "{number, plural, one {# دقیقه} other {# دقیقه}} باقی مانده",
|
||||||
"time_remaining.moments": "زمان باقیمانده",
|
"time_remaining.moments": "زمان باقیمانده",
|
||||||
"time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده",
|
"time_remaining.seconds": "{number, plural, one {# ثانیه} other {# ثانیه}} باقی مانده",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} از دیگر کارسازها نمایش داده نمیشوند.",
|
|
||||||
"timeline_hint.resources.followers": "پیگیرندگان",
|
|
||||||
"timeline_hint.resources.follows": "پیگرفتگان",
|
|
||||||
"timeline_hint.resources.statuses": "فرستههای قدیمیتر",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} نفر} 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": "پرطرفدار",
|
"trends.trending_now": "پرطرفدار",
|
||||||
"ui.beforeunload": "اگر از ماستودون خارج شوید پیشنویس شما از دست خواهد رفت.",
|
"ui.beforeunload": "اگر از ماستودون خارج شوید پیشنویس شما از دست خواهد رفت.",
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Estä verkkotunnus {domain}",
|
"account.block_domain": "Estä verkkotunnus {domain}",
|
||||||
"account.block_short": "Estä",
|
"account.block_short": "Estä",
|
||||||
"account.blocked": "Estetty",
|
"account.blocked": "Estetty",
|
||||||
"account.browse_more_on_origin_server": "Selaa lisää alkuperäisessä profiilissa",
|
|
||||||
"account.cancel_follow_request": "Peruuta seurantapyyntö",
|
"account.cancel_follow_request": "Peruuta seurantapyyntö",
|
||||||
"account.copy": "Kopioi linkki profiiliin",
|
"account.copy": "Kopioi linkki profiiliin",
|
||||||
"account.direct": "Mainitse @{name} yksityisesti",
|
"account.direct": "Mainitse @{name} yksityisesti",
|
||||||
@ -98,6 +97,8 @@
|
|||||||
"block_modal.title": "Estetäänkö käyttäjä?",
|
"block_modal.title": "Estetäänkö käyttäjä?",
|
||||||
"block_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.",
|
"block_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.",
|
||||||
"boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
|
"boost_modal.combo": "Ensi kerralla voit ohittaa tämän painamalla {combo}",
|
||||||
|
"boost_modal.reblog": "Tehostetaanko julkaisua?",
|
||||||
|
"boost_modal.undo_reblog": "Perutaanko julkaisun tehostus?",
|
||||||
"bundle_column_error.copy_stacktrace": "Kopioi virheraportti",
|
"bundle_column_error.copy_stacktrace": "Kopioi virheraportti",
|
||||||
"bundle_column_error.error.body": "Pyydettyä sivua ei voitu hahmontaa. Se voi johtua virheestä koodissamme tai selaimen yhteensopivuudessa.",
|
"bundle_column_error.error.body": "Pyydettyä sivua ei voitu hahmontaa. Se voi johtua virheestä koodissamme tai selaimen yhteensopivuudessa.",
|
||||||
"bundle_column_error.error.title": "Voi ei!",
|
"bundle_column_error.error.title": "Voi ei!",
|
||||||
@ -193,6 +194,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Lopeta seuraaminen",
|
"confirmations.unfollow.confirm": "Lopeta seuraaminen",
|
||||||
"confirmations.unfollow.message": "Haluatko varmasti lopettaa profiilin {name} seuraamisen?",
|
"confirmations.unfollow.message": "Haluatko varmasti lopettaa profiilin {name} seuraamisen?",
|
||||||
"confirmations.unfollow.title": "Lopetetaanko käyttäjän seuraaminen?",
|
"confirmations.unfollow.title": "Lopetetaanko käyttäjän seuraaminen?",
|
||||||
|
"content_warning.hide": "Piilota julkaisu",
|
||||||
|
"content_warning.show": "Näytä kuitenkin",
|
||||||
"conversation.delete": "Poista keskustelu",
|
"conversation.delete": "Poista keskustelu",
|
||||||
"conversation.mark_as_read": "Merkitse luetuksi",
|
"conversation.mark_as_read": "Merkitse luetuksi",
|
||||||
"conversation.open": "Näytä keskustelu",
|
"conversation.open": "Näytä keskustelu",
|
||||||
@ -300,6 +303,7 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi",
|
"filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi",
|
||||||
"filter_modal.select_filter.title": "Suodata tämä julkaisu",
|
"filter_modal.select_filter.title": "Suodata tämä julkaisu",
|
||||||
"filter_modal.title.status": "Suodata julkaisu",
|
"filter_modal.title.status": "Suodata julkaisu",
|
||||||
|
"filter_warning.matches_filter": "Vastaa suodatinta ”{title}”",
|
||||||
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {Ei keneltäkään, jonka} one {1 käyttäjältä, jonka} other {# käyttäjältä, jotka}} saatat tuntea",
|
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {Ei keneltäkään, jonka} one {1 käyttäjältä, jonka} other {# käyttäjältä, jotka}} saatat tuntea",
|
||||||
"filtered_notifications_banner.title": "Suodatetut ilmoitukset",
|
"filtered_notifications_banner.title": "Suodatetut ilmoitukset",
|
||||||
"firehose.all": "Kaikki",
|
"firehose.all": "Kaikki",
|
||||||
@ -327,7 +331,7 @@
|
|||||||
"footer.about": "Tietoja",
|
"footer.about": "Tietoja",
|
||||||
"footer.directory": "Profiilihakemisto",
|
"footer.directory": "Profiilihakemisto",
|
||||||
"footer.get_app": "Hanki sovellus",
|
"footer.get_app": "Hanki sovellus",
|
||||||
"footer.invite": "Kutsu ihmisiä",
|
"footer.invite": "Kutsu käyttäjiä",
|
||||||
"footer.keyboard_shortcuts": "Pikanäppäimet",
|
"footer.keyboard_shortcuts": "Pikanäppäimet",
|
||||||
"footer.privacy_policy": "Tietosuojakäytäntö",
|
"footer.privacy_policy": "Tietosuojakäytäntö",
|
||||||
"footer.source_code": "Näytä lähdekoodi",
|
"footer.source_code": "Näytä lähdekoodi",
|
||||||
@ -349,6 +353,14 @@
|
|||||||
"hashtag.follow": "Seuraa aihetunnistetta",
|
"hashtag.follow": "Seuraa aihetunnistetta",
|
||||||
"hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen",
|
"hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen",
|
||||||
"hashtags.and_other": "…ja {count, plural, other {# lisää}}",
|
"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.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_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}",
|
||||||
"home.column_settings.show_reblogs": "Näytä tehostukset",
|
"home.column_settings.show_reblogs": "Näytä tehostukset",
|
||||||
"home.column_settings.show_replies": "Näytä vastaukset",
|
"home.column_settings.show_replies": "Näytä vastaukset",
|
||||||
"home.hide_announcements": "Piilota tiedotteet",
|
"home.hide_announcements": "Piilota tiedotteet",
|
||||||
@ -356,6 +368,17 @@
|
|||||||
"home.pending_critical_update.link": "Tutustu päivityssisältöihin",
|
"home.pending_critical_update.link": "Tutustu päivityssisältöihin",
|
||||||
"home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!",
|
"home.pending_critical_update.title": "Kriittinen tietoturvapäivitys saatavilla!",
|
||||||
"home.show_announcements": "Näytä tiedotteet",
|
"home.show_announcements": "Näytä tiedotteet",
|
||||||
|
"ignore_notifications_modal.disclaimer": "Mastodon ei voi ilmoittaa käyttäjille, että olet sivuuttanut heidän ilmoituksensa. Ilmoitusten sivuuttaminen ei lopeta itse viestien lähetystä.",
|
||||||
|
"ignore_notifications_modal.filter_instead": "Suodata sen sijaan",
|
||||||
|
"ignore_notifications_modal.filter_to_act_users": "Voit silti hyväksyä, hylätä tai raportoida käyttäjiä",
|
||||||
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Suodatus auttaa välttämään mahdollisia sekaannuksia",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "Voit käydä suodatettuja ilmoituksia läpi erikseen",
|
||||||
|
"ignore_notifications_modal.ignore": "Sivuuta ilmoitukset",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "Sivuutetaanko ilmoitukset moderoiduilta tileiltä?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "Sivuutetaanko ilmoitukset uusilta tileiltä?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "Sivuutetaanko ilmoitukset käyttäjiltä, jotka eivät seuraa sinua?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Sivuutetaanko ilmoitukset käyttäjiltä, joita et seuraa?",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "Sivuutetaanko ilmoitukset pyytämättömistä yksityismaininnoista?",
|
||||||
"interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä tämän julkaisun suosikkeihisi osoittaaksesi tekijälle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.",
|
"interaction_modal.description.favourite": "Mastodon-tilillä voit lisätä tämän julkaisun suosikkeihisi osoittaaksesi tekijälle arvostavasi sitä ja tallentaaksesi sen tulevaa käyttöä varten.",
|
||||||
"interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.",
|
"interaction_modal.description.follow": "Mastodon-tilillä voit seurata käyttäjää {name} saadaksesi hänen julkaisunsa kotisyötteeseesi.",
|
||||||
"interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.",
|
"interaction_modal.description.reblog": "Mastodon-tilillä voit tehostaa tätä julkaisua jakaaksesi sen seuraajiesi kanssa.",
|
||||||
@ -445,9 +468,8 @@
|
|||||||
"mute_modal.title": "Mykistetäänkö käyttäjä?",
|
"mute_modal.title": "Mykistetäänkö käyttäjä?",
|
||||||
"mute_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.",
|
"mute_modal.you_wont_see_mentions": "Et näe enää julkaisuja, joissa hänet mainitaan.",
|
||||||
"mute_modal.you_wont_see_posts": "Hän voi yhä nähdä julkaisusi, mutta sinä et näe hänen.",
|
"mute_modal.you_wont_see_posts": "Hän voi yhä nähdä julkaisusi, mutta sinä et näe hänen.",
|
||||||
"name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}}",
|
|
||||||
"name_and_others_with_link": "{name} ja <a>{count, plural, one {# muu} other {# muuta}}</a>",
|
|
||||||
"navigation_bar.about": "Tietoja",
|
"navigation_bar.about": "Tietoja",
|
||||||
|
"navigation_bar.administration": "Ylläpito",
|
||||||
"navigation_bar.advanced_interface": "Avaa edistyneessä selainkäyttöliittymässä",
|
"navigation_bar.advanced_interface": "Avaa edistyneessä selainkäyttöliittymässä",
|
||||||
"navigation_bar.blocks": "Estetyt käyttäjät",
|
"navigation_bar.blocks": "Estetyt käyttäjät",
|
||||||
"navigation_bar.bookmarks": "Kirjanmerkit",
|
"navigation_bar.bookmarks": "Kirjanmerkit",
|
||||||
@ -464,9 +486,10 @@
|
|||||||
"navigation_bar.follows_and_followers": "Seuratut ja seuraajat",
|
"navigation_bar.follows_and_followers": "Seuratut ja seuraajat",
|
||||||
"navigation_bar.lists": "Listat",
|
"navigation_bar.lists": "Listat",
|
||||||
"navigation_bar.logout": "Kirjaudu ulos",
|
"navigation_bar.logout": "Kirjaudu ulos",
|
||||||
|
"navigation_bar.moderation": "Moderointi",
|
||||||
"navigation_bar.mutes": "Mykistetyt käyttäjät",
|
"navigation_bar.mutes": "Mykistetyt käyttäjät",
|
||||||
"navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen selainkäyttöliittymään.",
|
"navigation_bar.opened_in_classic_interface": "Julkaisut, profiilit ja tietyt muut sivut avautuvat oletuksena perinteiseen selainkäyttöliittymään.",
|
||||||
"navigation_bar.personal": "Henkilökohtainen",
|
"navigation_bar.personal": "Henkilökohtaiset",
|
||||||
"navigation_bar.pins": "Kiinnitetyt julkaisut",
|
"navigation_bar.pins": "Kiinnitetyt julkaisut",
|
||||||
"navigation_bar.preferences": "Asetukset",
|
"navigation_bar.preferences": "Asetukset",
|
||||||
"navigation_bar.public_timeline": "Yleinen aikajana",
|
"navigation_bar.public_timeline": "Yleinen aikajana",
|
||||||
@ -479,10 +502,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} raportoi käyttäjän {target}, syynä {category}",
|
"notification.admin.report_statuses": "{name} raportoi käyttäjän {target}, syynä {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} raportoi käyttäjän {target}",
|
"notification.admin.report_statuses_other": "{name} raportoi käyttäjän {target}",
|
||||||
"notification.admin.sign_up": "{name} rekisteröityi",
|
"notification.admin.sign_up": "{name} rekisteröityi",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} rekisteröityivät",
|
||||||
"notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa",
|
"notification.favourite": "{name} lisäsi julkaisusi suosikkeihinsa",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} ja <a>{count, plural, one {# muu} other {# muuta}}</a> lisäsivät julkaisusi suosikkeihinsa",
|
||||||
"notification.follow": "{name} seurasi sinua",
|
"notification.follow": "{name} seurasi 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} on pyytänyt lupaa seurata sinua",
|
||||||
"notification.mention": "{name} mainitsi sinut",
|
"notification.follow_request.name_and_others": "{name} ja {count, plural, one {# muu} other {# muuta}} pyysivät saada seurata sinua",
|
||||||
|
"notification.label.mention": "Maininta",
|
||||||
|
"notification.label.private_mention": "Yksityismaininta",
|
||||||
|
"notification.label.private_reply": "Yksityinen vastaus",
|
||||||
|
"notification.label.reply": "Vastaus",
|
||||||
|
"notification.mention": "Maininta",
|
||||||
"notification.moderation-warning.learn_more": "Lue lisää",
|
"notification.moderation-warning.learn_more": "Lue lisää",
|
||||||
"notification.moderation_warning": "Olet saanut moderointivaroituksen",
|
"notification.moderation_warning": "Olet saanut moderointivaroituksen",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Julkaisujasi on poistettu.",
|
"notification.moderation_warning.action_delete_statuses": "Julkaisujasi on poistettu.",
|
||||||
@ -494,8 +525,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Tilisi on jäädytetty.",
|
"notification.moderation_warning.action_suspend": "Tilisi on jäädytetty.",
|
||||||
"notification.own_poll": "Äänestyksesi on päättynyt",
|
"notification.own_poll": "Äänestyksesi on päättynyt",
|
||||||
"notification.poll": "Äänestys, johon osallistuit, on päättynyt",
|
"notification.poll": "Äänestys, johon osallistuit, on päättynyt",
|
||||||
"notification.private_mention": "{name} mainitsi sinut yksityisesti",
|
|
||||||
"notification.reblog": "{name} tehosti julkaisuasi",
|
"notification.reblog": "{name} tehosti julkaisuasi",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} ja <a>{count, plural, one {# muu} other {# muuta}}</a> tehostivat julkaisuasi",
|
||||||
"notification.relationships_severance_event": "Menetettiin yhteydet palvelimeen {name}",
|
"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.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 {# seuratuistasi} other {# seuratuistasi}}.",
|
||||||
@ -504,11 +535,24 @@
|
|||||||
"notification.status": "{name} julkaisi juuri",
|
"notification.status": "{name} julkaisi juuri",
|
||||||
"notification.update": "{name} muokkasi julkaisua",
|
"notification.update": "{name} muokkasi julkaisua",
|
||||||
"notification_requests.accept": "Hyväksy",
|
"notification_requests.accept": "Hyväksy",
|
||||||
|
"notification_requests.accept_multiple": "{count, plural, one {Hyväksy # pyyntö…} other {Hyväksy # pyyntöä…}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Hyväksy pyyntö} other {Hyväksy pyynnöt}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "Olet aikeissa hyväksyä {count, plural, one {ilmoituspyynnön} other {# ilmoituspyyntöä}}. Haluatko varmasti jatkaa?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "Hyväksytäänkö ilmoituspyynnöt?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Hylkää pyyntö} other {Hylkää pyynnöt}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "Olet aikeissa hylätä {count, plural, one {ilmoituspyynnön} other {# ilmoituspyyntöä}}. Et saa {count, plural, one {sitä} other {niitä}} enää helposti takaisin. Haluatko varmasti jatkaa?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Hylätäänkö ilmoituspyynnöt?",
|
||||||
"notification_requests.dismiss": "Hylkää",
|
"notification_requests.dismiss": "Hylkää",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Hylkää # pyyntö…} other {Hylkää # pyyntöä…}}",
|
||||||
|
"notification_requests.edit_selection": "Muokkaa",
|
||||||
|
"notification_requests.exit_selection": "Valmis",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Tähän tiliin liittyvät ilmoitukset on suodatettu, koska moderaattori on rajoittanut tiliä.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Tähän tiliin liittyvät ilmoitukset on suodatettu, koska moderaattori on rajoittanut tiliä tai sen palvelinta.",
|
||||||
"notification_requests.maximize": "Suurenna",
|
"notification_requests.maximize": "Suurenna",
|
||||||
"notification_requests.minimize_banner": "Pienennä suodatettujen ilmoitusten palkki",
|
"notification_requests.minimize_banner": "Pienennä suodatettujen ilmoitusten palkki",
|
||||||
"notification_requests.notifications_from": "Ilmoitukset käyttäjältä {name}",
|
"notification_requests.notifications_from": "Ilmoitukset käyttäjältä {name}",
|
||||||
"notification_requests.title": "Suodatetut ilmoitukset",
|
"notification_requests.title": "Suodatetut ilmoitukset",
|
||||||
|
"notification_requests.view": "Näytä ilmoitukset",
|
||||||
"notifications.clear": "Tyhjennä ilmoitukset",
|
"notifications.clear": "Tyhjennä ilmoitukset",
|
||||||
"notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?",
|
"notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?",
|
||||||
"notifications.clear_title": "Tyhjennetäänkö ilmoitukset?",
|
"notifications.clear_title": "Tyhjennetäänkö ilmoitukset?",
|
||||||
@ -545,6 +589,12 @@
|
|||||||
"notifications.permission_denied": "Työpöytäilmoitukset eivät ole käytettävissä, koska selaimen käyttöoikeuspyyntö on aiemmin evätty",
|
"notifications.permission_denied": "Työpöytäilmoitukset eivät ole käytettävissä, koska selaimen käyttöoikeuspyyntö on aiemmin evätty",
|
||||||
"notifications.permission_denied_alert": "Työpöytäilmoituksia ei voi ottaa käyttöön, koska selaimen käyttöoikeus on aiemmin evätty",
|
"notifications.permission_denied_alert": "Työpöytäilmoituksia ei voi ottaa käyttöön, koska selaimen käyttöoikeus on aiemmin evätty",
|
||||||
"notifications.permission_required": "Työpöytäilmoitukset eivät ole käytettävissä, koska siihen tarvittavaa käyttöoikeutta ei ole myönnetty.",
|
"notifications.permission_required": "Työpöytäilmoitukset eivät ole käytettävissä, koska siihen tarvittavaa käyttöoikeutta ei ole myönnetty.",
|
||||||
|
"notifications.policy.accept": "Hyväksy",
|
||||||
|
"notifications.policy.accept_hint": "Näytä ilmoituksissa",
|
||||||
|
"notifications.policy.drop": "Sivuuta",
|
||||||
|
"notifications.policy.drop_hint": "Lähetä tyhjyyteen, jotta et näe niitä enää koskaan",
|
||||||
|
"notifications.policy.filter": "Suodata",
|
||||||
|
"notifications.policy.filter_hint": "Lähetä suodatettuihin ilmoituksiin",
|
||||||
"notifications.policy.filter_limited_accounts_hint": "Palvelimen moderaattorien rajoittamat",
|
"notifications.policy.filter_limited_accounts_hint": "Palvelimen moderaattorien rajoittamat",
|
||||||
"notifications.policy.filter_limited_accounts_title": "Moderoidut tilit",
|
"notifications.policy.filter_limited_accounts_title": "Moderoidut tilit",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Luotu {days, plural, one {viime päivän} other {viimeisen # päivän}} aikana",
|
"notifications.policy.filter_new_accounts.hint": "Luotu {days, plural, one {viime päivän} other {viimeisen # päivän}} aikana",
|
||||||
@ -554,8 +604,8 @@
|
|||||||
"notifications.policy.filter_not_following_hint": "Kunnes hyväksyt heidät manuaalisesti",
|
"notifications.policy.filter_not_following_hint": "Kunnes hyväksyt heidät manuaalisesti",
|
||||||
"notifications.policy.filter_not_following_title": "Käyttäjät, joita et seuraa",
|
"notifications.policy.filter_not_following_title": "Käyttäjät, joita et seuraa",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Suodatetaan, ellei se ole vastaus omaan mainintaasi tai ellet seuraa lähettäjää",
|
"notifications.policy.filter_private_mentions_hint": "Suodatetaan, ellei se ole vastaus omaan mainintaasi tai ellet seuraa lähettäjää",
|
||||||
"notifications.policy.filter_private_mentions_title": "Ei-toivotut yksityismaininnat",
|
"notifications.policy.filter_private_mentions_title": "Pyytämättömät yksityismaininnat",
|
||||||
"notifications.policy.title": "Suodata ilmoitukset pois kohteesta…",
|
"notifications.policy.title": "Hallitse ilmoituksia kohteesta…",
|
||||||
"notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön",
|
"notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön",
|
||||||
"notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon}-painikkeen kautta.",
|
"notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon}-painikkeen kautta.",
|
||||||
"notifications_permission_banner.title": "Älä anna minkään mennä ohi",
|
"notifications_permission_banner.title": "Älä anna minkään mennä ohi",
|
||||||
@ -742,8 +792,6 @@
|
|||||||
"status.favourite": "Suosikki",
|
"status.favourite": "Suosikki",
|
||||||
"status.favourites": "{count, plural, one {suosikki} other {suosikkia}}",
|
"status.favourites": "{count, plural, one {suosikki} other {suosikkia}}",
|
||||||
"status.filter": "Suodata tämä julkaisu",
|
"status.filter": "Suodata tämä julkaisu",
|
||||||
"status.filtered": "Suodatettu",
|
|
||||||
"status.hide": "Piilota julkaisu",
|
|
||||||
"status.history.created": "{name} loi {date}",
|
"status.history.created": "{name} loi {date}",
|
||||||
"status.history.edited": "{name} muokkasi {date}",
|
"status.history.edited": "{name} muokkasi {date}",
|
||||||
"status.load_more": "Lataa lisää",
|
"status.load_more": "Lataa lisää",
|
||||||
@ -771,10 +819,7 @@
|
|||||||
"status.report": "Raportoi @{name}",
|
"status.report": "Raportoi @{name}",
|
||||||
"status.sensitive_warning": "Arkaluonteista sisältöä",
|
"status.sensitive_warning": "Arkaluonteista sisältöä",
|
||||||
"status.share": "Jaa",
|
"status.share": "Jaa",
|
||||||
"status.show_filter_reason": "Näytä joka tapauksessa",
|
|
||||||
"status.show_less": "Näytä vähemmän",
|
|
||||||
"status.show_less_all": "Näytä kaikista vähemmän",
|
"status.show_less_all": "Näytä kaikista vähemmän",
|
||||||
"status.show_more": "Näytä enemmän",
|
|
||||||
"status.show_more_all": "Näytä kaikista enemmän",
|
"status.show_more_all": "Näytä kaikista enemmän",
|
||||||
"status.show_original": "Näytä alkuperäinen",
|
"status.show_original": "Näytä alkuperäinen",
|
||||||
"status.title.with_attachments": "{user} liitti {attachmentCount, plural, one {{attachmentCount} tiedoston} other {{attachmentCount} tiedostoa}}",
|
"status.title.with_attachments": "{user} liitti {attachmentCount, plural, one {{attachmentCount} tiedoston} other {{attachmentCount} tiedostoa}}",
|
||||||
@ -793,10 +838,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minuutti} other {# minuuttia}} jäljellä",
|
"time_remaining.minutes": "{number, plural, one {# minuutti} other {# minuuttia}} jäljellä",
|
||||||
"time_remaining.moments": "Hetkiä jäljellä",
|
"time_remaining.moments": "Hetkiä jäljellä",
|
||||||
"time_remaining.seconds": "{number, plural, one {# sekunti} other {# sekuntia}} jäljellä",
|
"time_remaining.seconds": "{number, plural, one {# sekunti} other {# sekuntia}} jäljellä",
|
||||||
"timeline_hint.remote_resource_not_displayed": "Muiden palvelinten {resource} eivät näy tässä.",
|
|
||||||
"timeline_hint.resources.followers": "seuraajat",
|
|
||||||
"timeline_hint.resources.follows": "seuratut",
|
|
||||||
"timeline_hint.resources.statuses": "vanhemmat julkaisut",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} käyttäjä} other {{counter} käyttäjää}} {days, plural, one {viime päivänä} other {viimeisenä {days} päivänä}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} käyttäjä} other {{counter} käyttäjää}} {days, plural, one {viime päivänä} other {viimeisenä {days} päivänä}}",
|
||||||
"trends.trending_now": "Suosittua nyt",
|
"trends.trending_now": "Suosittua nyt",
|
||||||
"ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
|
"ui.beforeunload": "Luonnos häviää, jos poistut Mastodonista.",
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
"account.block_domain": "Hadlangan ang domain na {domain}",
|
"account.block_domain": "Hadlangan ang domain na {domain}",
|
||||||
"account.block_short": "Hadlangan",
|
"account.block_short": "Hadlangan",
|
||||||
"account.blocked": "Hinadlangan",
|
"account.blocked": "Hinadlangan",
|
||||||
"account.browse_more_on_origin_server": "Tingnan pa sa pangunahing profile",
|
|
||||||
"account.cancel_follow_request": "I-kansela ang pagsunod",
|
"account.cancel_follow_request": "I-kansela ang pagsunod",
|
||||||
"account.copy": "I-sipi ang kawing sa profile",
|
"account.copy": "I-sipi ang kawing sa profile",
|
||||||
"account.direct": "Palihim banggitin si @{name}",
|
"account.direct": "Palihim banggitin si @{name}",
|
||||||
@ -239,7 +238,6 @@
|
|||||||
"notification.admin.report": "Iniulat ni {name} si {target}",
|
"notification.admin.report": "Iniulat ni {name} si {target}",
|
||||||
"notification.follow": "Sinundan ka ni {name}",
|
"notification.follow": "Sinundan ka ni {name}",
|
||||||
"notification.follow_request": "Hinihiling ni {name} na sundan ka",
|
"notification.follow_request": "Hinihiling ni {name} na sundan ka",
|
||||||
"notification.mention": "Binanggit ka ni {name}",
|
|
||||||
"notification.moderation_warning": "Mayroong kang natanggap na babala sa pagtitimpi",
|
"notification.moderation_warning": "Mayroong kang natanggap na babala sa pagtitimpi",
|
||||||
"notification.relationships_severance_event.learn_more": "Matuto nang higit pa",
|
"notification.relationships_severance_event.learn_more": "Matuto nang higit pa",
|
||||||
"notification_requests.accept": "Tanggapin",
|
"notification_requests.accept": "Tanggapin",
|
||||||
@ -330,9 +328,7 @@
|
|||||||
"status.report": "I-ulat si/ang @{name}",
|
"status.report": "I-ulat si/ang @{name}",
|
||||||
"status.sensitive_warning": "Sensitibong nilalaman",
|
"status.sensitive_warning": "Sensitibong nilalaman",
|
||||||
"status.share": "Ibahagi",
|
"status.share": "Ibahagi",
|
||||||
"status.show_less": "Magpakita ng mas kaunti",
|
|
||||||
"status.show_less_all": "Magpakita ng mas kaunti para sa lahat",
|
"status.show_less_all": "Magpakita ng mas kaunti para sa lahat",
|
||||||
"status.show_more": "Magpakita ng higit pa",
|
|
||||||
"status.show_more_all": "Magpakita ng higit pa para sa lahat",
|
"status.show_more_all": "Magpakita ng higit pa para sa lahat",
|
||||||
"status.translate": "Isalin",
|
"status.translate": "Isalin",
|
||||||
"status.translated_from_with": "Isalin mula sa {lang} gamit ang {provider}",
|
"status.translated_from_with": "Isalin mula sa {lang} gamit ang {provider}",
|
||||||
@ -341,8 +337,5 @@
|
|||||||
"time_remaining.days": "{number, plural, one {# araw} other {# na araw}} ang natitira",
|
"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.hours": "{number, plural, one {# oras} other {# na oras}} ang natitira",
|
||||||
"time_remaining.minutes": "{number, plural, one {# minuto} other {# na minuto}} 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"
|
||||||
"timeline_hint.remote_resource_not_displayed": "Hindi ipinapakita ang {resource} mula sa ibang mga serbiro.",
|
|
||||||
"timeline_hint.resources.followers": "Mga tagasunod",
|
|
||||||
"timeline_hint.resources.follows": "Mga sinusundan"
|
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
"account.block_domain": "Banna økisnavnið {domain}",
|
"account.block_domain": "Banna økisnavnið {domain}",
|
||||||
"account.block_short": "Blokera",
|
"account.block_short": "Blokera",
|
||||||
"account.blocked": "Bannað/ur",
|
"account.blocked": "Bannað/ur",
|
||||||
"account.browse_more_on_origin_server": "Kaga meira á upprunaligu vangamyndina",
|
|
||||||
"account.cancel_follow_request": "Strika fylgjaraumbøn",
|
"account.cancel_follow_request": "Strika fylgjaraumbøn",
|
||||||
"account.copy": "Avrita leinki til vangan",
|
"account.copy": "Avrita leinki til vangan",
|
||||||
"account.direct": "Umrøð @{name} privat",
|
"account.direct": "Umrøð @{name} privat",
|
||||||
@ -98,6 +97,8 @@
|
|||||||
"block_modal.title": "Banna brúkara?",
|
"block_modal.title": "Banna brúkara?",
|
||||||
"block_modal.you_wont_see_mentions": "Tú sært ikki postar, sum nevna tey.",
|
"block_modal.you_wont_see_mentions": "Tú sært ikki postar, sum nevna tey.",
|
||||||
"boost_modal.combo": "Tú kanst trýsta á {combo} fyri at loypa uppum hetta næstu ferð",
|
"boost_modal.combo": "Tú kanst trýsta á {combo} fyri at loypa uppum hetta næstu ferð",
|
||||||
|
"boost_modal.reblog": "Stimbra post?",
|
||||||
|
"boost_modal.undo_reblog": "Strika stimbran av posti?",
|
||||||
"bundle_column_error.copy_stacktrace": "Avrita feilfráboðan",
|
"bundle_column_error.copy_stacktrace": "Avrita feilfráboðan",
|
||||||
"bundle_column_error.error.body": "Umbidna síðan kann ikki vísast. Tað kann vera orsakað av einum feili í koduni hjá okkum ella tað kann vera orsakað av kaganum, sum tú brúkar.",
|
"bundle_column_error.error.body": "Umbidna síðan kann ikki vísast. Tað kann vera orsakað av einum feili í koduni hjá okkum ella tað kann vera orsakað av kaganum, sum tú brúkar.",
|
||||||
"bundle_column_error.error.title": "Áh, nei!",
|
"bundle_column_error.error.title": "Áh, nei!",
|
||||||
@ -193,6 +194,8 @@
|
|||||||
"confirmations.unfollow.confirm": "Fylg ikki",
|
"confirmations.unfollow.confirm": "Fylg ikki",
|
||||||
"confirmations.unfollow.message": "Ert tú vís/ur í, at tú vil steðga við at fylgja {name}?",
|
"confirmations.unfollow.message": "Ert tú vís/ur í, at tú vil steðga við at fylgja {name}?",
|
||||||
"confirmations.unfollow.title": "Gevst at fylgja brúkara?",
|
"confirmations.unfollow.title": "Gevst at fylgja brúkara?",
|
||||||
|
"content_warning.hide": "Fjal post",
|
||||||
|
"content_warning.show": "Vís kortini",
|
||||||
"conversation.delete": "Strika samrøðu",
|
"conversation.delete": "Strika samrøðu",
|
||||||
"conversation.mark_as_read": "Merk sum lisið",
|
"conversation.mark_as_read": "Merk sum lisið",
|
||||||
"conversation.open": "Vís samrøðu",
|
"conversation.open": "Vís samrøðu",
|
||||||
@ -300,8 +303,9 @@
|
|||||||
"filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan",
|
"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.select_filter.title": "Filtrera hendan postin",
|
||||||
"filter_modal.title.status": "Filtrera ein post",
|
"filter_modal.title.status": "Filtrera ein post",
|
||||||
|
"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.pending_requests": "Frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú kanska kennir",
|
||||||
"filtered_notifications_banner.title": "Sáldaðar fráboðanir",
|
"filtered_notifications_banner.title": "Filtreraðar fráboðanir",
|
||||||
"firehose.all": "Allar",
|
"firehose.all": "Allar",
|
||||||
"firehose.local": "Hesin ambætarin",
|
"firehose.local": "Hesin ambætarin",
|
||||||
"firehose.remote": "Aðrir ambætarar",
|
"firehose.remote": "Aðrir ambætarar",
|
||||||
@ -349,6 +353,14 @@
|
|||||||
"hashtag.follow": "Fylg frámerki",
|
"hashtag.follow": "Fylg frámerki",
|
||||||
"hashtag.unfollow": "Gevst at fylgja frámerki",
|
"hashtag.unfollow": "Gevst at fylgja frámerki",
|
||||||
"hashtags.and_other": "…og {count, plural, other {# afturat}}",
|
"hashtags.and_other": "…og {count, plural, other {# afturat}}",
|
||||||
|
"hints.profiles.followers_may_be_missing": "Fylgjarar hjá hesum vanganum kunnu mangla.",
|
||||||
|
"hints.profiles.follows_may_be_missing": "Listin við teimum, sum hesin vangin fylgir, kunnu mangla.",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Summir postar frá hesum vanganum kunnu mangla.",
|
||||||
|
"hints.profiles.see_more_followers": "Sí fleiri fylgjarar á {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "Sí fleiri, ið viðkomandi fylgir, á {domain}",
|
||||||
|
"hints.profiles.see_more_posts": "Sí fleiri postar á {domain}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Svar frá øðrum ambætarum mangla møguliga.",
|
||||||
|
"hints.threads.see_more": "Sí fleiri svar á {domain}",
|
||||||
"home.column_settings.show_reblogs": "Vís lyft",
|
"home.column_settings.show_reblogs": "Vís lyft",
|
||||||
"home.column_settings.show_replies": "Vís svar",
|
"home.column_settings.show_replies": "Vís svar",
|
||||||
"home.hide_announcements": "Fjal kunngerðir",
|
"home.hide_announcements": "Fjal kunngerðir",
|
||||||
@ -356,6 +368,17 @@
|
|||||||
"home.pending_critical_update.link": "Sí dagføringar",
|
"home.pending_critical_update.link": "Sí dagføringar",
|
||||||
"home.pending_critical_update.title": "Kritisk trygdardagføring er tøk!",
|
"home.pending_critical_update.title": "Kritisk trygdardagføring er tøk!",
|
||||||
"home.show_announcements": "Vís kunngerðir",
|
"home.show_announcements": "Vís kunngerðir",
|
||||||
|
"ignore_notifications_modal.disclaimer": "Mastodon kann ikki upplýsa brúkarar um, at tú hevur latið sum um, at tú ikki hevur sæð teirra fráboðanir. At lata sum um, at tú ikki sær fráboðanir, forðar ikki, at boðini sjálv verða send.",
|
||||||
|
"ignore_notifications_modal.filter_instead": "Filtrera ístaðin",
|
||||||
|
"ignore_notifications_modal.filter_to_act_users": "Tú kanst framvegis góðtaka, avvísa og melda brúkarar",
|
||||||
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrering ger tað lættari at sleppa undan møguligum misskiljingum",
|
||||||
|
"ignore_notifications_modal.filter_to_review_separately": "Tú kanst kanna filtreraðar fráboðanir fyri seg",
|
||||||
|
"ignore_notifications_modal.ignore": "Lat sum um tú ikki sær fráboðanir",
|
||||||
|
"ignore_notifications_modal.limited_accounts_title": "Lat sum um tú ikki sær fráboðanir frá avmarkaðum kontum?",
|
||||||
|
"ignore_notifications_modal.new_accounts_title": "Lat sum um tú ikki sær fráboðanir frá nýggjum kontum?",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "Lat sum um tú ikki sær fráboðanir frá fólki, sum ikki fylgja tær?",
|
||||||
|
"ignore_notifications_modal.not_following_title": "Lat sum um tú ikki sær fráboðanir frá fólki, sum tú ikki fylgir?",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "Lat sum um tú ikki sær fráboðanir frá óbiðnum privatum umrøðum?",
|
||||||
"interaction_modal.description.favourite": "Við einari kontu á Mastodon kanst tú dáma hendan postin fyri at vísa rithøvundanum at tú virðismetur hann og goymir hann til seinni.",
|
"interaction_modal.description.favourite": "Við einari kontu á Mastodon kanst tú dáma hendan postin fyri at vísa rithøvundanum at tú virðismetur hann og goymir hann til seinni.",
|
||||||
"interaction_modal.description.follow": "Við eini kontu á Mastodon kanst tú fylgja {name} fyri at síggja teirra postar á tíni heimarás.",
|
"interaction_modal.description.follow": "Við eini kontu á Mastodon kanst tú fylgja {name} fyri at síggja teirra postar á tíni heimarás.",
|
||||||
"interaction_modal.description.reblog": "Við eini kontu á Mastodon kanst tú stimbra hendan postin og soleiðis deila hann við tínar fylgjarar.",
|
"interaction_modal.description.reblog": "Við eini kontu á Mastodon kanst tú stimbra hendan postin og soleiðis deila hann við tínar fylgjarar.",
|
||||||
@ -445,9 +468,8 @@
|
|||||||
"mute_modal.title": "Sløkk brúkara?",
|
"mute_modal.title": "Sløkk brúkara?",
|
||||||
"mute_modal.you_wont_see_mentions": "Tú sært ikki postar, sum nevna tey.",
|
"mute_modal.you_wont_see_mentions": "Tú sært ikki postar, sum nevna tey.",
|
||||||
"mute_modal.you_wont_see_posts": "Tey síggja framvegis tínar postar, men tú sært ikki teirra.",
|
"mute_modal.you_wont_see_posts": "Tey síggja framvegis tínar postar, men tú sært ikki teirra.",
|
||||||
"name_and_others": "{name} og {count, plural, one {# annar} other {# onnur}}",
|
|
||||||
"name_and_others_with_link": "{name} og <a>{count, plural, one {# annar} other {# onnur}}</a>",
|
|
||||||
"navigation_bar.about": "Um",
|
"navigation_bar.about": "Um",
|
||||||
|
"navigation_bar.administration": "Umsiting",
|
||||||
"navigation_bar.advanced_interface": "Lat upp í framkomnum vevmarkamóti",
|
"navigation_bar.advanced_interface": "Lat upp í framkomnum vevmarkamóti",
|
||||||
"navigation_bar.blocks": "Bannaðir brúkarar",
|
"navigation_bar.blocks": "Bannaðir brúkarar",
|
||||||
"navigation_bar.bookmarks": "Goymd",
|
"navigation_bar.bookmarks": "Goymd",
|
||||||
@ -464,6 +486,7 @@
|
|||||||
"navigation_bar.follows_and_followers": "Fylgd og fylgjarar",
|
"navigation_bar.follows_and_followers": "Fylgd og fylgjarar",
|
||||||
"navigation_bar.lists": "Listar",
|
"navigation_bar.lists": "Listar",
|
||||||
"navigation_bar.logout": "Rita út",
|
"navigation_bar.logout": "Rita út",
|
||||||
|
"navigation_bar.moderation": "Umsjón",
|
||||||
"navigation_bar.mutes": "Doyvdir brúkarar",
|
"navigation_bar.mutes": "Doyvdir brúkarar",
|
||||||
"navigation_bar.opened_in_classic_interface": "Postar, kontur og aðrar serstakar síður verða - um ikki annað er ásett - latnar upp í klassiska vev-markamótinum.",
|
"navigation_bar.opened_in_classic_interface": "Postar, kontur og aðrar serstakar síður verða - um ikki annað er ásett - latnar upp í klassiska vev-markamótinum.",
|
||||||
"navigation_bar.personal": "Persónligt",
|
"navigation_bar.personal": "Persónligt",
|
||||||
@ -479,10 +502,18 @@
|
|||||||
"notification.admin.report_statuses": "{name} meldaði {target} fyri {category}",
|
"notification.admin.report_statuses": "{name} meldaði {target} fyri {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} meldaði {target}",
|
"notification.admin.report_statuses_other": "{name} meldaði {target}",
|
||||||
"notification.admin.sign_up": "{name} meldaði seg til",
|
"notification.admin.sign_up": "{name} meldaði seg til",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# annar/onnur} other {# onnur}} teknaðu seg",
|
||||||
"notification.favourite": "{name} dámdi postin hjá tær",
|
"notification.favourite": "{name} dámdi postin hjá tær",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} og <a>{count, plural, one {# annar/onnur} other {# onnur}}</a> yndisfrámerktu postin hjá tær",
|
||||||
"notification.follow": "{name} fylgdi 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_request": "{name} biður um at fylgja tær",
|
"notification.follow_request": "{name} biður um at fylgja tær",
|
||||||
"notification.mention": "{name} nevndi teg",
|
"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",
|
||||||
|
"notification.label.private_mention": "Privat umrøða",
|
||||||
|
"notification.label.private_reply": "Privat svar",
|
||||||
|
"notification.label.reply": "Svara",
|
||||||
|
"notification.mention": "Umrøð",
|
||||||
"notification.moderation-warning.learn_more": "Lær meira",
|
"notification.moderation-warning.learn_more": "Lær meira",
|
||||||
"notification.moderation_warning": "Tú hevur móttikið eina umsjónarávaring",
|
"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.",
|
"notification.moderation_warning.action_delete_statuses": "Onkrir av tínum postum eru strikaðir.",
|
||||||
@ -494,8 +525,8 @@
|
|||||||
"notification.moderation_warning.action_suspend": "Konta tín er ógildað.",
|
"notification.moderation_warning.action_suspend": "Konta tín er ógildað.",
|
||||||
"notification.own_poll": "Tín atkvøðugreiðsla er endað",
|
"notification.own_poll": "Tín atkvøðugreiðsla er endað",
|
||||||
"notification.poll": "Ein atkvøðugreiðsla, har tú atkvøddi, er endað",
|
"notification.poll": "Ein atkvøðugreiðsla, har tú atkvøddi, er endað",
|
||||||
"notification.private_mention": "{name} nevndi teg í privatum boðum",
|
|
||||||
"notification.reblog": "{name} lyfti tín post",
|
"notification.reblog": "{name} lyfti tín post",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} og <a>{count, plural, one {# annar/onnur} other {# onnur}}</a> framhevjaðu tín post",
|
||||||
"notification.relationships_severance_event": "Mist sambond við {name}",
|
"notification.relationships_severance_event": "Mist sambond við {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Ein umsitari frá {from} hevur gjørt {target} óvirkna, sum merkir, at tú ikki kanst móttaka dagføringar ella virka saman við teimum longur.",
|
"notification.relationships_severance_event.account_suspension": "Ein umsitari frá {from} hevur gjørt {target} óvirkna, sum merkir, at tú ikki kanst móttaka dagføringar ella virka saman við teimum longur.",
|
||||||
"notification.relationships_severance_event.domain_block": "Ein umsitari frá {from} hevur blokerað {target}, íroknað {followersCount} av tínum fylgjarum og {followingCount, plural, one {# kontu} other {# kontur}}, sum tú fylgir.",
|
"notification.relationships_severance_event.domain_block": "Ein umsitari frá {from} hevur blokerað {target}, íroknað {followersCount} av tínum fylgjarum og {followingCount, plural, one {# kontu} other {# kontur}}, sum tú fylgir.",
|
||||||
@ -504,10 +535,24 @@
|
|||||||
"notification.status": "{name} hevur júst postað",
|
"notification.status": "{name} hevur júst postað",
|
||||||
"notification.update": "{name} rættaði ein post",
|
"notification.update": "{name} rættaði ein post",
|
||||||
"notification_requests.accept": "Góðtak",
|
"notification_requests.accept": "Góðtak",
|
||||||
|
"notification_requests.accept_multiple": "{count, plural, one {Góðtak # umbøn…} other {Góðtak # umbønir…}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Góðtak umbøn} other {Góðtak umbønir}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "Tú er í ferð við at góðtaka {count, plural, one {eina fráboðanarumbøn} other {# fráboðanarumbønir}}. Er tú vís/ur í, at tú vil halda fram?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "Góðtak fráboðanarumbønir?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Avvís umbøn} other {Avvís umbønir}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "Tú er í ferð við at avvísa {count, plural, one {eina fráboðanarumbøn} other {# fráboðanarumbønir}}. Tað verður ikki lætt hjá tær at fáa fatur á {count, plural, one {henni} other {teimum}} aftur. Er tú vís/ur í at tú vil halda fram?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Avvís fráboðanarumbønir?",
|
||||||
"notification_requests.dismiss": "Avvís",
|
"notification_requests.dismiss": "Avvís",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Avvís # umbøn…} other {Avvís # umbønir…}}",
|
||||||
|
"notification_requests.edit_selection": "Rætta",
|
||||||
|
"notification_requests.exit_selection": "Liðugt",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Fráboðanir frá hesi kontuni eru filtreraðar burtur, tí kontan er avmarkað av einum umsjónarfólki.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Fráboðanir frá hesi kontuni eru filtreraðar burtur, tí kontan ella ambætarin hjá kontuni eru avmarkaði av einum umsjónarfólki.",
|
||||||
"notification_requests.maximize": "Mesta",
|
"notification_requests.maximize": "Mesta",
|
||||||
|
"notification_requests.minimize_banner": "Ger merkið við filtreraðum fráboðanum lítið",
|
||||||
"notification_requests.notifications_from": "Fráboðanir frá {name}",
|
"notification_requests.notifications_from": "Fráboðanir frá {name}",
|
||||||
"notification_requests.title": "Sáldaðar fráboðanir",
|
"notification_requests.title": "Filtreraðar fráboðanir",
|
||||||
|
"notification_requests.view": "Vís fráboðanir",
|
||||||
"notifications.clear": "Rudda fráboðanir",
|
"notifications.clear": "Rudda fráboðanir",
|
||||||
"notifications.clear_confirmation": "Ert tú vís/ur í, at tú vilt strika allar tínar fráboðanir?",
|
"notifications.clear_confirmation": "Ert tú vís/ur í, at tú vilt strika allar tínar fráboðanir?",
|
||||||
"notifications.clear_title": "Rudda fráboðanir?",
|
"notifications.clear_title": "Rudda fráboðanir?",
|
||||||
@ -544,15 +589,23 @@
|
|||||||
"notifications.permission_denied": "Skriviborðsfráboðanir eru ikki tøkar tí at ein kaga-umbøn áður bleiv noktað",
|
"notifications.permission_denied": "Skriviborðsfráboðanir eru ikki tøkar tí at ein kaga-umbøn áður bleiv noktað",
|
||||||
"notifications.permission_denied_alert": "Tað ber ikki til at sláa skriviborðsfráboðanir til, tí at kagarættindi áður eru noktaði",
|
"notifications.permission_denied_alert": "Tað ber ikki til at sláa skriviborðsfráboðanir til, tí at kagarættindi áður eru noktaði",
|
||||||
"notifications.permission_required": "Skriviborðsfráboðanir eru ikki tøkar, tí at neyðugu rættindini eru ikki latin.",
|
"notifications.permission_required": "Skriviborðsfráboðanir eru ikki tøkar, tí at neyðugu rættindini eru ikki latin.",
|
||||||
|
"notifications.policy.accept": "Góðtak",
|
||||||
|
"notifications.policy.accept_hint": "Vís í fráboðanum",
|
||||||
|
"notifications.policy.drop": "Lat sum um tú ikki sær",
|
||||||
|
"notifications.policy.drop_hint": "Send út í tóman heim, soleiðis at tað aldrin sæst aftur",
|
||||||
|
"notifications.policy.filter": "Filtrera",
|
||||||
|
"notifications.policy.filter_hint": "Send til filtreraðan fráboðanar-innbakka",
|
||||||
|
"notifications.policy.filter_limited_accounts_hint": "Avmarkað av umsjónarfólkunum á ambætaranum",
|
||||||
|
"notifications.policy.filter_limited_accounts_title": "Avmarkaðar kontur",
|
||||||
"notifications.policy.filter_new_accounts.hint": "Stovnaðar {days, plural, one {seinasta dagin} other {seinastu # dagarnar}}",
|
"notifications.policy.filter_new_accounts.hint": "Stovnaðar {days, plural, one {seinasta dagin} other {seinastu # dagarnar}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Nýggjar kontur",
|
"notifications.policy.filter_new_accounts_title": "Nýggjar kontur",
|
||||||
"notifications.policy.filter_not_followers_hint": "Íroknað fólk, sum hava fylgt tær styttri enn {days, plural, one {ein dag} other {# dagar}}",
|
"notifications.policy.filter_not_followers_hint": "Íroknað fólk, sum hava fylgt tær styttri enn {days, plural, one {ein dag} other {# dagar}}",
|
||||||
"notifications.policy.filter_not_followers_title": "Fólk, sum ikki fylgja tær",
|
"notifications.policy.filter_not_followers_title": "Fólk, sum ikki fylgja tær",
|
||||||
"notifications.policy.filter_not_following_hint": "Til tú góðkennir tey manuelt",
|
"notifications.policy.filter_not_following_hint": "Til tú góðkennir tey manuelt",
|
||||||
"notifications.policy.filter_not_following_title": "Fólk, sum tú ikki fylgir",
|
"notifications.policy.filter_not_following_title": "Fólk, sum tú ikki fylgir",
|
||||||
"notifications.policy.filter_private_mentions_hint": "Sáldaði, uttan so at tað er í svari til tínar egnu nevningar ella um tú fylgir sendaranum",
|
"notifications.policy.filter_private_mentions_hint": "Filtreraði, uttan so at tað er í svari til tínar egnu nevningar ella um tú fylgir sendaranum",
|
||||||
"notifications.policy.filter_private_mentions_title": "Óbidnar privatar umrøður",
|
"notifications.policy.filter_private_mentions_title": "Óbidnar privatar umrøður",
|
||||||
"notifications.policy.title": "Sálda burtur fráboðanir frá…",
|
"notifications.policy.title": "Stýr fráboðanir frá…",
|
||||||
"notifications_permission_banner.enable": "Ger skriviborðsfráboðanir virknar",
|
"notifications_permission_banner.enable": "Ger skriviborðsfráboðanir virknar",
|
||||||
"notifications_permission_banner.how_to_control": "Ger skriviborðsfráboðanir virknar fyri at móttaka fráboðanir, tá Mastodon ikki er opið. Tá tær eru gjørdar virknar, kanst tú stýra, hvørji sløg av samvirkni geva skriviborðsfráboðanir. Hetta umvegis {icon} knøttin omanfyri.",
|
"notifications_permission_banner.how_to_control": "Ger skriviborðsfráboðanir virknar fyri at móttaka fráboðanir, tá Mastodon ikki er opið. Tá tær eru gjørdar virknar, kanst tú stýra, hvørji sløg av samvirkni geva skriviborðsfráboðanir. Hetta umvegis {icon} knøttin omanfyri.",
|
||||||
"notifications_permission_banner.title": "Miss einki",
|
"notifications_permission_banner.title": "Miss einki",
|
||||||
@ -739,8 +792,6 @@
|
|||||||
"status.favourite": "Dámdur postur",
|
"status.favourite": "Dámdur postur",
|
||||||
"status.favourites": "{count, plural, one {yndispostur} other {yndispostar}}",
|
"status.favourites": "{count, plural, one {yndispostur} other {yndispostar}}",
|
||||||
"status.filter": "Filtrera hendan postin",
|
"status.filter": "Filtrera hendan postin",
|
||||||
"status.filtered": "Filtrerað",
|
|
||||||
"status.hide": "Fjal post",
|
|
||||||
"status.history.created": "{name} stovnað {date}",
|
"status.history.created": "{name} stovnað {date}",
|
||||||
"status.history.edited": "{name} rættað {date}",
|
"status.history.edited": "{name} rættað {date}",
|
||||||
"status.load_more": "Tak meira niður",
|
"status.load_more": "Tak meira niður",
|
||||||
@ -768,10 +819,7 @@
|
|||||||
"status.report": "Melda @{name}",
|
"status.report": "Melda @{name}",
|
||||||
"status.sensitive_warning": "Viðkvæmt tilfar",
|
"status.sensitive_warning": "Viðkvæmt tilfar",
|
||||||
"status.share": "Deil",
|
"status.share": "Deil",
|
||||||
"status.show_filter_reason": "Vís kortini",
|
|
||||||
"status.show_less": "Vís minni",
|
|
||||||
"status.show_less_all": "Vís øllum minni",
|
"status.show_less_all": "Vís øllum minni",
|
||||||
"status.show_more": "Vís meira",
|
|
||||||
"status.show_more_all": "Vís øllum meira",
|
"status.show_more_all": "Vís øllum meira",
|
||||||
"status.show_original": "Vís upprunaliga",
|
"status.show_original": "Vís upprunaliga",
|
||||||
"status.title.with_attachments": "{user} postaði {attachmentCount, plural, one {eitt viðhefti} other {{attachmentCount} viðhefti}}",
|
"status.title.with_attachments": "{user} postaði {attachmentCount, plural, one {eitt viðhefti} other {{attachmentCount} viðhefti}}",
|
||||||
@ -790,10 +838,6 @@
|
|||||||
"time_remaining.minutes": "{number, plural, one {# minuttur} other {# minuttir}} eftir",
|
"time_remaining.minutes": "{number, plural, one {# minuttur} other {# minuttir}} eftir",
|
||||||
"time_remaining.moments": "Lítið bil eftir",
|
"time_remaining.moments": "Lítið bil eftir",
|
||||||
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekund}} eftir",
|
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekund}} eftir",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} frá øðrum ambætarum verður ikki víst.",
|
|
||||||
"timeline_hint.resources.followers": "Fylgjarar",
|
|
||||||
"timeline_hint.resources.follows": "Fylgir",
|
|
||||||
"timeline_hint.resources.statuses": "Gamlir postar",
|
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persónur} other {{counter} persónar}} {days, plural, one {seinasta dagin} other {{days} seinastu dagarnar}}",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} persónur} other {{counter} persónar}} {days, plural, one {seinasta dagin} other {{days} seinastu dagarnar}}",
|
||||||
"trends.trending_now": "Rák beint nú",
|
"trends.trending_now": "Rák beint nú",
|
||||||
"ui.beforeunload": "Kladdan verður mist, um tú fer úr Mastodon.",
|
"ui.beforeunload": "Kladdan verður mist, um tú fer úr Mastodon.",
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user