mirror of
https://github.com/mastodon/mastodon.git
synced 2025-07-18 02:08:16 +00:00
Compare commits
92 Commits
57de04ea46
...
b0b858d2da
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b0b858d2da | ||
![]() |
74fc4dbacf | ||
![]() |
07912a1cb7 | ||
![]() |
d36bf3b6fb | ||
![]() |
594976a538 | ||
![]() |
0efb889a9c | ||
![]() |
c0eabe289b | ||
![]() |
5bbc3c5ebb | ||
![]() |
d5e2cf5d3c | ||
![]() |
82a6ff091f | ||
![]() |
4b8e60682d | ||
![]() |
6c2db9b1cf | ||
![]() |
30344d6abf | ||
![]() |
1637297085 | ||
![]() |
dec1fb71f4 | ||
![]() |
7273f6c03c | ||
![]() |
a3ffd2edf8 | ||
![]() |
a2c5eace88 | ||
![]() |
a643d9d498 | ||
![]() |
3b52dca405 | ||
![]() |
853a0c466e | ||
![]() |
94bceb8683 | ||
![]() |
88b0f3a172 | ||
![]() |
b69b5ba775 | ||
![]() |
c442589593 | ||
![]() |
28633a504a | ||
![]() |
ad78701b6f | ||
![]() |
1496488771 | ||
![]() |
dd3d958e75 | ||
![]() |
b363a3651d | ||
![]() |
86645fc14c | ||
![]() |
f9beecb343 | ||
![]() |
4ecfbd3920 | ||
![]() |
a315934314 | ||
![]() |
e9170e2de1 | ||
![]() |
5cfc1fabcf | ||
![]() |
786b12e379 | ||
![]() |
e7c5c25de8 | ||
![]() |
a1e8813522 | ||
![]() |
76c1446416 | ||
![]() |
8bd2c87399 | ||
![]() |
1e2d77f2c7 | ||
![]() |
fb6c22f5c2 | ||
![]() |
f7259f625f | ||
![]() |
b628a98d32 | ||
![]() |
d8fa807998 | ||
![]() |
ef66d8379c | ||
![]() |
8ee6cee36e | ||
![]() |
71b2120e5c | ||
![]() |
b10078633c | ||
![]() |
b5eebd4d2b | ||
![]() |
fdefc4d2b4 | ||
![]() |
f6b2609353 | ||
![]() |
bdffdcb12f | ||
![]() |
1ebb87a6a8 | ||
![]() |
83660ee381 | ||
![]() |
1fa72d6c44 | ||
![]() |
5a7c0d42f7 | ||
![]() |
e8d2432e6a | ||
![]() |
2af17adc34 | ||
![]() |
e97f43399b | ||
![]() |
c66c5fd73d | ||
![]() |
3c0767f543 | ||
![]() |
70cd1fdc63 | ||
![]() |
39028dde40 | ||
![]() |
6e39b5ef04 | ||
![]() |
49db8a9662 | ||
![]() |
2cfa6cb0e0 | ||
![]() |
1ae3510ede | ||
![]() |
6f1135d763 | ||
![]() |
52bc2f64f4 | ||
![]() |
b1375328e1 | ||
![]() |
9443e2cc4b | ||
![]() |
3a533c6c8d | ||
![]() |
c047014214 | ||
![]() |
68b05e994f | ||
![]() |
a203a05eb1 | ||
![]() |
68090cd8be | ||
![]() |
dd064aaa36 | ||
![]() |
e6e8974785 | ||
![]() |
498af63b85 | ||
![]() |
c357a7f8d6 | ||
![]() |
bae258925c | ||
![]() |
e8a603b18f | ||
![]() |
f00c8e3245 | ||
![]() |
153af19f55 | ||
![]() |
964916c71b | ||
![]() |
8782e860b6 | ||
![]() |
641c0c6393 | ||
![]() |
0383100b0e | ||
![]() |
87db28cebc | ||
![]() |
ac4b735c67 |
1
.github/.well-known/funding-manifest-urls
vendored
Normal file
1
.github/.well-known/funding-manifest-urls
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
https://joinmastodon.org/funding.json
|
1
.github/workflows/crowdin-upload.yml
vendored
1
.github/workflows/crowdin-upload.yml
vendored
|
@ -14,6 +14,7 @@ on:
|
||||||
- config/locales/devise.en.yml
|
- config/locales/devise.en.yml
|
||||||
- config/locales/doorkeeper.en.yml
|
- config/locales/doorkeeper.en.yml
|
||||||
- .github/workflows/crowdin-upload.yml
|
- .github/workflows/crowdin-upload.yml
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
upload-translations:
|
upload-translations:
|
||||||
|
|
41
CHANGELOG.md
41
CHANGELOG.md
|
@ -2,7 +2,17 @@
|
||||||
|
|
||||||
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.4.0] - UNRELEASED
|
## [4.4.1] - 2025-07-09
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix nearly every sub-directory being crawled as part of Vite build (#35323 by @ClearlyClaire)
|
||||||
|
- Fix assets not building when Redis is unavailable (#35321 by @oneiros)
|
||||||
|
- Fix replying from media modal or pop-in-player tagging user `@undefined` (#35317 by @ClearlyClaire)
|
||||||
|
- Fix support for special characters in various environment variables (#35314 by @mjankowski and @ClearlyClaire)
|
||||||
|
- Fix some database migrations failing for indexes manually removed by admins (#35309 by @mjankowski)
|
||||||
|
|
||||||
|
## [4.4.0] - 2025-07-08
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
@ -23,7 +33,7 @@ All notable changes to this project will be documented in this file.
|
||||||
Support for verifying remote quotes according to [FEP-044f](https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md) and displaying them in the Web UI has been implemented.\
|
Support for verifying remote quotes according to [FEP-044f](https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md) and displaying them in the Web UI has been implemented.\
|
||||||
Quoting other people is not implemented yet, and it is currently not possible to mark your own posts as allowing quotes. However, a new “Who can quote” setting has been added to the “Posting defaults” section of the user settings. This setting allows you to set a default that will be used for new posts made on Mastodon 4.5 and newer, when quote posts will be fully implemented.\
|
Quoting other people is not implemented yet, and it is currently not possible to mark your own posts as allowing quotes. However, a new “Who can quote” setting has been added to the “Posting defaults” section of the user settings. This setting allows you to set a default that will be used for new posts made on Mastodon 4.5 and newer, when quote posts will be fully implemented.\
|
||||||
In the REST API, quote posts are represented by a new `quote` attribute on `Status` and `StatusEdit` entities: https://docs.joinmastodon.org/entities/StatusEdit/#quote https://docs.joinmastodon.org/entities/Status/#quote
|
In the REST API, quote posts are represented by a new `quote` attribute on `Status` and `StatusEdit` entities: https://docs.joinmastodon.org/entities/StatusEdit/#quote https://docs.joinmastodon.org/entities/Status/#quote
|
||||||
- Add ability to reorder and translate server rules (#34637, #34737, #34494, #34756, #34820 and #34997 by @ChaosExAnima and @ClearlyClaire)\
|
- Add ability to reorder and translate server rules (#34637, #34737, #34494, #34756, #34820, #34997, #35170, #35174 and #35174 by @ChaosExAnima and @ClearlyClaire)\
|
||||||
Rules are now shown in the user’s language, if a translation has been set.\
|
Rules are now shown in the user’s language, if a translation has been set.\
|
||||||
In the REST API, `Rule` entities now have a new `translations` attribute: https://docs.joinmastodon.org/entities/Rule/#translations
|
In the REST API, `Rule` entities now have a new `translations` attribute: https://docs.joinmastodon.org/entities/Rule/#translations
|
||||||
- Add emoji from Twemoji 15.1.0, including in the emoji picker/completion (#33395, #34321, #34620, and #34677 by @ChaosExAnima, @ClearlyClaire, @TheEssem, and @eramdam)
|
- Add emoji from Twemoji 15.1.0, including in the emoji picker/completion (#33395, #34321, #34620, and #34677 by @ChaosExAnima, @ClearlyClaire, @TheEssem, and @eramdam)
|
||||||
|
@ -38,8 +48,11 @@ All notable changes to this project will be documented in this file.
|
||||||
Server administrators can now chose to opt in to transmit referrer information when following an external link. Only the domain name is transmitted, not the referrer path.
|
Server administrators can now chose to opt in to transmit referrer information when following an external link. Only the domain name is transmitted, not the referrer path.
|
||||||
- Add double tap to zoom and swipe to dismiss to media modal in web UI (#34210 by @Gargron)
|
- Add double tap to zoom and swipe to dismiss to media modal in web UI (#34210 by @Gargron)
|
||||||
- Add link from Web UI for Hashtags to the Moderation UI (#31448 by @ThisIsMissEm)
|
- Add link from Web UI for Hashtags to the Moderation UI (#31448 by @ThisIsMissEm)
|
||||||
- **Add terms of service** (#33055, #33233, #33230, #33703, #33699, #33994, #33993, #34105, #34122, #34200, #34527 and #35053 by @ClearlyClaire, @Gargron, @mjankowski, and @oneiros)\
|
- **Add terms of service** (#33055, #33233, #33230, #33703, #33699, #33994, #33993, #34105, #34122, #34200, #34527, #35053, #35115, #35126, #35127 and #35233 by @ClearlyClaire, @Gargron, @mjankowski, and @oneiros)\
|
||||||
Server administrators can now fill in Terms of Service, optionally using a provided template.
|
Server administrators can now fill in Terms of Service and notify their users of upcoming changes.
|
||||||
|
- Add optional bulk mailer settings (#35191 and #35203 by @oneiros)\
|
||||||
|
This adds the optional environment variables `BULK_SMTP_PORT`, `BULK_SMTP_SERVER`, `BULK_SMTP_LOGIN` and so on analogous to `SMTP_PORT`, `SMTP_SERVER`, `SMTP_LOGIN` and related SMTP configuration environment variables.\
|
||||||
|
When `BULK_SMTP_SERVER` is set, this group of variables is used instead of the regular ones for sending announcement notification emails and Terms of Service notification emails.
|
||||||
- **Add age verification on sign-up** (#34150, #34663, and #34636 by @ClearlyClaire and @Gargron)\
|
- **Add age verification on sign-up** (#34150, #34663, and #34636 by @ClearlyClaire and @Gargron)\
|
||||||
Server administrators now have a setting to set a minimum age requirement for creating a new server, asking users for their date of birth. The date of birth is checked against the minimum age requirement server-side but not stored.\
|
Server administrators now have a setting to set a minimum age requirement for creating a new server, asking users for their date of birth. The date of birth is checked against the minimum age requirement server-side but not stored.\
|
||||||
The following REST API changes have been made to accommodate this:
|
The following REST API changes have been made to accommodate this:
|
||||||
|
@ -48,10 +61,12 @@ All notable changes to this project will be documented in this file.
|
||||||
- Add ability to dismiss alt text badge by tapping it in web UI (#33737 by @Gargron)
|
- Add ability to dismiss alt text badge by tapping it in web UI (#33737 by @Gargron)
|
||||||
- Add loading indicator to timeline gap indicators in web UI (#33762 by @Gargron)
|
- Add loading indicator to timeline gap indicators in web UI (#33762 by @Gargron)
|
||||||
- Add interaction modal when trying to interact with a poll while logged out (#32609 by @ThisIsMissEm)
|
- Add interaction modal when trying to interact with a poll while logged out (#32609 by @ThisIsMissEm)
|
||||||
- **Add experimental FASP support** (#34031, #34415, #34765, #34965, and #34964 by @oneiros)\
|
- **Add experimental FASP support** (#34031, #34415, #34765, #34965, #34964, #34033, #35218, #35262 and #35263 by @oneiros)\
|
||||||
This is a first step towards supporting “Fediverse Auxiliary Service Providers” (https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications). This is mostly interesting to developers who would like to implement their own FASP, but also includes the capability to share data with a discovery provider (see https://www.fediscovery.org).
|
This is a first step towards supporting “Fediverse Auxiliary Service Providers” (https://github.com/mastodon/fediverse_auxiliary_service_provider_specifications). This is mostly interesting to developers who would like to implement their own FASP, but also includes the capability to share data with a discovery provider (see https://www.fediscovery.org).
|
||||||
- Add ability for admins to send announcements to all users via email (#33928 and #34411 by @ClearlyClaire)\
|
- Add ability for admins to send announcements to all users via email (#33928 and #34411 by @ClearlyClaire)\
|
||||||
This is meant for critical announcements only, as this will potentially send a lot of emails and cannot be opted out of by users.
|
This is meant for critical announcements only, as this will potentially send a lot of emails and cannot be opted out of by users.
|
||||||
|
- Add Server Moderation Notes (#31529 by @ThisIsMissEm)
|
||||||
|
- Add loading spinner to “Post” button when sending a post (#35153 by @diondiondion)
|
||||||
- Add option to use system scrollbar styling (#32117 by @vmstan)
|
- Add option to use system scrollbar styling (#32117 by @vmstan)
|
||||||
- Add hover cards to follow suggestions (#33749 by @ClearlyClaire)
|
- Add hover cards to follow suggestions (#33749 by @ClearlyClaire)
|
||||||
- Add `t` hotkey for post translations (#33441 by @ClearlyClaire)
|
- Add `t` hotkey for post translations (#33441 by @ClearlyClaire)
|
||||||
|
@ -59,7 +74,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Add dropdown menu with quick actions to lists of accounts in web UI (#34391, #34709, and #34767 by @Gargron, @diondiondion, and @mkljczk)
|
- Add dropdown menu with quick actions to lists of accounts in web UI (#34391, #34709, and #34767 by @Gargron, @diondiondion, and @mkljczk)
|
||||||
- Add support for displaying “year in review” notification in web UI (#32710, #32765, #32709, #32807, #32914, #33148, and #33882 by @Gargron and @mjankowski)\
|
- Add support for displaying “year in review” notification in web UI (#32710, #32765, #32709, #32807, #32914, #33148, and #33882 by @Gargron and @mjankowski)\
|
||||||
Note that the notification is currently not generated automatically, and at the moment requires a manual undocumented administrator action.
|
Note that the notification is currently not generated automatically, and at the moment requires a manual undocumented administrator action.
|
||||||
- Add experimental support for receiving HTTP Message Signatures (RFC9421) (#34814 and #35033 by @oneiros)\
|
- Add experimental support for receiving HTTP Message Signatures (RFC9421) (#34814, #35033, #35109 and #35278 by @oneiros)\
|
||||||
For now, this needs to be explicitly enabled through the `http_message_signatures` feature flag (`EXPERIMENTAL_FEATURES=http_message_signatures`). This currently only covers verifying such signatures (inbound HTTP requests), not issuing them (outbound HTTP requests).
|
For now, this needs to be explicitly enabled through the `http_message_signatures` feature flag (`EXPERIMENTAL_FEATURES=http_message_signatures`). This currently only covers verifying such signatures (inbound HTTP requests), not issuing them (outbound HTTP requests).
|
||||||
- Add experimental Async Refreshes API (#34918 by @oneiros)
|
- Add experimental Async Refreshes API (#34918 by @oneiros)
|
||||||
- Add experimental server-side feature to fetch remote replies (#32615, #34147, #34149, #34151, #34615, #34682, and #34702 by @ClearlyClaire and @sneakers-the-rat)\
|
- Add experimental server-side feature to fetch remote replies (#32615, #34147, #34149, #34151, #34615, #34682, and #34702 by @ClearlyClaire and @sneakers-the-rat)\
|
||||||
|
@ -112,7 +127,7 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Change design of navigation panel in Web UI, change layout on narrow screens (#34910, #34987, #35017, #34986, #35029, #35065, #35067 and #35072 by @ClearlyClaire, @Gargron, and @diondiondion)
|
- Change design of navigation panel in Web UI, change layout on narrow screens (#34910, #34987, #35017, #34986, #35029, #35065, #35067, #35072, #35074, #35075, #35101, #35173, #35183, #35193 and #35225 by @ClearlyClaire, @Gargron, and @diondiondion)
|
||||||
- Change design of lists in web UI (#32881, #33054, and #33036 by @Gargron)
|
- Change design of lists in web UI (#32881, #33054, and #33036 by @Gargron)
|
||||||
- Change design of edit media modal in web UI (#33516, #33702, #33725, #33725, #33771, and #34345 by @Gargron)
|
- Change design of edit media modal in web UI (#33516, #33702, #33725, #33725, #33771, and #34345 by @Gargron)
|
||||||
- Change design of audio player in web UI (#34520, #34740, #34865, #34929, #34933, and #35034 by @ClearlyClaire, @Gargron, and @diondiondion)
|
- Change design of audio player in web UI (#34520, #34740, #34865, #34929, #34933, and #35034 by @ClearlyClaire, @Gargron, and @diondiondion)
|
||||||
|
@ -126,15 +141,17 @@ All notable changes to this project will be documented in this file.
|
||||||
Moderators will still be able to access them while they are kept, but they won't be accessible to the public in the meantime.
|
Moderators will still be able to access them while they are kept, but they won't be accessible to the public in the meantime.
|
||||||
- Change language names in compose box language picker to be localized (#33402 by @c960657)
|
- Change language names in compose box language picker to be localized (#33402 by @c960657)
|
||||||
- Change onboarding flow in web UI (#32998, #33119, #33471 and #34962 by @ClearlyClaire and @Gargron)
|
- Change onboarding flow in web UI (#32998, #33119, #33471 and #34962 by @ClearlyClaire and @Gargron)
|
||||||
|
- Change Advanced Web UI to use the new main menu instead of the “Getting started” column (#35117 by @diondiondion)
|
||||||
- Change emoji categories in admin interface to be ordered by name (#33630 by @ShadowJonathan)
|
- Change emoji categories in admin interface to be ordered by name (#33630 by @ShadowJonathan)
|
||||||
- Change design of rich text elements in web UI (#32633 by @Gargron)
|
- Change design of rich text elements in web UI (#32633 by @Gargron)
|
||||||
- Change wording of “single choice” to “pick one” in poll authoring form (#32397 by @ThisIsMissEm)
|
- Change wording of “single choice” to “pick one” in poll authoring form (#32397 by @ThisIsMissEm)
|
||||||
- Change returned favorite and boost counts to use those provided by the remote server, if available (#32620, #34594, #34618, and #34619 by @ClearlyClaire and @sneakers-the-rat)
|
- Change returned favorite and boost counts to use those provided by the remote server, if available (#32620, #34594, #34618, and #34619 by @ClearlyClaire and @sneakers-the-rat)
|
||||||
- Change label of favourite notifications on private mentions (#31659 by @ClearlyClaire)
|
- Change label of favourite notifications on private mentions (#31659 by @ClearlyClaire)
|
||||||
|
- Change wording of "discard draft?" confirmation dialogs (#35192 by @diondiondion)
|
||||||
- Change `libvips` to be enabled by default in place of ImageMagick (#34741 and #34753 by @ClearlyClaire and @diondiondion)
|
- Change `libvips` to be enabled by default in place of ImageMagick (#34741 and #34753 by @ClearlyClaire and @diondiondion)
|
||||||
- Change avatar and header size limits from 2MB to 8MB when using libvips (#33002 by @Gargron)
|
- Change avatar and header size limits from 2MB to 8MB when using libvips (#33002 by @Gargron)
|
||||||
- Change search to use query params in web UI (#32949 and #33670 by @ClearlyClaire and @Gargron)
|
- Change search to use query params in web UI (#32949 and #33670 by @ClearlyClaire and @Gargron)
|
||||||
- Change build system from Webpack to Vite (#34454, #34450, #34758, #34768, #34813, #34808, #34837, #34732, #35007 and #35035 by @ChaosExAnima, @ClearlyClaire, @mjankowski, and @renchap)
|
- Change build system from Webpack to Vite (#34454, #34450, #34758, #34768, #34813, #34808, #34837, #34732, #35007, #35035 and #35177 by @ChaosExAnima, @ClearlyClaire, @mjankowski, and @renchap)
|
||||||
- Change account creation API to forbid creation from user tokens (#34828 by @ThisIsMissEm)
|
- Change account creation API to forbid creation from user tokens (#34828 by @ThisIsMissEm)
|
||||||
- Change `/api/v2/instance` to be enabled without authentication when limited federation mode is enabled (#34576 by @ClearlyClaire)
|
- Change `/api/v2/instance` to be enabled without authentication when limited federation mode is enabled (#34576 by @ClearlyClaire)
|
||||||
- Change `DEFAULT_LOCALE` to not override unauthenticated users’ browser language (#34535 by @ClearlyClaire)\
|
- Change `DEFAULT_LOCALE` to not override unauthenticated users’ browser language (#34535 by @ClearlyClaire)\
|
||||||
|
@ -202,17 +219,23 @@ All notable changes to this project will be documented in this file.
|
||||||
- Fix not being able to scroll dropdown on touch devices in web UI (#34873 by @Gargron)
|
- Fix not being able to scroll dropdown on touch devices in web UI (#34873 by @Gargron)
|
||||||
- Fix inconsistent filtering of silenced accounts for other silenced accounts (#34863 by @ClearlyClaire)
|
- Fix inconsistent filtering of silenced accounts for other silenced accounts (#34863 by @ClearlyClaire)
|
||||||
- Fix update checker listing updates older or equal to current running version (#33906 by @ClearlyClaire)
|
- Fix update checker listing updates older or equal to current running version (#33906 by @ClearlyClaire)
|
||||||
|
- Fix clicking a status multiple times causing duplicate entries in browser history (#35118 by @ClearlyClaire)
|
||||||
|
- Fix “Alt text” button submitting form in moderation interface (#35147 by @ClearlyClaire)
|
||||||
|
- Fix Firefox sometimes not updating spellcheck language in textarea (#35148 by @ClearlyClaire)
|
||||||
- Fix `NoMethodError` in edge case of emoji cache handling (#34749 by @dariusk)
|
- Fix `NoMethodError` in edge case of emoji cache handling (#34749 by @dariusk)
|
||||||
- Fix handling of inlined `featured` collections in ActivityPub actor objects (#34789 and #34811 by @ClearlyClaire)
|
- Fix handling of inlined `featured` collections in ActivityPub actor objects (#34789 and #34811 by @ClearlyClaire)
|
||||||
- Fix long link names in admin sidebar being truncated (#34727 by @diondiondion)
|
- Fix long link names in admin sidebar being truncated (#34727 by @diondiondion)
|
||||||
- Fix admin dashboard crash on specific Elasticsearch connection errors (#34683 by @ClearlyClaire)
|
- Fix admin dashboard crash on specific Elasticsearch connection errors (#34683 by @ClearlyClaire)
|
||||||
- Fix OIDC account creation failing for long display names (#34639 by @defnull)
|
- Fix OIDC account creation failing for long display names (#34639 by @defnull)
|
||||||
- Fix use of the deprecated `/api/v1/instance` endpoint in the moderation interface (#34613 by @renchap)
|
- Fix use of the deprecated `/api/v1/instance` endpoint in the moderation interface (#34613 by @renchap)
|
||||||
|
- Fix inaccessible “Clear search” button (#35152 and #35281 by @diondiondion)
|
||||||
|
- Fix search operators sometimes getting lost (#35190 by @ClearlyClaire)
|
||||||
- Fix directory scroll position reset (#34560 by @przucidlo)
|
- Fix directory scroll position reset (#34560 by @przucidlo)
|
||||||
- Fix needlessly complex SVG paths for oEmbed and logo (#34538 by @edent)
|
- Fix needlessly complex SVG paths for oEmbed and logo (#34538 by @edent)
|
||||||
- Fix avatar sizing with long account name in some UI elements (#34514 by @gomasy)
|
- Fix avatar sizing with long account name in some UI elements (#34514 by @gomasy)
|
||||||
- Fix empty menu section in status dropdown (#34431 by @ClearlyClaire)
|
- Fix empty menu section in status dropdown (#34431 by @ClearlyClaire)
|
||||||
- Fix the delete suggestion button not working (#34396 and #34398 by @ClearlyClaire and @renchap)
|
- Fix the delete suggestion button not working (#34396 and #34398 by @ClearlyClaire and @renchap)
|
||||||
|
- Fix popover/dialog backgrounds not being blurred on older Webkit browsers (#35220 by @diondiondion)
|
||||||
- Fix radio buttons not always being correctly centered (#34389 by @ChaosExAnima)
|
- Fix radio buttons not always being correctly centered (#34389 by @ChaosExAnima)
|
||||||
- Fix visual glitches with adding post filters (#34387 by @ChaosExAnima)
|
- Fix visual glitches with adding post filters (#34387 by @ChaosExAnima)
|
||||||
- Fix bugs with upload progress (#34325 by @ChaosExAnima)
|
- Fix bugs with upload progress (#34325 by @ChaosExAnima)
|
||||||
|
@ -220,7 +243,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Fix extra space under left-indented vertical videos (#34313 by @ClearlyClaire)
|
- Fix extra space under left-indented vertical videos (#34313 by @ClearlyClaire)
|
||||||
- Fix glitchy iOS media attachment drag interactions (#35057 by @diondiondion)
|
- Fix glitchy iOS media attachment drag interactions (#35057 by @diondiondion)
|
||||||
- Fix zoomed images being blurry in Safari (#35052 by @diondiondion)
|
- Fix zoomed images being blurry in Safari (#35052 by @diondiondion)
|
||||||
- Fix redundant focus stop within status component in Web UI (#35037 and #35051 by @diondiondion)
|
- Fix redundant focus stop within status component in Web UI and make focus style more noticeable (#35037, #35051, #35096, #35150 and #35251 by @diondiondion)
|
||||||
- Fix digits in media player time readout not having a consistent width (#35038 by @diondiondion)
|
- Fix digits in media player time readout not having a consistent width (#35038 by @diondiondion)
|
||||||
- Fix wrong text color for “Open in advanced web interface” banner in high-contrast theme (#35032 by @diondiondion)
|
- Fix wrong text color for “Open in advanced web interface” banner in high-contrast theme (#35032 by @diondiondion)
|
||||||
- Fix hover card for limited accounts not hiding information as expected (#35024 by @diondiondion)
|
- Fix hover card for limited accounts not hiding information as expected (#35024 by @diondiondion)
|
||||||
|
|
|
@ -186,7 +186,7 @@ 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.17.0
|
ARG VIPS_VERSION=8.17.1
|
||||||
# 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
|
||||||
|
|
||||||
|
|
2
Gemfile
2
Gemfile
|
@ -62,7 +62,7 @@ gem 'inline_svg'
|
||||||
gem 'irb', '~> 1.8'
|
gem 'irb', '~> 1.8'
|
||||||
gem 'kaminari', '~> 1.2'
|
gem 'kaminari', '~> 1.2'
|
||||||
gem 'link_header', '~> 0.0'
|
gem 'link_header', '~> 0.0'
|
||||||
gem 'linzer', '~> 0.7.2'
|
gem 'linzer', '~> 0.7.7'
|
||||||
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
|
||||||
gem 'mime-types', '~> 3.7.0', require: 'mime/types/columnar'
|
gem 'mime-types', '~> 3.7.0', require: 'mime/types/columnar'
|
||||||
gem 'mutex_m'
|
gem 'mutex_m'
|
||||||
|
|
20
Gemfile.lock
20
Gemfile.lock
|
@ -90,7 +90,7 @@ GEM
|
||||||
public_suffix (>= 2.0.2, < 7.0)
|
public_suffix (>= 2.0.2, < 7.0)
|
||||||
aes_key_wrap (1.1.0)
|
aes_key_wrap (1.1.0)
|
||||||
android_key_attestation (0.3.0)
|
android_key_attestation (0.3.0)
|
||||||
annotaterb (4.16.0)
|
annotaterb (4.17.0)
|
||||||
activerecord (>= 6.0.0)
|
activerecord (>= 6.0.0)
|
||||||
activesupport (>= 6.0.0)
|
activesupport (>= 6.0.0)
|
||||||
ast (2.4.3)
|
ast (2.4.3)
|
||||||
|
@ -231,7 +231,7 @@ GEM
|
||||||
excon (1.2.5)
|
excon (1.2.5)
|
||||||
logger
|
logger
|
||||||
fabrication (3.0.0)
|
fabrication (3.0.0)
|
||||||
faker (3.5.1)
|
faker (3.5.2)
|
||||||
i18n (>= 1.8.11, < 2)
|
i18n (>= 1.8.11, < 2)
|
||||||
faraday (2.13.1)
|
faraday (2.13.1)
|
||||||
faraday-net_http (>= 2.0, < 3.5)
|
faraday-net_http (>= 2.0, < 3.5)
|
||||||
|
@ -287,7 +287,7 @@ GEM
|
||||||
activesupport (>= 5.1)
|
activesupport (>= 5.1)
|
||||||
haml (>= 4.0.6)
|
haml (>= 4.0.6)
|
||||||
railties (>= 5.1)
|
railties (>= 5.1)
|
||||||
haml_lint (0.63.0)
|
haml_lint (0.64.0)
|
||||||
haml (>= 5.0)
|
haml (>= 5.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
rainbow
|
rainbow
|
||||||
|
@ -365,7 +365,7 @@ GEM
|
||||||
json-ld-preloaded (3.3.1)
|
json-ld-preloaded (3.3.1)
|
||||||
json-ld (~> 3.3)
|
json-ld (~> 3.3)
|
||||||
rdf (~> 3.3)
|
rdf (~> 3.3)
|
||||||
json-schema (5.1.1)
|
json-schema (5.2.1)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
bigdecimal (~> 3.1)
|
bigdecimal (~> 3.1)
|
||||||
jsonapi-renderer (0.2.2)
|
jsonapi-renderer (0.2.2)
|
||||||
|
@ -403,7 +403,7 @@ GEM
|
||||||
rexml
|
rexml
|
||||||
link_header (0.0.8)
|
link_header (0.0.8)
|
||||||
lint_roller (1.1.0)
|
lint_roller (1.1.0)
|
||||||
linzer (0.7.3)
|
linzer (0.7.7)
|
||||||
cgi (~> 0.4.2)
|
cgi (~> 0.4.2)
|
||||||
forwardable (~> 1.3, >= 1.3.3)
|
forwardable (~> 1.3, >= 1.3.3)
|
||||||
logger (~> 1.7, >= 1.7.0)
|
logger (~> 1.7, >= 1.7.0)
|
||||||
|
@ -553,7 +553,7 @@ GEM
|
||||||
opentelemetry-instrumentation-faraday (0.27.0)
|
opentelemetry-instrumentation-faraday (0.27.0)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.23.0)
|
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||||
opentelemetry-instrumentation-http (0.25.0)
|
opentelemetry-instrumentation-http (0.25.1)
|
||||||
opentelemetry-api (~> 1.0)
|
opentelemetry-api (~> 1.0)
|
||||||
opentelemetry-instrumentation-base (~> 0.23.0)
|
opentelemetry-instrumentation-base (~> 0.23.0)
|
||||||
opentelemetry-instrumentation-http_client (0.23.0)
|
opentelemetry-instrumentation-http_client (0.23.0)
|
||||||
|
@ -682,7 +682,7 @@ GEM
|
||||||
activesupport (= 8.0.2)
|
activesupport (= 8.0.2)
|
||||||
bundler (>= 1.15.0)
|
bundler (>= 1.15.0)
|
||||||
railties (= 8.0.2)
|
railties (= 8.0.2)
|
||||||
rails-dom-testing (2.2.0)
|
rails-dom-testing (2.3.0)
|
||||||
activesupport (>= 5.0.0)
|
activesupport (>= 5.0.0)
|
||||||
minitest
|
minitest
|
||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
|
@ -761,7 +761,7 @@ GEM
|
||||||
rspec-mocks (~> 3.0)
|
rspec-mocks (~> 3.0)
|
||||||
sidekiq (>= 5, < 9)
|
sidekiq (>= 5, < 9)
|
||||||
rspec-support (3.13.4)
|
rspec-support (3.13.4)
|
||||||
rubocop (1.77.0)
|
rubocop (1.78.0)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (~> 3.17.0.2)
|
language_server-protocol (~> 3.17.0.2)
|
||||||
lint_roller (~> 1.1.0)
|
lint_roller (~> 1.1.0)
|
||||||
|
@ -815,7 +815,7 @@ GEM
|
||||||
sanitize (7.0.0)
|
sanitize (7.0.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.16.8)
|
nokogiri (>= 1.16.8)
|
||||||
scenic (1.8.0)
|
scenic (1.9.0)
|
||||||
activerecord (>= 4.0.0)
|
activerecord (>= 4.0.0)
|
||||||
railties (>= 4.0.0)
|
railties (>= 4.0.0)
|
||||||
securerandom (0.4.1)
|
securerandom (0.4.1)
|
||||||
|
@ -1008,7 +1008,7 @@ DEPENDENCIES
|
||||||
letter_opener (~> 1.8)
|
letter_opener (~> 1.8)
|
||||||
letter_opener_web (~> 3.0)
|
letter_opener_web (~> 3.0)
|
||||||
link_header (~> 0.0)
|
link_header (~> 0.0)
|
||||||
linzer (~> 0.7.2)
|
linzer (~> 0.7.7)
|
||||||
lograge (~> 0.12)
|
lograge (~> 0.12)
|
||||||
mail (~> 2.8)
|
mail (~> 2.8)
|
||||||
mario-redis-lock (~> 1.2)
|
mario-redis-lock (~> 1.2)
|
||||||
|
|
64
README.md
64
README.md
|
@ -17,71 +17,71 @@
|
||||||
<img src="https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg" alt="Crowdin" /></a>
|
<img src="https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg" alt="Crowdin" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
Mastodon is a **free, open-source social network server** based on ActivityPub where users can follow friends and discover new ones. On Mastodon, users can publish anything they want: links, pictures, text, and video. All Mastodon servers are interoperable as a federated network (users on one server can seamlessly communicate with users from another one, including non-Mastodon software that implements ActivityPub!)
|
Mastodon is a **free, open-source social network server** based on [ActivityPub](https://www.w3.org/TR/activitypub/) where users can follow friends and discover new ones. On Mastodon, users can publish anything they want: links, pictures, text, and video. All Mastodon servers are interoperable as a federated network (users on one server can seamlessly communicate with users from another one, including non-Mastodon software that implements ActivityPub!)
|
||||||
|
|
||||||
## Navigation
|
## Navigation
|
||||||
|
|
||||||
- [Project homepage 🐘](https://joinmastodon.org)
|
- [Project homepage 🐘](https://joinmastodon.org)
|
||||||
- [Support the development via Patreon][patreon]
|
- [Donate to support development 🎁](https://joinmastodon.org/sponsors#donate)
|
||||||
- [View sponsors](https://joinmastodon.org/sponsors)
|
- [View sponsors](https://joinmastodon.org/sponsors)
|
||||||
- [Blog](https://blog.joinmastodon.org)
|
- [Blog 📰](https://blog.joinmastodon.org)
|
||||||
- [Documentation](https://docs.joinmastodon.org)
|
- [Documentation 📚](https://docs.joinmastodon.org)
|
||||||
- [Roadmap](https://joinmastodon.org/roadmap)
|
- [Official container image 🚢](https://github.com/mastodon/mastodon/pkgs/container/mastodon)
|
||||||
- [Official Docker image](https://github.com/mastodon/mastodon/pkgs/container/mastodon)
|
|
||||||
- [Browse Mastodon servers](https://joinmastodon.org/communities)
|
|
||||||
- [Browse Mastodon apps](https://joinmastodon.org/apps)
|
|
||||||
|
|
||||||
[patreon]: https://www.patreon.com/mastodon
|
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
<img src="/app/javascript/images/elephant_ui_working.svg?raw=true" align="right" width="30%" />
|
<img src="./app/javascript/images/elephant_ui_working.svg?raw=true" align="right" width="30%" />
|
||||||
|
|
||||||
**No vendor lock-in: Fully interoperable with any conforming platform** - It doesn't have to be Mastodon; whatever implements ActivityPub is part of the social network! [Learn more](https://blog.joinmastodon.org/2018/06/why-activitypub-is-the-future/)
|
**Part of the Fediverse. Based on open standards, with no vendor lock-in.** - the network goes beyond just Mastodon; anything that implements ActivityPub is part of a broader social network known as [the Fediverse](https://jointhefediverse.net/). You can follow and interact with users on other servers (including those running different software), and they can follow you back.
|
||||||
|
|
||||||
**Real-time, chronological timeline updates** - updates of people you're following appear in real-time in the UI via WebSockets. There's a firehose view as well!
|
**Real-time, chronological timeline updates** - updates of people you're following appear in real-time in the UI.
|
||||||
|
|
||||||
**Media attachments like images and short videos** - upload and view images and WebM/MP4 videos attached to the updates. Videos with no audio track are treated like GIFs; normal videos loop continuously!
|
**Media attachments** - upload and view images and videos attached to the updates. Videos with no audio track are treated like animated GIFs; normal videos loop continuously.
|
||||||
|
|
||||||
**Safety and moderation tools** - Mastodon includes private posts, locked accounts, phrase filtering, muting, blocking, and all sorts of other features, along with a reporting and moderation system. [Learn more](https://blog.joinmastodon.org/2018/07/cage-the-mastodon/)
|
**Safety and moderation tools** - Mastodon includes private posts, locked accounts, phrase filtering, muting, blocking, and many other features, along with a reporting and moderation system.
|
||||||
|
|
||||||
**OAuth2 and a straightforward REST API** - Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Streaming APIs. This results in a rich app ecosystem with a lot of choices!
|
**OAuth2 and a straightforward REST API** - Mastodon acts as an OAuth2 provider, and third party apps can use the REST and Streaming APIs. This results in a [rich app ecosystem](https://joinmastodon.org/apps) with a variety of choices!
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
### Tech stack
|
### Tech stack
|
||||||
|
|
||||||
- **Ruby on Rails** powers the REST API and other web pages
|
- [Ruby on Rails](https://github.com/rails/rails) powers the REST API and other web pages.
|
||||||
- **React.js** and **Redux** are used for the dynamic parts of the interface
|
- [PostgreSQL](https://www.postgresql.org/) is the main database.
|
||||||
- **Node.js** powers the streaming API
|
- [Redis](https://redis.io/) and [Sidekiq](https://sidekiq.org/) are used for caching and queueing.
|
||||||
|
- [Node.js](https://nodejs.org/) powers the streaming API.
|
||||||
|
- [React.js](https://reactjs.org/) and [Redux](https://redux.js.org/) are used for the dynamic parts of the interface.
|
||||||
|
- [BrowserStack](https://www.browserstack.com/) supports testing on real devices and browsers. (This project is tested with BrowserStack)
|
||||||
|
- [Chromatic](https://www.chromatic.com/) provides visual regression testing. (This project is tested with Chromatic)
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
|
- **Ruby** 3.2+
|
||||||
- **PostgreSQL** 13+
|
- **PostgreSQL** 13+
|
||||||
- **Redis** 6.2+
|
- **Redis** 6.2+
|
||||||
- **Ruby** 3.2+
|
|
||||||
- **Node.js** 20+
|
- **Node.js** 20+
|
||||||
|
|
||||||
The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, and **Scalingo**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation.
|
This repository includes deployment configurations for **Docker and docker-compose**, as well as for other environments like Heroku and Scalingo. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). A [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the main documentation.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Mastodon is **free, open-source software** licensed under **AGPLv3**.
|
Mastodon is **free, open-source software** licensed under **AGPLv3**. We welcome contributions and help from anyone who wants to improve the project.
|
||||||
|
|
||||||
You can open issues for bugs you've found or features you think are missing. You
|
You should read the overall [CONTRIBUTING](https://github.com/mastodon/.github/blob/main/CONTRIBUTING.md) guide, which covers our development processes.
|
||||||
can also submit pull requests to this repository or translations via Crowdin. To
|
|
||||||
get started, look at the [CONTRIBUTING] and [DEVELOPMENT] guides. For changes
|
|
||||||
accepted into Mastodon, you can request to be paid through our [OpenCollective].
|
|
||||||
|
|
||||||
**IRC channel**: #mastodon on [`irc.libera.chat`](https://libera.chat)
|
You should also read and understand the [CODE OF CONDUCT](https://github.com/mastodon/.github/blob/main/CODE_OF_CONDUCT.md) that enables us to maintain a welcoming and inclusive community. Collaboration begins with mutual respect and understanding.
|
||||||
|
|
||||||
## License
|
You can learn about setting up a development environment in the [DEVELOPMENT](docs/DEVELOPMENT.md) documentation.
|
||||||
|
|
||||||
|
If you would like to help with translations 🌐 you can do so on [Crowdin](https://crowdin.com/project/mastodon).
|
||||||
|
|
||||||
|
## LICENSE
|
||||||
|
|
||||||
Copyright (c) 2016-2025 Eugen Rochko (+ [`mastodon authors`](AUTHORS.md))
|
Copyright (c) 2016-2025 Eugen Rochko (+ [`mastodon authors`](AUTHORS.md))
|
||||||
|
|
||||||
Licensed under GNU Affero General Public License as stated in the [LICENSE](LICENSE):
|
Licensed under GNU Affero General Public License as stated in the [LICENSE](LICENSE):
|
||||||
|
|
||||||
```
|
```text
|
||||||
Copyright (c) 2016-2025 Eugen Rochko & other Mastodon contributors
|
Copyright (c) 2016-2025 Eugen Rochko & other Mastodon contributors
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify it under
|
This program is free software: you can redistribute it and/or modify it under
|
||||||
|
@ -97,7 +97,3 @@ details.
|
||||||
You should have received a copy of the GNU Affero General Public License along
|
You should have received a copy of the GNU Affero General Public License along
|
||||||
with this program. If not, see https://www.gnu.org/licenses/
|
with this program. If not, see https://www.gnu.org/licenses/
|
||||||
```
|
```
|
||||||
|
|
||||||
[CONTRIBUTING]: CONTRIBUTING.md
|
|
||||||
[DEVELOPMENT]: docs/DEVELOPMENT.md
|
|
||||||
[OpenCollective]: https://opencollective.com/mastodon
|
|
||||||
|
|
|
@ -14,7 +14,8 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through
|
||||||
## Supported Versions
|
## Supported Versions
|
||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | --------- |
|
| ------- | ---------------- |
|
||||||
|
| 4.4.x | Yes |
|
||||||
| 4.3.x | Yes |
|
| 4.3.x | Yes |
|
||||||
| 4.2.x | Yes |
|
| 4.2.x | Until 2026-01-08 |
|
||||||
| < 4.2 | No |
|
| < 4.2 | No |
|
||||||
|
|
|
@ -14,17 +14,21 @@ module Admin
|
||||||
def create
|
def create
|
||||||
authorize @account, :show?
|
authorize @account, :show?
|
||||||
|
|
||||||
account_action = Admin::AccountAction.new(resource_params)
|
@account_action = Admin::AccountAction.new(resource_params)
|
||||||
account_action.target_account = @account
|
@account_action.target_account = @account
|
||||||
account_action.current_account = current_account
|
@account_action.current_account = current_account
|
||||||
|
|
||||||
account_action.save!
|
if @account_action.save
|
||||||
|
if @account_action.with_report?
|
||||||
if account_action.with_report?
|
|
||||||
redirect_to admin_reports_path, notice: I18n.t('admin.reports.processed_msg', id: resource_params[:report_id])
|
redirect_to admin_reports_path, notice: I18n.t('admin.reports.processed_msg', id: resource_params[:report_id])
|
||||||
else
|
else
|
||||||
redirect_to admin_account_path(@account.id)
|
redirect_to admin_account_path(@account.id)
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
@warning_presets = AccountWarningPreset.all
|
||||||
|
|
||||||
|
render :new
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -13,27 +13,9 @@ class Admin::Reports::ActionsController < Admin::BaseController
|
||||||
|
|
||||||
case action_from_button
|
case action_from_button
|
||||||
when 'delete', 'mark_as_sensitive'
|
when 'delete', 'mark_as_sensitive'
|
||||||
status_batch_action = Admin::StatusBatchAction.new(
|
Admin::StatusBatchAction.new(status_batch_action_params).save!
|
||||||
type: action_from_button,
|
|
||||||
status_ids: @report.status_ids,
|
|
||||||
current_account: current_account,
|
|
||||||
report_id: @report.id,
|
|
||||||
send_email_notification: !@report.spam?,
|
|
||||||
text: params[:text]
|
|
||||||
)
|
|
||||||
|
|
||||||
status_batch_action.save!
|
|
||||||
when 'silence', 'suspend'
|
when 'silence', 'suspend'
|
||||||
account_action = Admin::AccountAction.new(
|
Admin::AccountAction.new(account_action_params).save!
|
||||||
type: action_from_button,
|
|
||||||
report_id: @report.id,
|
|
||||||
target_account: @report.target_account,
|
|
||||||
current_account: current_account,
|
|
||||||
send_email_notification: !@report.spam?,
|
|
||||||
text: params[:text]
|
|
||||||
)
|
|
||||||
|
|
||||||
account_action.save!
|
|
||||||
else
|
else
|
||||||
return redirect_to admin_report_path(@report), alert: I18n.t('admin.reports.unknown_action_msg', action: action_from_button)
|
return redirect_to admin_report_path(@report), alert: I18n.t('admin.reports.unknown_action_msg', action: action_from_button)
|
||||||
end
|
end
|
||||||
|
@ -43,6 +25,26 @@ class Admin::Reports::ActionsController < Admin::BaseController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def status_batch_action_params
|
||||||
|
shared_params
|
||||||
|
.merge(status_ids: @report.status_ids)
|
||||||
|
end
|
||||||
|
|
||||||
|
def account_action_params
|
||||||
|
shared_params
|
||||||
|
.merge(target_account: @report.target_account)
|
||||||
|
end
|
||||||
|
|
||||||
|
def shared_params
|
||||||
|
{
|
||||||
|
current_account: current_account,
|
||||||
|
report_id: @report.id,
|
||||||
|
send_email_notification: !@report.spam?,
|
||||||
|
text: params[:text],
|
||||||
|
type: action_from_button,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def set_report
|
def set_report
|
||||||
@report = Report.find(params[:report_id])
|
@report = Report.find(params[:report_id])
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
class Api::V1::StatusesController < Api::BaseController
|
class Api::V1::StatusesController < Api::BaseController
|
||||||
include Authorization
|
include Authorization
|
||||||
|
include AsyncRefreshesConcern
|
||||||
|
|
||||||
before_action -> { authorize_if_got_token! :read, :'read:statuses' }, except: [:create, :update, :destroy]
|
before_action -> { authorize_if_got_token! :read, :'read:statuses' }, except: [:create, :update, :destroy]
|
||||||
before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, only: [:create, :update, :destroy]
|
before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, only: [:create, :update, :destroy]
|
||||||
|
@ -57,9 +58,17 @@ class Api::V1::StatusesController < Api::BaseController
|
||||||
@context = Context.new(ancestors: loaded_ancestors, descendants: loaded_descendants)
|
@context = Context.new(ancestors: loaded_ancestors, descendants: loaded_descendants)
|
||||||
statuses = [@status] + @context.ancestors + @context.descendants
|
statuses = [@status] + @context.ancestors + @context.descendants
|
||||||
|
|
||||||
render json: @context, serializer: REST::ContextSerializer, relationships: StatusRelationshipsPresenter.new(statuses, current_user&.account_id)
|
refresh_key = "context:#{@status.id}:refresh"
|
||||||
|
async_refresh = AsyncRefresh.new(refresh_key)
|
||||||
|
|
||||||
ActivityPub::FetchAllRepliesWorker.perform_async(@status.id) if !current_account.nil? && @status.should_fetch_replies?
|
if async_refresh.running?
|
||||||
|
add_async_refresh_header(async_refresh)
|
||||||
|
elsif !current_account.nil? && @status.should_fetch_replies?
|
||||||
|
add_async_refresh_header(AsyncRefresh.create(refresh_key))
|
||||||
|
ActivityPub::FetchAllRepliesWorker.perform_async(@status.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
render json: @context, serializer: REST::ContextSerializer, relationships: StatusRelationshipsPresenter.new(statuses, current_user&.account_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Api::V2::SearchController < Api::BaseController
|
class Api::V2::SearchController < Api::BaseController
|
||||||
|
include AsyncRefreshesConcern
|
||||||
include Authorization
|
include Authorization
|
||||||
|
|
||||||
RESULTS_LIMIT = 20
|
RESULTS_LIMIT = 20
|
||||||
|
@ -13,6 +14,7 @@ class Api::V2::SearchController < Api::BaseController
|
||||||
before_action :remote_resolve_error, if: :remote_resolve_requested?
|
before_action :remote_resolve_error, if: :remote_resolve_requested?
|
||||||
end
|
end
|
||||||
before_action :require_valid_pagination_options!
|
before_action :require_valid_pagination_options!
|
||||||
|
before_action :handle_fasp_requests
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@search = Search.new(search_results)
|
@search = Search.new(search_results)
|
||||||
|
@ -37,6 +39,21 @@ class Api::V2::SearchController < Api::BaseController
|
||||||
render json: { error: 'Search queries that resolve remote resources are not supported without authentication' }, status: 401
|
render json: { error: 'Search queries that resolve remote resources are not supported without authentication' }, status: 401
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_fasp_requests
|
||||||
|
return unless Mastodon::Feature.fasp_enabled?
|
||||||
|
return if params[:q].blank?
|
||||||
|
|
||||||
|
# Do not schedule a new retrieval if the request is a follow-up
|
||||||
|
# to an earlier retrieval
|
||||||
|
return if request.headers['Mastodon-Async-Refresh-Id'].present?
|
||||||
|
|
||||||
|
refresh_key = "fasp:account_search:#{Digest::MD5.base64digest(params[:q])}"
|
||||||
|
return if AsyncRefresh.new(refresh_key).running?
|
||||||
|
|
||||||
|
add_async_refresh_header(AsyncRefresh.create(refresh_key))
|
||||||
|
@query_fasp = true
|
||||||
|
end
|
||||||
|
|
||||||
def remote_resolve_requested?
|
def remote_resolve_requested?
|
||||||
truthy_param?(:resolve)
|
truthy_param?(:resolve)
|
||||||
end
|
end
|
||||||
|
@ -58,7 +75,8 @@ class Api::V2::SearchController < Api::BaseController
|
||||||
search_params.merge(
|
search_params.merge(
|
||||||
resolve: truthy_param?(:resolve),
|
resolve: truthy_param?(:resolve),
|
||||||
exclude_unreviewed: truthy_param?(:exclude_unreviewed),
|
exclude_unreviewed: truthy_param?(:exclude_unreviewed),
|
||||||
following: truthy_param?(:following)
|
following: truthy_param?(:following),
|
||||||
|
query_fasp: @query_fasp
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -38,8 +38,7 @@ class Auth::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
||||||
private
|
private
|
||||||
|
|
||||||
def record_login_activity
|
def record_login_activity
|
||||||
LoginActivity.create(
|
@user.login_activities.create(
|
||||||
user: @user,
|
|
||||||
success: true,
|
success: true,
|
||||||
authentication_method: :omniauth,
|
authentication_method: :omniauth,
|
||||||
provider: @provider,
|
provider: @provider,
|
||||||
|
|
|
@ -151,12 +151,11 @@ class Auth::SessionsController < Devise::SessionsController
|
||||||
sign_in(user)
|
sign_in(user)
|
||||||
flash.delete(:notice)
|
flash.delete(:notice)
|
||||||
|
|
||||||
LoginActivity.create(
|
user.login_activities.create(
|
||||||
user: user,
|
request_details.merge(
|
||||||
success: true,
|
|
||||||
authentication_method: security_measure,
|
authentication_method: security_measure,
|
||||||
ip: request.remote_ip,
|
success: true
|
||||||
user_agent: request.user_agent
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
UserMailer.suspicious_sign_in(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later! if @login_is_suspicious
|
UserMailer.suspicious_sign_in(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later! if @login_is_suspicious
|
||||||
|
@ -167,13 +166,12 @@ class Auth::SessionsController < Devise::SessionsController
|
||||||
end
|
end
|
||||||
|
|
||||||
def on_authentication_failure(user, security_measure, failure_reason)
|
def on_authentication_failure(user, security_measure, failure_reason)
|
||||||
LoginActivity.create(
|
user.login_activities.create(
|
||||||
user: user,
|
request_details.merge(
|
||||||
success: false,
|
|
||||||
authentication_method: security_measure,
|
authentication_method: security_measure,
|
||||||
failure_reason: failure_reason,
|
failure_reason: failure_reason,
|
||||||
ip: request.remote_ip,
|
success: false
|
||||||
user_agent: request.user_agent
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
# Only send a notification email every hour at most
|
# Only send a notification email every hour at most
|
||||||
|
@ -182,6 +180,13 @@ class Auth::SessionsController < Devise::SessionsController
|
||||||
UserMailer.failed_2fa(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later!
|
UserMailer.failed_2fa(user, request.remote_ip, request.user_agent, Time.now.utc).deliver_later!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def request_details
|
||||||
|
{
|
||||||
|
ip: request.remote_ip,
|
||||||
|
user_agent: request.user_agent,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
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
|
||||||
|
|
|
@ -64,6 +64,9 @@ module SignatureVerification
|
||||||
return (@signed_request_actor = actor) if signed_request.verified?(actor)
|
return (@signed_request_actor = actor) if signed_request.verified?(actor)
|
||||||
|
|
||||||
fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri}"
|
fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri}"
|
||||||
|
rescue Mastodon::MalformedHeaderError => e
|
||||||
|
@signature_verification_failure_code = 400
|
||||||
|
fail_with! e.message
|
||||||
rescue Mastodon::SignatureVerificationError => e
|
rescue Mastodon::SignatureVerificationError => e
|
||||||
fail_with! e.message
|
fail_with! e.message
|
||||||
rescue *Mastodon::HTTP_CONNECTION_ERRORS => e
|
rescue *Mastodon::HTTP_CONNECTION_ERRORS => e
|
||||||
|
|
|
@ -50,6 +50,13 @@ module WebAppControllerConcern
|
||||||
return unless current_user&.require_tos_interstitial?
|
return unless current_user&.require_tos_interstitial?
|
||||||
|
|
||||||
@terms_of_service = TermsOfService.published.first
|
@terms_of_service = TermsOfService.published.first
|
||||||
|
|
||||||
|
# Handle case where terms of service have been removed from the database
|
||||||
|
if @terms_of_service.nil?
|
||||||
|
current_user.update(require_tos_interstitial: false)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
render 'terms_of_service_interstitial/show', layout: 'auth'
|
render 'terms_of_service_interstitial/show', layout: 'auth'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,6 @@ class Settings::LoginActivitiesController < Settings::BaseController
|
||||||
skip_before_action :require_functional!
|
skip_before_action :require_functional!
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@login_activities = LoginActivity.where(user: current_user).order(id: :desc).page(params[:page])
|
@login_activities = current_user.login_activities.order(id: :desc).page(params[:page])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -66,7 +66,7 @@ module ApplicationHelper
|
||||||
|
|
||||||
def provider_sign_in_link(provider)
|
def provider_sign_in_link(provider)
|
||||||
label = Devise.omniauth_configs[provider]&.strategy&.display_name.presence || I18n.t("auth.providers.#{provider}", default: provider.to_s.chomp('_oauth2').capitalize)
|
label = Devise.omniauth_configs[provider]&.strategy&.display_name.presence || I18n.t("auth.providers.#{provider}", default: provider.to_s.chomp('_oauth2').capitalize)
|
||||||
link_to label, omniauth_authorize_path(:user, provider), class: "button button-#{provider}", method: :post
|
link_to label, omniauth_authorize_path(:user, provider), class: "btn button-#{provider}", method: :post
|
||||||
end
|
end
|
||||||
|
|
||||||
def locale_direction
|
def locale_direction
|
||||||
|
|
|
@ -26,6 +26,12 @@ module ContextHelper
|
||||||
suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' },
|
suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' },
|
||||||
attribution_domains: { 'toot' => 'http://joinmastodon.org/ns#', 'attributionDomains' => { '@id' => 'toot:attributionDomains', '@type' => '@id' } },
|
attribution_domains: { 'toot' => 'http://joinmastodon.org/ns#', 'attributionDomains' => { '@id' => 'toot:attributionDomains', '@type' => '@id' } },
|
||||||
quote_requests: { 'QuoteRequest' => 'https://w3id.org/fep/044f#QuoteRequest' },
|
quote_requests: { 'QuoteRequest' => 'https://w3id.org/fep/044f#QuoteRequest' },
|
||||||
|
quotes: {
|
||||||
|
'quote' => 'https://w3id.org/fep/044f#quote',
|
||||||
|
'quoteUri' => 'http://fedibird.com/ns#quoteUri',
|
||||||
|
'_misskey_quote' => 'https://misskey-hub.net/ns#_misskey_quote',
|
||||||
|
'quoteAuthorization' => { '@id' => 'https://w3id.org/fep/044f#quoteAuthorization', '@type' => '@id' },
|
||||||
|
},
|
||||||
interaction_policies: {
|
interaction_policies: {
|
||||||
'gts' => 'https://gotosocial.org/ns#',
|
'gts' => 'https://gotosocial.org/ns#',
|
||||||
'interactionPolicy' => { '@id' => 'gts:interactionPolicy', '@type' => '@id' },
|
'interactionPolicy' => { '@id' => 'gts:interactionPolicy', '@type' => '@id' },
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { createAction } from '@reduxjs/toolkit';
|
||||||
|
|
||||||
import { apiGetContext } from 'mastodon/api/statuses';
|
import { apiGetContext } from 'mastodon/api/statuses';
|
||||||
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
|
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
|
||||||
|
|
||||||
|
@ -6,13 +8,18 @@ import { importFetchedStatuses } from './importer';
|
||||||
export const fetchContext = createDataLoadingThunk(
|
export const fetchContext = createDataLoadingThunk(
|
||||||
'status/context',
|
'status/context',
|
||||||
({ statusId }: { statusId: string }) => apiGetContext(statusId),
|
({ statusId }: { statusId: string }) => apiGetContext(statusId),
|
||||||
(context, { dispatch }) => {
|
({ context, refresh }, { dispatch }) => {
|
||||||
const statuses = context.ancestors.concat(context.descendants);
|
const statuses = context.ancestors.concat(context.descendants);
|
||||||
|
|
||||||
dispatch(importFetchedStatuses(statuses));
|
dispatch(importFetchedStatuses(statuses));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
context,
|
context,
|
||||||
|
refresh,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const completeContextRefresh = createAction<{ statusId: string }>(
|
||||||
|
'status/context/complete',
|
||||||
|
);
|
||||||
|
|
|
@ -20,6 +20,50 @@ export const getLinks = (response: AxiosResponse) => {
|
||||||
return LinkHeader.parse(value);
|
return LinkHeader.parse(value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export interface AsyncRefreshHeader {
|
||||||
|
id: string;
|
||||||
|
retry: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
const isAsyncRefreshHeader = (obj: object): obj is AsyncRefreshHeader =>
|
||||||
|
'id' in obj && 'retry' in obj;
|
||||||
|
|
||||||
|
export const getAsyncRefreshHeader = (
|
||||||
|
response: AxiosResponse,
|
||||||
|
): AsyncRefreshHeader | null => {
|
||||||
|
const value = response.headers['mastodon-async-refresh'] as
|
||||||
|
| string
|
||||||
|
| undefined;
|
||||||
|
|
||||||
|
if (!value) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const asyncRefreshHeader: Record<string, unknown> = {};
|
||||||
|
|
||||||
|
value.split(/,\s*/).forEach((pair) => {
|
||||||
|
const [key, val] = pair.split('=', 2);
|
||||||
|
|
||||||
|
let typedValue: string | number;
|
||||||
|
|
||||||
|
if (key && ['id', 'retry'].includes(key) && val) {
|
||||||
|
if (val.startsWith('"')) {
|
||||||
|
typedValue = val.slice(1, -1);
|
||||||
|
} else {
|
||||||
|
typedValue = parseInt(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
asyncRefreshHeader[key] = typedValue;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (isAsyncRefreshHeader(asyncRefreshHeader)) {
|
||||||
|
return asyncRefreshHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
const csrfHeader: RawAxiosRequestHeaders = {};
|
const csrfHeader: RawAxiosRequestHeaders = {};
|
||||||
|
|
||||||
const setCSRFHeader = () => {
|
const setCSRFHeader = () => {
|
||||||
|
@ -83,7 +127,7 @@ export default function api(withAuthorization = true) {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApiUrl = `v${1 | 2}/${string}`;
|
type ApiUrl = `v${1 | '1_alpha' | 2}/${string}`;
|
||||||
type RequestParamsOrData = Record<string, unknown>;
|
type RequestParamsOrData = Record<string, unknown>;
|
||||||
|
|
||||||
export async function apiRequest<ApiResponse = unknown>(
|
export async function apiRequest<ApiResponse = unknown>(
|
||||||
|
|
5
app/javascript/mastodon/api/async_refreshes.ts
Normal file
5
app/javascript/mastodon/api/async_refreshes.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import { apiRequestGet } from 'mastodon/api';
|
||||||
|
import type { ApiAsyncRefreshJSON } from 'mastodon/api_types/async_refreshes';
|
||||||
|
|
||||||
|
export const apiGetAsyncRefresh = (id: string) =>
|
||||||
|
apiRequestGet<ApiAsyncRefreshJSON>(`v1_alpha/async_refreshes/${id}`);
|
|
@ -1,5 +1,14 @@
|
||||||
import { apiRequestGet } from 'mastodon/api';
|
import api, { getAsyncRefreshHeader } from 'mastodon/api';
|
||||||
import type { ApiContextJSON } from 'mastodon/api_types/statuses';
|
import type { ApiContextJSON } from 'mastodon/api_types/statuses';
|
||||||
|
|
||||||
export const apiGetContext = (statusId: string) =>
|
export const apiGetContext = async (statusId: string) => {
|
||||||
apiRequestGet<ApiContextJSON>(`v1/statuses/${statusId}/context`);
|
const response = await api().request<ApiContextJSON>({
|
||||||
|
method: 'GET',
|
||||||
|
url: `/api/v1/statuses/${statusId}/context`,
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
context: response.data,
|
||||||
|
refresh: getAsyncRefreshHeader(response),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
7
app/javascript/mastodon/api_types/async_refreshes.ts
Normal file
7
app/javascript/mastodon/api_types/async_refreshes.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
export interface ApiAsyncRefreshJSON {
|
||||||
|
async_refresh: {
|
||||||
|
id: string;
|
||||||
|
status: 'running' | 'finished';
|
||||||
|
result_count: number;
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,12 +1,30 @@
|
||||||
|
import { useCallback } from 'react';
|
||||||
|
|
||||||
import { useLinks } from 'mastodon/hooks/useLinks';
|
import { useLinks } from 'mastodon/hooks/useLinks';
|
||||||
|
|
||||||
export const AccountBio: React.FC<{
|
interface AccountBioProps {
|
||||||
note: string;
|
note: string;
|
||||||
className: string;
|
className: string;
|
||||||
}> = ({ note, className }) => {
|
dropdownAccountId?: string;
|
||||||
const handleClick = useLinks();
|
}
|
||||||
|
|
||||||
if (note.length === 0 || note === '<p></p>') {
|
export const AccountBio: React.FC<AccountBioProps> = ({
|
||||||
|
note,
|
||||||
|
className,
|
||||||
|
dropdownAccountId,
|
||||||
|
}) => {
|
||||||
|
const handleClick = useLinks(!!dropdownAccountId);
|
||||||
|
const handleNodeChange = useCallback(
|
||||||
|
(node: HTMLDivElement | null) => {
|
||||||
|
if (!dropdownAccountId || !node || node.childNodes.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
addDropdownToHashtags(node, dropdownAccountId);
|
||||||
|
},
|
||||||
|
[dropdownAccountId],
|
||||||
|
);
|
||||||
|
|
||||||
|
if (note.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +33,28 @@ export const AccountBio: React.FC<{
|
||||||
className={`${className} translate`}
|
className={`${className} translate`}
|
||||||
dangerouslySetInnerHTML={{ __html: note }}
|
dangerouslySetInnerHTML={{ __html: note }}
|
||||||
onClickCapture={handleClick}
|
onClickCapture={handleClick}
|
||||||
|
ref={handleNodeChange}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function addDropdownToHashtags(node: HTMLElement | null, accountId: string) {
|
||||||
|
if (!node) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (const childNode of node.childNodes) {
|
||||||
|
if (!(childNode instanceof HTMLElement)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
childNode instanceof HTMLAnchorElement &&
|
||||||
|
(childNode.classList.contains('hashtag') ||
|
||||||
|
childNode.innerText.startsWith('#')) &&
|
||||||
|
!childNode.dataset.menuHashtag
|
||||||
|
) {
|
||||||
|
childNode.dataset.menuHashtag = accountId;
|
||||||
|
} else if (childNode.childNodes.length > 0) {
|
||||||
|
addDropdownToHashtags(childNode, accountId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import {
|
||||||
useCallback,
|
useCallback,
|
||||||
cloneElement,
|
cloneElement,
|
||||||
Children,
|
Children,
|
||||||
|
useId,
|
||||||
} from 'react';
|
} from 'react';
|
||||||
|
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
@ -16,6 +17,7 @@ import Overlay from 'react-overlays/Overlay';
|
||||||
import type {
|
import type {
|
||||||
OffsetValue,
|
OffsetValue,
|
||||||
UsePopperOptions,
|
UsePopperOptions,
|
||||||
|
Placement,
|
||||||
} from 'react-overlays/esm/usePopper';
|
} from 'react-overlays/esm/usePopper';
|
||||||
|
|
||||||
import { fetchRelationships } from 'mastodon/actions/accounts';
|
import { fetchRelationships } from 'mastodon/actions/accounts';
|
||||||
|
@ -295,6 +297,11 @@ interface DropdownProps<Item = MenuItem> {
|
||||||
title?: string;
|
title?: string;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
scrollable?: boolean;
|
scrollable?: boolean;
|
||||||
|
placement?: Placement;
|
||||||
|
/**
|
||||||
|
* Prevent the `ScrollableList` with this scrollKey
|
||||||
|
* from being scrolled while the dropdown is open
|
||||||
|
*/
|
||||||
scrollKey?: string;
|
scrollKey?: string;
|
||||||
status?: ImmutableMap<string, unknown>;
|
status?: ImmutableMap<string, unknown>;
|
||||||
forceDropdown?: boolean;
|
forceDropdown?: boolean;
|
||||||
|
@ -316,6 +323,7 @@ export const Dropdown = <Item = MenuItem,>({
|
||||||
title = 'Menu',
|
title = 'Menu',
|
||||||
disabled,
|
disabled,
|
||||||
scrollable,
|
scrollable,
|
||||||
|
placement = 'bottom',
|
||||||
status,
|
status,
|
||||||
forceDropdown = false,
|
forceDropdown = false,
|
||||||
renderItem,
|
renderItem,
|
||||||
|
@ -331,16 +339,15 @@ export const Dropdown = <Item = MenuItem,>({
|
||||||
);
|
);
|
||||||
const [currentId] = useState(id++);
|
const [currentId] = useState(id++);
|
||||||
const open = currentId === openDropdownId;
|
const open = currentId === openDropdownId;
|
||||||
const activeElement = useRef<HTMLElement | null>(null);
|
const buttonRef = useRef<HTMLButtonElement | null>(null);
|
||||||
const targetRef = useRef<HTMLButtonElement | null>(null);
|
const menuId = useId();
|
||||||
const prefetchAccountId = status
|
const prefetchAccountId = status
|
||||||
? status.getIn(['account', 'id'])
|
? status.getIn(['account', 'id'])
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
const handleClose = useCallback(() => {
|
const handleClose = useCallback(() => {
|
||||||
if (activeElement.current) {
|
if (buttonRef.current) {
|
||||||
activeElement.current.focus({ preventScroll: true });
|
buttonRef.current.focus({ preventScroll: true });
|
||||||
activeElement.current = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
|
@ -375,7 +382,7 @@ export const Dropdown = <Item = MenuItem,>({
|
||||||
[handleClose, onItemClick, items],
|
[handleClose, onItemClick, items],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleClick = useCallback(
|
const toggleDropdown = useCallback(
|
||||||
(e: React.MouseEvent | React.KeyboardEvent) => {
|
(e: React.MouseEvent | React.KeyboardEvent) => {
|
||||||
const { type } = e;
|
const { type } = e;
|
||||||
|
|
||||||
|
@ -423,38 +430,6 @@ export const Dropdown = <Item = MenuItem,>({
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleMouseDown = useCallback(() => {
|
|
||||||
if (!open && document.activeElement instanceof HTMLElement) {
|
|
||||||
activeElement.current = document.activeElement;
|
|
||||||
}
|
|
||||||
}, [open]);
|
|
||||||
|
|
||||||
const handleButtonKeyDown = useCallback(
|
|
||||||
(e: React.KeyboardEvent) => {
|
|
||||||
switch (e.key) {
|
|
||||||
case ' ':
|
|
||||||
case 'Enter':
|
|
||||||
handleMouseDown();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[handleMouseDown],
|
|
||||||
);
|
|
||||||
|
|
||||||
const handleKeyPress = useCallback(
|
|
||||||
(e: React.KeyboardEvent) => {
|
|
||||||
switch (e.key) {
|
|
||||||
case ' ':
|
|
||||||
case 'Enter':
|
|
||||||
handleClick(e);
|
|
||||||
e.stopPropagation();
|
|
||||||
e.preventDefault();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[handleClick],
|
|
||||||
);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return () => {
|
return () => {
|
||||||
if (currentId === openDropdownId) {
|
if (currentId === openDropdownId) {
|
||||||
|
@ -465,14 +440,16 @@ export const Dropdown = <Item = MenuItem,>({
|
||||||
|
|
||||||
let button: React.ReactElement;
|
let button: React.ReactElement;
|
||||||
|
|
||||||
|
const buttonProps = {
|
||||||
|
disabled,
|
||||||
|
onClick: toggleDropdown,
|
||||||
|
'aria-expanded': open,
|
||||||
|
'aria-controls': menuId,
|
||||||
|
ref: buttonRef,
|
||||||
|
};
|
||||||
|
|
||||||
if (children) {
|
if (children) {
|
||||||
button = cloneElement(Children.only(children), {
|
button = cloneElement(Children.only(children), buttonProps);
|
||||||
onClick: handleClick,
|
|
||||||
onMouseDown: handleMouseDown,
|
|
||||||
onKeyDown: handleButtonKeyDown,
|
|
||||||
onKeyPress: handleKeyPress,
|
|
||||||
ref: targetRef,
|
|
||||||
});
|
|
||||||
} else if (icon && iconComponent) {
|
} else if (icon && iconComponent) {
|
||||||
button = (
|
button = (
|
||||||
<IconButton
|
<IconButton
|
||||||
|
@ -480,12 +457,7 @@ export const Dropdown = <Item = MenuItem,>({
|
||||||
iconComponent={iconComponent}
|
iconComponent={iconComponent}
|
||||||
title={title}
|
title={title}
|
||||||
active={open}
|
active={open}
|
||||||
disabled={disabled}
|
{...buttonProps}
|
||||||
onClick={handleClick}
|
|
||||||
onMouseDown={handleMouseDown}
|
|
||||||
onKeyDown={handleButtonKeyDown}
|
|
||||||
onKeyPress={handleKeyPress}
|
|
||||||
ref={targetRef}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@ -499,13 +471,13 @@ export const Dropdown = <Item = MenuItem,>({
|
||||||
<Overlay
|
<Overlay
|
||||||
show={open}
|
show={open}
|
||||||
offset={offset}
|
offset={offset}
|
||||||
placement='bottom'
|
placement={placement}
|
||||||
flip
|
flip
|
||||||
target={targetRef}
|
target={buttonRef}
|
||||||
popperConfig={popperConfig}
|
popperConfig={popperConfig}
|
||||||
>
|
>
|
||||||
{({ props, arrowProps, placement }) => (
|
{({ props, arrowProps, placement }) => (
|
||||||
<div {...props}>
|
<div {...props} id={menuId}>
|
||||||
<div className={`dropdown-animation dropdown-menu ${placement}`}>
|
<div className={`dropdown-animation dropdown-menu ${placement}`}>
|
||||||
<div
|
<div
|
||||||
className={`dropdown-menu__arrow ${placement}`}
|
className={`dropdown-menu__arrow ${placement}`}
|
||||||
|
|
|
@ -14,7 +14,6 @@ interface Props {
|
||||||
onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
||||||
onMouseDown?: React.MouseEventHandler<HTMLButtonElement>;
|
onMouseDown?: React.MouseEventHandler<HTMLButtonElement>;
|
||||||
onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
|
onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
|
||||||
onKeyPress?: React.KeyboardEventHandler<HTMLButtonElement>;
|
|
||||||
active?: boolean;
|
active?: boolean;
|
||||||
expanded?: boolean;
|
expanded?: boolean;
|
||||||
style?: React.CSSProperties;
|
style?: React.CSSProperties;
|
||||||
|
@ -45,7 +44,6 @@ export const IconButton = forwardRef<HTMLButtonElement, Props>(
|
||||||
activeStyle,
|
activeStyle,
|
||||||
onClick,
|
onClick,
|
||||||
onKeyDown,
|
onKeyDown,
|
||||||
onKeyPress,
|
|
||||||
onMouseDown,
|
onMouseDown,
|
||||||
active = false,
|
active = false,
|
||||||
disabled = false,
|
disabled = false,
|
||||||
|
@ -85,16 +83,6 @@ export const IconButton = forwardRef<HTMLButtonElement, Props>(
|
||||||
[disabled, onClick],
|
[disabled, onClick],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleKeyPress: React.KeyboardEventHandler<HTMLButtonElement> =
|
|
||||||
useCallback(
|
|
||||||
(e) => {
|
|
||||||
if (!disabled) {
|
|
||||||
onKeyPress?.(e);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[disabled, onKeyPress],
|
|
||||||
);
|
|
||||||
|
|
||||||
const handleMouseDown: React.MouseEventHandler<HTMLButtonElement> =
|
const handleMouseDown: React.MouseEventHandler<HTMLButtonElement> =
|
||||||
useCallback(
|
useCallback(
|
||||||
(e) => {
|
(e) => {
|
||||||
|
@ -161,7 +149,6 @@ export const IconButton = forwardRef<HTMLButtonElement, Props>(
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
onMouseDown={handleMouseDown}
|
onMouseDown={handleMouseDown}
|
||||||
onKeyDown={handleKeyDown}
|
onKeyDown={handleKeyDown}
|
||||||
onKeyPress={handleKeyPress} // eslint-disable-line @typescript-eslint/no-deprecated
|
|
||||||
style={buttonStyle}
|
style={buttonStyle}
|
||||||
tabIndex={tabIndex}
|
tabIndex={tabIndex}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import classNames from 'classnames';
|
||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import { NavLink } from 'react-router-dom';
|
import { NavLink } from 'react-router-dom';
|
||||||
|
|
||||||
|
import { AccountBio } from '@/mastodon/components/account_bio';
|
||||||
import CheckIcon from '@/material-icons/400-24px/check.svg?react';
|
import CheckIcon from '@/material-icons/400-24px/check.svg?react';
|
||||||
import LockIcon from '@/material-icons/400-24px/lock.svg?react';
|
import LockIcon from '@/material-icons/400-24px/lock.svg?react';
|
||||||
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';
|
||||||
|
@ -773,7 +774,6 @@ export const AccountHeader: React.FC<{
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const content = { __html: account.note_emojified };
|
|
||||||
const displayNameHtml = { __html: account.display_name_html };
|
const displayNameHtml = { __html: account.display_name_html };
|
||||||
const fields = account.fields;
|
const fields = account.fields;
|
||||||
const isLocal = !account.acct.includes('@');
|
const isLocal = !account.acct.includes('@');
|
||||||
|
@ -897,12 +897,11 @@ export const AccountHeader: React.FC<{
|
||||||
<AccountNote accountId={accountId} />
|
<AccountNote accountId={accountId} />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{account.note.length > 0 && account.note !== '<p></p>' && (
|
<AccountBio
|
||||||
<div
|
note={account.note_emojified}
|
||||||
className='account__header__content translate'
|
dropdownAccountId={accountId}
|
||||||
dangerouslySetInnerHTML={content}
|
className='account__header__content'
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
|
|
||||||
<div className='account__header__fields'>
|
<div className='account__header__fields'>
|
||||||
<dl>
|
<dl>
|
||||||
|
|
|
@ -47,10 +47,6 @@ const labelForRecentSearch = (search: RecentSearch) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const unfocus = () => {
|
|
||||||
document.querySelector('.ui')?.parentElement?.focus();
|
|
||||||
};
|
|
||||||
|
|
||||||
const ClearButton: React.FC<{
|
const ClearButton: React.FC<{
|
||||||
onClick: () => void;
|
onClick: () => void;
|
||||||
hasValue: boolean;
|
hasValue: boolean;
|
||||||
|
@ -107,6 +103,11 @@ export const Search: React.FC<{
|
||||||
}, [initialValue]);
|
}, [initialValue]);
|
||||||
const searchOptions: SearchOption[] = [];
|
const searchOptions: SearchOption[] = [];
|
||||||
|
|
||||||
|
const unfocus = useCallback(() => {
|
||||||
|
document.querySelector('.ui')?.parentElement?.focus();
|
||||||
|
setExpanded(false);
|
||||||
|
}, []);
|
||||||
|
|
||||||
if (searchEnabled) {
|
if (searchEnabled) {
|
||||||
searchOptions.push(
|
searchOptions.push(
|
||||||
{
|
{
|
||||||
|
@ -282,7 +283,7 @@ export const Search: React.FC<{
|
||||||
history.push({ pathname: '/search', search: queryParams.toString() });
|
history.push({ pathname: '/search', search: queryParams.toString() });
|
||||||
unfocus();
|
unfocus();
|
||||||
},
|
},
|
||||||
[dispatch, history],
|
[dispatch, history, unfocus],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleChange = useCallback(
|
const handleChange = useCallback(
|
||||||
|
@ -402,7 +403,7 @@ export const Search: React.FC<{
|
||||||
|
|
||||||
setQuickActions(newQuickActions);
|
setQuickActions(newQuickActions);
|
||||||
},
|
},
|
||||||
[dispatch, history, signedIn, setValue, setQuickActions, submit],
|
[signedIn, dispatch, unfocus, history, submit],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleClear = useCallback(() => {
|
const handleClear = useCallback(() => {
|
||||||
|
@ -410,7 +411,7 @@ export const Search: React.FC<{
|
||||||
setQuickActions([]);
|
setQuickActions([]);
|
||||||
setSelectedOption(-1);
|
setSelectedOption(-1);
|
||||||
unfocus();
|
unfocus();
|
||||||
}, [setValue, setQuickActions, setSelectedOption]);
|
}, [unfocus]);
|
||||||
|
|
||||||
const handleKeyDown = useCallback(
|
const handleKeyDown = useCallback(
|
||||||
(e: React.KeyboardEvent) => {
|
(e: React.KeyboardEvent) => {
|
||||||
|
@ -461,7 +462,7 @@ export const Search: React.FC<{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[navigableOptions, value, selectedOption, setSelectedOption, submit],
|
[unfocus, navigableOptions, selectedOption, submit, value],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleFocus = useCallback(() => {
|
const handleFocus = useCallback(() => {
|
||||||
|
@ -481,12 +482,38 @@ export const Search: React.FC<{
|
||||||
}, [setExpanded, setSelectedOption, singleColumn]);
|
}, [setExpanded, setSelectedOption, singleColumn]);
|
||||||
|
|
||||||
const handleBlur = useCallback(() => {
|
const handleBlur = useCallback(() => {
|
||||||
setExpanded(false);
|
|
||||||
setSelectedOption(-1);
|
setSelectedOption(-1);
|
||||||
}, [setExpanded, setSelectedOption]);
|
}, [setSelectedOption]);
|
||||||
|
|
||||||
|
const formRef = useRef<HTMLFormElement>(null);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// If the search popover is expanded, close it when tabbing or
|
||||||
|
// clicking outside of it or the search form, while allowing
|
||||||
|
// tabbing or clicking inside of the popover
|
||||||
|
if (expanded) {
|
||||||
|
function closeOnLeave(event: FocusEvent | MouseEvent) {
|
||||||
|
const form = formRef.current;
|
||||||
|
const isClickInsideForm =
|
||||||
|
form &&
|
||||||
|
(form === event.target || form.contains(event.target as Node));
|
||||||
|
if (!isClickInsideForm) {
|
||||||
|
setExpanded(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener('focusin', closeOnLeave);
|
||||||
|
document.addEventListener('click', closeOnLeave);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
document.removeEventListener('focusin', closeOnLeave);
|
||||||
|
document.removeEventListener('click', closeOnLeave);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return () => null;
|
||||||
|
}, [expanded]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<form className={classNames('search', { active: expanded })}>
|
<form ref={formRef} className={classNames('search', { active: expanded })}>
|
||||||
<input
|
<input
|
||||||
ref={searchInputRef}
|
ref={searchInputRef}
|
||||||
className='search__input'
|
className='search__input'
|
||||||
|
@ -506,7 +533,7 @@ export const Search: React.FC<{
|
||||||
|
|
||||||
<ClearButton hasValue={hasValue} onClick={handleClear} />
|
<ClearButton hasValue={hasValue} onClick={handleClear} />
|
||||||
|
|
||||||
<div className='search__popout'>
|
<div className='search__popout' tabIndex={-1}>
|
||||||
{!hasValue && (
|
{!hasValue && (
|
||||||
<>
|
<>
|
||||||
<h4>
|
<h4>
|
||||||
|
|
110
app/javascript/mastodon/features/emoji/constants.ts
Normal file
110
app/javascript/mastodon/features/emoji/constants.ts
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
// Utility codes
|
||||||
|
export const VARIATION_SELECTOR_CODE = 0xfe0f;
|
||||||
|
export const KEYCAP_CODE = 0x20e3;
|
||||||
|
|
||||||
|
// Gender codes
|
||||||
|
export const GENDER_FEMALE_CODE = 0x2640;
|
||||||
|
export const GENDER_MALE_CODE = 0x2642;
|
||||||
|
|
||||||
|
// Skin tone codes
|
||||||
|
export const SKIN_TONE_CODES = [
|
||||||
|
0x1f3fb, // Light skin tone
|
||||||
|
0x1f3fc, // Medium-light skin tone
|
||||||
|
0x1f3fd, // Medium skin tone
|
||||||
|
0x1f3fe, // Medium-dark skin tone
|
||||||
|
0x1f3ff, // Dark skin tone
|
||||||
|
] as const;
|
||||||
|
|
||||||
|
export const EMOJIS_WITH_DARK_BORDER = [
|
||||||
|
'🎱', // 1F3B1
|
||||||
|
'🐜', // 1F41C
|
||||||
|
'⚫', // 26AB
|
||||||
|
'🖤', // 1F5A4
|
||||||
|
'⬛', // 2B1B
|
||||||
|
'◼️', // 25FC-FE0F
|
||||||
|
'◾', // 25FE
|
||||||
|
'◼️', // 25FC-FE0F
|
||||||
|
'✒️', // 2712-FE0F
|
||||||
|
'▪️', // 25AA-FE0F
|
||||||
|
'💣', // 1F4A3
|
||||||
|
'🎳', // 1F3B3
|
||||||
|
'📷', // 1F4F7
|
||||||
|
'📸', // 1F4F8
|
||||||
|
'♣️', // 2663-FE0F
|
||||||
|
'🕶️', // 1F576-FE0F
|
||||||
|
'✴️', // 2734-FE0F
|
||||||
|
'🔌', // 1F50C
|
||||||
|
'💂♀️', // 1F482-200D-2640-FE0F
|
||||||
|
'📽️', // 1F4FD-FE0F
|
||||||
|
'🍳', // 1F373
|
||||||
|
'🦍', // 1F98D
|
||||||
|
'💂', // 1F482
|
||||||
|
'🔪', // 1F52A
|
||||||
|
'🕳️', // 1F573-FE0F
|
||||||
|
'🕹️', // 1F579-FE0F
|
||||||
|
'🕋', // 1F54B
|
||||||
|
'🖊️', // 1F58A-FE0F
|
||||||
|
'🖋️', // 1F58B-FE0F
|
||||||
|
'💂♂️', // 1F482-200D-2642-FE0F
|
||||||
|
'🎤', // 1F3A4
|
||||||
|
'🎓', // 1F393
|
||||||
|
'🎥', // 1F3A5
|
||||||
|
'🎼', // 1F3BC
|
||||||
|
'♠️', // 2660-FE0F
|
||||||
|
'🎩', // 1F3A9
|
||||||
|
'🦃', // 1F983
|
||||||
|
'📼', // 1F4FC
|
||||||
|
'📹', // 1F4F9
|
||||||
|
'🎮', // 1F3AE
|
||||||
|
'🐃', // 1F403
|
||||||
|
'🏴', // 1F3F4
|
||||||
|
'🐞', // 1F41E
|
||||||
|
'🕺', // 1F57A
|
||||||
|
'📱', // 1F4F1
|
||||||
|
'📲', // 1F4F2
|
||||||
|
'🚲', // 1F6B2
|
||||||
|
'🪮', // 1FAA6
|
||||||
|
'🐦⬛', // 1F426-200D-2B1B
|
||||||
|
];
|
||||||
|
|
||||||
|
export const EMOJIS_WITH_LIGHT_BORDER = [
|
||||||
|
'👽', // 1F47D
|
||||||
|
'⚾', // 26BE
|
||||||
|
'🐔', // 1F414
|
||||||
|
'☁️', // 2601-FE0F
|
||||||
|
'💨', // 1F4A8
|
||||||
|
'🕊️', // 1F54A-FE0F
|
||||||
|
'👀', // 1F440
|
||||||
|
'🍥', // 1F365
|
||||||
|
'👻', // 1F47B
|
||||||
|
'🐐', // 1F410
|
||||||
|
'❕', // 2755
|
||||||
|
'❔', // 2754
|
||||||
|
'⛸️', // 26F8-FE0F
|
||||||
|
'🌩️', // 1F329-FE0F
|
||||||
|
'🔊', // 1F50A
|
||||||
|
'🔇', // 1F507
|
||||||
|
'📃', // 1F4C3
|
||||||
|
'🌧️', // 1F327-FE0F
|
||||||
|
'🐏', // 1F40F
|
||||||
|
'🍚', // 1F35A
|
||||||
|
'🍙', // 1F359
|
||||||
|
'🐓', // 1F413
|
||||||
|
'🐑', // 1F411
|
||||||
|
'💀', // 1F480
|
||||||
|
'☠️', // 2620-FE0F
|
||||||
|
'🌨️', // 1F328-FE0F
|
||||||
|
'🔉', // 1F509
|
||||||
|
'🔈', // 1F508
|
||||||
|
'💬', // 1F4AC
|
||||||
|
'💭', // 1F4AD
|
||||||
|
'🏐', // 1F3D0
|
||||||
|
'🏳️', // 1F3F3-FE0F
|
||||||
|
'⚪', // 26AA
|
||||||
|
'⬜', // 2B1C
|
||||||
|
'◽', // 25FD
|
||||||
|
'◻️', // 25FB-FE0F
|
||||||
|
'▫️', // 25AB-FE0F
|
||||||
|
'🪽', // 1FAE8
|
||||||
|
'🪿', // 1FABF
|
||||||
|
];
|
102
app/javascript/mastodon/features/emoji/database.ts
Normal file
102
app/javascript/mastodon/features/emoji/database.ts
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
import { SUPPORTED_LOCALES } from 'emojibase';
|
||||||
|
import type { FlatCompactEmoji, Locale } from 'emojibase';
|
||||||
|
import type { DBSchema } from 'idb';
|
||||||
|
import { openDB } from 'idb';
|
||||||
|
|
||||||
|
import type { ApiCustomEmojiJSON } from '@/mastodon/api_types/custom_emoji';
|
||||||
|
|
||||||
|
import type { LocaleOrCustom } from './locale';
|
||||||
|
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
|
||||||
|
|
||||||
|
interface EmojiDB extends LocaleTables, DBSchema {
|
||||||
|
custom: {
|
||||||
|
key: string;
|
||||||
|
value: ApiCustomEmojiJSON;
|
||||||
|
indexes: {
|
||||||
|
category: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
etags: {
|
||||||
|
key: LocaleOrCustom;
|
||||||
|
value: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocaleTable {
|
||||||
|
key: string;
|
||||||
|
value: FlatCompactEmoji;
|
||||||
|
indexes: {
|
||||||
|
group: number;
|
||||||
|
label: string;
|
||||||
|
order: number;
|
||||||
|
tags: string[];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
type LocaleTables = Record<Locale, LocaleTable>;
|
||||||
|
|
||||||
|
const SCHEMA_VERSION = 1;
|
||||||
|
|
||||||
|
const db = await openDB<EmojiDB>('mastodon-emoji', SCHEMA_VERSION, {
|
||||||
|
upgrade(database) {
|
||||||
|
const customTable = database.createObjectStore('custom', {
|
||||||
|
keyPath: 'shortcode',
|
||||||
|
autoIncrement: false,
|
||||||
|
});
|
||||||
|
customTable.createIndex('category', 'category');
|
||||||
|
|
||||||
|
database.createObjectStore('etags');
|
||||||
|
|
||||||
|
for (const locale of SUPPORTED_LOCALES) {
|
||||||
|
const localeTable = database.createObjectStore(locale, {
|
||||||
|
keyPath: 'hexcode',
|
||||||
|
autoIncrement: false,
|
||||||
|
});
|
||||||
|
localeTable.createIndex('group', 'group');
|
||||||
|
localeTable.createIndex('label', 'label');
|
||||||
|
localeTable.createIndex('order', 'order');
|
||||||
|
localeTable.createIndex('tags', 'tags', { multiEntry: true });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export async function putEmojiData(emojis: FlatCompactEmoji[], locale: Locale) {
|
||||||
|
const trx = db.transaction(locale, 'readwrite');
|
||||||
|
await Promise.all(emojis.map((emoji) => trx.store.put(emoji)));
|
||||||
|
await trx.done;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function putCustomEmojiData(emojis: ApiCustomEmojiJSON[]) {
|
||||||
|
const trx = db.transaction('custom', 'readwrite');
|
||||||
|
await Promise.all(emojis.map((emoji) => trx.store.put(emoji)));
|
||||||
|
await trx.done;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function putLatestEtag(etag: string, localeString: string) {
|
||||||
|
const locale = toSupportedLocaleOrCustom(localeString);
|
||||||
|
return db.put('etags', etag, locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function searchEmojiByHexcode(hexcode: string, localeString: string) {
|
||||||
|
const locale = toSupportedLocale(localeString);
|
||||||
|
return db.get(locale, hexcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function searchEmojiByTag(tag: string, localeString: string) {
|
||||||
|
const locale = toSupportedLocale(localeString);
|
||||||
|
const range = IDBKeyRange.only(tag.toLowerCase());
|
||||||
|
return db.getAllFromIndex(locale, 'tags', range);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function searchCustomEmojiByShortcode(shortcode: string) {
|
||||||
|
return db.get('custom', shortcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function loadLatestEtag(localeString: string) {
|
||||||
|
const locale = toSupportedLocaleOrCustom(localeString);
|
||||||
|
const rowCount = await db.count(locale);
|
||||||
|
if (!rowCount) {
|
||||||
|
return null; // No data for this locale, return null even if there is an etag.
|
||||||
|
}
|
||||||
|
const etag = await db.get('etags', locale);
|
||||||
|
return etag ?? null;
|
||||||
|
}
|
38
app/javascript/mastodon/features/emoji/index.ts
Normal file
38
app/javascript/mastodon/features/emoji/index.ts
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
import initialState from '@/mastodon/initial_state';
|
||||||
|
|
||||||
|
import { toSupportedLocale } from './locale';
|
||||||
|
|
||||||
|
const serverLocale = toSupportedLocale(initialState?.meta.locale ?? 'en');
|
||||||
|
|
||||||
|
const worker =
|
||||||
|
'Worker' in window
|
||||||
|
? new Worker(new URL('./worker', import.meta.url), {
|
||||||
|
type: 'module',
|
||||||
|
})
|
||||||
|
: null;
|
||||||
|
|
||||||
|
export async function initializeEmoji() {
|
||||||
|
if (worker) {
|
||||||
|
worker.addEventListener('message', (event: MessageEvent<string>) => {
|
||||||
|
const { data: message } = event;
|
||||||
|
if (message === 'ready') {
|
||||||
|
worker.postMessage(serverLocale);
|
||||||
|
worker.postMessage('custom');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const { importCustomEmojiData, importEmojiData } = await import('./loader');
|
||||||
|
await Promise.all([importCustomEmojiData(), importEmojiData(serverLocale)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function loadEmojiLocale(localeString: string) {
|
||||||
|
const locale = toSupportedLocale(localeString);
|
||||||
|
|
||||||
|
if (worker) {
|
||||||
|
worker.postMessage(locale);
|
||||||
|
} else {
|
||||||
|
const { importEmojiData } = await import('./loader');
|
||||||
|
await importEmojiData(locale);
|
||||||
|
}
|
||||||
|
}
|
77
app/javascript/mastodon/features/emoji/loader.ts
Normal file
77
app/javascript/mastodon/features/emoji/loader.ts
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
import { flattenEmojiData } from 'emojibase';
|
||||||
|
import type { CompactEmoji, FlatCompactEmoji } from 'emojibase';
|
||||||
|
|
||||||
|
import type { ApiCustomEmojiJSON } from '@/mastodon/api_types/custom_emoji';
|
||||||
|
import { isDevelopment } from '@/mastodon/utils/environment';
|
||||||
|
|
||||||
|
import {
|
||||||
|
putEmojiData,
|
||||||
|
putCustomEmojiData,
|
||||||
|
loadLatestEtag,
|
||||||
|
putLatestEtag,
|
||||||
|
} from './database';
|
||||||
|
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
|
||||||
|
import type { LocaleOrCustom } from './locale';
|
||||||
|
|
||||||
|
export async function importEmojiData(localeString: string) {
|
||||||
|
const locale = toSupportedLocale(localeString);
|
||||||
|
const emojis = await fetchAndCheckEtag<CompactEmoji[]>(locale);
|
||||||
|
if (!emojis) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const flattenedEmojis: FlatCompactEmoji[] = flattenEmojiData(emojis);
|
||||||
|
await putEmojiData(flattenedEmojis, locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function importCustomEmojiData() {
|
||||||
|
const emojis = await fetchAndCheckEtag<ApiCustomEmojiJSON[]>('custom');
|
||||||
|
if (!emojis) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await putCustomEmojiData(emojis);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchAndCheckEtag<ResultType extends object[]>(
|
||||||
|
localeOrCustom: LocaleOrCustom,
|
||||||
|
): Promise<ResultType | null> {
|
||||||
|
const locale = toSupportedLocaleOrCustom(localeOrCustom);
|
||||||
|
|
||||||
|
let uri: string;
|
||||||
|
if (locale === 'custom') {
|
||||||
|
uri = '/api/v1/custom_emojis';
|
||||||
|
} else {
|
||||||
|
uri = `/packs${isDevelopment() ? '-dev' : ''}/emoji/${locale}.json`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const oldEtag = await loadLatestEtag(locale);
|
||||||
|
const response = await fetch(uri, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'If-None-Match': oldEtag ?? '', // Send the old ETag to check for modifications
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// If not modified, return null
|
||||||
|
if (response.status === 304) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to fetch emoji data for ${localeOrCustom}: ${response.statusText}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = (await response.json()) as ResultType;
|
||||||
|
if (!Array.isArray(data)) {
|
||||||
|
throw new Error(
|
||||||
|
`Unexpected data format for ${localeOrCustom}: expected an array`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store the ETag for future requests
|
||||||
|
const etag = response.headers.get('ETag');
|
||||||
|
if (etag) {
|
||||||
|
await putLatestEtag(etag, localeOrCustom);
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
29
app/javascript/mastodon/features/emoji/locale.test.ts
Normal file
29
app/javascript/mastodon/features/emoji/locale.test.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import { SUPPORTED_LOCALES } from 'emojibase';
|
||||||
|
|
||||||
|
import { toSupportedLocale, toSupportedLocaleOrCustom } from './locale';
|
||||||
|
|
||||||
|
describe('toSupportedLocale', () => {
|
||||||
|
test('returns the same locale if it is supported', () => {
|
||||||
|
for (const locale of SUPPORTED_LOCALES) {
|
||||||
|
expect(toSupportedLocale(locale)).toBe(locale);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test('returns "en" for unsupported locales', () => {
|
||||||
|
const unsupportedLocales = ['xx', 'fr-CA'];
|
||||||
|
for (const locale of unsupportedLocales) {
|
||||||
|
expect(toSupportedLocale(locale)).toBe('en');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('toSupportedLocaleOrCustom', () => {
|
||||||
|
test('returns custom for "custom" locale', () => {
|
||||||
|
expect(toSupportedLocaleOrCustom('custom')).toBe('custom');
|
||||||
|
});
|
||||||
|
test('returns supported locale for valid locales', () => {
|
||||||
|
for (const locale of SUPPORTED_LOCALES) {
|
||||||
|
expect(toSupportedLocaleOrCustom(locale)).toBe(locale);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
23
app/javascript/mastodon/features/emoji/locale.ts
Normal file
23
app/javascript/mastodon/features/emoji/locale.ts
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import type { Locale } from 'emojibase';
|
||||||
|
import { SUPPORTED_LOCALES } from 'emojibase';
|
||||||
|
|
||||||
|
export type LocaleOrCustom = Locale | 'custom';
|
||||||
|
|
||||||
|
export function toSupportedLocale(localeBase: string): Locale {
|
||||||
|
const locale = localeBase.toLowerCase();
|
||||||
|
if (isSupportedLocale(locale)) {
|
||||||
|
return locale;
|
||||||
|
}
|
||||||
|
return 'en'; // Default to English if unsupported
|
||||||
|
}
|
||||||
|
|
||||||
|
export function toSupportedLocaleOrCustom(locale: string): LocaleOrCustom {
|
||||||
|
if (locale.toLowerCase() === 'custom') {
|
||||||
|
return 'custom';
|
||||||
|
}
|
||||||
|
return toSupportedLocale(locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isSupportedLocale(locale: string): locale is Locale {
|
||||||
|
return SUPPORTED_LOCALES.includes(locale.toLowerCase() as Locale);
|
||||||
|
}
|
101
app/javascript/mastodon/features/emoji/normalize.test.ts
Normal file
101
app/javascript/mastodon/features/emoji/normalize.test.ts
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
import { readdir } from 'fs/promises';
|
||||||
|
import { basename, resolve } from 'path';
|
||||||
|
|
||||||
|
import { flattenEmojiData } from 'emojibase';
|
||||||
|
import unicodeRawEmojis from 'emojibase-data/en/data.json';
|
||||||
|
|
||||||
|
import {
|
||||||
|
twemojiHasBorder,
|
||||||
|
twemojiToUnicodeInfo,
|
||||||
|
unicodeToTwemojiHex,
|
||||||
|
CODES_WITH_DARK_BORDER,
|
||||||
|
CODES_WITH_LIGHT_BORDER,
|
||||||
|
emojiToUnicodeHex,
|
||||||
|
} from './normalize';
|
||||||
|
|
||||||
|
const emojiSVGFiles = await readdir(
|
||||||
|
// This assumes tests are run from project root
|
||||||
|
resolve(process.cwd(), 'public/emoji'),
|
||||||
|
{
|
||||||
|
withFileTypes: true,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
const svgFileNames = emojiSVGFiles
|
||||||
|
.filter((file) => file.isFile() && file.name.endsWith('.svg'))
|
||||||
|
.map((file) => basename(file.name, '.svg').toUpperCase());
|
||||||
|
const svgFileNamesWithoutBorder = svgFileNames.filter(
|
||||||
|
(fileName) => !fileName.endsWith('_BORDER'),
|
||||||
|
);
|
||||||
|
|
||||||
|
const unicodeEmojis = flattenEmojiData(unicodeRawEmojis);
|
||||||
|
|
||||||
|
describe('emojiToUnicodeHex', () => {
|
||||||
|
test.concurrent.for([
|
||||||
|
['🎱', '1F3B1'],
|
||||||
|
['🐜', '1F41C'],
|
||||||
|
['⚫', '26AB'],
|
||||||
|
['🖤', '1F5A4'],
|
||||||
|
['💀', '1F480'],
|
||||||
|
['💂♂️', '1F482-200D-2642-FE0F'],
|
||||||
|
] as const)(
|
||||||
|
'emojiToUnicodeHex converts %s to %s',
|
||||||
|
([emoji, hexcode], { expect }) => {
|
||||||
|
expect(emojiToUnicodeHex(emoji)).toBe(hexcode);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('unicodeToTwemojiHex', () => {
|
||||||
|
test.concurrent.for(
|
||||||
|
unicodeEmojis
|
||||||
|
// Our version of Twemoji only supports up to version 15.1
|
||||||
|
.filter((emoji) => emoji.version < 16)
|
||||||
|
.map((emoji) => [emoji.hexcode, emoji.label] as [string, string]),
|
||||||
|
)('verifying an emoji exists for %s (%s)', ([hexcode], { expect }) => {
|
||||||
|
const result = unicodeToTwemojiHex(hexcode);
|
||||||
|
expect(svgFileNamesWithoutBorder).toContain(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('twemojiHasBorder', () => {
|
||||||
|
test.concurrent.for(
|
||||||
|
svgFileNames
|
||||||
|
.filter((file) => file.endsWith('_BORDER'))
|
||||||
|
.map((file) => {
|
||||||
|
const hexCode = file.replace('_BORDER', '');
|
||||||
|
return [
|
||||||
|
hexCode,
|
||||||
|
CODES_WITH_LIGHT_BORDER.includes(hexCode),
|
||||||
|
CODES_WITH_DARK_BORDER.includes(hexCode),
|
||||||
|
] as const;
|
||||||
|
}),
|
||||||
|
)('twemojiHasBorder for %s', ([hexCode, isLight, isDark], { expect }) => {
|
||||||
|
const result = twemojiHasBorder(hexCode);
|
||||||
|
expect(result).toHaveProperty('hexCode', hexCode);
|
||||||
|
expect(result).toHaveProperty('hasLightBorder', isLight);
|
||||||
|
expect(result).toHaveProperty('hasDarkBorder', isDark);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('twemojiToUnicodeInfo', () => {
|
||||||
|
const unicodeCodeSet = new Set(unicodeEmojis.map((emoji) => emoji.hexcode));
|
||||||
|
|
||||||
|
test.concurrent.for(svgFileNamesWithoutBorder)(
|
||||||
|
'verifying SVG file %s maps to Unicode emoji',
|
||||||
|
(svgFileName, { expect }) => {
|
||||||
|
assert(!!svgFileName);
|
||||||
|
const result = twemojiToUnicodeInfo(svgFileName);
|
||||||
|
const hexcode = typeof result === 'string' ? result : result.unqualified;
|
||||||
|
if (!hexcode) {
|
||||||
|
// No hexcode means this is a special case like the Shibuya 109 emoji
|
||||||
|
expect(result).toHaveProperty('label');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assert(!!hexcode);
|
||||||
|
expect(
|
||||||
|
unicodeCodeSet.has(hexcode),
|
||||||
|
`${hexcode} (${svgFileName}) not found`,
|
||||||
|
).toBeTruthy();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
173
app/javascript/mastodon/features/emoji/normalize.ts
Normal file
173
app/javascript/mastodon/features/emoji/normalize.ts
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
import {
|
||||||
|
VARIATION_SELECTOR_CODE,
|
||||||
|
KEYCAP_CODE,
|
||||||
|
GENDER_FEMALE_CODE,
|
||||||
|
GENDER_MALE_CODE,
|
||||||
|
SKIN_TONE_CODES,
|
||||||
|
EMOJIS_WITH_DARK_BORDER,
|
||||||
|
EMOJIS_WITH_LIGHT_BORDER,
|
||||||
|
} from './constants';
|
||||||
|
|
||||||
|
// Misc codes that have special handling
|
||||||
|
const SKIER_CODE = 0x26f7;
|
||||||
|
const CHRISTMAS_TREE_CODE = 0x1f384;
|
||||||
|
const MR_CLAUS_CODE = 0x1f385;
|
||||||
|
const EYE_CODE = 0x1f441;
|
||||||
|
const LEVITATING_PERSON_CODE = 0x1f574;
|
||||||
|
const SPEECH_BUBBLE_CODE = 0x1f5e8;
|
||||||
|
const MS_CLAUS_CODE = 0x1f936;
|
||||||
|
|
||||||
|
export function emojiToUnicodeHex(emoji: string): string {
|
||||||
|
const codes: number[] = [];
|
||||||
|
for (const char of emoji) {
|
||||||
|
const code = char.codePointAt(0);
|
||||||
|
if (code !== undefined) {
|
||||||
|
codes.push(code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hexNumbersToString(codes);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function unicodeToTwemojiHex(unicodeHex: string): string {
|
||||||
|
const codes = hexStringToNumbers(unicodeHex);
|
||||||
|
const normalizedCodes: number[] = [];
|
||||||
|
for (let i = 0; i < codes.length; i++) {
|
||||||
|
const code = codes[i];
|
||||||
|
if (!code) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Some emoji have their variation selector removed
|
||||||
|
if (code === VARIATION_SELECTOR_CODE) {
|
||||||
|
// Key emoji
|
||||||
|
if (i === 1 && codes.at(-1) === KEYCAP_CODE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Eye in speech bubble
|
||||||
|
if (codes.at(0) === EYE_CODE && codes.at(-2) === SPEECH_BUBBLE_CODE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// This removes zero padding to correctly match the SVG filenames
|
||||||
|
normalizedCodes.push(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hexNumbersToString(normalizedCodes, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TwemojiBorderInfo {
|
||||||
|
hexCode: string;
|
||||||
|
hasLightBorder: boolean;
|
||||||
|
hasDarkBorder: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const CODES_WITH_DARK_BORDER =
|
||||||
|
EMOJIS_WITH_DARK_BORDER.map(emojiToUnicodeHex);
|
||||||
|
|
||||||
|
export const CODES_WITH_LIGHT_BORDER =
|
||||||
|
EMOJIS_WITH_LIGHT_BORDER.map(emojiToUnicodeHex);
|
||||||
|
|
||||||
|
export function twemojiHasBorder(twemojiHex: string): TwemojiBorderInfo {
|
||||||
|
const normalizedHex = twemojiHex.toUpperCase();
|
||||||
|
let hasLightBorder = false;
|
||||||
|
let hasDarkBorder = false;
|
||||||
|
if (CODES_WITH_LIGHT_BORDER.includes(normalizedHex)) {
|
||||||
|
hasLightBorder = true;
|
||||||
|
}
|
||||||
|
if (CODES_WITH_DARK_BORDER.includes(normalizedHex)) {
|
||||||
|
hasDarkBorder = true;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
hexCode: normalizedHex,
|
||||||
|
hasLightBorder,
|
||||||
|
hasDarkBorder,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TwemojiSpecificEmoji {
|
||||||
|
unqualified?: string;
|
||||||
|
gender?: number;
|
||||||
|
skin?: number;
|
||||||
|
label?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normalize man/woman to male/female
|
||||||
|
const GENDER_CODES_MAP: Record<number, number> = {
|
||||||
|
[GENDER_FEMALE_CODE]: GENDER_FEMALE_CODE,
|
||||||
|
[GENDER_MALE_CODE]: GENDER_MALE_CODE,
|
||||||
|
// These are man/woman markers, but are used for gender sometimes.
|
||||||
|
[0x1f468]: GENDER_MALE_CODE,
|
||||||
|
[0x1f469]: GENDER_FEMALE_CODE,
|
||||||
|
};
|
||||||
|
|
||||||
|
const TWEMOJI_SPECIAL_CASES: Record<string, string | TwemojiSpecificEmoji> = {
|
||||||
|
'1F441-200D-1F5E8': '1F441-FE0F-200D-1F5E8-FE0F', // Eye in speech bubble
|
||||||
|
// An emoji that was never ported to the Unicode standard.
|
||||||
|
// See: https://emojipedia.org/shibuya
|
||||||
|
E50A: { label: 'Shibuya 109' },
|
||||||
|
};
|
||||||
|
|
||||||
|
export function twemojiToUnicodeInfo(
|
||||||
|
twemojiHex: string,
|
||||||
|
): TwemojiSpecificEmoji | string {
|
||||||
|
const specialCase = TWEMOJI_SPECIAL_CASES[twemojiHex.toUpperCase()];
|
||||||
|
if (specialCase) {
|
||||||
|
return specialCase;
|
||||||
|
}
|
||||||
|
const codes = hexStringToNumbers(twemojiHex);
|
||||||
|
let gender: undefined | number;
|
||||||
|
let skin: undefined | number;
|
||||||
|
for (const code of codes) {
|
||||||
|
if (!gender && code in GENDER_CODES_MAP) {
|
||||||
|
gender = GENDER_CODES_MAP[code];
|
||||||
|
} else if (!skin && code in SKIN_TONE_CODES) {
|
||||||
|
skin = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exit if we have both skin and gender
|
||||||
|
if (skin && gender) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mappedCodes: unknown[] = codes;
|
||||||
|
|
||||||
|
if (codes.at(-1) === CHRISTMAS_TREE_CODE && codes.length >= 3 && gender) {
|
||||||
|
// Twemoji uses the christmas tree with a ZWJ for Mr. and Mrs. Claus,
|
||||||
|
// but in Unicode that only works for Mx. Claus.
|
||||||
|
const START_CODE =
|
||||||
|
gender === GENDER_FEMALE_CODE ? MS_CLAUS_CODE : MR_CLAUS_CODE;
|
||||||
|
mappedCodes = [START_CODE, skin];
|
||||||
|
} else if (codes.at(-1) === KEYCAP_CODE && codes.length === 2) {
|
||||||
|
// For key emoji, insert the variation selector
|
||||||
|
mappedCodes = [codes[0], VARIATION_SELECTOR_CODE, KEYCAP_CODE];
|
||||||
|
} else if (
|
||||||
|
(codes.at(0) === SKIER_CODE || codes.at(0) === LEVITATING_PERSON_CODE) &&
|
||||||
|
codes.length > 1
|
||||||
|
) {
|
||||||
|
// Twemoji offers more gender and skin options for the skier and levitating person emoji.
|
||||||
|
return {
|
||||||
|
unqualified: hexNumbersToString([codes.at(0)]),
|
||||||
|
skin,
|
||||||
|
gender,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return hexNumbersToString(mappedCodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
function hexStringToNumbers(hexString: string): number[] {
|
||||||
|
return hexString
|
||||||
|
.split('-')
|
||||||
|
.map((code) => Number.parseInt(code, 16))
|
||||||
|
.filter((code) => !Number.isNaN(code));
|
||||||
|
}
|
||||||
|
|
||||||
|
function hexNumbersToString(codes: unknown[], padding = 4): string {
|
||||||
|
return codes
|
||||||
|
.filter(
|
||||||
|
(code): code is number =>
|
||||||
|
typeof code === 'number' && code > 0 && !Number.isNaN(code),
|
||||||
|
)
|
||||||
|
.map((code) => code.toString(16).padStart(padding, '0').toUpperCase())
|
||||||
|
.join('-');
|
||||||
|
}
|
13
app/javascript/mastodon/features/emoji/worker.ts
Normal file
13
app/javascript/mastodon/features/emoji/worker.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
import { importEmojiData, importCustomEmojiData } from './loader';
|
||||||
|
|
||||||
|
addEventListener('message', handleMessage);
|
||||||
|
self.postMessage('ready'); // After the worker is ready, notify the main thread
|
||||||
|
|
||||||
|
function handleMessage(event: MessageEvent<string>) {
|
||||||
|
const { data: locale } = event;
|
||||||
|
if (locale !== 'custom') {
|
||||||
|
void importEmojiData(locale);
|
||||||
|
} else {
|
||||||
|
void importCustomEmojiData();
|
||||||
|
}
|
||||||
|
}
|
|
@ -50,16 +50,22 @@ export const MoreLink: React.FC = () => {
|
||||||
|
|
||||||
const menu = useMemo(() => {
|
const menu = useMemo(() => {
|
||||||
const arr: MenuItem[] = [
|
const arr: MenuItem[] = [
|
||||||
{ text: intl.formatMessage(messages.filters), href: '/filters' },
|
|
||||||
{ text: intl.formatMessage(messages.mutes), to: '/mutes' },
|
|
||||||
{ text: intl.formatMessage(messages.blocks), to: '/blocks' },
|
|
||||||
{
|
{
|
||||||
text: intl.formatMessage(messages.domainBlocks),
|
href: '/filters',
|
||||||
to: '/domain_blocks',
|
text: intl.formatMessage(messages.filters),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
to: '/mutes',
|
||||||
|
text: intl.formatMessage(messages.mutes),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
to: '/blocks',
|
||||||
|
text: intl.formatMessage(messages.blocks),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
to: '/domain_blocks',
|
||||||
|
text: intl.formatMessage(messages.domainBlocks),
|
||||||
},
|
},
|
||||||
];
|
|
||||||
|
|
||||||
arr.push(
|
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
href: '/settings/privacy',
|
href: '/settings/privacy',
|
||||||
|
@ -77,7 +83,7 @@ export const MoreLink: React.FC = () => {
|
||||||
href: '/settings/export',
|
href: '/settings/export',
|
||||||
text: intl.formatMessage(messages.importExport),
|
text: intl.formatMessage(messages.importExport),
|
||||||
},
|
},
|
||||||
);
|
];
|
||||||
|
|
||||||
if (canManageReports(permissions)) {
|
if (canManageReports(permissions)) {
|
||||||
arr.push(null, {
|
arr.push(null, {
|
||||||
|
@ -106,7 +112,7 @@ export const MoreLink: React.FC = () => {
|
||||||
}, [intl, dispatch, permissions]);
|
}, [intl, dispatch, permissions]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dropdown items={menu}>
|
<Dropdown items={menu} placement='bottom-start'>
|
||||||
<button className='column-link column-link--transparent'>
|
<button className='column-link column-link--transparent'>
|
||||||
<Icon id='' icon={MoreHorizIcon} className='column-link__icon' />
|
<Icon id='' icon={MoreHorizIcon} className='column-link__icon' />
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useCallback } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
|
|
||||||
import { defineMessages, useIntl } from 'react-intl';
|
import { defineMessages, useIntl } from 'react-intl';
|
||||||
|
|
||||||
|
@ -21,6 +21,9 @@ import { openModal } from 'mastodon/actions/modal';
|
||||||
import { IconButton } from 'mastodon/components/icon_button';
|
import { IconButton } from 'mastodon/components/icon_button';
|
||||||
import { useIdentity } from 'mastodon/identity_context';
|
import { useIdentity } from 'mastodon/identity_context';
|
||||||
import { me } from 'mastodon/initial_state';
|
import { me } from 'mastodon/initial_state';
|
||||||
|
import type { Status } from 'mastodon/models/status';
|
||||||
|
import { makeGetStatus } from 'mastodon/selectors';
|
||||||
|
import type { RootState } from 'mastodon/store';
|
||||||
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
|
@ -47,6 +50,11 @@ const messages = defineMessages({
|
||||||
open: { id: 'status.open', defaultMessage: 'Expand this status' },
|
open: { id: 'status.open', defaultMessage: 'Expand this status' },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
type GetStatusSelector = (
|
||||||
|
state: RootState,
|
||||||
|
props: { id?: string | null; contextType?: string },
|
||||||
|
) => Status | null;
|
||||||
|
|
||||||
export const Footer: React.FC<{
|
export const Footer: React.FC<{
|
||||||
statusId: string;
|
statusId: string;
|
||||||
withOpenButton?: boolean;
|
withOpenButton?: boolean;
|
||||||
|
@ -56,7 +64,8 @@ export const Footer: React.FC<{
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const status = useAppSelector((state) => state.statuses.get(statusId));
|
const getStatus = useMemo(() => makeGetStatus(), []) as GetStatusSelector;
|
||||||
|
const status = useAppSelector((state) => getStatus(state, { id: statusId }));
|
||||||
const accountId = status?.get('account') as string | undefined;
|
const accountId = status?.get('account') as string | undefined;
|
||||||
const account = useAppSelector((state) =>
|
const account = useAppSelector((state) =>
|
||||||
accountId ? state.accounts.get(accountId) : undefined,
|
accountId ? state.accounts.get(accountId) : undefined,
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
import { useEffect, useState, useCallback } from 'react';
|
||||||
|
|
||||||
|
import { useIntl, defineMessages, FormattedMessage } from 'react-intl';
|
||||||
|
|
||||||
|
import classNames from 'classnames';
|
||||||
|
|
||||||
|
import {
|
||||||
|
fetchContext,
|
||||||
|
completeContextRefresh,
|
||||||
|
} from 'mastodon/actions/statuses';
|
||||||
|
import type { AsyncRefreshHeader } from 'mastodon/api';
|
||||||
|
import { apiGetAsyncRefresh } from 'mastodon/api/async_refreshes';
|
||||||
|
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
|
||||||
|
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
|
const messages = defineMessages({
|
||||||
|
loading: {
|
||||||
|
id: 'status.context.loading',
|
||||||
|
defaultMessage: 'Checking for more replies',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export const RefreshController: React.FC<{
|
||||||
|
statusId: string;
|
||||||
|
withBorder?: boolean;
|
||||||
|
}> = ({ statusId, withBorder }) => {
|
||||||
|
const refresh = useAppSelector(
|
||||||
|
(state) => state.contexts.refreshing[statusId],
|
||||||
|
);
|
||||||
|
const dispatch = useAppDispatch();
|
||||||
|
const intl = useIntl();
|
||||||
|
const [ready, setReady] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
let timeoutId: ReturnType<typeof setTimeout>;
|
||||||
|
|
||||||
|
const scheduleRefresh = (refresh: AsyncRefreshHeader) => {
|
||||||
|
timeoutId = setTimeout(() => {
|
||||||
|
void apiGetAsyncRefresh(refresh.id).then((result) => {
|
||||||
|
if (result.async_refresh.status === 'finished') {
|
||||||
|
dispatch(completeContextRefresh({ statusId }));
|
||||||
|
|
||||||
|
if (result.async_refresh.result_count > 0) {
|
||||||
|
setReady(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
scheduleRefresh(refresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
}, refresh.retry * 1000);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (refresh) {
|
||||||
|
scheduleRefresh(refresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
clearTimeout(timeoutId);
|
||||||
|
};
|
||||||
|
}, [dispatch, setReady, statusId, refresh]);
|
||||||
|
|
||||||
|
const handleClick = useCallback(() => {
|
||||||
|
void dispatch(fetchContext({ statusId }));
|
||||||
|
}, [dispatch, statusId]);
|
||||||
|
|
||||||
|
if (ready) {
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
className={classNames('load-more load-gap', {
|
||||||
|
'timeline-hint--with-descendants': withBorder,
|
||||||
|
})}
|
||||||
|
onClick={handleClick}
|
||||||
|
>
|
||||||
|
<FormattedMessage
|
||||||
|
id='status.context.load_new_replies'
|
||||||
|
defaultMessage='New replies available'
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!refresh) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={classNames('load-more load-gap', {
|
||||||
|
'timeline-hint--with-descendants': withBorder,
|
||||||
|
})}
|
||||||
|
aria-busy
|
||||||
|
aria-live='polite'
|
||||||
|
aria-label={intl.formatMessage(messages.loading)}
|
||||||
|
>
|
||||||
|
<LoadingIndicator />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
|
@ -69,7 +69,7 @@ import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from
|
||||||
|
|
||||||
import ActionBar from './components/action_bar';
|
import ActionBar from './components/action_bar';
|
||||||
import { DetailedStatus } from './components/detailed_status';
|
import { DetailedStatus } from './components/detailed_status';
|
||||||
|
import { RefreshController } from './components/refresh_controller';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
|
revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
|
||||||
|
@ -549,7 +549,7 @@ class Status extends ImmutablePureComponent {
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
let ancestors, descendants, remoteHint;
|
let ancestors, descendants, remoteHint;
|
||||||
const { isLoading, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props;
|
const { isLoading, status, ancestorsIds, descendantsIds, refresh, intl, domain, multiColumn, pictureInPicture } = this.props;
|
||||||
const { fullscreen } = this.state;
|
const { fullscreen } = this.state;
|
||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
|
@ -579,11 +579,9 @@ class Status extends ImmutablePureComponent {
|
||||||
|
|
||||||
if (!isLocal) {
|
if (!isLocal) {
|
||||||
remoteHint = (
|
remoteHint = (
|
||||||
<TimelineHint
|
<RefreshController
|
||||||
className={classNames(!!descendants && 'timeline-hint--with-descendants')}
|
statusId={status.get('id')}
|
||||||
url={status.get('url')}
|
withBorder={!!descendants}
|
||||||
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> }} />}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,13 +8,14 @@ import { openURL } from 'mastodon/actions/search';
|
||||||
import { useAppDispatch } from 'mastodon/store';
|
import { useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
const isMentionClick = (element: HTMLAnchorElement) =>
|
const isMentionClick = (element: HTMLAnchorElement) =>
|
||||||
element.classList.contains('mention');
|
element.classList.contains('mention') &&
|
||||||
|
!element.classList.contains('hashtag');
|
||||||
|
|
||||||
const isHashtagClick = (element: HTMLAnchorElement) =>
|
const isHashtagClick = (element: HTMLAnchorElement) =>
|
||||||
element.textContent?.[0] === '#' ||
|
element.textContent?.[0] === '#' ||
|
||||||
element.previousSibling?.textContent?.endsWith('#');
|
element.previousSibling?.textContent?.endsWith('#');
|
||||||
|
|
||||||
export const useLinks = () => {
|
export const useLinks = (skipHashtags?: boolean) => {
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
|
@ -61,12 +62,12 @@ export const useLinks = () => {
|
||||||
if (isMentionClick(target)) {
|
if (isMentionClick(target)) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
void handleMentionClick(target);
|
void handleMentionClick(target);
|
||||||
} else if (isHashtagClick(target)) {
|
} else if (isHashtagClick(target) && !skipHashtags) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
handleHashtagClick(target);
|
handleHashtagClick(target);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[handleMentionClick, handleHashtagClick],
|
[skipHashtags, handleMentionClick, handleHashtagClick],
|
||||||
);
|
);
|
||||||
|
|
||||||
return handleClick;
|
return handleClick;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
// @ts-check
|
// @ts-check
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {[code: string, name: string, localName: string]} InitialStateLanguage
|
* @typedef {[code: string, name: string, localName: string]} InitialStateLanguage
|
||||||
*/
|
*/
|
||||||
|
@ -64,6 +63,7 @@
|
||||||
* @property {boolean=} critical_updates_pending
|
* @property {boolean=} critical_updates_pending
|
||||||
* @property {InitialStateMeta} meta
|
* @property {InitialStateMeta} meta
|
||||||
* @property {Role?} role
|
* @property {Role?} role
|
||||||
|
* @property {string[]} features
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const element = document.getElementById('initial-state');
|
const element = document.getElementById('initial-state');
|
||||||
|
@ -140,4 +140,12 @@ export function getAccessToken() {
|
||||||
return getMeta('access_token');
|
return getMeta('access_token');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} feature
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
export function isFeatureEnabled(feature) {
|
||||||
|
return initialState?.features?.includes(feature) || false;
|
||||||
|
}
|
||||||
|
|
||||||
export default initialState;
|
export default initialState;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"about.blocks": "خوادم تحت الإشراف",
|
"about.blocks": "خوادم تحت الإشراف",
|
||||||
"about.contact": "للاتصال:",
|
"about.contact": "للاتصال:",
|
||||||
|
"about.default_locale": "افتراضيالافتراضية",
|
||||||
"about.disclaimer": "ماستدون برنامج حر ومفتوح المصدر وعلامة تجارية لـ Mastodon GmbH.",
|
"about.disclaimer": "ماستدون برنامج حر ومفتوح المصدر وعلامة تجارية لـ Mastodon GmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "السبب غير متوفر",
|
"about.domain_blocks.no_reason_available": "السبب غير متوفر",
|
||||||
"about.domain_blocks.preamble": "يتيح مَستُدون عمومًا لمستخدميه مطالعة المحتوى من المستخدمين من الخواديم الأخرى في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادوم.",
|
"about.domain_blocks.preamble": "يتيح مَستُدون عمومًا لمستخدميه مطالعة المحتوى من المستخدمين من الخواديم الأخرى في الفدرالية والتفاعل معهم. وهذه هي الاستثناءات التي وضعت على هذا الخادوم.",
|
||||||
|
@ -8,6 +9,7 @@
|
||||||
"about.domain_blocks.silenced.title": "محدود",
|
"about.domain_blocks.silenced.title": "محدود",
|
||||||
"about.domain_blocks.suspended.explanation": "لن يتم معالجة أي بيانات من هذا الخادم أو تخزينها أو تبادلها، مما يجعل أي تفاعل أو اتصال مع المستخدمين من هذا الخادم مستحيلا.",
|
"about.domain_blocks.suspended.explanation": "لن يتم معالجة أي بيانات من هذا الخادم أو تخزينها أو تبادلها، مما يجعل أي تفاعل أو اتصال مع المستخدمين من هذا الخادم مستحيلا.",
|
||||||
"about.domain_blocks.suspended.title": "مُعلّق",
|
"about.domain_blocks.suspended.title": "مُعلّق",
|
||||||
|
"about.language_label": "اللغة",
|
||||||
"about.not_available": "لم يتم توفير هذه المعلومات على هذا الخادم.",
|
"about.not_available": "لم يتم توفير هذه المعلومات على هذا الخادم.",
|
||||||
"about.powered_by": "شبكة اجتماعية لامركزية مدعومة من {mastodon}",
|
"about.powered_by": "شبكة اجتماعية لامركزية مدعومة من {mastodon}",
|
||||||
"about.rules": "قواعد الخادم",
|
"about.rules": "قواعد الخادم",
|
||||||
|
@ -19,13 +21,21 @@
|
||||||
"account.block_domain": "حظر اسم النِّطاق {domain}",
|
"account.block_domain": "حظر اسم النِّطاق {domain}",
|
||||||
"account.block_short": "حظر",
|
"account.block_short": "حظر",
|
||||||
"account.blocked": "محظور",
|
"account.blocked": "محظور",
|
||||||
|
"account.blocking": "محظور",
|
||||||
"account.cancel_follow_request": "إلغاء طلب المتابعة",
|
"account.cancel_follow_request": "إلغاء طلب المتابعة",
|
||||||
"account.copy": "نسخ الرابط إلى الملف الشخصي",
|
"account.copy": "نسخ الرابط إلى الملف الشخصي",
|
||||||
"account.direct": "إشارة خاصة لـ @{name}",
|
"account.direct": "إشارة خاصة لـ @{name}",
|
||||||
"account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
|
"account.disable_notifications": "توقف عن إشعاري عندما ينشر @{name}",
|
||||||
|
"account.domain_blocking": "نطاق محظور",
|
||||||
"account.edit_profile": "تعديل الملف الشخصي",
|
"account.edit_profile": "تعديل الملف الشخصي",
|
||||||
"account.enable_notifications": "أشعرني عندما ينشر @{name}",
|
"account.enable_notifications": "أشعرني عندما ينشر @{name}",
|
||||||
"account.endorse": "أوصِ به على صفحتك الشخصية",
|
"account.endorse": "أوصِ به على صفحتك الشخصية",
|
||||||
|
"account.familiar_followers_many": "يتبعه {name1}، {name2} و{othersCount, plural, one {شخص آخر تعرفه} other {# أشخاص آخرون تعرفهم}}",
|
||||||
|
"account.familiar_followers_one": "يتبعه {name1}",
|
||||||
|
"account.familiar_followers_two": "يتبعه {name1} و {name2}",
|
||||||
|
"account.featured": "معروض",
|
||||||
|
"account.featured.accounts": "ملفات شخصية",
|
||||||
|
"account.featured.hashtags": "هاشتاقات",
|
||||||
"account.featured_tags.last_status_at": "آخر منشور في {date}",
|
"account.featured_tags.last_status_at": "آخر منشور في {date}",
|
||||||
"account.featured_tags.last_status_never": "لا توجد رسائل",
|
"account.featured_tags.last_status_never": "لا توجد رسائل",
|
||||||
"account.follow": "متابعة",
|
"account.follow": "متابعة",
|
||||||
|
@ -33,9 +43,11 @@
|
||||||
"account.followers": "مُتابِعون",
|
"account.followers": "مُتابِعون",
|
||||||
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
|
"account.followers.empty": "لا أحدَ يُتابع هذا المُستخدم إلى حد الآن.",
|
||||||
"account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two {مُتابعانِ اِثنان} few {{counter} مُتابِعين} many {{counter} مُتابِعًا} other {{counter} مُتابع}}",
|
"account.followers_counter": "{count, plural, zero{لا مُتابع} one {مُتابعٌ واحِد} two {مُتابعانِ اِثنان} few {{counter} مُتابِعين} many {{counter} مُتابِعًا} other {{counter} مُتابع}}",
|
||||||
|
"account.followers_you_know_counter": "{counter} شخص تعرفه",
|
||||||
"account.following": "الاشتراكات",
|
"account.following": "الاشتراكات",
|
||||||
"account.following_counter": "{count, plural, zero{لا يُتابِع أحدًا} one {يُتابِعُ واحد} two{يُتابِعُ اِثنان} few{يُتابِعُ {counter}} many{يُتابِعُ {counter}} other {يُتابِعُ {counter}}}",
|
"account.following_counter": "{count, plural, zero{لا يُتابِع أحدًا} one {يُتابِعُ واحد} two{يُتابِعُ اِثنان} few{يُتابِعُ {counter}} many{يُتابِعُ {counter}} other {يُتابِعُ {counter}}}",
|
||||||
"account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.",
|
"account.follows.empty": "لا يُتابع هذا المُستخدمُ أيَّ أحدٍ حتى الآن.",
|
||||||
|
"account.follows_you": "يتابعك",
|
||||||
"account.go_to_profile": "اذهب إلى الملف الشخصي",
|
"account.go_to_profile": "اذهب إلى الملف الشخصي",
|
||||||
"account.hide_reblogs": "إخفاء المعاد نشرها مِن @{name}",
|
"account.hide_reblogs": "إخفاء المعاد نشرها مِن @{name}",
|
||||||
"account.in_memoriam": "في الذكرى.",
|
"account.in_memoriam": "في الذكرى.",
|
||||||
|
@ -50,17 +62,23 @@
|
||||||
"account.mute_notifications_short": "كتم الإشعارات",
|
"account.mute_notifications_short": "كتم الإشعارات",
|
||||||
"account.mute_short": "اكتم",
|
"account.mute_short": "اكتم",
|
||||||
"account.muted": "مَكتوم",
|
"account.muted": "مَكتوم",
|
||||||
|
"account.muting": "مكتوم",
|
||||||
|
"account.mutual": "أنتم تتابعون بعضكم البعض",
|
||||||
"account.no_bio": "لم يتم تقديم وصف.",
|
"account.no_bio": "لم يتم تقديم وصف.",
|
||||||
"account.open_original_page": "افتح الصفحة الأصلية",
|
"account.open_original_page": "افتح الصفحة الأصلية",
|
||||||
"account.posts": "منشورات",
|
"account.posts": "منشورات",
|
||||||
"account.posts_with_replies": "المنشورات والرُدود",
|
"account.posts_with_replies": "المنشورات والرُدود",
|
||||||
|
"account.remove_from_followers": "إزالة {name} من المتابعين",
|
||||||
"account.report": "الإبلاغ عن @{name}",
|
"account.report": "الإبلاغ عن @{name}",
|
||||||
"account.requested": "في انتظار القبول. اضغط لإلغاء طلب المُتابعة",
|
"account.requested": "في انتظار القبول. اضغط لإلغاء طلب المُتابعة",
|
||||||
"account.requested_follow": "لقد طلب {name} متابعتك",
|
"account.requested_follow": "لقد طلب {name} متابعتك",
|
||||||
|
"account.requests_to_follow_you": "طلبات المتابعة",
|
||||||
"account.share": "شارِك الملف التعريفي لـ @{name}",
|
"account.share": "شارِك الملف التعريفي لـ @{name}",
|
||||||
"account.show_reblogs": "اعرض إعادات نشر @{name}",
|
"account.show_reblogs": "اعرض إعادات نشر @{name}",
|
||||||
|
"account.statuses_counter": "{count, plural, zero {}one {{counter} مشور} two {{counter} منشور} few {{counter} منشور} many {{counter} منشور} other {{counter} منشور}}",
|
||||||
"account.unblock": "إلغاء الحَظر عن @{name}",
|
"account.unblock": "إلغاء الحَظر عن @{name}",
|
||||||
"account.unblock_domain": "إلغاء الحَظر عن النِّطاق {domain}",
|
"account.unblock_domain": "إلغاء الحَظر عن النِّطاق {domain}",
|
||||||
|
"account.unblock_domain_short": "رفع الحظر",
|
||||||
"account.unblock_short": "ألغ الحجب",
|
"account.unblock_short": "ألغ الحجب",
|
||||||
"account.unendorse": "لا تُرَوِّج لهُ في الملف الشخصي",
|
"account.unendorse": "لا تُرَوِّج لهُ في الملف الشخصي",
|
||||||
"account.unfollow": "إلغاء المُتابعة",
|
"account.unfollow": "إلغاء المُتابعة",
|
||||||
|
@ -82,9 +100,33 @@
|
||||||
"alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.",
|
"alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.",
|
||||||
"alert.unexpected.title": "المعذرة!",
|
"alert.unexpected.title": "المعذرة!",
|
||||||
"alt_text_badge.title": "نص بديل",
|
"alt_text_badge.title": "نص بديل",
|
||||||
|
"alt_text_modal.add_alt_text": "أضف نصًا بديلًا",
|
||||||
|
"alt_text_modal.add_text_from_image": "أضف النص من الصورة",
|
||||||
"alt_text_modal.cancel": "إلغاء",
|
"alt_text_modal.cancel": "إلغاء",
|
||||||
|
"alt_text_modal.change_thumbnail": "غيّر الصورة المصغرة",
|
||||||
|
"alt_text_modal.describe_for_people_with_hearing_impairments": "قم بوصفها للأشخاص ذوي الإعاقة السمعية…",
|
||||||
|
"alt_text_modal.describe_for_people_with_visual_impairments": "قم بوصفها للأشخاص ذوي الإعاقة البصرية…",
|
||||||
|
"alt_text_modal.done": "تمّ",
|
||||||
"announcement.announcement": "إعلان",
|
"announcement.announcement": "إعلان",
|
||||||
"annual_report.summary.archetype.booster": "The cool-hunter",
|
"annual_report.summary.archetype.booster": "The cool-hunter",
|
||||||
|
"annual_report.summary.archetype.lurker": "المتصفح الصامت",
|
||||||
|
"annual_report.summary.archetype.oracle": "حكيم",
|
||||||
|
"annual_report.summary.archetype.pollster": "مستطلع للرأي",
|
||||||
|
"annual_report.summary.archetype.replier": "الفراشة الاجتماعية",
|
||||||
|
"annual_report.summary.followers.followers": "المُتابِعُون",
|
||||||
|
"annual_report.summary.followers.total": "{count} في المجمل",
|
||||||
|
"annual_report.summary.here_it_is": "هذا ملخص الخص بك لسنة {year}:",
|
||||||
|
"annual_report.summary.highlighted_post.by_favourites": "المنشور ذو أعلى عدد تفضيلات",
|
||||||
|
"annual_report.summary.highlighted_post.by_reblogs": "أكثر منشور مُعاد نشره",
|
||||||
|
"annual_report.summary.highlighted_post.by_replies": "المنشور بأعلى عدد تعليقات",
|
||||||
|
"annual_report.summary.highlighted_post.possessive": "من قبل {name}",
|
||||||
|
"annual_report.summary.most_used_app.most_used_app": "التطبيق الأكثر استخداماً",
|
||||||
|
"annual_report.summary.most_used_hashtag.most_used_hashtag": "الهاشتاق الأكثر استخداماً",
|
||||||
|
"annual_report.summary.most_used_hashtag.none": "لا شيء",
|
||||||
|
"annual_report.summary.new_posts.new_posts": "المنشورات الجديدة",
|
||||||
|
"annual_report.summary.percentile.text": "<topLabel>هذا يجعلك من بين أكثر </topLabel><percentage></percentage><bottomLabel>مستخدمي {domain} نشاطاً </bottomLabel>",
|
||||||
|
"annual_report.summary.percentile.we_wont_tell_bernie": "سيبقى هذا الأمر بيننا.",
|
||||||
|
"annual_report.summary.thanks": "شكرا لكونك جزءاً من ماستدون!",
|
||||||
"attachments_list.unprocessed": "(غير معالَج)",
|
"attachments_list.unprocessed": "(غير معالَج)",
|
||||||
"audio.hide": "إخفاء المقطع الصوتي",
|
"audio.hide": "إخفاء المقطع الصوتي",
|
||||||
"block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.",
|
"block_modal.remote_users_caveat": "سوف نطلب من الخادم {domain} أن يحترم قرارك، لكن الالتزام غير مضمون لأن بعض الخواديم قد تتعامل مع نصوص الكتل بشكل مختلف. قد تظل المنشورات العامة مرئية للمستخدمين غير المسجلين الدخول.",
|
||||||
|
@ -108,6 +150,7 @@
|
||||||
"bundle_column_error.routing.body": "تعذر العثور على الصفحة المطلوبة. هل أنت متأكد من أنّ الرابط التشعبي URL في شريط العناوين صحيح؟",
|
"bundle_column_error.routing.body": "تعذر العثور على الصفحة المطلوبة. هل أنت متأكد من أنّ الرابط التشعبي URL في شريط العناوين صحيح؟",
|
||||||
"bundle_column_error.routing.title": "404",
|
"bundle_column_error.routing.title": "404",
|
||||||
"bundle_modal_error.close": "إغلاق",
|
"bundle_modal_error.close": "إغلاق",
|
||||||
|
"bundle_modal_error.message": "حدث خطأ أثناء تحميل هذه الشاشة.",
|
||||||
"bundle_modal_error.retry": "إعادة المُحاولة",
|
"bundle_modal_error.retry": "إعادة المُحاولة",
|
||||||
"closed_registrations.other_server_instructions": "بما أن ماستدون لامركزي، يمكنك إنشاء حساب على خادم آخر للاستمرار في التفاعل مع هذا الخادم.",
|
"closed_registrations.other_server_instructions": "بما أن ماستدون لامركزي، يمكنك إنشاء حساب على خادم آخر للاستمرار في التفاعل مع هذا الخادم.",
|
||||||
"closed_registrations_modal.description": "لا يمكن إنشاء حساب على {domain} حاليا، ولكن على فكرة لست بحاجة إلى حساب على {domain} بذاته لاستخدام ماستدون.",
|
"closed_registrations_modal.description": "لا يمكن إنشاء حساب على {domain} حاليا، ولكن على فكرة لست بحاجة إلى حساب على {domain} بذاته لاستخدام ماستدون.",
|
||||||
|
@ -176,15 +219,32 @@
|
||||||
"confirmations.delete_list.confirm": "حذف",
|
"confirmations.delete_list.confirm": "حذف",
|
||||||
"confirmations.delete_list.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَذفَ هذِهِ القائمة بشكلٍ دائم؟",
|
"confirmations.delete_list.message": "هل أنتَ مُتأكدٌ أنكَ تُريدُ حَذفَ هذِهِ القائمة بشكلٍ دائم؟",
|
||||||
"confirmations.delete_list.title": "أتريد حذف القائمة؟",
|
"confirmations.delete_list.title": "أتريد حذف القائمة؟",
|
||||||
|
"confirmations.discard_draft.confirm": "تجاهل ومتابعة",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "استئناف التعديل",
|
||||||
|
"confirmations.discard_draft.edit.message": "سيتم تجاهل أي تغييرات قمت بها على هذا المنشور.",
|
||||||
|
"confirmations.discard_draft.edit.title": "تجاهل التغييرات على منشورك؟",
|
||||||
|
"confirmations.discard_draft.post.cancel": "استئناف المسودة",
|
||||||
|
"confirmations.discard_draft.post.message": "عبر الاستمرار سيتم تجاهل المنشور الذي تقوم بكتابته الآن.",
|
||||||
|
"confirmations.discard_draft.post.title": "تجاهل مسودة منشورك؟",
|
||||||
"confirmations.discard_edit_media.confirm": "تجاهل",
|
"confirmations.discard_edit_media.confirm": "تجاهل",
|
||||||
"confirmations.discard_edit_media.message": "لديك تغييرات غير محفوظة لوصف الوسائط أو معاينتها، أتريد تجاهلها على أي حال؟",
|
"confirmations.discard_edit_media.message": "لديك تغييرات غير محفوظة لوصف الوسائط أو معاينتها، أتريد تجاهلها على أي حال؟",
|
||||||
|
"confirmations.follow_to_list.confirm": "متابعة وأضفه للقائمة",
|
||||||
|
"confirmations.follow_to_list.message": "يجب أن تتابع {name} لإضافتهم إلى قائمة.",
|
||||||
|
"confirmations.follow_to_list.title": "متابعة المستخدم؟",
|
||||||
"confirmations.logout.confirm": "خروج",
|
"confirmations.logout.confirm": "خروج",
|
||||||
"confirmations.logout.message": "متأكد من أنك تريد الخروج؟",
|
"confirmations.logout.message": "متأكد من أنك تريد الخروج؟",
|
||||||
"confirmations.logout.title": "أتريد المغادرة؟",
|
"confirmations.logout.title": "أتريد المغادرة؟",
|
||||||
|
"confirmations.missing_alt_text.confirm": "أضف نصًا بديلًا",
|
||||||
|
"confirmations.missing_alt_text.message": "يحتوي منشورك على وسائط دون نص بديل. إضافة أوصاف تساعد على جعل المحتوى متاحاً للمزيد من الأشخاص.",
|
||||||
|
"confirmations.missing_alt_text.secondary": "انشر على أي حال",
|
||||||
|
"confirmations.missing_alt_text.title": "أضف نصًا بديلًا؟",
|
||||||
"confirmations.mute.confirm": "أكتم",
|
"confirmations.mute.confirm": "أكتم",
|
||||||
"confirmations.redraft.confirm": "إزالة وإعادة الصياغة",
|
"confirmations.redraft.confirm": "إزالة وإعادة الصياغة",
|
||||||
"confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.",
|
"confirmations.redraft.message": "هل أنت متأكد من أنك تريد حذف هذا المنشور و إعادة صياغته؟ سوف تفقد جميع الإعجابات و الترقيات أما الردود المتصلة به فستُصبِح يتيمة.",
|
||||||
"confirmations.redraft.title": "أتريد حذف وإعادة صياغة المنشور؟",
|
"confirmations.redraft.title": "أتريد حذف وإعادة صياغة المنشور؟",
|
||||||
|
"confirmations.remove_from_followers.confirm": "إزالة المتابع",
|
||||||
|
"confirmations.remove_from_followers.message": "سيتوقف {name} عن متابعتك. هل بالتأكيد تريد المتابعة؟",
|
||||||
|
"confirmations.remove_from_followers.title": "إزالة المتابع؟",
|
||||||
"confirmations.unfollow.confirm": "إلغاء المتابعة",
|
"confirmations.unfollow.confirm": "إلغاء المتابعة",
|
||||||
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
|
"confirmations.unfollow.message": "متأكد من أنك تريد إلغاء متابعة {name} ؟",
|
||||||
"confirmations.unfollow.title": "إلغاء متابعة المستخدم؟",
|
"confirmations.unfollow.title": "إلغاء متابعة المستخدم؟",
|
||||||
|
@ -206,12 +266,15 @@
|
||||||
"disabled_account_banner.text": "حسابك {disabledAccount} معطل حاليا.",
|
"disabled_account_banner.text": "حسابك {disabledAccount} معطل حاليا.",
|
||||||
"dismissable_banner.community_timeline": "هذه هي أحدث المنشورات العامة من أشخاص تُستضاف حساباتهم على {domain}.",
|
"dismissable_banner.community_timeline": "هذه هي أحدث المنشورات العامة من أشخاص تُستضاف حساباتهم على {domain}.",
|
||||||
"dismissable_banner.dismiss": "رفض",
|
"dismissable_banner.dismiss": "رفض",
|
||||||
|
"dismissable_banner.public_timeline": "هذه أحدث المنشورات العامة على الشبكة الفيدرالية التي يتابعها مستخدمي نطاق {domain}.",
|
||||||
"domain_block_modal.block": "حظر الخادم",
|
"domain_block_modal.block": "حظر الخادم",
|
||||||
"domain_block_modal.block_account_instead": "أحجب @{name} بدلاً من ذلك",
|
"domain_block_modal.block_account_instead": "أحجب @{name} بدلاً من ذلك",
|
||||||
"domain_block_modal.they_can_interact_with_old_posts": "يمكن للأشخاص من هذا الخادم التفاعل مع منشوراتك القديمة.",
|
"domain_block_modal.they_can_interact_with_old_posts": "يمكن للأشخاص من هذا الخادم التفاعل مع منشوراتك القديمة.",
|
||||||
"domain_block_modal.they_cant_follow": "لا أحد من هذا الخادم يمكنه متابعتك.",
|
"domain_block_modal.they_cant_follow": "لا أحد من هذا الخادم يمكنه متابعتك.",
|
||||||
"domain_block_modal.they_wont_know": "لن يَعرف أنه قد تم حظره.",
|
"domain_block_modal.they_wont_know": "لن يَعرف أنه قد تم حظره.",
|
||||||
"domain_block_modal.title": "أتريد حظر النطاق؟",
|
"domain_block_modal.title": "أتريد حظر النطاق؟",
|
||||||
|
"domain_block_modal.you_will_lose_num_followers": "ستخسر {followersCount, plural, zero {}one {{followersCountDisplay} متابع} two {{followersCountDisplay} متابع} few {{followersCountDisplay} متابعين} many {{followersCountDisplay} متابعين} other {{followersCountDisplay} متابعين}} و {followingCount, plural, zero {}one {{followingCountDisplay} شخص تتابعه} two {{followingCountDisplay} شخص تتابعهما} few {{followingCountDisplay} أشخاص تتابعهم} many {{followingCountDisplay} أشخاص تتابعهم} other {{followingCountDisplay} أشخاص تتابعهم}}.",
|
||||||
|
"domain_block_modal.you_will_lose_relationships": "ستفقد جميع المتابعين والأشخاص الذين تتابعهم من هذا الخادم.",
|
||||||
"domain_block_modal.you_wont_see_posts": "لن ترى منشورات أو إشعارات من المستخدمين على هذا الخادم.",
|
"domain_block_modal.you_wont_see_posts": "لن ترى منشورات أو إشعارات من المستخدمين على هذا الخادم.",
|
||||||
"domain_pill.activitypub_lets_connect": "يتيح لك التواصل والتفاعل مع الناس ليس فقط على ماستدون، ولكن عبر تطبيقات اجتماعية مختلفة أيضا.",
|
"domain_pill.activitypub_lets_connect": "يتيح لك التواصل والتفاعل مع الناس ليس فقط على ماستدون، ولكن عبر تطبيقات اجتماعية مختلفة أيضا.",
|
||||||
"domain_pill.activitypub_like_language": "إنّ ActivityPub مثل لغة ماستدون التي يتحدث بها مع شبكات اجتماعية أخرى.",
|
"domain_pill.activitypub_like_language": "إنّ ActivityPub مثل لغة ماستدون التي يتحدث بها مع شبكات اجتماعية أخرى.",
|
||||||
|
@ -243,6 +306,9 @@
|
||||||
"emoji_button.search_results": "نتائج البحث",
|
"emoji_button.search_results": "نتائج البحث",
|
||||||
"emoji_button.symbols": "رموز",
|
"emoji_button.symbols": "رموز",
|
||||||
"emoji_button.travel": "الأماكن والسفر",
|
"emoji_button.travel": "الأماكن والسفر",
|
||||||
|
"empty_column.account_featured.me": "لم تعرض أي شيء حتى الآن. هل تعلم أنه يمكنك عرض الهاشتاقات التي تستخدمها، وحتى حسابات أصدقاءك على ملفك الشخصي؟",
|
||||||
|
"empty_column.account_featured.other": "{acct} لم يعرض أي شيء حتى الآن. هل تعلم أنه يمكنك عرض الهاشتاقات التي تستخدمها، وحتى حسابات أصدقاءك على ملفك الشخصي؟",
|
||||||
|
"empty_column.account_featured_other.unknown": "هذا الحساب لم يعرض أي شيء حتى الآن.",
|
||||||
"empty_column.account_hides_collections": "اختار هذا المستخدم عدم إتاحة هذه المعلومات للعامة",
|
"empty_column.account_hides_collections": "اختار هذا المستخدم عدم إتاحة هذه المعلومات للعامة",
|
||||||
"empty_column.account_suspended": "حساب معلق",
|
"empty_column.account_suspended": "حساب معلق",
|
||||||
"empty_column.account_timeline": "لا توجد منشورات هنا!",
|
"empty_column.account_timeline": "لا توجد منشورات هنا!",
|
||||||
|
@ -271,9 +337,15 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة",
|
"errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة",
|
||||||
"errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
|
"errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
|
||||||
"explore.suggested_follows": "أشخاص",
|
"explore.suggested_follows": "أشخاص",
|
||||||
|
"explore.title": "رائج",
|
||||||
"explore.trending_links": "المُستجدّات",
|
"explore.trending_links": "المُستجدّات",
|
||||||
"explore.trending_statuses": "المنشورات",
|
"explore.trending_statuses": "المنشورات",
|
||||||
"explore.trending_tags": "وُسُوم",
|
"explore.trending_tags": "وُسُوم",
|
||||||
|
"featured_carousel.header": "{count, plural, zero {}one {منشور معروض} two {منشور معروضَين} few {منشورات معروضة} many {منشورات معروضة} other {منشورات معروضة}}",
|
||||||
|
"featured_carousel.next": "التالي",
|
||||||
|
"featured_carousel.post": "منشور",
|
||||||
|
"featured_carousel.previous": "السابق",
|
||||||
|
"featured_carousel.slide": "{index} من {total}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "فئة عامل التصفية هذه لا تنطبق على السياق الذي وصلت فيه إلى هذه المشاركة. إذا كنت ترغب في تصفية المنشور في هذا السياق أيضا، فسيتعين عليك تعديل عامل التصفية.",
|
"filter_modal.added.context_mismatch_explanation": "فئة عامل التصفية هذه لا تنطبق على السياق الذي وصلت فيه إلى هذه المشاركة. إذا كنت ترغب في تصفية المنشور في هذا السياق أيضا، فسيتعين عليك تعديل عامل التصفية.",
|
||||||
"filter_modal.added.context_mismatch_title": "عدم تطابق السياق!",
|
"filter_modal.added.context_mismatch_title": "عدم تطابق السياق!",
|
||||||
"filter_modal.added.expired_explanation": "انتهت صلاحية فئة عامل التصفية هذه، سوف تحتاج إلى تغيير تاريخ انتهاء الصلاحية لتطبيقها.",
|
"filter_modal.added.expired_explanation": "انتهت صلاحية فئة عامل التصفية هذه، سوف تحتاج إلى تغيير تاريخ انتهاء الصلاحية لتطبيقها.",
|
||||||
|
@ -290,6 +362,8 @@
|
||||||
"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": "يطابق عامل التصفية “<span>{title}</span>”",
|
||||||
|
"filtered_notifications_banner.pending_requests": "من {count, plural, zero {}=0 {لا أحد} one {شخص واحد قد تعرفه} two {# شخص قد تعرفهما} few {# أشخاص قد تعرفهم} many {# أشخاص قد تعرفهم} other {# أشخاص قد تعرفهم}}",
|
||||||
"filtered_notifications_banner.title": "الإشعارات المصفاة",
|
"filtered_notifications_banner.title": "الإشعارات المصفاة",
|
||||||
"firehose.all": "الكل",
|
"firehose.all": "الكل",
|
||||||
"firehose.local": "هذا الخادم",
|
"firehose.local": "هذا الخادم",
|
||||||
|
@ -323,6 +397,9 @@
|
||||||
"footer.terms_of_service": "شروط الخدمة",
|
"footer.terms_of_service": "شروط الخدمة",
|
||||||
"generic.saved": "تم الحفظ",
|
"generic.saved": "تم الحفظ",
|
||||||
"getting_started.heading": "استعدّ للبدء",
|
"getting_started.heading": "استعدّ للبدء",
|
||||||
|
"hashtag.admin_moderation": "افتح الواجهة الإشراف لـ #{name}",
|
||||||
|
"hashtag.browse": "تصفح المنشورات التي تحتوي #{hashtag}",
|
||||||
|
"hashtag.browse_from_account": "تصفح المنشورات من @{name} التي تحتوي على #{hashtag}",
|
||||||
"hashtag.column_header.tag_mode.all": "و {additional}",
|
"hashtag.column_header.tag_mode.all": "و {additional}",
|
||||||
"hashtag.column_header.tag_mode.any": "أو {additional}",
|
"hashtag.column_header.tag_mode.any": "أو {additional}",
|
||||||
"hashtag.column_header.tag_mode.none": "بدون {additional}",
|
"hashtag.column_header.tag_mode.none": "بدون {additional}",
|
||||||
|
@ -335,13 +412,21 @@
|
||||||
"hashtag.counter_by_accounts": "{count, plural, zero {لَا مُشارك} one {مُشارَك واحد} two {مُشارِكان إثنان} few {{counter} مشاركين} many {{counter} مُشاركًا} other {{counter} مُشارِك}}",
|
"hashtag.counter_by_accounts": "{count, plural, zero {لَا مُشارك} one {مُشارَك واحد} two {مُشارِكان إثنان} few {{counter} مشاركين} many {{counter} مُشاركًا} other {{counter} مُشارِك}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, zero {لَا منشورات} one {منشور واحد} two {منشوران إثنان} few {{counter} منشورات} many {{counter} منشورًا} other {{counter} منشور}}",
|
"hashtag.counter_by_uses": "{count, plural, zero {لَا منشورات} one {منشور واحد} two {منشوران إثنان} few {{counter} منشورات} many {{counter} منشورًا} other {{counter} منشور}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, zero {لَا منشورات} one {منشور واحد} two {منشوران إثنان} few {{counter} منشورات} many {{counter} منشورًا} other {{counter} منشور}}",
|
"hashtag.counter_by_uses_today": "{count, plural, zero {لَا منشورات} one {منشور واحد} two {منشوران إثنان} few {{counter} منشورات} many {{counter} منشورًا} other {{counter} منشور}}",
|
||||||
|
"hashtag.feature": "اعرضه على صفحتك الشخصية",
|
||||||
"hashtag.follow": "اتبع الوسم",
|
"hashtag.follow": "اتبع الوسم",
|
||||||
|
"hashtag.mute": "اكتم #{hashtag}",
|
||||||
|
"hashtag.unfeature": "أزله من العرض على الملف الشخصي",
|
||||||
"hashtag.unfollow": "ألغِ متابعة الوسم",
|
"hashtag.unfollow": "ألغِ متابعة الوسم",
|
||||||
"hashtags.and_other": "…و {count, plural, zero {} one {# واحد آخر} two {# اثنان آخران} few {# آخرون} many {# آخَرًا}other {# آخرون}}",
|
"hashtags.and_other": "…و {count, plural, zero {} one {# واحد آخر} two {# اثنان آخران} few {# آخرون} many {# آخَرًا}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_followers": "عرض المزيد من المتابعين على {domain}",
|
||||||
|
"hints.profiles.see_more_follows": "اطلع على المزيد من المتابعين على {domain}",
|
||||||
"hints.profiles.see_more_posts": "عرض المزيد من المنشورات من {domain}",
|
"hints.profiles.see_more_posts": "عرض المزيد من المنشورات من {domain}",
|
||||||
"hints.threads.replies_may_be_missing": "قد تكون الردود الواردة من الخوادم الأخرى غائبة.",
|
"hints.threads.replies_may_be_missing": "قد تكون الردود الواردة من الخوادم الأخرى غائبة.",
|
||||||
"hints.threads.see_more": "اطلع على المزيد من الردود على {domain}",
|
"hints.threads.see_more": "اطلع على المزيد من الردود على {domain}",
|
||||||
|
"home.column_settings.show_quotes": "إظهار الاقتباسات",
|
||||||
"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": "إخفاء الإعلانات",
|
||||||
|
@ -351,9 +436,23 @@
|
||||||
"home.show_announcements": "إظهار الإعلانات",
|
"home.show_announcements": "إظهار الإعلانات",
|
||||||
"ignore_notifications_modal.disclaimer": "لا يمكن لـ Mastodon إبلاغ المستخدمين بأنك قد تجاهلت إشعاراتهم. تجاهل الإشعارات لن يمنع إرسال الرسائل نفسها.",
|
"ignore_notifications_modal.disclaimer": "لا يمكن لـ Mastodon إبلاغ المستخدمين بأنك قد تجاهلت إشعاراتهم. تجاهل الإشعارات لن يمنع إرسال الرسائل نفسها.",
|
||||||
"ignore_notifications_modal.filter_instead": "تصفيتها بدلا من ذلك",
|
"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.ignore": "تجاهل الإشعارات",
|
||||||
"ignore_notifications_modal.limited_accounts_title": "تجاهل الإشعارات من الحسابات التي هي تحت الإشراف؟",
|
"ignore_notifications_modal.limited_accounts_title": "تجاهل الإشعارات من الحسابات التي هي تحت الإشراف؟",
|
||||||
"ignore_notifications_modal.new_accounts_title": "تجاهل الإشعارات الصادرة من الحسابات الجديدة؟",
|
"ignore_notifications_modal.new_accounts_title": "تجاهل الإشعارات الصادرة من الحسابات الجديدة؟",
|
||||||
|
"ignore_notifications_modal.not_followers_title": "تجاهل الإشعارات من أشخاص لا يتابعونك؟",
|
||||||
|
"ignore_notifications_modal.not_following_title": "تجاهل الإشعارات من أشخاص لا تتابعهم؟",
|
||||||
|
"ignore_notifications_modal.private_mentions_title": "تجاهل الإشعارات للرسائل التي لم تطلبها؟",
|
||||||
|
"info_button.label": "المساعدة",
|
||||||
|
"info_button.what_is_alt_text": "<h1> ماهو النص البديل؟</h1><p> يوفر النص البديل أوصافا للصور للأشخاص الذين يعانون من إعاقات بصرية أو اتصالات شبكة ضعيفة أو أولئك الذين يبحثون عن سياق إضافي.</p><p> يمكنك تحسين إمكانية الوصول والفهم للجميع من خلال كتابة نص بديل واضح وموجز وموضوعي. </p><ul><li> حدد العناصر المهمة</li><li>لخص النص في الصور</li><li>استخدام بنية الجمل العادية</li><li>تجنب المعلومات الزائدة</li><li> ركز على الاتجاهات والنتائج الرئيسية في العناصر المرئية المعقدة (مثل الرسوم البيانية أو الخرائط)</li></ul>",
|
||||||
|
"interaction_modal.action.favourite": "للمتابعة، تحتاج إلى تفضيل المنشور من حسابك.",
|
||||||
|
"interaction_modal.action.follow": "للمتابعة، تحتاج إلى متابعة المنشور من حسابك.",
|
||||||
|
"interaction_modal.action.reblog": "للمتابعة، تحتاج إلى إعادة نشر المنشور من حسابك.",
|
||||||
|
"interaction_modal.action.reply": "للمتابعة، تحتاج إلى الرد من حسابك.",
|
||||||
|
"interaction_modal.action.vote": "للمتابعة، تحتاج إلى التصويت من حسابك.",
|
||||||
|
"interaction_modal.go": "اذهب",
|
||||||
"interaction_modal.no_account_yet": "لا تملك حساباً بعد؟",
|
"interaction_modal.no_account_yet": "لا تملك حساباً بعد؟",
|
||||||
"interaction_modal.on_another_server": "على خادم مختلف",
|
"interaction_modal.on_another_server": "على خادم مختلف",
|
||||||
"interaction_modal.on_this_server": "على هذا الخادم",
|
"interaction_modal.on_this_server": "على هذا الخادم",
|
||||||
|
@ -361,6 +460,8 @@
|
||||||
"interaction_modal.title.follow": "اتبع {name}",
|
"interaction_modal.title.follow": "اتبع {name}",
|
||||||
"interaction_modal.title.reblog": "إعادة نشر منشور {name}",
|
"interaction_modal.title.reblog": "إعادة نشر منشور {name}",
|
||||||
"interaction_modal.title.reply": "الرد على منشور {name}",
|
"interaction_modal.title.reply": "الرد على منشور {name}",
|
||||||
|
"interaction_modal.title.vote": "صوّت في استطلاع {name}",
|
||||||
|
"interaction_modal.username_prompt": "مثلاً {example}",
|
||||||
"intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
|
"intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
|
||||||
"intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
|
"intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
|
||||||
"intervals.full.minutes": "{number, plural, one {دقيقة واحدة}two {دقيقتان} other {# دقائق}}",
|
"intervals.full.minutes": "{number, plural, one {دقيقة واحدة}two {دقيقتان} other {# دقائق}}",
|
||||||
|
@ -396,30 +497,44 @@
|
||||||
"keyboard_shortcuts.toggle_hidden": "لعرض أو إخفاء النص مِن وراء التحذير",
|
"keyboard_shortcuts.toggle_hidden": "لعرض أو إخفاء النص مِن وراء التحذير",
|
||||||
"keyboard_shortcuts.toggle_sensitivity": "لعرض/إخفاء الوسائط",
|
"keyboard_shortcuts.toggle_sensitivity": "لعرض/إخفاء الوسائط",
|
||||||
"keyboard_shortcuts.toot": "للشروع في تحرير منشور جديد",
|
"keyboard_shortcuts.toot": "للشروع في تحرير منشور جديد",
|
||||||
|
"keyboard_shortcuts.translate": "لترجمة منشور",
|
||||||
"keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث",
|
"keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث",
|
||||||
"keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة",
|
"keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة",
|
||||||
"lightbox.close": "إغلاق",
|
"lightbox.close": "إغلاق",
|
||||||
"lightbox.next": "التالي",
|
"lightbox.next": "التالي",
|
||||||
"lightbox.previous": "العودة",
|
"lightbox.previous": "العودة",
|
||||||
|
"lightbox.zoom_in": "التكبير إلى الحجم الفعلي",
|
||||||
|
"lightbox.zoom_out": "التكبير ليناسب الحجم",
|
||||||
"limited_account_hint.action": "إظهار الملف التعريفي على أي حال",
|
"limited_account_hint.action": "إظهار الملف التعريفي على أي حال",
|
||||||
"limited_account_hint.title": "تم إخفاء هذا الملف الشخصي من قبل مشرفي {domain}.",
|
"limited_account_hint.title": "تم إخفاء هذا الملف الشخصي من قبل مشرفي {domain}.",
|
||||||
"link_preview.author": "مِن {name}",
|
"link_preview.author": "مِن {name}",
|
||||||
"link_preview.more_from_author": "المزيد من {name}",
|
"link_preview.more_from_author": "المزيد من {name}",
|
||||||
|
"link_preview.shares": "{count, plural, zero {{counter} منشور}one {{counter} منشور} two {{counter} منشور} few {{counter} منشور} many {{counter} منشور} other {{counter} منشور}}",
|
||||||
"lists.add_member": "إضافة",
|
"lists.add_member": "إضافة",
|
||||||
"lists.add_to_list": "إضافة إلى القائمة",
|
"lists.add_to_list": "إضافة إلى القائمة",
|
||||||
"lists.add_to_lists": "إضافة {name} إلى القوائم",
|
"lists.add_to_lists": "إضافة {name} إلى القوائم",
|
||||||
"lists.create": "إنشاء",
|
"lists.create": "إنشاء",
|
||||||
|
"lists.create_a_list_to_organize": "أنشئ قائمة جديدة لتنظم الصفحة الرئيسة خاصتك",
|
||||||
"lists.create_list": "إنشاء قائمة",
|
"lists.create_list": "إنشاء قائمة",
|
||||||
"lists.delete": "احذف القائمة",
|
"lists.delete": "احذف القائمة",
|
||||||
"lists.done": "تمّ",
|
"lists.done": "تمّ",
|
||||||
"lists.edit": "عدّل القائمة",
|
"lists.edit": "عدّل القائمة",
|
||||||
"lists.exclusive": "إخفاء الأعضاء في الصفحة الرئيسية",
|
"lists.exclusive": "إخفاء الأعضاء في الصفحة الرئيسية",
|
||||||
|
"lists.exclusive_hint": "إذا يوجد شخص في هذه القائمة، فقم بإخفائه في صفحتك الرئيسة لتجنب رؤية منشوراته مرتين.",
|
||||||
|
"lists.find_users_to_add": "ابحث عن مستخدمين للإضافة",
|
||||||
|
"lists.list_members_count": "{count, plural, zero {}one {# عضو} two {# عضو} few {# عضو} many {# عضو} other {# عضو}}",
|
||||||
|
"lists.list_name": "اسم القائمة",
|
||||||
|
"lists.new_list_name": "اسم القائمة الجديدة",
|
||||||
|
"lists.no_lists_yet": "لا توجد قوائم بعد.",
|
||||||
|
"lists.no_members_yet": "لا أعضاء حتى الآن.",
|
||||||
|
"lists.no_results_found": "لم يتمّ العثور على أي نتيجة.",
|
||||||
"lists.remove_member": "إزالة",
|
"lists.remove_member": "إزالة",
|
||||||
"lists.replies_policy.followed": "أي مستخدم متابَع",
|
"lists.replies_policy.followed": "أي مستخدم متابَع",
|
||||||
"lists.replies_policy.list": "أعضاء القائمة",
|
"lists.replies_policy.list": "أعضاء القائمة",
|
||||||
"lists.replies_policy.none": "لا أحد",
|
"lists.replies_policy.none": "لا أحد",
|
||||||
"lists.save": "حفظ",
|
"lists.save": "حفظ",
|
||||||
"lists.search": "بحث",
|
"lists.search": "بحث",
|
||||||
|
"lists.show_replies_to": "تضمين الردود من أعضاء القائمة إلى",
|
||||||
"load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}",
|
"load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}",
|
||||||
"loading_indicator.label": "جاري التحميل…",
|
"loading_indicator.label": "جاري التحميل…",
|
||||||
"media_gallery.hide": "إخفاء",
|
"media_gallery.hide": "إخفاء",
|
||||||
|
@ -434,8 +549,10 @@
|
||||||
"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.account_settings": "كلمة المرور والأمان",
|
||||||
"navigation_bar.administration": "الإدارة",
|
"navigation_bar.administration": "الإدارة",
|
||||||
"navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة",
|
"navigation_bar.advanced_interface": "افتحه في واجهة الويب المتقدمة",
|
||||||
|
"navigation_bar.automated_deletion": "الحذف الآلي للمنشورات",
|
||||||
"navigation_bar.blocks": "الحسابات المحجوبة",
|
"navigation_bar.blocks": "الحسابات المحجوبة",
|
||||||
"navigation_bar.bookmarks": "الفواصل المرجعية",
|
"navigation_bar.bookmarks": "الفواصل المرجعية",
|
||||||
"navigation_bar.direct": "الإشارات الخاصة",
|
"navigation_bar.direct": "الإشارات الخاصة",
|
||||||
|
@ -445,19 +562,41 @@
|
||||||
"navigation_bar.follow_requests": "طلبات المتابعة",
|
"navigation_bar.follow_requests": "طلبات المتابعة",
|
||||||
"navigation_bar.followed_tags": "الوسوم المتابَعة",
|
"navigation_bar.followed_tags": "الوسوم المتابَعة",
|
||||||
"navigation_bar.follows_and_followers": "المتابِعون والمتابَعون",
|
"navigation_bar.follows_and_followers": "المتابِعون والمتابَعون",
|
||||||
|
"navigation_bar.import_export": "الاستيراد والتصدير",
|
||||||
"navigation_bar.lists": "القوائم",
|
"navigation_bar.lists": "القوائم",
|
||||||
|
"navigation_bar.live_feed_local": "البث الحي للمنشورات المحلية",
|
||||||
|
"navigation_bar.live_feed_public": "البث الحي للمنشورات العالمية",
|
||||||
"navigation_bar.logout": "خروج",
|
"navigation_bar.logout": "خروج",
|
||||||
"navigation_bar.moderation": "الإشراف",
|
"navigation_bar.moderation": "الإشراف",
|
||||||
|
"navigation_bar.more": "المزيد",
|
||||||
"navigation_bar.mutes": "الحسابات المكتومة",
|
"navigation_bar.mutes": "الحسابات المكتومة",
|
||||||
"navigation_bar.opened_in_classic_interface": "تُفتَح المنشورات والحسابات وغيرها من الصفحات الخاصة بشكل مبدئي على واجهة الويب التقليدية.",
|
"navigation_bar.opened_in_classic_interface": "تُفتَح المنشورات والحسابات وغيرها من الصفحات الخاصة بشكل مبدئي على واجهة الويب التقليدية.",
|
||||||
"navigation_bar.preferences": "التفضيلات",
|
"navigation_bar.preferences": "التفضيلات",
|
||||||
|
"navigation_bar.privacy_and_reach": "الخصوصية و الوصول",
|
||||||
"navigation_bar.search": "البحث",
|
"navigation_bar.search": "البحث",
|
||||||
|
"navigation_bar.search_trends": "البحث / الرائج",
|
||||||
|
"navigation_panel.collapse_followed_tags": "طي قائمة الهاشتاقات المتابعة",
|
||||||
|
"navigation_panel.collapse_lists": "طي قائمة القائمة",
|
||||||
|
"navigation_panel.expand_followed_tags": "توسيع قائمة الهاشتاقات المتابعة",
|
||||||
|
"navigation_panel.expand_lists": "توسيع قائمة القائمة",
|
||||||
"not_signed_in_indicator.not_signed_in": "تحتاج إلى تسجيل الدخول للوصول إلى هذا المصدر.",
|
"not_signed_in_indicator.not_signed_in": "تحتاج إلى تسجيل الدخول للوصول إلى هذا المصدر.",
|
||||||
"notification.admin.report": "{name} أبلغ عن {target}",
|
"notification.admin.report": "{name} أبلغ عن {target}",
|
||||||
|
"notification.admin.report_account": "{name} أبلغ عن {count, plural, zero {}one {منشور} two {منشورين} few {# منشورات} many {# منشورات} other {# منشورات}} من قبل {target} بسبب {category}",
|
||||||
|
"notification.admin.report_account_other": "{name} أبلغ عن {count, plural, zero {}one {منشور} two {منشورين} few {# منشورات} many {# منشورات} other {# منشورات}} من قبل {target}",
|
||||||
|
"notification.admin.report_statuses": "{name} أبلغ عن {target} بسبب {category}",
|
||||||
|
"notification.admin.report_statuses_other": "{name} أبلغ عن {target}",
|
||||||
"notification.admin.sign_up": "أنشأ {name} حسابًا",
|
"notification.admin.sign_up": "أنشأ {name} حسابًا",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} و{count, plural, zero {}one {شخص آخر قاما} two {# آخرون قاموا} few {# آخرون قاموا} many {# آخرون قاموا} other {# آخرون قاموا}} بالتسجيل",
|
||||||
|
"notification.annual_report.message": "إن #Wrapstodon الخاص بك لسنة {year} ينتظرك! تعرّف إلى النقاط البارزة واللحظات التي لا تنسى على ماستدون!",
|
||||||
|
"notification.annual_report.view": "عرض #Wrapstodon",
|
||||||
"notification.favourite": "أضاف {name} منشورك إلى مفضلته",
|
"notification.favourite": "أضاف {name} منشورك إلى مفضلته",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} و<a>{count, plural, zero {}one {شخص آخر} two {شخصان آخرين} few {# أشخاص آخرون} many {# أشخاص آخرون} other {# أشخاص آخرون}}</a> قاموا بتفضيل منشورك",
|
||||||
|
"notification.favourite_pm": "قام {name} بتفضيل إشارتك الخاصة",
|
||||||
|
"notification.favourite_pm.name_and_others_with_link": "{name} و<a>{count, plural, zero {}one {شخص آخر} two {شخصان آخرَين} few {# أشخاص آخرون} many {# أشخاص آخرون} other {# أشخاص آخرون}}</a> قاموا بتفضيل إشارتك الخاصة",
|
||||||
"notification.follow": "يتابعك {name}",
|
"notification.follow": "يتابعك {name}",
|
||||||
|
"notification.follow.name_and_others": "{name} و<a>{count, plural, zero {}one {شخص آخر} two {شخصان آخرين} few {# أشخاص آخرون} many {# أشخاص آخرون} other {# أشخاص آخرون}}</a> قاموا بمتابعتك",
|
||||||
"notification.follow_request": "لقد طلب {name} متابعتك",
|
"notification.follow_request": "لقد طلب {name} متابعتك",
|
||||||
|
"notification.follow_request.name_and_others": "{name} و{count, plural, zero {}one {شخص آخر} two {شخصان آخرين} few {# أشخاص آخرون} many {# أشخاص آخرون} other {# أشخاص آخرون}} أرسلوا طلب متابعة لك",
|
||||||
"notification.label.mention": "إشارة",
|
"notification.label.mention": "إشارة",
|
||||||
"notification.label.private_mention": "إشارة خاصة",
|
"notification.label.private_mention": "إشارة خاصة",
|
||||||
"notification.label.private_reply": "رد خاص",
|
"notification.label.private_reply": "رد خاص",
|
||||||
|
@ -476,6 +615,7 @@
|
||||||
"notification.own_poll": "انتهى استطلاعك للرأي",
|
"notification.own_poll": "انتهى استطلاعك للرأي",
|
||||||
"notification.poll": "لقد انتهى استطلاع رأي صوتت فيه",
|
"notification.poll": "لقد انتهى استطلاع رأي صوتت فيه",
|
||||||
"notification.reblog": "قام {name} بمشاركة منشورك",
|
"notification.reblog": "قام {name} بمشاركة منشورك",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} و<a>{count, plural, zero {}one {شخص آخر} two {شخصان آخرين} few {# أشخاص آخرون} many {# أشخاص آخرون} 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 {# حسابات}} تتابعها.",
|
||||||
|
@ -484,12 +624,20 @@
|
||||||
"notification.status": "{name} نشر للتو",
|
"notification.status": "{name} نشر للتو",
|
||||||
"notification.update": "عدّلَ {name} منشورًا",
|
"notification.update": "عدّلَ {name} منشورًا",
|
||||||
"notification_requests.accept": "موافقة",
|
"notification_requests.accept": "موافقة",
|
||||||
|
"notification_requests.accept_multiple": "قبول {count, plural, zero {}one {طلب واحد…} two {# طلب…} few {# طلبات…} many {# طلبات…} other {# طلبات…}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "قبول {count, plural, zero {}one {الطلب} two {2 طلب} few {الطلبات} many {الطلبات} other {الطلبات}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "أنت على وشك قبول {count, plural, zero {}one {طلب إشعار واحد} two {# طلبات إشعار} few {# طلبات إشعار} many {# طلبات إشعار} other {# طلبات إشعار}}. هل أنت متأكد من أنك تريد المتابعة؟",
|
||||||
"notification_requests.confirm_accept_multiple.title": "قبول طلبات الإشعار؟",
|
"notification_requests.confirm_accept_multiple.title": "قبول طلبات الإشعار؟",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "رفض {count, plural, zero {}one {الطلب} two {2 طلب} few {الطلبات} many {الطلبات} other {الطلبات}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "أنت على وشك رفض {count, plural, zero {}one {طلب إشعار واحد} two {# طلبات إشعار} few {# طلبات إشعار} many {# طلبات إشعار} other {# طلبات إشعار}}. لن تتمكن من الوصول بسهولة {count, plural, zero {}one {إليه} two {إليهما} few {إليهم} many {إليهم} other {إليهم}} مرة أخرى. هل أنت متأكد من أنك تريد المتابعة؟",
|
||||||
"notification_requests.confirm_dismiss_multiple.title": "تجاهل طلبات الإشعار؟",
|
"notification_requests.confirm_dismiss_multiple.title": "تجاهل طلبات الإشعار؟",
|
||||||
"notification_requests.dismiss": "تخطي",
|
"notification_requests.dismiss": "تخطي",
|
||||||
|
"notification_requests.dismiss_multiple": "رفض {count, plural, zero {}one {# طلب…} two {# طلب…} few {# طلبات…} many {# طلبات…} other {# طلبات…}}",
|
||||||
"notification_requests.edit_selection": "تعديل",
|
"notification_requests.edit_selection": "تعديل",
|
||||||
"notification_requests.exit_selection": "تمّ",
|
"notification_requests.exit_selection": "تمّ",
|
||||||
"notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.",
|
"notification_requests.explainer_for_limited_account": "تم تصفية الإشعارات من هذا الحساب لأن الحساب تم تقييده من قبل مشرف.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "تم تصفية الإشعارات من هذا الحساب لأنه أو لأن خادمه مقيد من قبل مشرف.",
|
||||||
|
"notification_requests.maximize": "تكبير",
|
||||||
"notification_requests.minimize_banner": "تصغير شريط الإشعارات المُصفاة",
|
"notification_requests.minimize_banner": "تصغير شريط الإشعارات المُصفاة",
|
||||||
"notification_requests.notifications_from": "إشعارات من {name}",
|
"notification_requests.notifications_from": "إشعارات من {name}",
|
||||||
"notification_requests.title": "الإشعارات المصفاة",
|
"notification_requests.title": "الإشعارات المصفاة",
|
||||||
|
@ -505,6 +653,7 @@
|
||||||
"notifications.column_settings.filter_bar.category": "شريط التصفية السريعة",
|
"notifications.column_settings.filter_bar.category": "شريط التصفية السريعة",
|
||||||
"notifications.column_settings.follow": "متابعُون جُدُد:",
|
"notifications.column_settings.follow": "متابعُون جُدُد:",
|
||||||
"notifications.column_settings.follow_request": "الطلبات الجديدة لِمتابَعتك:",
|
"notifications.column_settings.follow_request": "الطلبات الجديدة لِمتابَعتك:",
|
||||||
|
"notifications.column_settings.group": "قم بتجميعهم",
|
||||||
"notifications.column_settings.mention": "الإشارات:",
|
"notifications.column_settings.mention": "الإشارات:",
|
||||||
"notifications.column_settings.poll": "نتائج استطلاع الرأي:",
|
"notifications.column_settings.poll": "نتائج استطلاع الرأي:",
|
||||||
"notifications.column_settings.push": "الإشعارات",
|
"notifications.column_settings.push": "الإشعارات",
|
||||||
|
@ -531,7 +680,9 @@
|
||||||
"notifications.policy.accept": "قبول",
|
"notifications.policy.accept": "قبول",
|
||||||
"notifications.policy.accept_hint": "إظهار في الإشعارات",
|
"notifications.policy.accept_hint": "إظهار في الإشعارات",
|
||||||
"notifications.policy.drop": "تجاهل",
|
"notifications.policy.drop": "تجاهل",
|
||||||
|
"notifications.policy.drop_hint": "التخلص منها بشكل دائم",
|
||||||
"notifications.policy.filter": "تصفية",
|
"notifications.policy.filter": "تصفية",
|
||||||
|
"notifications.policy.filter_hint": "إرسال إلى صندوق الإشعارات المصفاة",
|
||||||
"notifications.policy.filter_limited_accounts_hint": "المحدودة من قبل مشرفي الخادم",
|
"notifications.policy.filter_limited_accounts_hint": "المحدودة من قبل مشرفي الخادم",
|
||||||
"notifications.policy.filter_limited_accounts_title": "حسابات تحت الإشراف",
|
"notifications.policy.filter_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 {# أيام}}",
|
||||||
|
@ -546,7 +697,11 @@
|
||||||
"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": "لا تفوت شيئاً أبداً",
|
||||||
|
"onboarding.follows.back": "عودة",
|
||||||
|
"onboarding.follows.done": "تمّ",
|
||||||
"onboarding.follows.empty": "نأسف، لا يمكن عرض نتائج في الوقت الحالي. جرب البحث أو انتقل لصفحة الاستكشاف لإيجاد أشخاص للمتابعة، أو حاول مرة أخرى.",
|
"onboarding.follows.empty": "نأسف، لا يمكن عرض نتائج في الوقت الحالي. جرب البحث أو انتقل لصفحة الاستكشاف لإيجاد أشخاص للمتابعة، أو حاول مرة أخرى.",
|
||||||
|
"onboarding.follows.search": "بحث",
|
||||||
|
"onboarding.follows.title": "للبدء قم بمتابعة أشخاص",
|
||||||
"onboarding.profile.discoverable": "اجعل ملفي الشخصي قابلاً للاكتشاف",
|
"onboarding.profile.discoverable": "اجعل ملفي الشخصي قابلاً للاكتشاف",
|
||||||
"onboarding.profile.discoverable_hint": "عندما تختار تفعيل إمكانية الاكتشاف على ماستدون، قد تظهر منشوراتك في نتائج البحث والمواضيع الرائجة، وقد يتم اقتراح ملفك الشخصي لأشخاص ذوي اهتمامات مماثلة معك.",
|
"onboarding.profile.discoverable_hint": "عندما تختار تفعيل إمكانية الاكتشاف على ماستدون، قد تظهر منشوراتك في نتائج البحث والمواضيع الرائجة، وقد يتم اقتراح ملفك الشخصي لأشخاص ذوي اهتمامات مماثلة معك.",
|
||||||
"onboarding.profile.display_name": "الاسم العلني",
|
"onboarding.profile.display_name": "الاسم العلني",
|
||||||
|
@ -572,6 +727,7 @@
|
||||||
"poll_button.remove_poll": "إزالة استطلاع الرأي",
|
"poll_button.remove_poll": "إزالة استطلاع الرأي",
|
||||||
"privacy.change": "اضبط خصوصية المنشور",
|
"privacy.change": "اضبط خصوصية المنشور",
|
||||||
"privacy.direct.long": "كل من ذُكر في المنشور",
|
"privacy.direct.long": "كل من ذُكر في المنشور",
|
||||||
|
"privacy.direct.short": "إشارة خاصة",
|
||||||
"privacy.private.long": "متابعيك فقط",
|
"privacy.private.long": "متابعيك فقط",
|
||||||
"privacy.private.short": "للمتابِعين",
|
"privacy.private.short": "للمتابِعين",
|
||||||
"privacy.public.long": "أي شخص على أو خارج ماستدون",
|
"privacy.public.long": "أي شخص على أو خارج ماستدون",
|
||||||
|
@ -583,6 +739,8 @@
|
||||||
"privacy_policy.title": "سياسة الخصوصية",
|
"privacy_policy.title": "سياسة الخصوصية",
|
||||||
"recommended": "موصى به",
|
"recommended": "موصى به",
|
||||||
"refresh": "أنعِش",
|
"refresh": "أنعِش",
|
||||||
|
"regeneration_indicator.please_stand_by": "الرجاء الانتظار.",
|
||||||
|
"regeneration_indicator.preparing_your_home_feed": "جارٍ إعداد صفحتك الرئيسة…",
|
||||||
"relative_time.days": "{number}ي",
|
"relative_time.days": "{number}ي",
|
||||||
"relative_time.full.days": "منذ {number, plural, zero {} one {# يوم} two {# يومين} few {# أيام} many {# أيام} other {# يوم}}",
|
"relative_time.full.days": "منذ {number, plural, zero {} one {# يوم} two {# يومين} few {# أيام} many {# أيام} other {# يوم}}",
|
||||||
"relative_time.full.hours": "منذ {number, plural, zero {} one {ساعة واحدة} two {ساعتَيْن} few {# ساعات} many {# ساعة} other {# ساعة}}",
|
"relative_time.full.hours": "منذ {number, plural, zero {} one {ساعة واحدة} two {ساعتَيْن} few {# ساعات} many {# ساعة} other {# ساعة}}",
|
||||||
|
@ -647,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "القاعدة المنتهَكة",
|
"report_notification.categories.violation": "القاعدة المنتهَكة",
|
||||||
"report_notification.categories.violation_sentence": "انتهاك لقاعدة",
|
"report_notification.categories.violation_sentence": "انتهاك لقاعدة",
|
||||||
"report_notification.open": "فتح التقرير",
|
"report_notification.open": "فتح التقرير",
|
||||||
|
"search.clear": "مسح البحث",
|
||||||
"search.no_recent_searches": "ما من عمليات بحث تمت مؤخرًا",
|
"search.no_recent_searches": "ما من عمليات بحث تمت مؤخرًا",
|
||||||
"search.placeholder": "ابحث",
|
"search.placeholder": "ابحث",
|
||||||
"search.quick_action.account_search": "الملفات التعريفية المطابقة لـ {x}",
|
"search.quick_action.account_search": "الملفات التعريفية المطابقة لـ {x}",
|
||||||
|
@ -666,14 +825,19 @@
|
||||||
"search_results.accounts": "الصفحات التعريفية",
|
"search_results.accounts": "الصفحات التعريفية",
|
||||||
"search_results.all": "الكل",
|
"search_results.all": "الكل",
|
||||||
"search_results.hashtags": "الوُسوم",
|
"search_results.hashtags": "الوُسوم",
|
||||||
|
"search_results.no_results": "لا توجد نتائج.",
|
||||||
|
"search_results.no_search_yet": "حاول البحث عن المنشورات، ملفات الشخصية أو الهاشتاقات.",
|
||||||
"search_results.see_all": "رؤية الكل",
|
"search_results.see_all": "رؤية الكل",
|
||||||
"search_results.statuses": "المنشورات",
|
"search_results.statuses": "المنشورات",
|
||||||
|
"search_results.title": "البحث عن \"{q}\"",
|
||||||
"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.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.follow_anyone": "تابع أي شخص من عالم الفدرالية وشاهد منشوراته بالترتيب الزمني. دون خوارزميات أو إعلانات أو عنواين مضللة.",
|
||||||
|
"sign_in_banner.mastodon_is": "ماستودون هو أفضل وسيلة لمواكبة الأحداث.",
|
||||||
"sign_in_banner.sign_in": "تسجيل الدخول",
|
"sign_in_banner.sign_in": "تسجيل الدخول",
|
||||||
"sign_in_banner.sso_redirect": "تسجيل الدخول أو إنشاء حساب",
|
"sign_in_banner.sso_redirect": "تسجيل الدخول أو إنشاء حساب",
|
||||||
"status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
|
"status.admin_account": "افتح الواجهة الإدارية لـ @{name}",
|
||||||
|
@ -708,6 +872,13 @@
|
||||||
"status.mute_conversation": "كتم المحادثة",
|
"status.mute_conversation": "كتم المحادثة",
|
||||||
"status.open": "وسّع هذا المنشور",
|
"status.open": "وسّع هذا المنشور",
|
||||||
"status.pin": "دبّسه على الصفحة التعريفية",
|
"status.pin": "دبّسه على الصفحة التعريفية",
|
||||||
|
"status.quote_error.filtered": "مُخفي بسبب إحدى إعدادات التصفية خاصتك",
|
||||||
|
"status.quote_error.not_found": "لا يمكن عرض هذا المنشور.",
|
||||||
|
"status.quote_error.pending_approval": "هذا المنشور ينتظر موافقة صاحب المنشور الأصلي.",
|
||||||
|
"status.quote_error.rejected": "لا يمكن عرض هذا المنشور لأن صاحب المنشور الأصلي لا يسمح له بأن يكون مقتبس.",
|
||||||
|
"status.quote_error.removed": "تمت إزالة المنشور من قبل صاحبه.",
|
||||||
|
"status.quote_error.unauthorized": "لا يمكن عرض هذا المنشور لأنك لست مخولاً برؤيته.",
|
||||||
|
"status.quote_post_author": "منشور من {name}",
|
||||||
"status.read_more": "اقرأ المزيد",
|
"status.read_more": "اقرأ المزيد",
|
||||||
"status.reblog": "إعادة النشر",
|
"status.reblog": "إعادة النشر",
|
||||||
"status.reblog_private": "إعادة النشر إلى الجمهور الأصلي",
|
"status.reblog_private": "إعادة النشر إلى الجمهور الأصلي",
|
||||||
|
@ -716,6 +887,7 @@
|
||||||
"status.reblogs.empty": "لم يقم أي أحد بمشاركة هذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.",
|
"status.reblogs.empty": "لم يقم أي أحد بمشاركة هذا المنشور بعد. عندما يقوم أحدهم بذلك سوف يظهر هنا.",
|
||||||
"status.redraft": "إزالة وإعادة الصياغة",
|
"status.redraft": "إزالة وإعادة الصياغة",
|
||||||
"status.remove_bookmark": "احذفه مِن الفواصل المرجعية",
|
"status.remove_bookmark": "احذفه مِن الفواصل المرجعية",
|
||||||
|
"status.remove_favourite": "إزالة من التفضيلات",
|
||||||
"status.replied_in_thread": "رد في خيط",
|
"status.replied_in_thread": "رد في خيط",
|
||||||
"status.replied_to": "رَدًا على {name}",
|
"status.replied_to": "رَدًا على {name}",
|
||||||
"status.reply": "ردّ",
|
"status.reply": "ردّ",
|
||||||
|
@ -736,8 +908,13 @@
|
||||||
"subscribed_languages.save": "حفظ التغييرات",
|
"subscribed_languages.save": "حفظ التغييرات",
|
||||||
"subscribed_languages.target": "تغيير اللغات المشتركة لـ {target}",
|
"subscribed_languages.target": "تغيير اللغات المشتركة لـ {target}",
|
||||||
"tabs_bar.home": "الرئيسية",
|
"tabs_bar.home": "الرئيسية",
|
||||||
|
"tabs_bar.menu": "القائمة",
|
||||||
"tabs_bar.notifications": "الإشعارات",
|
"tabs_bar.notifications": "الإشعارات",
|
||||||
|
"tabs_bar.publish": "منشور جديد",
|
||||||
|
"tabs_bar.search": "ابحث",
|
||||||
|
"terms_of_service.effective_as_of": "مطبق اعتباراً من {date}",
|
||||||
"terms_of_service.title": "شروط الخدمة",
|
"terms_of_service.title": "شروط الخدمة",
|
||||||
|
"terms_of_service.upcoming_changes_on": "تغييرات قادمة في تاريخ {date}",
|
||||||
"time_remaining.days": "{number, plural, one {# يوم} other {# أيام}} متبقية",
|
"time_remaining.days": "{number, plural, one {# يوم} other {# أيام}} متبقية",
|
||||||
"time_remaining.hours": "{number, plural, one {# ساعة} other {# ساعات}} متبقية",
|
"time_remaining.hours": "{number, plural, one {# ساعة} other {# ساعات}} متبقية",
|
||||||
"time_remaining.minutes": "{number, plural, one {# دقيقة} other {# دقائق}} متبقية",
|
"time_remaining.minutes": "{number, plural, one {# دقيقة} other {# دقائق}} متبقية",
|
||||||
|
@ -753,6 +930,11 @@
|
||||||
"upload_button.label": "إضافة وسائط",
|
"upload_button.label": "إضافة وسائط",
|
||||||
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
|
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
|
||||||
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
|
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
|
||||||
|
"upload_form.drag_and_drop.instructions": "لحمل مرفق، اضغط على space أو Enter. وفي أثناء السحب، استخدم مفاتيح الأسهم لتنقل المرفق في أية اتجاه. اضغط على Space أو Enter مجدداً لتنقل المرفق إلى موضعه الجديد، أو اضغط Escape للإلغاء.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "تم إلغاء السحب. تم إسقاط مرفقات الوسائط {item}.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "تم إضافة المرفق {item}.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "تم نقل مرفق الوسائط {item}.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "تم إضافة المرفق {item}.",
|
||||||
"upload_form.edit": "تعديل",
|
"upload_form.edit": "تعديل",
|
||||||
"upload_progress.label": "يرفع...",
|
"upload_progress.label": "يرفع...",
|
||||||
"upload_progress.processing": "تتم المعالجة…",
|
"upload_progress.processing": "تتم المعالجة…",
|
||||||
|
@ -763,6 +945,12 @@
|
||||||
"video.expand": "توسيع الفيديو",
|
"video.expand": "توسيع الفيديو",
|
||||||
"video.fullscreen": "ملء الشاشة",
|
"video.fullscreen": "ملء الشاشة",
|
||||||
"video.hide": "إخفاء الفيديو",
|
"video.hide": "إخفاء الفيديو",
|
||||||
|
"video.mute": "كتم",
|
||||||
"video.pause": "إيقاف مؤقت",
|
"video.pause": "إيقاف مؤقت",
|
||||||
"video.play": "تشغيل"
|
"video.play": "تشغيل",
|
||||||
|
"video.skip_backward": "تخطى إلى الوراء",
|
||||||
|
"video.skip_forward": "تخطي للأمام",
|
||||||
|
"video.unmute": "إلغاء الكتم",
|
||||||
|
"video.volume_down": "خفض الصوت",
|
||||||
|
"video.volume_up": "رفع الصوت"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"about.blocks": "Мадэраваныя серверы",
|
"about.blocks": "Мадэраваныя серверы",
|
||||||
"about.contact": "Кантакт:",
|
"about.contact": "Кантакт:",
|
||||||
|
"about.default_locale": "Прадвызначаная",
|
||||||
"about.disclaimer": "Mastodon - свабоднае праграмнае забеспячэнне, з адкрытым зыходным кодам, і гандлёвай маркай Mastodon gGmbH.",
|
"about.disclaimer": "Mastodon - свабоднае праграмнае забеспячэнне, з адкрытым зыходным кодам, і гандлёвай маркай Mastodon gGmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "Прычына недаступная",
|
"about.domain_blocks.no_reason_available": "Прычына недаступная",
|
||||||
"about.domain_blocks.preamble": "Mastodon, у асноўным, дазваляе вам праглядаць кантэнт і ўзаемадзейнічаць з карыстальнікамі з іншых сервераў у федэсвету. Гэтыя выключэнні былі зроблены дакладна на гэтым серверы.",
|
"about.domain_blocks.preamble": "Mastodon, у асноўным, дазваляе вам праглядаць кантэнт і ўзаемадзейнічаць з карыстальнікамі з іншых сервераў у федэсвету. Гэтыя выключэнні былі зроблены дакладна на гэтым серверы.",
|
||||||
|
@ -8,6 +9,7 @@
|
||||||
"about.domain_blocks.silenced.title": "Абмежаваны",
|
"about.domain_blocks.silenced.title": "Абмежаваны",
|
||||||
"about.domain_blocks.suspended.explanation": "Ніякая інфармацыя з гэтага сервера не будзе апрацавана, захавана або абменена, узаемадзеянне або камунікацыя з карыстальнікамі гэтага сервера немагчымы.",
|
"about.domain_blocks.suspended.explanation": "Ніякая інфармацыя з гэтага сервера не будзе апрацавана, захавана або абменена, узаемадзеянне або камунікацыя з карыстальнікамі гэтага сервера немагчымы.",
|
||||||
"about.domain_blocks.suspended.title": "Прыпынены",
|
"about.domain_blocks.suspended.title": "Прыпынены",
|
||||||
|
"about.language_label": "Мова",
|
||||||
"about.not_available": "Дадзеная інфармацыя не дасяжная на гэтым серверы.",
|
"about.not_available": "Дадзеная інфармацыя не дасяжная на гэтым серверы.",
|
||||||
"about.powered_by": "Дэцэнтралізаваная сацыяльная сетка, створаная {mastodon}",
|
"about.powered_by": "Дэцэнтралізаваная сацыяльная сетка, створаная {mastodon}",
|
||||||
"about.rules": "Правілы сервера",
|
"about.rules": "Правілы сервера",
|
||||||
|
@ -19,13 +21,21 @@
|
||||||
"account.block_domain": "Заблакіраваць дамен {domain}",
|
"account.block_domain": "Заблакіраваць дамен {domain}",
|
||||||
"account.block_short": "Заблакіраваць",
|
"account.block_short": "Заблакіраваць",
|
||||||
"account.blocked": "Заблакіраваны",
|
"account.blocked": "Заблакіраваны",
|
||||||
|
"account.blocking": "Блакіраванне",
|
||||||
"account.cancel_follow_request": "Скасаваць запыт на падпіску",
|
"account.cancel_follow_request": "Скасаваць запыт на падпіску",
|
||||||
"account.copy": "Скапіраваць спасылку на профіль",
|
"account.copy": "Скапіраваць спасылку на профіль",
|
||||||
"account.direct": "Згадаць асабіста @{name}",
|
"account.direct": "Згадаць асабіста @{name}",
|
||||||
"account.disable_notifications": "Не паведамляць мне пра публікацыі @{name}",
|
"account.disable_notifications": "Не паведамляць мне пра публікацыі @{name}",
|
||||||
|
"account.domain_blocking": "Блакіраванне дамена",
|
||||||
"account.edit_profile": "Рэдагаваць профіль",
|
"account.edit_profile": "Рэдагаваць профіль",
|
||||||
"account.enable_notifications": "Апавяшчаць мяне пра допісы @{name}",
|
"account.enable_notifications": "Апавяшчаць мяне пра допісы @{name}",
|
||||||
"account.endorse": "Паказваць у профілі",
|
"account.endorse": "Паказваць у профілі",
|
||||||
|
"account.familiar_followers_many": "Мае сярод падпісчыкаў {name1}, {name2}, і {othersCount, plural, one {яшчэ # чалавека, знаёмага вам} few {яшчэ # чалавекі, знаёмыя вам} many {яшчэ # чалавек, знаёмых вам} other {яшчэ # чалавекі, знаёмыя вам}}",
|
||||||
|
"account.familiar_followers_one": "Мае сярод падпісчыкаў {name1}",
|
||||||
|
"account.familiar_followers_two": "Мае сярод падпісчыкаў {name1} і {name2}",
|
||||||
|
"account.featured": "Рэкамендаванае",
|
||||||
|
"account.featured.accounts": "Профілі",
|
||||||
|
"account.featured.hashtags": "Хэштэгі",
|
||||||
"account.featured_tags.last_status_at": "Апошні допіс ад {date}",
|
"account.featured_tags.last_status_at": "Апошні допіс ад {date}",
|
||||||
"account.featured_tags.last_status_never": "Няма допісаў",
|
"account.featured_tags.last_status_never": "Няма допісаў",
|
||||||
"account.follow": "Падпісацца",
|
"account.follow": "Падпісацца",
|
||||||
|
@ -33,9 +43,11 @@
|
||||||
"account.followers": "Падпісчыкі",
|
"account.followers": "Падпісчыкі",
|
||||||
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
|
"account.followers.empty": "Ніхто пакуль не падпісаны на гэтага карыстальніка.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
|
"account.followers_counter": "{count, plural, one {{counter} падпісчык} few {{counter} падпісчыкі} many {{counter} падпісчыкаў} other {{counter} падпісчыка}}",
|
||||||
|
"account.followers_you_know_counter": "{count, one {{counter}, знаёмы вам} other {{counter}, знаёмых вам}}",
|
||||||
"account.following": "Падпіскі",
|
"account.following": "Падпіскі",
|
||||||
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
|
"account.following_counter": "{count, plural, one {{counter} падпіска} few {{counter} падпіскі} many {{counter} падпісак} other {{counter} падпіскі}}",
|
||||||
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
|
"account.follows.empty": "Карыстальнік ні на каго не падпісаны.",
|
||||||
|
"account.follows_you": "Падпісаны на вас",
|
||||||
"account.go_to_profile": "Перайсці да профілю",
|
"account.go_to_profile": "Перайсці да профілю",
|
||||||
"account.hide_reblogs": "Схаваць пашырэнні ад @{name}",
|
"account.hide_reblogs": "Схаваць пашырэнні ад @{name}",
|
||||||
"account.in_memoriam": "У памяць.",
|
"account.in_memoriam": "У памяць.",
|
||||||
|
@ -50,18 +62,22 @@
|
||||||
"account.mute_notifications_short": "Не апавяшчаць",
|
"account.mute_notifications_short": "Не апавяшчаць",
|
||||||
"account.mute_short": "Ігнараваць",
|
"account.mute_short": "Ігнараваць",
|
||||||
"account.muted": "Ігнаруецца",
|
"account.muted": "Ігнаруецца",
|
||||||
|
"account.mutual": "Вы падпісаны адно на аднаго",
|
||||||
"account.no_bio": "Апісанне адсутнічае.",
|
"account.no_bio": "Апісанне адсутнічае.",
|
||||||
"account.open_original_page": "Адкрыць арыгінальную старонку",
|
"account.open_original_page": "Адкрыць арыгінальную старонку",
|
||||||
"account.posts": "Допісы",
|
"account.posts": "Допісы",
|
||||||
"account.posts_with_replies": "Допісы і адказы",
|
"account.posts_with_replies": "Допісы і адказы",
|
||||||
|
"account.remove_from_followers": "Выдаліць карыстальніка {name} з падпісчыкаў",
|
||||||
"account.report": "Паскардзіцца на @{name}",
|
"account.report": "Паскардзіцца на @{name}",
|
||||||
"account.requested": "Чакаецца ўхваленне. Націсніце, каб скасаваць запыт на падпіску",
|
"account.requested": "Чакаецца ўхваленне. Націсніце, каб скасаваць запыт на падпіску",
|
||||||
"account.requested_follow": "{name} адправіў запыт на падпіску",
|
"account.requested_follow": "{name} адправіў запыт на падпіску",
|
||||||
|
"account.requests_to_follow_you": "Хоча падпісацца на вас",
|
||||||
"account.share": "Абагуліць профіль @{name}",
|
"account.share": "Абагуліць профіль @{name}",
|
||||||
"account.show_reblogs": "Паказаць падштурхоўванні ад @{name}",
|
"account.show_reblogs": "Паказаць падштурхоўванні ад @{name}",
|
||||||
"account.statuses_counter": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
|
"account.statuses_counter": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
|
||||||
"account.unblock": "Разблакіраваць @{name}",
|
"account.unblock": "Разблакіраваць @{name}",
|
||||||
"account.unblock_domain": "Разблакіраваць дамен {domain}",
|
"account.unblock_domain": "Разблакіраваць дамен {domain}",
|
||||||
|
"account.unblock_domain_short": "Разблакіраваць",
|
||||||
"account.unblock_short": "Разблакіраваць",
|
"account.unblock_short": "Разблакіраваць",
|
||||||
"account.unendorse": "Не паказваць у профілі",
|
"account.unendorse": "Не паказваць у профілі",
|
||||||
"account.unfollow": "Адпісацца",
|
"account.unfollow": "Адпісацца",
|
||||||
|
@ -83,26 +99,30 @@
|
||||||
"alert.unexpected.message": "Узнікла нечаканая памылка.",
|
"alert.unexpected.message": "Узнікла нечаканая памылка.",
|
||||||
"alert.unexpected.title": "Вой!",
|
"alert.unexpected.title": "Вой!",
|
||||||
"alt_text_badge.title": "Альтэрнатыўны тэкст",
|
"alt_text_badge.title": "Альтэрнатыўны тэкст",
|
||||||
|
"alt_text_modal.add_alt_text": "Дадаць альтэрнатыўны тэкст",
|
||||||
|
"alt_text_modal.add_text_from_image": "Дадаць тэкст з відарыса",
|
||||||
|
"alt_text_modal.cancel": "Скасаваць",
|
||||||
|
"alt_text_modal.change_thumbnail": "Змяніць мініяцюру",
|
||||||
"alt_text_modal.done": "Гатова",
|
"alt_text_modal.done": "Гатова",
|
||||||
"announcement.announcement": "Аб'ява",
|
"announcement.announcement": "Аб'ява",
|
||||||
"annual_report.summary.archetype.booster": "Трэнда-сьледнік",
|
"annual_report.summary.archetype.booster": "Паляўнічы на трэнды",
|
||||||
"annual_report.summary.archetype.lurker": "Назіральнік",
|
"annual_report.summary.archetype.lurker": "Назіральнік",
|
||||||
"annual_report.summary.archetype.oracle": "Аракул",
|
"annual_report.summary.archetype.oracle": "Аракул",
|
||||||
"annual_report.summary.archetype.pollster": "Апытвальнік",
|
"annual_report.summary.archetype.pollster": "Апытвальнік",
|
||||||
"annual_report.summary.archetype.replier": "Душа кампанійі",
|
"annual_report.summary.archetype.replier": "Душа кампаніі",
|
||||||
"annual_report.summary.followers.followers": "падпісанты",
|
"annual_report.summary.followers.followers": "падпісчыкі",
|
||||||
"annual_report.summary.followers.total": "Усяго {count}",
|
"annual_report.summary.followers.total": "Агулам {count}",
|
||||||
"annual_report.summary.here_it_is": "Вось вашыя вынікі {year} году:",
|
"annual_report.summary.here_it_is": "Вось вашы вынікі {year} за год:",
|
||||||
"annual_report.summary.highlighted_post.by_favourites": "самы ўпадабаны допіс",
|
"annual_report.summary.highlighted_post.by_favourites": "самы ўпадабаны допіс",
|
||||||
"annual_report.summary.highlighted_post.by_reblogs": "самы пашыраны допіс",
|
"annual_report.summary.highlighted_post.by_reblogs": "самы пашыраны допіс",
|
||||||
"annual_report.summary.highlighted_post.by_replies": "самы каментаваны допіс",
|
"annual_report.summary.highlighted_post.by_replies": "самы каментаваны допіс",
|
||||||
"annual_report.summary.highlighted_post.possessive": "{name}",
|
"annual_report.summary.highlighted_post.possessive": "{name}",
|
||||||
"annual_report.summary.most_used_app.most_used_app": "самая выкарыстоўваная аплікацыя",
|
"annual_report.summary.most_used_app.most_used_app": "праграма, якой карысталіся часцей",
|
||||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "самы выкарыстоўваны гэштаґ",
|
"annual_report.summary.most_used_hashtag.most_used_hashtag": "хэштэг, якім карысталіся часцей",
|
||||||
"annual_report.summary.most_used_hashtag.none": "Няма",
|
"annual_report.summary.most_used_hashtag.none": "Няма",
|
||||||
"annual_report.summary.new_posts.new_posts": "новыя допісы",
|
"annual_report.summary.new_posts.new_posts": "новыя допісы",
|
||||||
"annual_report.summary.percentile.text": "<topLabel>Мэта месьціць вас у топ</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
|
"annual_report.summary.percentile.text": "<topLabel>З-за гэтага, вы знаходзіцеся ў топе</topLabel><percentage></percentage><bottomLabel> карыстальнікаў {domain}.</bottomLabel>",
|
||||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Мы ня скажам аб гэтым Сіняпальцаму.",
|
"annual_report.summary.percentile.we_wont_tell_bernie": "КДБ пра гэта не даведаецца.",
|
||||||
"annual_report.summary.thanks": "Дзякуй за ўдзел у Mastodon!",
|
"annual_report.summary.thanks": "Дзякуй за ўдзел у Mastodon!",
|
||||||
"attachments_list.unprocessed": "(неапрацаваны)",
|
"attachments_list.unprocessed": "(неапрацаваны)",
|
||||||
"audio.hide": "Схаваць аўдыя",
|
"audio.hide": "Схаваць аўдыя",
|
||||||
|
@ -127,7 +147,7 @@
|
||||||
"bundle_column_error.routing.body": "Запытаная старонка не знойдзена. Вы ўпэўнены, што URL у адрасным радку правільны?",
|
"bundle_column_error.routing.body": "Запытаная старонка не знойдзена. Вы ўпэўнены, што URL у адрасным радку правільны?",
|
||||||
"bundle_column_error.routing.title": "404",
|
"bundle_column_error.routing.title": "404",
|
||||||
"bundle_modal_error.close": "Закрыць",
|
"bundle_modal_error.close": "Закрыць",
|
||||||
"bundle_modal_error.message": "Падчас загрузкі гэтага экрана штосьці пайшло ня так.",
|
"bundle_modal_error.message": "Падчас загрузкі гэтага экрана штосьці пайшло не так.",
|
||||||
"bundle_modal_error.retry": "Паспрабуйце зноў",
|
"bundle_modal_error.retry": "Паспрабуйце зноў",
|
||||||
"closed_registrations.other_server_instructions": "Паколькі Mastodon дэцэнтралізаваны, вы можаце стварыць уліковы запіс на іншым серверы і працягваць узаемадзейнічаць з ім.",
|
"closed_registrations.other_server_instructions": "Паколькі Mastodon дэцэнтралізаваны, вы можаце стварыць уліковы запіс на іншым серверы і працягваць узаемадзейнічаць з ім.",
|
||||||
"closed_registrations_modal.description": "Стварэнне ўліковага запісу на {domain} цяпер немагчыма. Заўважце, што няма неабходнасці мець уліковы запіс менавіта на {domain}, каб выкарыстоўваць Mastodon.",
|
"closed_registrations_modal.description": "Стварэнне ўліковага запісу на {domain} цяпер немагчыма. Заўважце, што няма неабходнасці мець уліковы запіс менавіта на {domain}, каб выкарыстоўваць Mastodon.",
|
||||||
|
@ -147,7 +167,7 @@
|
||||||
"column.firehose": "Стужкі",
|
"column.firehose": "Стужкі",
|
||||||
"column.follow_requests": "Запыты на падпіску",
|
"column.follow_requests": "Запыты на падпіску",
|
||||||
"column.home": "Галоўная",
|
"column.home": "Галоўная",
|
||||||
"column.list_members": "Кіраванне ўдзельнікамі спісу",
|
"column.list_members": "Кіраванне ўдзельнікамі спіса",
|
||||||
"column.lists": "Спісы",
|
"column.lists": "Спісы",
|
||||||
"column.mutes": "Ігнараваныя карыстальнікі",
|
"column.mutes": "Ігнараваныя карыстальнікі",
|
||||||
"column.notifications": "Апавяшчэнні",
|
"column.notifications": "Апавяшчэнні",
|
||||||
|
@ -196,19 +216,24 @@
|
||||||
"confirmations.delete_list.confirm": "Выдаліць",
|
"confirmations.delete_list.confirm": "Выдаліць",
|
||||||
"confirmations.delete_list.message": "Вы ўпэўненыя, што хочаце беззваротна выдаліць гэты чарнавік?",
|
"confirmations.delete_list.message": "Вы ўпэўненыя, што хочаце беззваротна выдаліць гэты чарнавік?",
|
||||||
"confirmations.delete_list.title": "Выдаліць спіс?",
|
"confirmations.delete_list.title": "Выдаліць спіс?",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Працягнуць рэдагаванне",
|
||||||
"confirmations.discard_edit_media.confirm": "Адмяніць",
|
"confirmations.discard_edit_media.confirm": "Адмяніць",
|
||||||
"confirmations.discard_edit_media.message": "У вас ёсць незахаваныя змены ў апісанні або прэв'ю, усе роўна скасаваць іх?",
|
"confirmations.discard_edit_media.message": "У вас ёсць незахаваныя змены ў апісанні або прэв'ю, усе роўна скасаваць іх?",
|
||||||
"confirmations.follow_to_list.confirm": "Падпісацца й дадаць у сьпіс",
|
"confirmations.follow_to_list.confirm": "Падпісацца і дадаць у спіс",
|
||||||
"confirmations.follow_to_list.message": "Вы мусіце быць падпісаныя на {name} каб дадаць яго ў сьпіс.",
|
"confirmations.follow_to_list.message": "Вам трэба падпісацца на карыстальніка {name}, каб дадаць яго ў спіс.",
|
||||||
"confirmations.follow_to_list.title": "Падпісацца на карыстальніка?",
|
"confirmations.follow_to_list.title": "Падпісацца на карыстальніка?",
|
||||||
"confirmations.logout.confirm": "Выйсці",
|
"confirmations.logout.confirm": "Выйсці",
|
||||||
"confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
|
"confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
|
||||||
"confirmations.logout.title": "Выйсці?",
|
"confirmations.logout.title": "Выйсці?",
|
||||||
"confirmations.missing_alt_text.title": "Дадаць апісаньне?",
|
"confirmations.missing_alt_text.confirm": "Дадаць альтэрнатыўны тэкст",
|
||||||
|
"confirmations.missing_alt_text.secondary": "Усё адно апублікаваць",
|
||||||
|
"confirmations.missing_alt_text.title": "Дадаць альтэрнатыўны тэкст?",
|
||||||
"confirmations.mute.confirm": "Ігнараваць",
|
"confirmations.mute.confirm": "Ігнараваць",
|
||||||
"confirmations.redraft.confirm": "Выдаліць і перапісаць",
|
"confirmations.redraft.confirm": "Выдаліць і перапісаць",
|
||||||
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
|
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",
|
||||||
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
|
"confirmations.redraft.title": "Выдаліць і перапісаць допіс?",
|
||||||
|
"confirmations.remove_from_followers.confirm": "Выдаліць падпісчыка",
|
||||||
|
"confirmations.remove_from_followers.title": "Выдаліць падпісчыка?",
|
||||||
"confirmations.unfollow.confirm": "Адпісацца",
|
"confirmations.unfollow.confirm": "Адпісацца",
|
||||||
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
|
"confirmations.unfollow.message": "Вы ўпэўненыя, што хочаце адпісацца ад {name}?",
|
||||||
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
|
"confirmations.unfollow.title": "Адпісацца ад карыстальніка?",
|
||||||
|
@ -221,7 +246,7 @@
|
||||||
"conversation.with": "З {names}",
|
"conversation.with": "З {names}",
|
||||||
"copy_icon_button.copied": "Скапіявана ў буфер абмену",
|
"copy_icon_button.copied": "Скапіявана ў буфер абмену",
|
||||||
"copypaste.copied": "Скапіравана",
|
"copypaste.copied": "Скапіравана",
|
||||||
"copypaste.copy_to_clipboard": "Капіраваць у буфер абмену",
|
"copypaste.copy_to_clipboard": "Скапіяваць у буфер абмену",
|
||||||
"directory.federated": "З вядомага федэсвету",
|
"directory.federated": "З вядомага федэсвету",
|
||||||
"directory.local": "Толькі з {domain}",
|
"directory.local": "Толькі з {domain}",
|
||||||
"directory.new_arrivals": "Новыя карыстальнікі",
|
"directory.new_arrivals": "Новыя карыстальнікі",
|
||||||
|
@ -230,7 +255,7 @@
|
||||||
"disabled_account_banner.text": "Ваш уліковы запіс {disabledAccount} часова адключаны.",
|
"disabled_account_banner.text": "Ваш уліковы запіс {disabledAccount} часова адключаны.",
|
||||||
"dismissable_banner.community_timeline": "Гэта самыя апошнія допісы ад людзей, уліковыя запісы якіх размяшчаюцца на {domain}.",
|
"dismissable_banner.community_timeline": "Гэта самыя апошнія допісы ад людзей, уліковыя запісы якіх размяшчаюцца на {domain}.",
|
||||||
"dismissable_banner.dismiss": "Адхіліць",
|
"dismissable_banner.dismiss": "Адхіліць",
|
||||||
"dismissable_banner.public_timeline": "Гэта самыя новыя публічныя допісы ад карыстальнікаў фэдывёрсу на якіх падпісаныя карыстальнікі {domain}.",
|
"dismissable_banner.public_timeline": "Вось апошнія публічныя допісы ад карыстальнікаў fediverse на якіх падпісаны карыстальнікі {domain}.",
|
||||||
"domain_block_modal.block": "Заблакіраваць сервер",
|
"domain_block_modal.block": "Заблакіраваць сервер",
|
||||||
"domain_block_modal.block_account_instead": "Заблакіраваць @{name} замест гэтага",
|
"domain_block_modal.block_account_instead": "Заблакіраваць @{name} замест гэтага",
|
||||||
"domain_block_modal.they_can_interact_with_old_posts": "Людзі з гэтага сервера змогуць узаемадзейнічаць з вашымі старымі допісамі.",
|
"domain_block_modal.they_can_interact_with_old_posts": "Людзі з гэтага сервера змогуць узаемадзейнічаць з вашымі старымі допісамі.",
|
||||||
|
@ -275,15 +300,15 @@
|
||||||
"empty_column.account_timeline": "Тут няма допісаў!",
|
"empty_column.account_timeline": "Тут няма допісаў!",
|
||||||
"empty_column.account_unavailable": "Профіль недаступны",
|
"empty_column.account_unavailable": "Профіль недаступны",
|
||||||
"empty_column.blocks": "Вы яшчэ нікога не заблакіравалі.",
|
"empty_column.blocks": "Вы яшчэ нікога не заблакіравалі.",
|
||||||
"empty_column.bookmarked_statuses": "У вас яшчэ няма паведамленняў з закладкамі. Калі вы дадасце закладку, яна з'явіцца тут.",
|
"empty_column.bookmarked_statuses": "У вашых закладках яшчэ няма допісаў. Калі вы дадасце закладку, яна з’явіцца тут.",
|
||||||
"empty_column.community": "Мясцовая стужка пустая. Напішыце што-небудзь публічна, каб зрушыць з месца!",
|
"empty_column.community": "Мясцовая стужка пустая. Напішыце нешта публічнае, каб разварушыць справу!",
|
||||||
"empty_column.direct": "Пакуль у вас няма асабістых згадак. Калі вы дашляце або атрымаеце штось, яно з'явіцца тут.",
|
"empty_column.direct": "Пакуль у вас няма асабістых згадванняў. Калі вы дашляце або атрымаеце штосьці, яно з’явіцца тут.",
|
||||||
"empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.",
|
"empty_column.domain_blocks": "Заблакіраваных даменаў пакуль няма.",
|
||||||
"empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней",
|
"empty_column.explore_statuses": "Зараз не ў трэндзе. Праверце пазней",
|
||||||
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, вы ўбачыце яго тут.",
|
"empty_column.favourited_statuses": "Вы яшчэ не ўпадабалі ніводны допіс. Калі гэта адбудзецца, вы ўбачыце яго тут.",
|
||||||
"empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, вы ўбачыце гэтых людзей тут.",
|
"empty_column.favourites": "Ніхто яшчэ не ўпадабаў гэты допіс. Калі гэта адбудзецца, вы ўбачыце гэтых людзей тут.",
|
||||||
"empty_column.follow_requests": "У вас яшчэ няма запытаў на падпіскуі. Калі вы атрымаеце запыт, ён з'явяцца тут.",
|
"empty_column.follow_requests": "У вас яшчэ няма запытаў на падпіску. Калі вы атрымаеце запыт, ён з’явіцца тут.",
|
||||||
"empty_column.followed_tags": "Вы пакуль не падпісаны ні на адзін хэштэг. Калі падпішацеся, яны з'явяцца тут.",
|
"empty_column.followed_tags": "Вы пакуль не падпісаны ні на адзін хэштэг. Калі падпішацеся, яны з’явяцца тут.",
|
||||||
"empty_column.hashtag": "Па гэтаму хэштэгу пакуль што нічога няма.",
|
"empty_column.hashtag": "Па гэтаму хэштэгу пакуль што нічога няма.",
|
||||||
"empty_column.home": "Галоўная стужка пустая! Падпішыцеся на іншых людзей, каб запоўніць яе. {suggestions}",
|
"empty_column.home": "Галоўная стужка пустая! Падпішыцеся на іншых людзей, каб запоўніць яе. {suggestions}",
|
||||||
"empty_column.list": "У гэтым спісе пакуль што нічога няма. Калі члены лісту апублікуюць новыя запісы, яны з'явяцца тут.",
|
"empty_column.list": "У гэтым спісе пакуль што нічога няма. Калі члены лісту апублікуюць новыя запісы, яны з'явяцца тут.",
|
||||||
|
@ -294,13 +319,18 @@
|
||||||
"error.unexpected_crash.explanation": "Гэта старонка не можа быць адлюстравана карэктна з-за памылкі ў нашым кодзе, або праблемы з сумяшчальнасцю браўзера.",
|
"error.unexpected_crash.explanation": "Гэта старонка не можа быць адлюстравана карэктна з-за памылкі ў нашым кодзе, або праблемы з сумяшчальнасцю браўзера.",
|
||||||
"error.unexpected_crash.explanation_addons": "Гэтая старонка не можа быць адлюстравана карэктна. Верагодна, гэтая памылка выклікана дадатковым кампанентам браўзера або інструментамі аўтаматычнага перакладу",
|
"error.unexpected_crash.explanation_addons": "Гэтая старонка не можа быць адлюстравана карэктна. Верагодна, гэтая памылка выклікана дадатковым кампанентам браўзера або інструментамі аўтаматычнага перакладу",
|
||||||
"error.unexpected_crash.next_steps": "Паспрабуйце абнавіць старонку. Калі гэта не дапаможа, вы можаце паспрабаваць іншы браўзер, альбо выкарыстаць усталяваную праграму.",
|
"error.unexpected_crash.next_steps": "Паспрабуйце абнавіць старонку. Калі гэта не дапаможа, вы можаце паспрабаваць іншы браўзер, альбо выкарыстаць усталяваную праграму.",
|
||||||
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і аднавіць старонку. Калі гэта не дапаможа, вы можаце карыстацца Мастадонт праз другі браўзер ці аплікацыю.",
|
"error.unexpected_crash.next_steps_addons": "Паспрабуйце выключыць іх і абнавіць старонку. Калі гэта не дапамагае, вы ўсё яшчэ можаце карыстацца Mastodon праз іншы браўзер ці натыўную праграму.",
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Дадаць дыягнастычны стэк у буфер абмену",
|
"errors.unexpected_crash.copy_stacktrace": "Дадаць дыягнастычны стэк у буфер абмену",
|
||||||
"errors.unexpected_crash.report_issue": "Паведаміць аб праблеме",
|
"errors.unexpected_crash.report_issue": "Паведаміць аб праблеме",
|
||||||
"explore.suggested_follows": "Людзі",
|
"explore.suggested_follows": "Людзі",
|
||||||
|
"explore.title": "Трэндавае",
|
||||||
"explore.trending_links": "Навіны",
|
"explore.trending_links": "Навіны",
|
||||||
"explore.trending_statuses": "Допісы",
|
"explore.trending_statuses": "Допісы",
|
||||||
"explore.trending_tags": "Хэштэгі",
|
"explore.trending_tags": "Хэштэгі",
|
||||||
|
"featured_carousel.next": "Далей",
|
||||||
|
"featured_carousel.post": "Допіс",
|
||||||
|
"featured_carousel.previous": "Назад",
|
||||||
|
"featured_carousel.slide": "{index} з {total}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "Гэтая катэгорыя фільтра не прымяняецца да кантэксту, у якім вы адкрылі гэты пост. Калі вы хочаце, каб паведамленне таксама было адфільтравана ў гэтым кантэксце, вам трэба будзе адрэдагаваць фільтр",
|
"filter_modal.added.context_mismatch_explanation": "Гэтая катэгорыя фільтра не прымяняецца да кантэксту, у якім вы адкрылі гэты пост. Калі вы хочаце, каб паведамленне таксама было адфільтравана ў гэтым кантэксце, вам трэба будзе адрэдагаваць фільтр",
|
||||||
"filter_modal.added.context_mismatch_title": "Неадпаведны кантэкст!",
|
"filter_modal.added.context_mismatch_title": "Неадпаведны кантэкст!",
|
||||||
"filter_modal.added.expired_explanation": "Тэрмін дзеяння гэтай катэгорыі фільтраў скончыўся, вам трэба будзе змяніць дату заканчэння тэрміну дзеяння, каб яна прымянялася",
|
"filter_modal.added.expired_explanation": "Тэрмін дзеяння гэтай катэгорыі фільтраў скончыўся, вам трэба будзе змяніць дату заканчэння тэрміну дзеяння, каб яна прымянялася",
|
||||||
|
@ -349,10 +379,10 @@
|
||||||
"footer.privacy_policy": "Палітыка прыватнасці",
|
"footer.privacy_policy": "Палітыка прыватнасці",
|
||||||
"footer.source_code": "Прагледзець зыходны код",
|
"footer.source_code": "Прагледзець зыходны код",
|
||||||
"footer.status": "Статус",
|
"footer.status": "Статус",
|
||||||
"footer.terms_of_service": "Умовы абслугоўваньня",
|
"footer.terms_of_service": "Умовы выкарыстання",
|
||||||
"generic.saved": "Захавана",
|
"generic.saved": "Захавана",
|
||||||
"getting_started.heading": "Пачатак працы",
|
"getting_started.heading": "Пачатак працы",
|
||||||
"hashtag.admin_moderation": "Адкрыць інтэрфэйс мадаратара для #{name}",
|
"hashtag.admin_moderation": "Адкрыць інтэрфейс мадэратара для #{name}",
|
||||||
"hashtag.column_header.tag_mode.all": "і {additional}",
|
"hashtag.column_header.tag_mode.all": "і {additional}",
|
||||||
"hashtag.column_header.tag_mode.any": "або {additional}",
|
"hashtag.column_header.tag_mode.any": "або {additional}",
|
||||||
"hashtag.column_header.tag_mode.none": "без {additional}",
|
"hashtag.column_header.tag_mode.none": "без {additional}",
|
||||||
|
@ -374,35 +404,39 @@
|
||||||
"hints.profiles.see_more_followers": "Глядзець больш падпісаных на {domain}",
|
"hints.profiles.see_more_followers": "Глядзець больш падпісаных на {domain}",
|
||||||
"hints.profiles.see_more_follows": "Глядзець больш падпісак на {domain}",
|
"hints.profiles.see_more_follows": "Глядзець больш падпісак на {domain}",
|
||||||
"hints.profiles.see_more_posts": "Глядзець больш допісаў на {domain}",
|
"hints.profiles.see_more_posts": "Глядзець больш допісаў на {domain}",
|
||||||
"hints.threads.replies_may_be_missing": "Адказы зь іншых сэрвэраў могуць адсутнічаць.",
|
"hints.threads.replies_may_be_missing": "Адказы з іншых сервераў могуць адсутнічаць.",
|
||||||
"hints.threads.see_more": "Глядзіце больш адказаў на {domain}",
|
"hints.threads.see_more": "Глядзіце больш адказаў на {domain}",
|
||||||
|
"home.column_settings.show_quotes": "Паказаць цытаты",
|
||||||
"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": "Схаваць аб'явы",
|
||||||
"home.pending_critical_update.body": "Калі ласка, абнавіце свой сервер Mastodon як мага хутчэй!",
|
"home.pending_critical_update.body": "Абнавіце свой сервер Mastodon як мага хутчэй!",
|
||||||
"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.disclaimer": "Mastodon не можа паведамляць карыстальнікам, што вы праігнаравалі апавяшчэнні ад іх. Ігнараванне апавяшчэнняў не спыніць адпраўку саміх паведамленняў.",
|
||||||
"ignore_notifications_modal.filter_instead": "Замест гэтага адфільтраваць",
|
"ignore_notifications_modal.filter_instead": "Замест гэтага адфільтраваць",
|
||||||
"ignore_notifications_modal.filter_to_act_users": "Вы па-ранейшаму зможаце прымаць, адхіляць ці скардзіцца на карыстальнікаў",
|
"ignore_notifications_modal.filter_to_act_users": "Вы па-ранейшаму зможаце прымаць, адхіляць ці скардзіцца на карыстальнікаў",
|
||||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Фільтраваньне дапамагае пазьбегнуць патэнцыйнай блытаніны",
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Выкарыстанне фільтраў дапамагае пазбягаць патэнцыйнай блытаніны",
|
||||||
"ignore_notifications_modal.filter_to_review_separately": "Вы можаце прагледзець адфільтраваныя паведамленьні асобна",
|
"ignore_notifications_modal.filter_to_review_separately": "Вы можаце прагледзець адфільтраваныя апавяшчэнні асобна",
|
||||||
"ignore_notifications_modal.ignore": "Ігнараваць паведамленьні",
|
"ignore_notifications_modal.ignore": "Ігнараваць апавяшчэнні",
|
||||||
"ignore_notifications_modal.limited_accounts_title": "Ігнараваць паведамленьні ад абмежаваных уліковых запісаў?",
|
"ignore_notifications_modal.limited_accounts_title": "Ігнараваць апавяшчэнні ад уліковых запісаў пад мадэрацыяй?",
|
||||||
"ignore_notifications_modal.new_accounts_title": "Ігнараваць паведамленьні ад новых уліковых запісаў?",
|
"ignore_notifications_modal.new_accounts_title": "Ігнараваць апавяшчэнні ад новых уліковых запісаў?",
|
||||||
"ignore_notifications_modal.not_followers_title": "Ігнараваць паведамленьні ад людзей, якія ня падпісаныя на вас?",
|
"ignore_notifications_modal.not_followers_title": "Ігнараваць апавяшчэнні ад людзей, якія не падпісаныя на вас?",
|
||||||
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
|
"ignore_notifications_modal.not_following_title": "Ігнараваць апавяшчэнні ад людзей на якіх вы не падпісаны?",
|
||||||
"ignore_notifications_modal.private_mentions_title": "Ігнараваць паведамленьні аб непажаданых прыватных згадках?",
|
"ignore_notifications_modal.private_mentions_title": "Ігнараваць апавяшчэнні пра непажаданыя асабістыя згадванні?",
|
||||||
"info_button.label": "Даведка",
|
"info_button.label": "Даведка",
|
||||||
"interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць з вашага ўліковага запісу.",
|
"interaction_modal.action.favourite": "Каб працягнуць, вы мусіце ўпадабаць нешта са свайго ўліковага запісу.",
|
||||||
"interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца з вашага ўліковага запісу.",
|
"interaction_modal.action.follow": "Каб працягнуць, вы мусіце падпісацца на некага са свайго ўліковага запісу.",
|
||||||
|
"interaction_modal.go": "Перайсці",
|
||||||
|
"interaction_modal.no_account_yet": "Не маеце ўліковага запісу?",
|
||||||
"interaction_modal.on_another_server": "На іншым серверы",
|
"interaction_modal.on_another_server": "На іншым серверы",
|
||||||
"interaction_modal.on_this_server": "На гэтым серверы",
|
"interaction_modal.on_this_server": "На гэтым серверы",
|
||||||
"interaction_modal.title.favourite": "Упадабаць допіс {name}",
|
"interaction_modal.title.favourite": "Упадабаць допіс {name}",
|
||||||
"interaction_modal.title.follow": "Падпісацца на {name}",
|
"interaction_modal.title.follow": "Падпісацца на {name}",
|
||||||
"interaction_modal.title.reblog": "Пашырыць допіс ад {name}",
|
"interaction_modal.title.reblog": "Пашырыць допіс ад {name}",
|
||||||
"interaction_modal.title.reply": "Адказаць на допіс {name}",
|
"interaction_modal.title.reply": "Адказаць на допіс {name}",
|
||||||
|
"interaction_modal.username_prompt": "Напр., {example}",
|
||||||
"intervals.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
|
"intervals.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}",
|
||||||
"intervals.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}}",
|
"intervals.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}}",
|
||||||
"intervals.full.minutes": "{number, plural, one {# хвіліна} few {# хвіліны} many {# хвілін} other {# хвіліны}}",
|
"intervals.full.minutes": "{number, plural, one {# хвіліна} few {# хвіліны} many {# хвілін} other {# хвіліны}}",
|
||||||
|
@ -438,21 +472,32 @@
|
||||||
"keyboard_shortcuts.toggle_hidden": "Паказаць/схаваць тэкст за папярэджаннем пра кантэнт",
|
"keyboard_shortcuts.toggle_hidden": "Паказаць/схаваць тэкст за папярэджаннем пра кантэнт",
|
||||||
"keyboard_shortcuts.toggle_sensitivity": "Паказаць/схаваць медыя",
|
"keyboard_shortcuts.toggle_sensitivity": "Паказаць/схаваць медыя",
|
||||||
"keyboard_shortcuts.toot": "Стварыць новы допіс",
|
"keyboard_shortcuts.toot": "Стварыць новы допіс",
|
||||||
|
"keyboard_shortcuts.translate": "каб перакласці допіс",
|
||||||
"keyboard_shortcuts.unfocus": "Расфакусаваць тэкставую вобласць/пошукавы радок",
|
"keyboard_shortcuts.unfocus": "Расфакусаваць тэкставую вобласць/пошукавы радок",
|
||||||
"keyboard_shortcuts.up": "Перамясціцца ўверх па спісе",
|
"keyboard_shortcuts.up": "Перамясціцца ўверх па спісе",
|
||||||
"lightbox.close": "Закрыць",
|
"lightbox.close": "Закрыць",
|
||||||
"lightbox.next": "Далей",
|
"lightbox.next": "Далей",
|
||||||
"lightbox.previous": "Назад",
|
"lightbox.previous": "Назад",
|
||||||
|
"lightbox.zoom_in": "Маштабаваць да фактычнага памеру",
|
||||||
|
"lightbox.zoom_out": "Дапасаваць усё змесціва пад памеры экрана",
|
||||||
"limited_account_hint.action": "Усе роўна паказваць профіль",
|
"limited_account_hint.action": "Усе роўна паказваць профіль",
|
||||||
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
|
"limited_account_hint.title": "Гэты профіль быў схаваны мадэратарамі",
|
||||||
"link_preview.author": "Ад {name}",
|
"link_preview.author": "Ад {name}",
|
||||||
"link_preview.more_from_author": "Больш ад {name}",
|
"link_preview.more_from_author": "Больш ад {name}",
|
||||||
"link_preview.shares": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
|
"link_preview.shares": "{count, plural, one {{counter} допіс} few {{counter} допісы} many {{counter} допісаў} other {{counter} допісу}}",
|
||||||
"lists.add_member": "Дадаць",
|
"lists.add_member": "Дадаць",
|
||||||
|
"lists.add_to_list": "Дадаць у спіс",
|
||||||
|
"lists.add_to_lists": "Дадаць {name} у спісы",
|
||||||
"lists.create": "Стварыць",
|
"lists.create": "Стварыць",
|
||||||
"lists.create_list": "Стварыць спіс",
|
"lists.create_list": "Стварыць спіс",
|
||||||
"lists.delete": "Выдаліць спіс",
|
"lists.delete": "Выдаліць спіс",
|
||||||
|
"lists.done": "Гатова",
|
||||||
"lists.edit": "Рэдагаваць спіс",
|
"lists.edit": "Рэдагаваць спіс",
|
||||||
|
"lists.list_name": "Назва спіса",
|
||||||
|
"lists.new_list_name": "Назва новага спіса",
|
||||||
|
"lists.no_lists_yet": "Пакуль няма спісаў.",
|
||||||
|
"lists.no_members_yet": "Пакуль няма ўдзельнікаў.",
|
||||||
|
"lists.no_results_found": "Нічога не знойдзена.",
|
||||||
"lists.remove_member": "Выдаліць",
|
"lists.remove_member": "Выдаліць",
|
||||||
"lists.replies_policy.followed": "Любы карыстальнік, на якога вы падпісаліся",
|
"lists.replies_policy.followed": "Любы карыстальнік, на якога вы падпісаліся",
|
||||||
"lists.replies_policy.list": "Удзельнікі гэтага спісу",
|
"lists.replies_policy.list": "Удзельнікі гэтага спісу",
|
||||||
|
@ -460,7 +505,7 @@
|
||||||
"lists.save": "Захаваць",
|
"lists.save": "Захаваць",
|
||||||
"lists.search": "Пошук",
|
"lists.search": "Пошук",
|
||||||
"load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}",
|
"load_pending": "{count, plural, one {# новы элемент} few {# новыя элементы} many {# новых элементаў} other {# новых элементаў}}",
|
||||||
"loading_indicator.label": "Загрузка…",
|
"loading_indicator.label": "Ідзе загрузка…",
|
||||||
"media_gallery.hide": "Схаваць",
|
"media_gallery.hide": "Схаваць",
|
||||||
"moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны таму што вы перанесены на {movedToAccount}.",
|
"moved_to_account_banner.text": "Ваш уліковы запіс {disabledAccount} зараз адключаны таму што вы перанесены на {movedToAccount}.",
|
||||||
"mute_modal.hide_from_notifications": "Схаваць з апавяшчэнняў",
|
"mute_modal.hide_from_notifications": "Схаваць з апавяшчэнняў",
|
||||||
|
@ -473,7 +518,10 @@
|
||||||
"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.account_settings": "Пароль і бяспека",
|
||||||
|
"navigation_bar.administration": "Адміністрацыя",
|
||||||
"navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе",
|
"navigation_bar.advanced_interface": "Адкрыць у пашыраным вэб-інтэрфейсе",
|
||||||
|
"navigation_bar.automated_deletion": "Аўтаматычнае выдаленне допісаў",
|
||||||
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
|
"navigation_bar.blocks": "Заблакіраваныя карыстальнікі",
|
||||||
"navigation_bar.bookmarks": "Закладкі",
|
"navigation_bar.bookmarks": "Закладкі",
|
||||||
"navigation_bar.direct": "Асабістыя згадванні",
|
"navigation_bar.direct": "Асабістыя згадванні",
|
||||||
|
@ -483,13 +531,21 @@
|
||||||
"navigation_bar.follow_requests": "Запыты на падпіску",
|
"navigation_bar.follow_requests": "Запыты на падпіску",
|
||||||
"navigation_bar.followed_tags": "Падпіскі",
|
"navigation_bar.followed_tags": "Падпіскі",
|
||||||
"navigation_bar.follows_and_followers": "Падпіскі і падпісчыкі",
|
"navigation_bar.follows_and_followers": "Падпіскі і падпісчыкі",
|
||||||
|
"navigation_bar.import_export": "Імпарт і экспарт",
|
||||||
"navigation_bar.lists": "Спісы",
|
"navigation_bar.lists": "Спісы",
|
||||||
|
"navigation_bar.live_feed_local": "Жывая стужка (лакальная)",
|
||||||
|
"navigation_bar.live_feed_public": "Жывая стужка (публічная)",
|
||||||
"navigation_bar.logout": "Выйсці",
|
"navigation_bar.logout": "Выйсці",
|
||||||
"navigation_bar.moderation": "Мадэрацыя",
|
"navigation_bar.moderation": "Мадэрацыя",
|
||||||
|
"navigation_bar.more": "Больш",
|
||||||
"navigation_bar.mutes": "Ігнараваныя карыстальнікі",
|
"navigation_bar.mutes": "Ігнараваныя карыстальнікі",
|
||||||
"navigation_bar.opened_in_classic_interface": "Допісы, уліковыя запісы і іншыя спецыфічныя старонкі па змоўчанні адчыняюцца ў класічным вэб-інтэрфейсе.",
|
"navigation_bar.opened_in_classic_interface": "Допісы, уліковыя запісы і іншыя спецыфічныя старонкі па змоўчанні адчыняюцца ў класічным вэб-інтэрфейсе.",
|
||||||
"navigation_bar.preferences": "Налады",
|
"navigation_bar.preferences": "Налады",
|
||||||
|
"navigation_bar.privacy_and_reach": "Прыватнасць і пошук",
|
||||||
"navigation_bar.search": "Пошук",
|
"navigation_bar.search": "Пошук",
|
||||||
|
"navigation_bar.search_trends": "Пошук / Трэндавае",
|
||||||
|
"navigation_panel.collapse_followed_tags": "Згарнуць меню падпісак на хэштэгі",
|
||||||
|
"navigation_panel.collapse_lists": "Згарнуць меню спісаў",
|
||||||
"not_signed_in_indicator.not_signed_in": "Вам трэба ўвайсці каб атрымаць доступ да гэтага рэсурсу.",
|
"not_signed_in_indicator.not_signed_in": "Вам трэба ўвайсці каб атрымаць доступ да гэтага рэсурсу.",
|
||||||
"notification.admin.report": "{name} паскардзіўся на {target}",
|
"notification.admin.report": "{name} паскардзіўся на {target}",
|
||||||
"notification.admin.report_account": "{name} паскардзіўся на {count, plural, one {# допіс} many {# допісаў} other {# допіса}} ад {target} з прычыны {category}",
|
"notification.admin.report_account": "{name} паскардзіўся на {count, plural, one {# допіс} many {# допісаў} other {# допіса}} ад {target} з прычыны {category}",
|
||||||
|
@ -497,7 +553,10 @@
|
||||||
"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.annual_report.view": "Перайсці да #Wrapstodon",
|
||||||
"notification.favourite": "Ваш допіс упадабаны {name}",
|
"notification.favourite": "Ваш допіс упадабаны {name}",
|
||||||
|
"notification.favourite_pm": "Ваша асабістае згадванне ўпадабана {name}",
|
||||||
|
"notification.favourite_pm.name_and_others_with_link": "{name} і <a>{count, plural, one {# іншы} few {# іншыя} many {# іншых} other {# іншых}}</a> ўпадабалі ваша асабістае згадванне",
|
||||||
"notification.follow": "{name} падпісаўся на вас",
|
"notification.follow": "{name} падпісаўся на вас",
|
||||||
"notification.follow_request": "{name} адправіў запыт на падпіску",
|
"notification.follow_request": "{name} адправіў запыт на падпіску",
|
||||||
"notification.follow_request.name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} запыталіся падпісацца на вас",
|
"notification.follow_request.name_and_others": "{name} і {count, plural, one {# іншы} many {# іншых} other {# іншых}} запыталіся падпісацца на вас",
|
||||||
|
@ -508,7 +567,7 @@
|
||||||
"notification.mention": "Згадванне",
|
"notification.mention": "Згадванне",
|
||||||
"notification.mentioned_you": "{name} згадаў вас",
|
"notification.mentioned_you": "{name} згадаў вас",
|
||||||
"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": "Некаторыя вашыя допісы былі выдаленыя.",
|
||||||
"notification.moderation_warning.action_disable": "Ваш уліковы запіс быў адключаны.",
|
"notification.moderation_warning.action_disable": "Ваш уліковы запіс быў адключаны.",
|
||||||
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некаторыя з вашых допісаў былі пазначаныя як далікатныя.",
|
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некаторыя з вашых допісаў былі пазначаныя як далікатныя.",
|
||||||
|
@ -539,7 +598,7 @@
|
||||||
"notification_requests.title": "Адфільтраваныя апавяшчэнні",
|
"notification_requests.title": "Адфільтраваныя апавяшчэнні",
|
||||||
"notification_requests.view": "Прагляд апавяшчэнняў",
|
"notification_requests.view": "Прагляд апавяшчэнняў",
|
||||||
"notifications.clear": "Ачысціць апавяшчэнні",
|
"notifications.clear": "Ачысціць апавяшчэнні",
|
||||||
"notifications.clear_confirmation": "Вы ўпэўнены, што жадаеце назаўсёды сцерці ўсё паведамленні?",
|
"notifications.clear_confirmation": "Вы ўпэўнены, што хочаце назаўсёды сцерці ўсе свае паведамленні?",
|
||||||
"notifications.clear_title": "Ачысціць апавяшчэнні?",
|
"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": "Новыя ўваходы:",
|
||||||
|
@ -549,7 +608,7 @@
|
||||||
"notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі",
|
"notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі",
|
||||||
"notifications.column_settings.follow": "Новыя падпісчыкі:",
|
"notifications.column_settings.follow": "Новыя падпісчыкі:",
|
||||||
"notifications.column_settings.follow_request": "Новыя запыты на падпіску:",
|
"notifications.column_settings.follow_request": "Новыя запыты на падпіску:",
|
||||||
"notifications.column_settings.group": "Аб'яднаць апавяшчэнні ад падпісчыкаў",
|
"notifications.column_settings.group": "Аб’яднаць апавяшчэнні ад падпісчыкаў",
|
||||||
"notifications.column_settings.mention": "Згадванні:",
|
"notifications.column_settings.mention": "Згадванні:",
|
||||||
"notifications.column_settings.poll": "Вынікі апытання:",
|
"notifications.column_settings.poll": "Вынікі апытання:",
|
||||||
"notifications.column_settings.push": "Push-апавяшчэнні",
|
"notifications.column_settings.push": "Push-апавяшчэнні",
|
||||||
|
@ -571,13 +630,13 @@
|
||||||
"notifications.group": "{count} Апавяшчэнняў",
|
"notifications.group": "{count} Апавяшчэнняў",
|
||||||
"notifications.mark_as_read": "Пазначыць усе апавяшчэнні як прачытаныя",
|
"notifications.mark_as_read": "Пазначыць усе апавяшчэнні як прачытаныя",
|
||||||
"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": "Прыняць",
|
||||||
"notifications.policy.accept_hint": "Паказваць у апавяшчэннях",
|
"notifications.policy.accept_hint": "Паказваць у апавяшчэннях",
|
||||||
"notifications.policy.drop": "Iгнараваць",
|
"notifications.policy.drop": "Iгнараваць",
|
||||||
"notifications.policy.filter": "Фільтраваць",
|
"notifications.policy.filter": "Фільтраваць",
|
||||||
"notifications.policy.filter_limited_accounts_title": "Абмежаваныя ўліковыя запісы",
|
"notifications.policy.filter_limited_accounts_title": "Уліковыя запісы пад мадэрацыяй",
|
||||||
"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 {# дня}}",
|
||||||
|
@ -594,13 +653,13 @@
|
||||||
"onboarding.follows.done": "Гатова",
|
"onboarding.follows.done": "Гатова",
|
||||||
"onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыце спробу пазней.",
|
"onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыце спробу пазней.",
|
||||||
"onboarding.follows.search": "Пошук",
|
"onboarding.follows.search": "Пошук",
|
||||||
"onboarding.follows.title": "Падпішыцеся каб пачаць",
|
"onboarding.follows.title": "Падпішыцеся на некага, каб пачаць",
|
||||||
"onboarding.profile.discoverable": "Зрабіць мой профіль бачным",
|
"onboarding.profile.discoverable": "Зрабіць мой профіль бачным",
|
||||||
"onboarding.profile.discoverable_hint": "Калі вы звяртаецеся да адкрытасці на Mastodon, вашы паведамленні могуць з'яўляцца ў выніках пошуку і тэндэнцый, а ваш профіль можа быць прапанаваны людзям з такімі ж інтарэсамі.",
|
"onboarding.profile.discoverable_hint": "Калі вы звяртаецеся да адкрытасці на Mastodon, вашы паведамленні могуць з'яўляцца ў выніках пошуку і тэндэнцый, а ваш профіль можа быць прапанаваны людзям з такімі ж інтарэсамі.",
|
||||||
"onboarding.profile.display_name": "Бачнае імя",
|
"onboarding.profile.display_name": "Бачнае імя",
|
||||||
"onboarding.profile.display_name_hint": "Ваша поўнае імя або ваш псеўданім…",
|
"onboarding.profile.display_name_hint": "Ваша поўнае імя або ваш псеўданім…",
|
||||||
"onboarding.profile.note": "Біяграфія",
|
"onboarding.profile.note": "Біяграфія",
|
||||||
"onboarding.profile.note_hint": "Вы можаце @згадаць іншых людзей або выкарыстоўваць #хэштэгі…",
|
"onboarding.profile.note_hint": "Вы можаце @згадваць іншых людзей або выкарыстоўваць #хэштэгі…",
|
||||||
"onboarding.profile.save_and_continue": "Захаваць і працягнуць",
|
"onboarding.profile.save_and_continue": "Захаваць і працягнуць",
|
||||||
"onboarding.profile.title": "Налады профілю",
|
"onboarding.profile.title": "Налады профілю",
|
||||||
"onboarding.profile.upload_avatar": "Загрузіць фота профілю",
|
"onboarding.profile.upload_avatar": "Загрузіць фота профілю",
|
||||||
|
@ -620,6 +679,7 @@
|
||||||
"poll_button.remove_poll": "Выдаліць апытанне",
|
"poll_button.remove_poll": "Выдаліць апытанне",
|
||||||
"privacy.change": "Змяніць прыватнасць допісу",
|
"privacy.change": "Змяніць прыватнасць допісу",
|
||||||
"privacy.direct.long": "Усе згаданыя ў допісе",
|
"privacy.direct.long": "Усе згаданыя ў допісе",
|
||||||
|
"privacy.direct.short": "Асабістае згадванне",
|
||||||
"privacy.private.long": "Толькі вашыя падпісчыкі",
|
"privacy.private.long": "Толькі вашыя падпісчыкі",
|
||||||
"privacy.private.short": "Падпісчыкі",
|
"privacy.private.short": "Падпісчыкі",
|
||||||
"privacy.public.long": "Усе, хто ёсць і каго няма ў Mastodon",
|
"privacy.public.long": "Усе, хто ёсць і каго няма ў Mastodon",
|
||||||
|
@ -629,10 +689,10 @@
|
||||||
"privacy.unlisted.short": "Ціхі публічны",
|
"privacy.unlisted.short": "Ціхі публічны",
|
||||||
"privacy_policy.last_updated": "Адноўлена {date}",
|
"privacy_policy.last_updated": "Адноўлена {date}",
|
||||||
"privacy_policy.title": "Палітыка канфідэнцыйнасці",
|
"privacy_policy.title": "Палітыка канфідэнцыйнасці",
|
||||||
"recommended": "Рэкамендуем",
|
"recommended": "Рэкамендаванае",
|
||||||
"refresh": "Абнавiць",
|
"refresh": "Абнавiць",
|
||||||
"regeneration_indicator.please_stand_by": "Калі ласка, пачакайце.",
|
"regeneration_indicator.please_stand_by": "Пачакайце.",
|
||||||
"regeneration_indicator.preparing_your_home_feed": "Рыхтуем вашую стужку…",
|
"regeneration_indicator.preparing_your_home_feed": "Рыхтуем вашу галоўную стужку…",
|
||||||
"relative_time.days": "{number} д",
|
"relative_time.days": "{number} д",
|
||||||
"relative_time.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}} таму",
|
"relative_time.full.days": "{number, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}} таму",
|
||||||
"relative_time.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}} таму",
|
"relative_time.full.hours": "{number, plural, one {# гадзіна} few {# гадзіны} many {# гадзін} other {# гадзіны}} таму",
|
||||||
|
@ -649,7 +709,7 @@
|
||||||
"reply_indicator.poll": "Апытанне",
|
"reply_indicator.poll": "Апытанне",
|
||||||
"report.block": "Заблакіраваць",
|
"report.block": "Заблакіраваць",
|
||||||
"report.block_explanation": "Вы перастанеце бачыць допісы гэтага карыстальніка. Ён не зможа сачыць за вамі і бачыць вашы допісы. Ён зможа зразумець, што яго заблакіравалі.",
|
"report.block_explanation": "Вы перастанеце бачыць допісы гэтага карыстальніка. Ён не зможа сачыць за вамі і бачыць вашы допісы. Ён зможа зразумець, што яго заблакіравалі.",
|
||||||
"report.categories.legal": "Права",
|
"report.categories.legal": "Звязанае з правам",
|
||||||
"report.categories.other": "Іншае",
|
"report.categories.other": "Іншае",
|
||||||
"report.categories.spam": "Спам",
|
"report.categories.spam": "Спам",
|
||||||
"report.categories.violation": "Змест парушае адно ці некалькі правілаў сервера",
|
"report.categories.violation": "Змест парушае адно ці некалькі правілаў сервера",
|
||||||
|
@ -716,8 +776,8 @@
|
||||||
"search_results.accounts": "Профілі",
|
"search_results.accounts": "Профілі",
|
||||||
"search_results.all": "Усё",
|
"search_results.all": "Усё",
|
||||||
"search_results.hashtags": "Хэштэгі",
|
"search_results.hashtags": "Хэштэгі",
|
||||||
"search_results.no_results": "Анічога ня знойдзена.",
|
"search_results.no_results": "Няма вынікаў.",
|
||||||
"search_results.no_search_yet": "Паспрабуйце пашукаць допісы, профілі або гэштаґі.",
|
"search_results.no_search_yet": "Паспрабуйце пашукаць допісы, профілі або хэштэгі.",
|
||||||
"search_results.see_all": "Праглядзець усе",
|
"search_results.see_all": "Праглядзець усе",
|
||||||
"search_results.statuses": "Допісы",
|
"search_results.statuses": "Допісы",
|
||||||
"search_results.title": "Шукаць \"{q}\"",
|
"search_results.title": "Шукаць \"{q}\"",
|
||||||
|
@ -738,7 +798,7 @@
|
||||||
"status.bookmark": "Дадаць закладку",
|
"status.bookmark": "Дадаць закладку",
|
||||||
"status.cancel_reblog_private": "Прыбраць",
|
"status.cancel_reblog_private": "Прыбраць",
|
||||||
"status.cannot_reblog": "Гэты пост нельга пашырыць",
|
"status.cannot_reblog": "Гэты пост нельга пашырыць",
|
||||||
"status.continued_thread": "Працяг тэмы",
|
"status.continued_thread": "Працяг ланцужка",
|
||||||
"status.copy": "Скапіраваць спасылку на допіс",
|
"status.copy": "Скапіраваць спасылку на допіс",
|
||||||
"status.delete": "Выдаліць",
|
"status.delete": "Выдаліць",
|
||||||
"status.detailed_status": "Дэтальны агляд размовы",
|
"status.detailed_status": "Дэтальны агляд размовы",
|
||||||
|
@ -763,6 +823,7 @@
|
||||||
"status.mute_conversation": "Ігнараваць размову",
|
"status.mute_conversation": "Ігнараваць размову",
|
||||||
"status.open": "Разгарнуць гэты допіс",
|
"status.open": "Разгарнуць гэты допіс",
|
||||||
"status.pin": "Замацаваць у профілі",
|
"status.pin": "Замацаваць у профілі",
|
||||||
|
"status.quote_post_author": "Допіс карыстальніка @{name}",
|
||||||
"status.read_more": "Чытаць болей",
|
"status.read_more": "Чытаць болей",
|
||||||
"status.reblog": "Пашырыць",
|
"status.reblog": "Пашырыць",
|
||||||
"status.reblog_private": "Пашырыць з першапачатковай бачнасцю",
|
"status.reblog_private": "Пашырыць з першапачатковай бачнасцю",
|
||||||
|
@ -771,7 +832,7 @@
|
||||||
"status.reblogs.empty": "Гэты допіс яшчэ ніхто не пашырыў. Калі гэта адбудзецца, гэтых людзей будзе бачна тут.",
|
"status.reblogs.empty": "Гэты допіс яшчэ ніхто не пашырыў. Калі гэта адбудзецца, гэтых людзей будзе бачна тут.",
|
||||||
"status.redraft": "Выдаліць і паправіць",
|
"status.redraft": "Выдаліць і паправіць",
|
||||||
"status.remove_bookmark": "Выдаліць закладку",
|
"status.remove_bookmark": "Выдаліць закладку",
|
||||||
"status.replied_in_thread": "Адказаў у тэме",
|
"status.replied_in_thread": "Адказаў у ланцужку",
|
||||||
"status.replied_to": "Адказаў {name}",
|
"status.replied_to": "Адказаў {name}",
|
||||||
"status.reply": "Адказаць",
|
"status.reply": "Адказаць",
|
||||||
"status.replyAll": "Адказаць у ланцугу",
|
"status.replyAll": "Адказаць у ланцугу",
|
||||||
|
@ -791,8 +852,11 @@
|
||||||
"subscribed_languages.save": "Захаваць змены",
|
"subscribed_languages.save": "Захаваць змены",
|
||||||
"subscribed_languages.target": "Змяніць мовы падпіскі для {target}",
|
"subscribed_languages.target": "Змяніць мовы падпіскі для {target}",
|
||||||
"tabs_bar.home": "Галоўная",
|
"tabs_bar.home": "Галоўная",
|
||||||
|
"tabs_bar.menu": "Меню",
|
||||||
"tabs_bar.notifications": "Апавяшчэнні",
|
"tabs_bar.notifications": "Апавяшчэнні",
|
||||||
"terms_of_service.title": "Умовы абслугоўваньня",
|
"tabs_bar.publish": "Новы допіс",
|
||||||
|
"tabs_bar.search": "Пошук",
|
||||||
|
"terms_of_service.title": "Умовы выкарыстання",
|
||||||
"time_remaining.days": "{number, plural, one {застаўся # дзень} few {засталося # дні} many {засталося # дзён} other {засталося # дня}}",
|
"time_remaining.days": "{number, plural, one {застаўся # дзень} few {засталося # дні} many {засталося # дзён} other {засталося # дня}}",
|
||||||
"time_remaining.hours": "{number, plural, one {засталася # гадзіна} few {засталося # гадзіны} many {засталося # гадзін} other {засталося # гадзіны}}",
|
"time_remaining.hours": "{number, plural, one {засталася # гадзіна} few {засталося # гадзіны} many {засталося # гадзін} other {засталося # гадзіны}}",
|
||||||
"time_remaining.minutes": "{number, plural, one {засталася # хвіліна} few {засталося # хвіліны} many {засталося # хвілін} other {засталося # хвіліны}}",
|
"time_remaining.minutes": "{number, plural, one {засталася # хвіліна} few {засталося # хвіліны} many {засталося # хвілін} other {засталося # хвіліны}}",
|
||||||
|
@ -818,6 +882,12 @@
|
||||||
"video.expand": "Разгарнуць відэа",
|
"video.expand": "Разгарнуць відэа",
|
||||||
"video.fullscreen": "Увесь экран",
|
"video.fullscreen": "Увесь экран",
|
||||||
"video.hide": "Схаваць відэа",
|
"video.hide": "Схаваць відэа",
|
||||||
|
"video.mute": "Выключыць гук",
|
||||||
"video.pause": "Паўза",
|
"video.pause": "Паўза",
|
||||||
"video.play": "Прайграць"
|
"video.play": "Прайграць",
|
||||||
|
"video.skip_backward": "Праматаць назад",
|
||||||
|
"video.skip_forward": "Праматаць уперад",
|
||||||
|
"video.unmute": "Уключыць гук",
|
||||||
|
"video.volume_down": "Паменшыць гучнасць",
|
||||||
|
"video.volume_up": "Павялічыць гучнасць"
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
"about.domain_blocks.silenced.title": "Ограничено",
|
"about.domain_blocks.silenced.title": "Ограничено",
|
||||||
"about.domain_blocks.suspended.explanation": "Никакви данни от този сървър няма да се обработват, съхраняват или обменят, правещи невъзможно всяко взаимодействие или комуникация с потребители от тези сървъри.",
|
"about.domain_blocks.suspended.explanation": "Никакви данни от този сървър няма да се обработват, съхраняват или обменят, правещи невъзможно всяко взаимодействие или комуникация с потребители от тези сървъри.",
|
||||||
"about.domain_blocks.suspended.title": "Спряно",
|
"about.domain_blocks.suspended.title": "Спряно",
|
||||||
|
"about.language_label": "Език",
|
||||||
"about.not_available": "Тази информация не е публична на този сървър.",
|
"about.not_available": "Тази информация не е публична на този сървър.",
|
||||||
"about.powered_by": "Децентрализирана социална мрежа, захранвана от {mastodon}",
|
"about.powered_by": "Децентрализирана социална мрежа, захранвана от {mastodon}",
|
||||||
"about.rules": "Правила на сървъра",
|
"about.rules": "Правила на сървъра",
|
||||||
|
@ -28,6 +29,7 @@
|
||||||
"account.edit_profile": "Редактиране на профила",
|
"account.edit_profile": "Редактиране на профила",
|
||||||
"account.enable_notifications": "Известяване при публикуване от @{name}",
|
"account.enable_notifications": "Известяване при публикуване от @{name}",
|
||||||
"account.endorse": "Представи в профила",
|
"account.endorse": "Представи в профила",
|
||||||
|
"account.familiar_followers_many": "Последвано от {name1}, {name2}, и {othersCount, plural, one {един друг, когото познавате} other {# други, които познавате}}",
|
||||||
"account.familiar_followers_one": "Последвано от {name1}",
|
"account.familiar_followers_one": "Последвано от {name1}",
|
||||||
"account.familiar_followers_two": "Последвано от {name1} и {name2}",
|
"account.familiar_followers_two": "Последвано от {name1} и {name2}",
|
||||||
"account.featured": "Препоръчано",
|
"account.featured": "Препоръчано",
|
||||||
|
@ -40,6 +42,7 @@
|
||||||
"account.followers": "Последователи",
|
"account.followers": "Последователи",
|
||||||
"account.followers.empty": "Още никой не следва потребителя.",
|
"account.followers.empty": "Още никой не следва потребителя.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} последовател} other {{counter} последователи}}",
|
"account.followers_counter": "{count, plural, one {{counter} последовател} other {{counter} последователи}}",
|
||||||
|
"account.followers_you_know_counter": "{counter} познавате",
|
||||||
"account.following": "Последвано",
|
"account.following": "Последвано",
|
||||||
"account.following_counter": "{count, plural, one {{counter} последван} other {{counter} последвани}}",
|
"account.following_counter": "{count, plural, one {{counter} последван} other {{counter} последвани}}",
|
||||||
"account.follows.empty": "Потребителят още никого не следва.",
|
"account.follows.empty": "Потребителят още никого не следва.",
|
||||||
|
@ -185,7 +188,7 @@
|
||||||
"community.column_settings.remote_only": "Само отдалечено",
|
"community.column_settings.remote_only": "Само отдалечено",
|
||||||
"compose.language.change": "Смяна на езика",
|
"compose.language.change": "Смяна на езика",
|
||||||
"compose.language.search": "Търсене на езици...",
|
"compose.language.search": "Търсене на езици...",
|
||||||
"compose.published.body": "Публикувана публикация.",
|
"compose.published.body": "Публикувано.",
|
||||||
"compose.published.open": "Отваряне",
|
"compose.published.open": "Отваряне",
|
||||||
"compose.saved.body": "Запазена публикация.",
|
"compose.saved.body": "Запазена публикация.",
|
||||||
"compose_form.direct_message_warning_learn_more": "Още информация",
|
"compose_form.direct_message_warning_learn_more": "Още информация",
|
||||||
|
@ -215,6 +218,13 @@
|
||||||
"confirmations.delete_list.confirm": "Изтриване",
|
"confirmations.delete_list.confirm": "Изтриване",
|
||||||
"confirmations.delete_list.message": "Наистина ли искате да изтриете завинаги списъка?",
|
"confirmations.delete_list.message": "Наистина ли искате да изтриете завинаги списъка?",
|
||||||
"confirmations.delete_list.title": "Изтривате ли списъка?",
|
"confirmations.delete_list.title": "Изтривате ли списъка?",
|
||||||
|
"confirmations.discard_draft.confirm": "Изхвърляне и продължаване",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Възобновяване на редактиране",
|
||||||
|
"confirmations.discard_draft.edit.message": "Продължаването ще изхвърли всякакви промени, които сте правили в публикацията, която сега редактирате.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Изхвърляте ли промените в публикацията си?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Възстановка на чернова",
|
||||||
|
"confirmations.discard_draft.post.message": "Продължаването ще изхвърли публикацията, която сега съставяте.",
|
||||||
|
"confirmations.discard_draft.post.title": "Изхвърляте ли черновата си публикация?",
|
||||||
"confirmations.discard_edit_media.confirm": "Отхвърляне",
|
"confirmations.discard_edit_media.confirm": "Отхвърляне",
|
||||||
"confirmations.discard_edit_media.message": "Не сте запазили промени на описанието или огледа на мултимедията, отхвърляте ли ги?",
|
"confirmations.discard_edit_media.message": "Не сте запазили промени на описанието или огледа на мултимедията, отхвърляте ли ги?",
|
||||||
"confirmations.follow_to_list.confirm": "Последване и добавяне в списък",
|
"confirmations.follow_to_list.confirm": "Последване и добавяне в списък",
|
||||||
|
@ -324,9 +334,15 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Копиране на трасето на стека в буферната памет",
|
"errors.unexpected_crash.copy_stacktrace": "Копиране на трасето на стека в буферната памет",
|
||||||
"errors.unexpected_crash.report_issue": "Сигнал за проблем",
|
"errors.unexpected_crash.report_issue": "Сигнал за проблем",
|
||||||
"explore.suggested_follows": "Хора",
|
"explore.suggested_follows": "Хора",
|
||||||
|
"explore.title": "Вървежно",
|
||||||
"explore.trending_links": "Новини",
|
"explore.trending_links": "Новини",
|
||||||
"explore.trending_statuses": "Публикации",
|
"explore.trending_statuses": "Публикации",
|
||||||
"explore.trending_tags": "Хаштагове",
|
"explore.trending_tags": "Хаштагове",
|
||||||
|
"featured_carousel.header": "{count, plural, one {закачена публикация} other {закачени публикации}}",
|
||||||
|
"featured_carousel.next": "Напред",
|
||||||
|
"featured_carousel.post": "Публикация",
|
||||||
|
"featured_carousel.previous": "Назад",
|
||||||
|
"featured_carousel.slide": "{index} от {total}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "Тази категория филтър не е приложима към контекста, в който достъпвате тази публикация. Ако желаете да филтрирате публикациите в този контекст, трябва да изберете друг филтър.",
|
"filter_modal.added.context_mismatch_explanation": "Тази категория филтър не е приложима към контекста, в който достъпвате тази публикация. Ако желаете да филтрирате публикациите в този контекст, трябва да изберете друг филтър.",
|
||||||
"filter_modal.added.context_mismatch_title": "Несъвпадащ контекст!",
|
"filter_modal.added.context_mismatch_title": "Несъвпадащ контекст!",
|
||||||
"filter_modal.added.expired_explanation": "Валидността на тази категория филтър е изтекла. Сменете срока на валидност, за да я приложите.",
|
"filter_modal.added.expired_explanation": "Валидността на тази категория филтър е изтекла. Сменете срока на валидност, за да я приложите.",
|
||||||
|
@ -405,6 +421,7 @@
|
||||||
"hints.profiles.see_more_posts": "Преглед на още публикации на {domain}",
|
"hints.profiles.see_more_posts": "Преглед на още публикации на {domain}",
|
||||||
"hints.threads.replies_may_be_missing": "Отговори от други сървъри може да липсват.",
|
"hints.threads.replies_may_be_missing": "Отговори от други сървъри може да липсват.",
|
||||||
"hints.threads.see_more": "Преглед на още отговори на {domain}",
|
"hints.threads.see_more": "Преглед на още отговори на {domain}",
|
||||||
|
"home.column_settings.show_quotes": "Показване на цитираното",
|
||||||
"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": "Скриване на оповестяванията",
|
||||||
|
@ -527,8 +544,10 @@
|
||||||
"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.account_settings": "Парола и сигурност",
|
||||||
"navigation_bar.administration": "Администрация",
|
"navigation_bar.administration": "Администрация",
|
||||||
"navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
|
"navigation_bar.advanced_interface": "Отваряне в разширен уебинтерфейс",
|
||||||
|
"navigation_bar.automated_deletion": "Автоматично изтриване на публикации",
|
||||||
"navigation_bar.blocks": "Блокирани потребители",
|
"navigation_bar.blocks": "Блокирани потребители",
|
||||||
"navigation_bar.bookmarks": "Отметки",
|
"navigation_bar.bookmarks": "Отметки",
|
||||||
"navigation_bar.direct": "Частни споменавания",
|
"navigation_bar.direct": "Частни споменавания",
|
||||||
|
@ -538,13 +557,17 @@
|
||||||
"navigation_bar.follow_requests": "Заявки за последване",
|
"navigation_bar.follow_requests": "Заявки за последване",
|
||||||
"navigation_bar.followed_tags": "Последвани хаштагове",
|
"navigation_bar.followed_tags": "Последвани хаштагове",
|
||||||
"navigation_bar.follows_and_followers": "Последвания и последователи",
|
"navigation_bar.follows_and_followers": "Последвания и последователи",
|
||||||
|
"navigation_bar.import_export": "Внасяне и изнасяне",
|
||||||
"navigation_bar.lists": "Списъци",
|
"navigation_bar.lists": "Списъци",
|
||||||
"navigation_bar.logout": "Излизане",
|
"navigation_bar.logout": "Излизане",
|
||||||
"navigation_bar.moderation": "Модериране",
|
"navigation_bar.moderation": "Модериране",
|
||||||
|
"navigation_bar.more": "Още",
|
||||||
"navigation_bar.mutes": "Заглушени потребители",
|
"navigation_bar.mutes": "Заглушени потребители",
|
||||||
"navigation_bar.opened_in_classic_interface": "Публикации, акаунти и други особени страници се отварят по подразбиране в класическия мрежови интерфейс.",
|
"navigation_bar.opened_in_classic_interface": "Публикации, акаунти и други особени страници се отварят по подразбиране в класическия мрежови интерфейс.",
|
||||||
"navigation_bar.preferences": "Предпочитания",
|
"navigation_bar.preferences": "Предпочитания",
|
||||||
|
"navigation_bar.privacy_and_reach": "Поверителност и обхват",
|
||||||
"navigation_bar.search": "Търсене",
|
"navigation_bar.search": "Търсене",
|
||||||
|
"navigation_bar.search_trends": "Търсене / Вървежно",
|
||||||
"not_signed_in_indicator.not_signed_in": "Трябва ви вход за достъп до ресурса.",
|
"not_signed_in_indicator.not_signed_in": "Трябва ви вход за достъп до ресурса.",
|
||||||
"notification.admin.report": "{name} докладва {target}",
|
"notification.admin.report": "{name} докладва {target}",
|
||||||
"notification.admin.report_account": "{name} докладва {count, plural, one {публикация} other {# публикации}} от {target} за {category}",
|
"notification.admin.report_account": "{name} докладва {count, plural, one {публикация} other {# публикации}} от {target} за {category}",
|
||||||
|
@ -771,6 +794,7 @@
|
||||||
"report_notification.categories.violation": "Нарушение на правилото",
|
"report_notification.categories.violation": "Нарушение на правилото",
|
||||||
"report_notification.categories.violation_sentence": "нарушение на правило",
|
"report_notification.categories.violation_sentence": "нарушение на правило",
|
||||||
"report_notification.open": "Отваряне на доклада",
|
"report_notification.open": "Отваряне на доклада",
|
||||||
|
"search.clear": "Изчистване на търсенето",
|
||||||
"search.no_recent_searches": "Няма скорошни търсения",
|
"search.no_recent_searches": "Няма скорошни търсения",
|
||||||
"search.placeholder": "Търсене",
|
"search.placeholder": "Търсене",
|
||||||
"search.quick_action.account_search": "Съвпадение на профили {x}",
|
"search.quick_action.account_search": "Съвпадение на профили {x}",
|
||||||
|
@ -837,6 +861,13 @@
|
||||||
"status.mute_conversation": "Заглушаване на разговора",
|
"status.mute_conversation": "Заглушаване на разговора",
|
||||||
"status.open": "Разширяване на публикацията",
|
"status.open": "Разширяване на публикацията",
|
||||||
"status.pin": "Закачане в профила",
|
"status.pin": "Закачане в профила",
|
||||||
|
"status.quote_error.filtered": "Скрито поради един от филтрите ви",
|
||||||
|
"status.quote_error.not_found": "Публикацията не може да се показва.",
|
||||||
|
"status.quote_error.pending_approval": "Публикацията чака одобрение от първоначалния автор.",
|
||||||
|
"status.quote_error.rejected": "Публикацията не може да се показва като първоначалния автор не позволява цитирането ѝ.",
|
||||||
|
"status.quote_error.removed": "Публикацията е премахната от автора ѝ.",
|
||||||
|
"status.quote_error.unauthorized": "Публикацията не може да се показва, тъй като не сте упълномощени да я гледате.",
|
||||||
|
"status.quote_post_author": "Публикация от {name}",
|
||||||
"status.read_more": "Още за четене",
|
"status.read_more": "Още за четене",
|
||||||
"status.reblog": "Подсилване",
|
"status.reblog": "Подсилване",
|
||||||
"status.reblog_private": "Подсилване с оригиналната видимост",
|
"status.reblog_private": "Подсилване с оригиналната видимост",
|
||||||
|
@ -866,7 +897,10 @@
|
||||||
"subscribed_languages.save": "Запазване на промените",
|
"subscribed_languages.save": "Запазване на промените",
|
||||||
"subscribed_languages.target": "Промяна на абонираните езици за {target}",
|
"subscribed_languages.target": "Промяна на абонираните езици за {target}",
|
||||||
"tabs_bar.home": "Начало",
|
"tabs_bar.home": "Начало",
|
||||||
|
"tabs_bar.menu": "Меню",
|
||||||
"tabs_bar.notifications": "Известия",
|
"tabs_bar.notifications": "Известия",
|
||||||
|
"tabs_bar.publish": "Нова публикация",
|
||||||
|
"tabs_bar.search": "Търсене",
|
||||||
"terms_of_service.effective_as_of": "В сила от {date}",
|
"terms_of_service.effective_as_of": "В сила от {date}",
|
||||||
"terms_of_service.title": "Условия на услугата",
|
"terms_of_service.title": "Условия на услугата",
|
||||||
"terms_of_service.upcoming_changes_on": "Предстоящи промени на {date}",
|
"terms_of_service.upcoming_changes_on": "Предстоящи промени на {date}",
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Elimina",
|
"confirmations.delete_list.confirm": "Elimina",
|
||||||
"confirmations.delete_list.message": "Segur que vols suprimir permanentment aquesta llista?",
|
"confirmations.delete_list.message": "Segur que vols suprimir permanentment aquesta llista?",
|
||||||
"confirmations.delete_list.title": "Eliminar la llista?",
|
"confirmations.delete_list.title": "Eliminar la llista?",
|
||||||
|
"confirmations.discard_draft.confirm": "Descarta i continua",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Continua l'edició",
|
||||||
|
"confirmations.discard_draft.edit.message": "Continuar descartarà tots els canvis que hàgiu fet a la publicació que editeu.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Descartar els canvis a la publicació?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Reprendre l'esborrany",
|
||||||
|
"confirmations.discard_draft.post.message": "Continuar descartarà la publicació que escriviu.",
|
||||||
|
"confirmations.discard_draft.post.title": "Descartar l'esborrany?",
|
||||||
"confirmations.discard_edit_media.confirm": "Descarta",
|
"confirmations.discard_edit_media.confirm": "Descarta",
|
||||||
"confirmations.discard_edit_media.message": "Tens canvis no desats en la descripció del contingut o en la previsualització, els vols descartar?",
|
"confirmations.discard_edit_media.message": "Tens canvis no desats en la descripció del contingut o en la previsualització, els vols descartar?",
|
||||||
"confirmations.follow_to_list.confirm": "Seguir i afegir a una llista",
|
"confirmations.follow_to_list.confirm": "Seguir i afegir a una llista",
|
||||||
|
@ -556,6 +563,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Seguint i seguidors",
|
"navigation_bar.follows_and_followers": "Seguint i seguidors",
|
||||||
"navigation_bar.import_export": "Importació i exportació",
|
"navigation_bar.import_export": "Importació i exportació",
|
||||||
"navigation_bar.lists": "Llistes",
|
"navigation_bar.lists": "Llistes",
|
||||||
|
"navigation_bar.live_feed_local": "Canal en directe (local)",
|
||||||
|
"navigation_bar.live_feed_public": "Canal en directe (públic)",
|
||||||
"navigation_bar.logout": "Tanca la sessió",
|
"navigation_bar.logout": "Tanca la sessió",
|
||||||
"navigation_bar.moderation": "Moderació",
|
"navigation_bar.moderation": "Moderació",
|
||||||
"navigation_bar.more": "Més",
|
"navigation_bar.more": "Més",
|
||||||
|
@ -564,7 +573,10 @@
|
||||||
"navigation_bar.preferences": "Preferències",
|
"navigation_bar.preferences": "Preferències",
|
||||||
"navigation_bar.privacy_and_reach": "Privacitat i abast",
|
"navigation_bar.privacy_and_reach": "Privacitat i abast",
|
||||||
"navigation_bar.search": "Cerca",
|
"navigation_bar.search": "Cerca",
|
||||||
|
"navigation_bar.search_trends": "Cerca / En tendència",
|
||||||
|
"navigation_panel.collapse_followed_tags": "Comprimeix el menú d'etiquetes seguides",
|
||||||
"navigation_panel.collapse_lists": "Tanca el menú",
|
"navigation_panel.collapse_lists": "Tanca el menú",
|
||||||
|
"navigation_panel.expand_followed_tags": "Expandeix el menú d'etiquetes seguides",
|
||||||
"navigation_panel.expand_lists": "Expandeix el menú",
|
"navigation_panel.expand_lists": "Expandeix el menú",
|
||||||
"not_signed_in_indicator.not_signed_in": "Cal que iniciïs la sessió per a accedir a aquest recurs.",
|
"not_signed_in_indicator.not_signed_in": "Cal que iniciïs la sessió per a accedir a aquest recurs.",
|
||||||
"notification.admin.report": "{name} ha reportat {target}",
|
"notification.admin.report": "{name} ha reportat {target}",
|
||||||
|
@ -792,6 +804,7 @@
|
||||||
"report_notification.categories.violation": "Violació de norma",
|
"report_notification.categories.violation": "Violació de norma",
|
||||||
"report_notification.categories.violation_sentence": "violació de normes",
|
"report_notification.categories.violation_sentence": "violació de normes",
|
||||||
"report_notification.open": "Obre l'informe",
|
"report_notification.open": "Obre l'informe",
|
||||||
|
"search.clear": "Esborra la cerca",
|
||||||
"search.no_recent_searches": "No hi ha cerques recents",
|
"search.no_recent_searches": "No hi ha cerques recents",
|
||||||
"search.placeholder": "Cerca",
|
"search.placeholder": "Cerca",
|
||||||
"search.quick_action.account_search": "Perfils coincidint amb {x}",
|
"search.quick_action.account_search": "Perfils coincidint amb {x}",
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
"account.edit_profile": "Redigér profil",
|
"account.edit_profile": "Redigér profil",
|
||||||
"account.enable_notifications": "Giv mig besked, når @{name} laver indlæg",
|
"account.enable_notifications": "Giv mig besked, når @{name} laver indlæg",
|
||||||
"account.endorse": "Fremhæv på profil",
|
"account.endorse": "Fremhæv på profil",
|
||||||
"account.familiar_followers_many": "Følges af {name1}, {name2} og {othersCount, plural, one {# mere, man kender} other {# mere, man kender}}",
|
"account.familiar_followers_many": "Følges af {name1}, {name2} og {othersCount, plural, one {# mere, man kender} other {# mere, du kender}}",
|
||||||
"account.familiar_followers_one": "Følges af {name1}",
|
"account.familiar_followers_one": "Følges af {name1}",
|
||||||
"account.familiar_followers_two": "Følges af {name1} og {name2}",
|
"account.familiar_followers_two": "Følges af {name1} og {name2}",
|
||||||
"account.featured": "Fremhævet",
|
"account.featured": "Fremhævet",
|
||||||
|
@ -62,7 +62,7 @@
|
||||||
"account.mute_notifications_short": "Sluk for notifikationer",
|
"account.mute_notifications_short": "Sluk for notifikationer",
|
||||||
"account.mute_short": "Skjul",
|
"account.mute_short": "Skjul",
|
||||||
"account.muted": "Skjult",
|
"account.muted": "Skjult",
|
||||||
"account.muting": "Tavsgørelse",
|
"account.muting": "Skjuler",
|
||||||
"account.mutual": "I følger hinanden",
|
"account.mutual": "I følger hinanden",
|
||||||
"account.no_bio": "Ingen beskrivelse til rådighed.",
|
"account.no_bio": "Ingen beskrivelse til rådighed.",
|
||||||
"account.open_original_page": "Åbn oprindelig side",
|
"account.open_original_page": "Åbn oprindelig side",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"account.unendorse": "Vis ikke på profil",
|
"account.unendorse": "Vis ikke på profil",
|
||||||
"account.unfollow": "Følg ikke længere",
|
"account.unfollow": "Følg ikke længere",
|
||||||
"account.unmute": "Vis @{name} igen",
|
"account.unmute": "Vis @{name} igen",
|
||||||
"account.unmute_notifications_short": "Tænd for notifikationer",
|
"account.unmute_notifications_short": "Vis notifikationer igen",
|
||||||
"account.unmute_short": "Vis igen",
|
"account.unmute_short": "Vis igen",
|
||||||
"account_note.placeholder": "Klik for at tilføje notat",
|
"account_note.placeholder": "Klik for at tilføje notat",
|
||||||
"admin.dashboard.daily_retention": "Brugerfastholdelsesrate pr. dag efter tilmelding",
|
"admin.dashboard.daily_retention": "Brugerfastholdelsesrate pr. dag efter tilmelding",
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
"attachments_list.unprocessed": "(ubehandlet)",
|
"attachments_list.unprocessed": "(ubehandlet)",
|
||||||
"audio.hide": "Skjul lyd",
|
"audio.hide": "Skjul lyd",
|
||||||
"block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.",
|
"block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.",
|
||||||
"block_modal.show_less": "Vis færre",
|
"block_modal.show_less": "Vis mindre",
|
||||||
"block_modal.show_more": "Vis flere",
|
"block_modal.show_more": "Vis flere",
|
||||||
"block_modal.they_cant_mention": "Vedkommende kan ikke omtale eller følge dig.",
|
"block_modal.they_cant_mention": "Vedkommende kan ikke omtale eller følge dig.",
|
||||||
"block_modal.they_cant_see_posts": "Vedkommende kan ikke se dine indlæg, og du vil ikke se vedkommendes.",
|
"block_modal.they_cant_see_posts": "Vedkommende kan ikke se dine indlæg, og du vil ikke se vedkommendes.",
|
||||||
|
@ -208,9 +208,9 @@
|
||||||
"compose_form.publish": "Publicér",
|
"compose_form.publish": "Publicér",
|
||||||
"compose_form.reply": "Svar",
|
"compose_form.reply": "Svar",
|
||||||
"compose_form.save_changes": "Opdatér",
|
"compose_form.save_changes": "Opdatér",
|
||||||
"compose_form.spoiler.marked": "Fjern emnefelt",
|
"compose_form.spoiler.marked": "Fjern indholdsadvarsel",
|
||||||
"compose_form.spoiler.unmarked": "Tilføj emnefelt",
|
"compose_form.spoiler.unmarked": "Tilføj indholdsadvarsel",
|
||||||
"compose_form.spoiler_placeholder": "Emnefelt (valgfrit)",
|
"compose_form.spoiler_placeholder": "Indholdsadvarsel (valgfri)",
|
||||||
"confirmation_modal.cancel": "Afbryd",
|
"confirmation_modal.cancel": "Afbryd",
|
||||||
"confirmations.block.confirm": "Blokér",
|
"confirmations.block.confirm": "Blokér",
|
||||||
"confirmations.delete.confirm": "Slet",
|
"confirmations.delete.confirm": "Slet",
|
||||||
|
@ -239,9 +239,9 @@
|
||||||
"confirmations.missing_alt_text.secondary": "Læg op alligevel",
|
"confirmations.missing_alt_text.secondary": "Læg op alligevel",
|
||||||
"confirmations.missing_alt_text.title": "Tilføj alt-tekst?",
|
"confirmations.missing_alt_text.title": "Tilføj alt-tekst?",
|
||||||
"confirmations.mute.confirm": "Skjul",
|
"confirmations.mute.confirm": "Skjul",
|
||||||
"confirmations.redraft.confirm": "Slet og omformulér",
|
"confirmations.redraft.confirm": "Slet og omskriv",
|
||||||
"confirmations.redraft.message": "Sikker på, at dette indlæg skal slettes og omskrives? Favoritter og fremhævelser går tabt, og svar til det oprindelige indlæg mister tilknytningen.",
|
"confirmations.redraft.message": "Sikker på, at dette indlæg skal slettes og omskrives? Favoritter og fremhævelser går tabt, og svar til det oprindelige indlæg mister tilknytningen.",
|
||||||
"confirmations.redraft.title": "Slet og omformulér indlæg?",
|
"confirmations.redraft.title": "Slet og omskriv indlæg?",
|
||||||
"confirmations.remove_from_followers.confirm": "Fjern følger",
|
"confirmations.remove_from_followers.confirm": "Fjern følger",
|
||||||
"confirmations.remove_from_followers.message": "{name} vil ikke længere følge dig. Er du sikker på, at du vil fortsætte?",
|
"confirmations.remove_from_followers.message": "{name} vil ikke længere følge dig. Er du sikker på, at du vil fortsætte?",
|
||||||
"confirmations.remove_from_followers.title": "Fjern følger?",
|
"confirmations.remove_from_followers.title": "Fjern følger?",
|
||||||
|
@ -260,7 +260,7 @@
|
||||||
"copypaste.copy_to_clipboard": "Kopiér til udklipsholder",
|
"copypaste.copy_to_clipboard": "Kopiér til udklipsholder",
|
||||||
"directory.federated": "Fra kendt fediverse",
|
"directory.federated": "Fra kendt fediverse",
|
||||||
"directory.local": "Kun fra {domain}",
|
"directory.local": "Kun fra {domain}",
|
||||||
"directory.new_arrivals": "Nye ankomster",
|
"directory.new_arrivals": "Nyankomne",
|
||||||
"directory.recently_active": "Aktive for nyligt",
|
"directory.recently_active": "Aktive for nyligt",
|
||||||
"disabled_account_banner.account_settings": "Kontoindstillinger",
|
"disabled_account_banner.account_settings": "Kontoindstillinger",
|
||||||
"disabled_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret.",
|
"disabled_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret.",
|
||||||
|
@ -279,14 +279,14 @@
|
||||||
"domain_pill.activitypub_lets_connect": "Det muliggører at forbinde og interagere med folk, ikke kun på Mastodon, men også på tværs af forskellige sociale apps.",
|
"domain_pill.activitypub_lets_connect": "Det muliggører at forbinde og interagere med folk, ikke kun på Mastodon, men også på tværs af forskellige sociale apps.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", som Mastodon taler med andre sociale netværk.",
|
"domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", som Mastodon taler med andre sociale netværk.",
|
||||||
"domain_pill.server": "Server",
|
"domain_pill.server": "Server",
|
||||||
"domain_pill.their_handle": "Deres greb:",
|
"domain_pill.their_handle": "Deres handle:",
|
||||||
"domain_pill.their_server": "Det digitale hjem, hvor alle indlæggene findes.",
|
"domain_pill.their_server": "Det digitale hjem, hvor alle indlæggene findes.",
|
||||||
"domain_pill.their_username": "Entydig identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
|
"domain_pill.their_username": "Entydig identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
|
||||||
"domain_pill.username": "Brugernavn",
|
"domain_pill.username": "Brugernavn",
|
||||||
"domain_pill.whats_in_a_handle": "Hvad er der i et greb?",
|
"domain_pill.whats_in_a_handle": "Hvad indeholder et handle?",
|
||||||
"domain_pill.who_they_are": "Da et handle fortæller, hvem nogen er, og hvor de er, kan du interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
|
"domain_pill.who_they_are": "Da et handle fortæller, hvem nogen er, og hvor de er, kan du interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
|
||||||
"domain_pill.who_you_are": "Fordi dit handle fortæller, hvem du er, og hvor du er, kan du interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
|
"domain_pill.who_you_are": "Fordi dit handle fortæller, hvem du er, og hvor du er, kan du interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
|
||||||
"domain_pill.your_handle": "Dit greb:",
|
"domain_pill.your_handle": "Dit handle:",
|
||||||
"domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.",
|
"domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.",
|
||||||
"domain_pill.your_username": "Din entydige identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
|
"domain_pill.your_username": "Din entydige identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
|
||||||
"embed.instructions": "Indlejr dette indlæg på din hjemmeside ved at kopiere nedenstående kode.",
|
"embed.instructions": "Indlejr dette indlæg på din hjemmeside ved at kopiere nedenstående kode.",
|
||||||
|
@ -329,7 +329,7 @@
|
||||||
"empty_column.mutes": "Du har endnu ikke skjult nogle brugere.",
|
"empty_column.mutes": "Du har endnu ikke skjult nogle brugere.",
|
||||||
"empty_column.notification_requests": "Alt er klar! Der er intet her. Når der modtages nye notifikationer, fremgår de her jævnfør dine indstillinger.",
|
"empty_column.notification_requests": "Alt er klar! Der er intet her. Når der modtages nye notifikationer, fremgår de her jævnfør dine indstillinger.",
|
||||||
"empty_column.notifications": "Du har endnu ingen notifikationer. Når andre interagerer med dig, vil det fremgå her.",
|
"empty_column.notifications": "Du har endnu ingen notifikationer. Når andre interagerer med dig, vil det fremgå her.",
|
||||||
"empty_column.public": "Der er intet her! Skriv noget offentligt eller følg manuelt brugere fra andre servere for at se indhold",
|
"empty_column.public": "Der er ikke noget her! Skriv noget offentligt, eller følg manuelt brugere fra andre servere for at se indhold",
|
||||||
"error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en netlæser-kompatibilitetsfejl, kunne siden ikke vises korrekt.",
|
"error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en netlæser-kompatibilitetsfejl, kunne siden ikke vises korrekt.",
|
||||||
"error.unexpected_crash.explanation_addons": "Denne side kunne ikke vises korrekt. Fejlen skyldes sandsynligvis en browsertilføjelse eller automatiske oversættelsesværktøjer.",
|
"error.unexpected_crash.explanation_addons": "Denne side kunne ikke vises korrekt. Fejlen skyldes sandsynligvis en browsertilføjelse eller automatiske oversættelsesværktøjer.",
|
||||||
"error.unexpected_crash.next_steps": "Prøv at opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden netlæser eller app.",
|
"error.unexpected_crash.next_steps": "Prøv at opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden netlæser eller app.",
|
||||||
|
@ -363,7 +363,7 @@
|
||||||
"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 “<span>{title}</span>”",
|
"filter_warning.matches_filter": "Matcher filteret “<span>{title}</span>”",
|
||||||
"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}}, du måske kender",
|
||||||
"filtered_notifications_banner.title": "Filtrerede notifikationer",
|
"filtered_notifications_banner.title": "Filtrerede notifikationer",
|
||||||
"firehose.all": "Alle",
|
"firehose.all": "Alle",
|
||||||
"firehose.local": "Denne server",
|
"firehose.local": "Denne server",
|
||||||
|
@ -374,7 +374,7 @@
|
||||||
"follow_suggestions.curated_suggestion": "Personaleudvalgt",
|
"follow_suggestions.curated_suggestion": "Personaleudvalgt",
|
||||||
"follow_suggestions.dismiss": "Vis ikke igen",
|
"follow_suggestions.dismiss": "Vis ikke igen",
|
||||||
"follow_suggestions.featured_longer": "Håndplukket af {domain}-teamet",
|
"follow_suggestions.featured_longer": "Håndplukket af {domain}-teamet",
|
||||||
"follow_suggestions.friends_of_friends_longer": "Populært blandt personer, som følges",
|
"follow_suggestions.friends_of_friends_longer": "Populær blandt personer, du følger",
|
||||||
"follow_suggestions.hints.featured": "Denne profil er håndplukket af {domain}-teamet.",
|
"follow_suggestions.hints.featured": "Denne profil er håndplukket af {domain}-teamet.",
|
||||||
"follow_suggestions.hints.friends_of_friends": "Denne profil er populær blandt de personer, som følges.",
|
"follow_suggestions.hints.friends_of_friends": "Denne profil er populær blandt de personer, som følges.",
|
||||||
"follow_suggestions.hints.most_followed": "Denne profil er en af de mest fulgte på {domain}.",
|
"follow_suggestions.hints.most_followed": "Denne profil er en af de mest fulgte på {domain}.",
|
||||||
|
@ -383,10 +383,10 @@
|
||||||
"follow_suggestions.personalized_suggestion": "Personligt forslag",
|
"follow_suggestions.personalized_suggestion": "Personligt forslag",
|
||||||
"follow_suggestions.popular_suggestion": "Populært forslag",
|
"follow_suggestions.popular_suggestion": "Populært forslag",
|
||||||
"follow_suggestions.popular_suggestion_longer": "Populært på {domain}",
|
"follow_suggestions.popular_suggestion_longer": "Populært på {domain}",
|
||||||
"follow_suggestions.similar_to_recently_followed_longer": "Svarende til profiler, som for nylig er fulgt",
|
"follow_suggestions.similar_to_recently_followed_longer": "Minder om profiler, du har fulgt for nylig",
|
||||||
"follow_suggestions.view_all": "Vis alle",
|
"follow_suggestions.view_all": "Vis alle",
|
||||||
"follow_suggestions.who_to_follow": "Hvem, som skal følges",
|
"follow_suggestions.who_to_follow": "Hvem, som skal følges",
|
||||||
"followed_tags": "Hashtag, som følges",
|
"followed_tags": "Hashtags, som følges",
|
||||||
"footer.about": "Om",
|
"footer.about": "Om",
|
||||||
"footer.directory": "Profiloversigt",
|
"footer.directory": "Profiloversigt",
|
||||||
"footer.get_app": "Hent appen",
|
"footer.get_app": "Hent appen",
|
||||||
|
@ -414,7 +414,7 @@
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag",
|
||||||
"hashtag.feature": "Fremhæv på profil",
|
"hashtag.feature": "Fremhæv på profil",
|
||||||
"hashtag.follow": "Følg hashtag",
|
"hashtag.follow": "Følg hashtag",
|
||||||
"hashtag.mute": "Tavsgør #{hashtag}",
|
"hashtag.mute": "Skjul #{hashtag}",
|
||||||
"hashtag.unfeature": "Fremhæv ikke på profil",
|
"hashtag.unfeature": "Fremhæv ikke på profil",
|
||||||
"hashtag.unfollow": "Følg ikke længere hashtag",
|
"hashtag.unfollow": "Følg ikke længere hashtag",
|
||||||
"hashtags.and_other": "…og {count, plural, one {}other {# flere}}",
|
"hashtags.and_other": "…og {count, plural, one {}other {# flere}}",
|
||||||
|
@ -434,7 +434,7 @@
|
||||||
"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.disclaimer": "Mastodon kan ikke informere brugere om, at du har ignoreret deres notifikationer. At ignorere notifikationer forhindrer ikke selve beskederne i at blive sendt.",
|
||||||
"ignore_notifications_modal.filter_instead": "Filtrér i stedet",
|
"ignore_notifications_modal.filter_instead": "Filtrér i stedet",
|
||||||
"ignore_notifications_modal.filter_to_act_users": "Du vil stadig kunne acceptere, afvise eller anmelde brugere",
|
"ignore_notifications_modal.filter_to_act_users": "Du 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_avoid_confusion": "Filtrering medvirker til at undgå potentiel forvirring",
|
||||||
|
@ -492,9 +492,9 @@
|
||||||
"keyboard_shortcuts.reply": "Besvar indlægget",
|
"keyboard_shortcuts.reply": "Besvar indlægget",
|
||||||
"keyboard_shortcuts.requests": "Åbn liste over følgeanmodninger",
|
"keyboard_shortcuts.requests": "Åbn liste over følgeanmodninger",
|
||||||
"keyboard_shortcuts.search": "Fokusér søgebjælke",
|
"keyboard_shortcuts.search": "Fokusér søgebjælke",
|
||||||
"keyboard_shortcuts.spoilers": "Vis/skjul emnefelt",
|
"keyboard_shortcuts.spoilers": "Vis/skjul indholdsadvarsel-felt",
|
||||||
"keyboard_shortcuts.start": "Åbn \"komme i gang\"-kolonne",
|
"keyboard_shortcuts.start": "Åbn \"komme i gang\"-kolonne",
|
||||||
"keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag emnefelt",
|
"keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag indholdsadvarsel",
|
||||||
"keyboard_shortcuts.toggle_sensitivity": "Vis/skjul medier",
|
"keyboard_shortcuts.toggle_sensitivity": "Vis/skjul medier",
|
||||||
"keyboard_shortcuts.toot": "Påbegynd nyt indlæg",
|
"keyboard_shortcuts.toot": "Påbegynd nyt indlæg",
|
||||||
"keyboard_shortcuts.translate": "for at oversætte et indlæg",
|
"keyboard_shortcuts.translate": "for at oversætte et indlæg",
|
||||||
|
@ -543,10 +543,10 @@
|
||||||
"mute_modal.hide_options": "Skjul valgmuligheder",
|
"mute_modal.hide_options": "Skjul valgmuligheder",
|
||||||
"mute_modal.indefinite": "Indtil jeg vælger at se dem igen",
|
"mute_modal.indefinite": "Indtil jeg vælger at se dem igen",
|
||||||
"mute_modal.show_options": "Vis valgmuligheder",
|
"mute_modal.show_options": "Vis valgmuligheder",
|
||||||
"mute_modal.they_can_mention_and_follow": "De kan omtale og følge dig, men du vil ikke se dem.",
|
"mute_modal.they_can_mention_and_follow": "Vedkommende kan nævne og følge dig, men vil ikke blive vist.",
|
||||||
"mute_modal.they_wont_know": "De vil ikke vide, at de er blevet skjult.",
|
"mute_modal.they_wont_know": "De vil ikke vide, at de er blevet skjult.",
|
||||||
"mute_modal.title": "Skjul bruger?",
|
"mute_modal.title": "Skjul bruger?",
|
||||||
"mute_modal.you_wont_see_mentions": "Du vil ikke se indlæg som omtaler dem.",
|
"mute_modal.you_wont_see_mentions": "Indlæg, som nævner vedkommende, vises ikke.",
|
||||||
"mute_modal.you_wont_see_posts": "De kan stadig se dine indlæg, men du vil ikke se deres.",
|
"mute_modal.you_wont_see_posts": "De kan stadig se dine indlæg, men du vil ikke se deres.",
|
||||||
"navigation_bar.about": "Om",
|
"navigation_bar.about": "Om",
|
||||||
"navigation_bar.account_settings": "Adgangskode og sikkerhed",
|
"navigation_bar.account_settings": "Adgangskode og sikkerhed",
|
||||||
|
@ -560,7 +560,7 @@
|
||||||
"navigation_bar.favourites": "Favoritter",
|
"navigation_bar.favourites": "Favoritter",
|
||||||
"navigation_bar.filters": "Skjulte ord",
|
"navigation_bar.filters": "Skjulte ord",
|
||||||
"navigation_bar.follow_requests": "Følgeanmodninger",
|
"navigation_bar.follow_requests": "Følgeanmodninger",
|
||||||
"navigation_bar.followed_tags": "Hashtag, som følges",
|
"navigation_bar.followed_tags": "Hashtags, som følges",
|
||||||
"navigation_bar.follows_and_followers": "Følges og følgere",
|
"navigation_bar.follows_and_followers": "Følges og følgere",
|
||||||
"navigation_bar.import_export": "Import og eksport",
|
"navigation_bar.import_export": "Import og eksport",
|
||||||
"navigation_bar.lists": "Lister",
|
"navigation_bar.lists": "Lister",
|
||||||
|
@ -572,9 +572,9 @@
|
||||||
"navigation_bar.mutes": "Skjulte brugere",
|
"navigation_bar.mutes": "Skjulte brugere",
|
||||||
"navigation_bar.opened_in_classic_interface": "Indlæg, konti og visse andre sider åbnes som standard i den klassiske webgrænseflade.",
|
"navigation_bar.opened_in_classic_interface": "Indlæg, konti og visse andre sider åbnes som standard i den klassiske webgrænseflade.",
|
||||||
"navigation_bar.preferences": "Præferencer",
|
"navigation_bar.preferences": "Præferencer",
|
||||||
"navigation_bar.privacy_and_reach": "Fortrolighed og udbredelse",
|
"navigation_bar.privacy_and_reach": "Fortrolighed og rækkevidde",
|
||||||
"navigation_bar.search": "Søg",
|
"navigation_bar.search": "Søg",
|
||||||
"navigation_bar.search_trends": "Søg/Populære",
|
"navigation_bar.search_trends": "Søg/Trender",
|
||||||
"navigation_panel.collapse_followed_tags": "Sammenfold menuen Fulgte hashtags",
|
"navigation_panel.collapse_followed_tags": "Sammenfold menuen Fulgte hashtags",
|
||||||
"navigation_panel.collapse_lists": "Luk listemenu",
|
"navigation_panel.collapse_lists": "Luk listemenu",
|
||||||
"navigation_panel.expand_followed_tags": "Udfold menuen Fulgte hashtags",
|
"navigation_panel.expand_followed_tags": "Udfold menuen Fulgte hashtags",
|
||||||
|
@ -686,11 +686,11 @@
|
||||||
"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}}",
|
||||||
"notifications.policy.filter_new_accounts_title": "Ny konti",
|
"notifications.policy.filter_new_accounts_title": "Nye konti",
|
||||||
"notifications.policy.filter_not_followers_hint": "Inklusiv personer, som har fulgt dig {days, plural, one {mindre end én dag} other {færre end # dage}}",
|
"notifications.policy.filter_not_followers_hint": "Inklusiv personer, som har fulgt dig {days, plural, one {mindre end én dag} other {mindre end # dage}}",
|
||||||
"notifications.policy.filter_not_followers_title": "Folk, som ikke følger dig",
|
"notifications.policy.filter_not_followers_title": "Personer, som ikke følger dig",
|
||||||
"notifications.policy.filter_not_following_hint": "Indtil du manuelt godkender dem",
|
"notifications.policy.filter_not_following_hint": "Indtil du manuelt godkender dem",
|
||||||
"notifications.policy.filter_not_following_title": "Folk, du ikke følger",
|
"notifications.policy.filter_not_following_title": "Personer, 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": "Håndtér notifikationer fra…",
|
"notifications.policy.title": "Håndtér notifikationer fra…",
|
||||||
|
@ -830,7 +830,7 @@
|
||||||
"search_results.see_all": "Vis alle",
|
"search_results.see_all": "Vis alle",
|
||||||
"search_results.statuses": "Indlæg",
|
"search_results.statuses": "Indlæg",
|
||||||
"search_results.title": "Søg efter \"{q}\"",
|
"search_results.title": "Søg efter \"{q}\"",
|
||||||
"server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
|
"server_banner.about_active_users": "Personer, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
|
||||||
"server_banner.active_users": "aktive brugere",
|
"server_banner.active_users": "aktive brugere",
|
||||||
"server_banner.administered_by": "Håndteres af:",
|
"server_banner.administered_by": "Håndteres af:",
|
||||||
"server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, du kan bruge for at deltage i fediverset.",
|
"server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, du kan bruge for at deltage i fediverset.",
|
||||||
|
@ -885,10 +885,10 @@
|
||||||
"status.reblogged_by": "{name} fremhævede",
|
"status.reblogged_by": "{name} fremhævede",
|
||||||
"status.reblogs": "{count, plural, one {# fremhævelse} other {# fremhævelser}}",
|
"status.reblogs": "{count, plural, one {# fremhævelse} other {# fremhævelser}}",
|
||||||
"status.reblogs.empty": "Ingen har endnu fremhævet dette indlæg. Når nogen gør, vil det fremgå hér.",
|
"status.reblogs.empty": "Ingen har endnu fremhævet dette indlæg. Når nogen gør, vil det fremgå hér.",
|
||||||
"status.redraft": "Slet og omformulér",
|
"status.redraft": "Slet og omskriv",
|
||||||
"status.remove_bookmark": "Fjern bogmærke",
|
"status.remove_bookmark": "Fjern bogmærke",
|
||||||
"status.remove_favourite": "Fjern fra favoritter",
|
"status.remove_favourite": "Fjern fra favoritter",
|
||||||
"status.replied_in_thread": "Svaret i tråd",
|
"status.replied_in_thread": "Svarede i tråd",
|
||||||
"status.replied_to": "Svarede {name}",
|
"status.replied_to": "Svarede {name}",
|
||||||
"status.reply": "Besvar",
|
"status.reply": "Besvar",
|
||||||
"status.replyAll": "Svar alle",
|
"status.replyAll": "Svar alle",
|
||||||
|
@ -902,7 +902,7 @@
|
||||||
"status.translate": "Oversæt",
|
"status.translate": "Oversæt",
|
||||||
"status.translated_from_with": "Oversat fra {lang} ved brug af {provider}",
|
"status.translated_from_with": "Oversat fra {lang} ved brug af {provider}",
|
||||||
"status.uncached_media_warning": "Ingen forhåndsvisning",
|
"status.uncached_media_warning": "Ingen forhåndsvisning",
|
||||||
"status.unmute_conversation": "Genaktivér samtale",
|
"status.unmute_conversation": "Vis samtale",
|
||||||
"status.unpin": "Frigør fra profil",
|
"status.unpin": "Frigør fra profil",
|
||||||
"subscribed_languages.lead": "Efter ændringen vises kun indlæg på de valgte sprog på din hjem- og listetidslinje. Vælger du ingen, vil du modtage indlæg på alle sprog.",
|
"subscribed_languages.lead": "Efter ændringen vises kun indlæg på de valgte sprog på din hjem- og listetidslinje. Vælger du ingen, vil du modtage indlæg på alle sprog.",
|
||||||
"subscribed_languages.save": "Gem ændringer",
|
"subscribed_languages.save": "Gem ændringer",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"about.default_locale": "Προεπιλογή",
|
"about.default_locale": "Προεπιλογή",
|
||||||
"about.disclaimer": "Το Mastodon είναι ελεύθερο λογισμικό ανοιχτού κώδικα και εμπορικό σήμα της Mastodon gGmbH.",
|
"about.disclaimer": "Το Mastodon είναι ελεύθερο λογισμικό ανοιχτού κώδικα και εμπορικό σήμα της Mastodon gGmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "Αιτιολογία μη διαθέσιμη",
|
"about.domain_blocks.no_reason_available": "Αιτιολογία μη διαθέσιμη",
|
||||||
"about.domain_blocks.preamble": "Σε γενικές γραμμές το Mastodon σού επιτρέπει να βλέπεις περιεχόμενο και να αλληλεπιδράς με χρήστες από οποιονδήποτε άλλο διακομιστή σε ένα διασυνδεδεμένο σύμπαν διακομιστών (fediverse). Ακολουθούν οι εξαιρέσεις που ισχύουν για τον συγκεκριμένο διακομιστή.",
|
"about.domain_blocks.preamble": "Σε γενικές γραμμές το Mastodon σου επιτρέπει να βλέπεις περιεχόμενο και να αλληλεπιδράς με χρήστες από οποιονδήποτε άλλο διακομιστή σε ένα διασυνδεδεμένο σύμπαν διακομιστών (fediverse). Ακολουθούν οι εξαιρέσεις που ισχύουν για τον συγκεκριμένο διακομιστή.",
|
||||||
"about.domain_blocks.silenced.explanation": "Συνήθως δε θα βλέπεις προφίλ και περιεχόμενο απ' αυτόν τον διακομιστή, εκτός αν κάνεις συγκεκριμένη αναζήτηση ή επιλέξεις να τον ακολουθήσεις.",
|
"about.domain_blocks.silenced.explanation": "Συνήθως δε θα βλέπεις προφίλ και περιεχόμενο απ' αυτόν τον διακομιστή, εκτός αν κάνεις συγκεκριμένη αναζήτηση ή επιλέξεις να τον ακολουθήσεις.",
|
||||||
"about.domain_blocks.silenced.title": "Περιορισμένος",
|
"about.domain_blocks.silenced.title": "Περιορισμένος",
|
||||||
"about.domain_blocks.suspended.explanation": "Τα δεδομένα αυτού του διακομιστή, δε θα επεξεργάζονται, δε θα αποθηκεύονται και δε θα ανταλλάσσονται, καθιστώντας οποιαδήποτε αλληλεπίδραση ή επικοινωνία με χρήστες από αυτόν το διακομιστή αδύνατη.",
|
"about.domain_blocks.suspended.explanation": "Τα δεδομένα αυτού του διακομιστή, δε θα επεξεργάζονται, δε θα αποθηκεύονται και δε θα ανταλλάσσονται, καθιστώντας οποιαδήποτε αλληλεπίδραση ή επικοινωνία με χρήστες από αυτόν το διακομιστή αδύνατη.",
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
"account.muting": "Σίγαση",
|
"account.muting": "Σίγαση",
|
||||||
"account.mutual": "Ακολουθείτε ο ένας τον άλλο",
|
"account.mutual": "Ακολουθείτε ο ένας τον άλλο",
|
||||||
"account.no_bio": "Δεν υπάρχει περιγραφή.",
|
"account.no_bio": "Δεν υπάρχει περιγραφή.",
|
||||||
"account.open_original_page": "Ανοικτό",
|
"account.open_original_page": "Άνοιγμα αυθεντικής σελίδας",
|
||||||
"account.posts": "Τουτ",
|
"account.posts": "Τουτ",
|
||||||
"account.posts_with_replies": "Τουτ και απαντήσεις",
|
"account.posts_with_replies": "Τουτ και απαντήσεις",
|
||||||
"account.remove_from_followers": "Κατάργηση {name} από τους ακόλουθους",
|
"account.remove_from_followers": "Κατάργηση {name} από τους ακόλουθους",
|
||||||
|
@ -194,7 +194,7 @@
|
||||||
"compose.saved.body": "Η ανάρτηση αποθηκεύτηκε.",
|
"compose.saved.body": "Η ανάρτηση αποθηκεύτηκε.",
|
||||||
"compose_form.direct_message_warning_learn_more": "Μάθε περισσότερα",
|
"compose_form.direct_message_warning_learn_more": "Μάθε περισσότερα",
|
||||||
"compose_form.encryption_warning": "Οι δημοσιεύσεις στο Mastodon δεν είναι κρυπτογραφημένες από άκρο σε άκρο. Μη μοιράζεσαι ευαίσθητες πληροφορίες μέσω του Mastodon.",
|
"compose_form.encryption_warning": "Οι δημοσιεύσεις στο Mastodon δεν είναι κρυπτογραφημένες από άκρο σε άκρο. Μη μοιράζεσαι ευαίσθητες πληροφορίες μέσω του Mastodon.",
|
||||||
"compose_form.hashtag_warning": "Αυτή η δημοσίευση δεν θα εμφανίζεται κάτω από οποιαδήποτε ετικέτα καθώς δεν είναι δημόσια. Μόνο οι δημόσιες δημοσιεύσεις μπορούν να αναζητηθούν με ετικέτα.",
|
"compose_form.hashtag_warning": "Αυτή η ανάρτηση δεν θα εμφανίζεται κάτω από οποιαδήποτε ετικέτα καθώς δεν είναι δημόσια. Μόνο οι δημόσιες αναρτήσεις μπορούν να αναζητηθούν με ετικέτα.",
|
||||||
"compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σου προς τους ακολούθους σου.",
|
"compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σου προς τους ακολούθους σου.",
|
||||||
"compose_form.lock_disclaimer.lock": "κλειδωμένο",
|
"compose_form.lock_disclaimer.lock": "κλειδωμένο",
|
||||||
"compose_form.placeholder": "Τι σκέφτεσαι;",
|
"compose_form.placeholder": "Τι σκέφτεσαι;",
|
||||||
|
@ -214,11 +214,18 @@
|
||||||
"confirmation_modal.cancel": "Άκυρο",
|
"confirmation_modal.cancel": "Άκυρο",
|
||||||
"confirmations.block.confirm": "Αποκλεισμός",
|
"confirmations.block.confirm": "Αποκλεισμός",
|
||||||
"confirmations.delete.confirm": "Διαγραφή",
|
"confirmations.delete.confirm": "Διαγραφή",
|
||||||
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή τη δημοσίευση;",
|
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή την ανάρτηση;",
|
||||||
"confirmations.delete.title": "Διαγραφή ανάρτησης;",
|
"confirmations.delete.title": "Διαγραφή ανάρτησης;",
|
||||||
"confirmations.delete_list.confirm": "Διαγραφή",
|
"confirmations.delete_list.confirm": "Διαγραφή",
|
||||||
"confirmations.delete_list.message": "Σίγουρα θες να διαγράψεις οριστικά αυτή τη λίστα;",
|
"confirmations.delete_list.message": "Σίγουρα θες να διαγράψεις οριστικά αυτή τη λίστα;",
|
||||||
"confirmations.delete_list.title": "Διαγραφή λίστας;",
|
"confirmations.delete_list.title": "Διαγραφή λίστας;",
|
||||||
|
"confirmations.discard_draft.confirm": "Απόρριψη και συνέχεια",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Συνέχιση επεξεργασίας",
|
||||||
|
"confirmations.discard_draft.edit.message": "Συνεχίζοντας θα απορρίψει τυχόν αλλαγές που έχετε κάνει στην ανάρτηση που επεξεργάζεστε.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Απόρριψη αλλαγών στην ανάρτηση σας;",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Συνέχιση προχείρου",
|
||||||
|
"confirmations.discard_draft.post.message": "Συνεχίζοντας θα απορρίψει την ανάρτηση που συνθέτετε.",
|
||||||
|
"confirmations.discard_draft.post.title": "Απόρριψη της πρόχειρης ανάρτησης σας;",
|
||||||
"confirmations.discard_edit_media.confirm": "Απόρριψη",
|
"confirmations.discard_edit_media.confirm": "Απόρριψη",
|
||||||
"confirmations.discard_edit_media.message": "Έχεις μη αποθηκευμένες αλλαγές στην περιγραφή πολυμέσων ή στην προεπισκόπηση, απόρριψη ούτως ή άλλως;",
|
"confirmations.discard_edit_media.message": "Έχεις μη αποθηκευμένες αλλαγές στην περιγραφή πολυμέσων ή στην προεπισκόπηση, απόρριψη ούτως ή άλλως;",
|
||||||
"confirmations.follow_to_list.confirm": "Ακολούθησε και πρόσθεσε στη λίστα",
|
"confirmations.follow_to_list.confirm": "Ακολούθησε και πρόσθεσε στη λίστα",
|
||||||
|
@ -230,7 +237,7 @@
|
||||||
"confirmations.missing_alt_text.confirm": "Προσθήκη εναλ κειμένου",
|
"confirmations.missing_alt_text.confirm": "Προσθήκη εναλ κειμένου",
|
||||||
"confirmations.missing_alt_text.message": "Η ανάρτησή σου περιέχει πολυμέσα χωρίς εναλλακτικό κείμενο. Η προσθήκη περιγραφών βοηθά να γίνει το περιεχόμενό σου προσβάσιμο σε περισσότερους ανθρώπους.",
|
"confirmations.missing_alt_text.message": "Η ανάρτησή σου περιέχει πολυμέσα χωρίς εναλλακτικό κείμενο. Η προσθήκη περιγραφών βοηθά να γίνει το περιεχόμενό σου προσβάσιμο σε περισσότερους ανθρώπους.",
|
||||||
"confirmations.missing_alt_text.secondary": "Δημοσίευση όπως και να ΄χει",
|
"confirmations.missing_alt_text.secondary": "Δημοσίευση όπως και να ΄χει",
|
||||||
"confirmations.missing_alt_text.title": "Προσθήκη alt κειμένου;",
|
"confirmations.missing_alt_text.title": "Προσθήκη εναλλακτικού κειμένου;",
|
||||||
"confirmations.mute.confirm": "Αποσιώπηση",
|
"confirmations.mute.confirm": "Αποσιώπηση",
|
||||||
"confirmations.redraft.confirm": "Διαγραφή & ξαναγράψιμο",
|
"confirmations.redraft.confirm": "Διαγραφή & ξαναγράψιμο",
|
||||||
"confirmations.redraft.message": "Σίγουρα θέλεις να σβήσεις αυτή την ανάρτηση και να την ξαναγράψεις; Οι προτιμήσεις και προωθήσεις θα χαθούν και οι απαντήσεις στην αρχική ανάρτηση θα μείνουν ορφανές.",
|
"confirmations.redraft.message": "Σίγουρα θέλεις να σβήσεις αυτή την ανάρτηση και να την ξαναγράψεις; Οι προτιμήσεις και προωθήσεις θα χαθούν και οι απαντήσεις στην αρχική ανάρτηση θα μείνουν ορφανές.",
|
||||||
|
@ -269,7 +276,7 @@
|
||||||
"domain_block_modal.you_will_lose_num_followers": "Θα χάσετε {followersCount, plural, one {{followersCountDisplay} ακόλουθο} other {{followersCountDisplay} ακόλουθους}} και {followingCount, plural, one {{followingCountDisplay} άτομο που ακολουθείτε} other {{followingCountDisplay} άτομα που ακολουθείτε}}.",
|
"domain_block_modal.you_will_lose_num_followers": "Θα χάσετε {followersCount, plural, one {{followersCountDisplay} ακόλουθο} other {{followersCountDisplay} ακόλουθους}} και {followingCount, plural, one {{followingCountDisplay} άτομο που ακολουθείτε} other {{followingCountDisplay} άτομα που ακολουθείτε}}.",
|
||||||
"domain_block_modal.you_will_lose_relationships": "Θα χάσετε όλους τους ακόλουθους και τα άτομα που ακολουθείτε από αυτόν τον διακομιστή.",
|
"domain_block_modal.you_will_lose_relationships": "Θα χάσετε όλους τους ακόλουθους και τα άτομα που ακολουθείτε από αυτόν τον διακομιστή.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Δεν θα βλέπεις αναρτήσεις ή ειδοποιήσεις από χρήστες σε αυτόν το διακομιστή.",
|
"domain_block_modal.you_wont_see_posts": "Δεν θα βλέπεις αναρτήσεις ή ειδοποιήσεις από χρήστες σε αυτόν το διακομιστή.",
|
||||||
"domain_pill.activitypub_lets_connect": "Σού επιτρέπει να συνδεθείς και να αλληλεπιδράσεις με τους ανθρώπους όχι μόνο στο Mastodon, αλλά και σε διαφορετικές κοινωνικές εφαρμογές.",
|
"domain_pill.activitypub_lets_connect": "Σου επιτρέπει να συνδεθείς και να αλληλεπιδράσεις με τους ανθρώπους όχι μόνο στο Mastodon, αλλά και σε διαφορετικές κοινωνικές εφαρμογές.",
|
||||||
"domain_pill.activitypub_like_language": "Το ActivityPub είναι σαν τη γλώσσα Mastodon μιλάει με άλλα κοινωνικά δίκτυα.",
|
"domain_pill.activitypub_like_language": "Το ActivityPub είναι σαν τη γλώσσα Mastodon μιλάει με άλλα κοινωνικά δίκτυα.",
|
||||||
"domain_pill.server": "Διακομιστής",
|
"domain_pill.server": "Διακομιστής",
|
||||||
"domain_pill.their_handle": "Το πλήρες όνομα χρήστη:",
|
"domain_pill.their_handle": "Το πλήρες όνομα χρήστη:",
|
||||||
|
@ -315,7 +322,7 @@
|
||||||
"empty_column.favourited_statuses": "Δεν έχεις καμία αγαπημένη ανάρτηση ακόμα. Μόλις αγαπήσεις κάποια, θα εμφανιστεί εδώ.",
|
"empty_column.favourited_statuses": "Δεν έχεις καμία αγαπημένη ανάρτηση ακόμα. Μόλις αγαπήσεις κάποια, θα εμφανιστεί εδώ.",
|
||||||
"empty_column.favourites": "Κανείς δεν έχει αγαπήσει αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
"empty_column.favourites": "Κανείς δεν έχει αγαπήσει αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
||||||
"empty_column.follow_requests": "Δεν έχεις κανένα αίτημα παρακολούθησης ακόμα. Μόλις λάβεις κάποιο, θα εμφανιστεί εδώ.",
|
"empty_column.follow_requests": "Δεν έχεις κανένα αίτημα παρακολούθησης ακόμα. Μόλις λάβεις κάποιο, θα εμφανιστεί εδώ.",
|
||||||
"empty_column.followed_tags": "Δεν έχετε παρακολουθήσει ακόμα καμία ετικέτα. Όταν το κάνετε, θα εμφανιστούν εδώ.",
|
"empty_column.followed_tags": "Δεν έχετε ακολουθήσει ακόμα καμία ετικέτα. Όταν το κάνετε, θα εμφανιστούν εδώ.",
|
||||||
"empty_column.hashtag": "Δεν υπάρχει ακόμα κάτι για αυτή την ετικέτα.",
|
"empty_column.hashtag": "Δεν υπάρχει ακόμα κάτι για αυτή την ετικέτα.",
|
||||||
"empty_column.home": "Η τοπική σου ροή είναι κενή! Πήγαινε στο {public} ή κάνε αναζήτηση για να ξεκινήσεις και να γνωρίσεις άλλους χρήστες.",
|
"empty_column.home": "Η τοπική σου ροή είναι κενή! Πήγαινε στο {public} ή κάνε αναζήτηση για να ξεκινήσεις και να γνωρίσεις άλλους χρήστες.",
|
||||||
"empty_column.list": "Δεν υπάρχει τίποτα σε αυτή τη λίστα ακόμα. Όταν τα μέλη της δημοσιεύσουν νέες καταστάσεις, θα εμφανιστούν εδώ.",
|
"empty_column.list": "Δεν υπάρχει τίποτα σε αυτή τη λίστα ακόμα. Όταν τα μέλη της δημοσιεύσουν νέες καταστάσεις, θα εμφανιστούν εδώ.",
|
||||||
|
@ -379,7 +386,7 @@
|
||||||
"follow_suggestions.similar_to_recently_followed_longer": "Παρόμοια με προφίλ που ακολούθησες πρόσφατα",
|
"follow_suggestions.similar_to_recently_followed_longer": "Παρόμοια με προφίλ που ακολούθησες πρόσφατα",
|
||||||
"follow_suggestions.view_all": "Εμφάνιση όλων",
|
"follow_suggestions.view_all": "Εμφάνιση όλων",
|
||||||
"follow_suggestions.who_to_follow": "Ποιον να ακολουθήσεις",
|
"follow_suggestions.who_to_follow": "Ποιον να ακολουθήσεις",
|
||||||
"followed_tags": "Ετικέτες που ακολουθούνται",
|
"followed_tags": "Ακολουθούμενες ετικέτες",
|
||||||
"footer.about": "Σχετικά με",
|
"footer.about": "Σχετικά με",
|
||||||
"footer.directory": "Κατάλογος προφίλ",
|
"footer.directory": "Κατάλογος προφίλ",
|
||||||
"footer.get_app": "Αποκτήστε την εφαρμογή",
|
"footer.get_app": "Αποκτήστε την εφαρμογή",
|
||||||
|
@ -410,7 +417,7 @@
|
||||||
"hashtag.mute": "Σίγαση #{hashtag}",
|
"hashtag.mute": "Σίγαση #{hashtag}",
|
||||||
"hashtag.unfeature": "Να μην αναδεικνύεται στο προφίλ",
|
"hashtag.unfeature": "Να μην αναδεικνύεται στο προφίλ",
|
||||||
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
|
"hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας",
|
||||||
"hashtags.and_other": "…και {count, plural, one {}other {# ακόμη}}",
|
"hashtags.and_other": "…και {count, plural, other {# ακόμη}}",
|
||||||
"hints.profiles.followers_may_be_missing": "Μπορεί να λείπουν ακόλουθοι για αυτό το προφίλ.",
|
"hints.profiles.followers_may_be_missing": "Μπορεί να λείπουν ακόλουθοι για αυτό το προφίλ.",
|
||||||
"hints.profiles.follows_may_be_missing": "Άτομα που ακολουθούνται μπορεί να λείπουν απ' αυτό το προφίλ.",
|
"hints.profiles.follows_may_be_missing": "Άτομα που ακολουθούνται μπορεί να λείπουν απ' αυτό το προφίλ.",
|
||||||
"hints.profiles.posts_may_be_missing": "Κάποιες αναρτήσεις από αυτό το προφίλ μπορεί να λείπουν.",
|
"hints.profiles.posts_may_be_missing": "Κάποιες αναρτήσεις από αυτό το προφίλ μπορεί να λείπουν.",
|
||||||
|
@ -418,7 +425,7 @@
|
||||||
"hints.profiles.see_more_follows": "Δες περισσότερα άτομα που ακολουθούνται στο {domain}",
|
"hints.profiles.see_more_follows": "Δες περισσότερα άτομα που ακολουθούνται στο {domain}",
|
||||||
"hints.profiles.see_more_posts": "Δες περισσότερες αναρτήσεις στο {domain}",
|
"hints.profiles.see_more_posts": "Δες περισσότερες αναρτήσεις στο {domain}",
|
||||||
"hints.threads.replies_may_be_missing": "Απαντήσεις από άλλους διακομιστές μπορεί να λείπουν.",
|
"hints.threads.replies_may_be_missing": "Απαντήσεις από άλλους διακομιστές μπορεί να λείπουν.",
|
||||||
"hints.threads.see_more": "Δες περισσότερες αναρτήσεις στο {domain}",
|
"hints.threads.see_more": "Δες περισσότερες απαντήσεις στο {domain}",
|
||||||
"home.column_settings.show_quotes": "Εμφάνιση παραθεμάτων",
|
"home.column_settings.show_quotes": "Εμφάνιση παραθεμάτων",
|
||||||
"home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
|
"home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων",
|
||||||
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
|
"home.column_settings.show_replies": "Εμφάνιση απαντήσεων",
|
||||||
|
@ -449,7 +456,7 @@
|
||||||
"interaction_modal.no_account_yet": "Δεν έχεις ακόμη λογαριασμό;",
|
"interaction_modal.no_account_yet": "Δεν έχεις ακόμη λογαριασμό;",
|
||||||
"interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή",
|
"interaction_modal.on_another_server": "Σε διαφορετικό διακομιστή",
|
||||||
"interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή",
|
"interaction_modal.on_this_server": "Σε αυτόν τον διακομιστή",
|
||||||
"interaction_modal.title.favourite": "Favorite {name}'s post\nΠροτίμησε την ανάρτηση της/του {name}",
|
"interaction_modal.title.favourite": "Αγάπησε την ανάρτηση του χρήστη {name}",
|
||||||
"interaction_modal.title.follow": "Ακολούθησε {name}",
|
"interaction_modal.title.follow": "Ακολούθησε {name}",
|
||||||
"interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}",
|
"interaction_modal.title.reblog": "Ενίσχυσε την ανάρτηση του {name}",
|
||||||
"interaction_modal.title.reply": "Απάντηση στην ανάρτηση του {name}",
|
"interaction_modal.title.reply": "Απάντηση στην ανάρτηση του {name}",
|
||||||
|
@ -461,13 +468,13 @@
|
||||||
"keyboard_shortcuts.back": "Μετάβαση πίσω",
|
"keyboard_shortcuts.back": "Μετάβαση πίσω",
|
||||||
"keyboard_shortcuts.blocked": "Άνοιγμα λίστας αποκλεισμένων χρηστών",
|
"keyboard_shortcuts.blocked": "Άνοιγμα λίστας αποκλεισμένων χρηστών",
|
||||||
"keyboard_shortcuts.boost": "Ενίσχυση ανάρτησης",
|
"keyboard_shortcuts.boost": "Ενίσχυση ανάρτησης",
|
||||||
"keyboard_shortcuts.column": "Στήλη εστίασης",
|
"keyboard_shortcuts.column": "Εστίαση στη στήλη",
|
||||||
"keyboard_shortcuts.compose": "Περιοχή συγγραφής κειμένου εστίασης",
|
"keyboard_shortcuts.compose": "Εστίαση στην περιοχή συγγραφής κειμένου",
|
||||||
"keyboard_shortcuts.description": "Περιγραφή",
|
"keyboard_shortcuts.description": "Περιγραφή",
|
||||||
"keyboard_shortcuts.direct": "για το άνοιγμα της στήλης ιδιωτικών επισημάνσεων",
|
"keyboard_shortcuts.direct": "για το άνοιγμα της στήλης ιδιωτικών επισημάνσεων",
|
||||||
"keyboard_shortcuts.down": "κίνηση προς τα κάτω στη λίστα",
|
"keyboard_shortcuts.down": "Μετακίνηση προς τα κάτω στη λίστα",
|
||||||
"keyboard_shortcuts.enter": "Εμφάνιση ανάρτησης",
|
"keyboard_shortcuts.enter": "Άνοιγμα ανάρτησης",
|
||||||
"keyboard_shortcuts.favourite": "Αγαπημένη δημοσίευση",
|
"keyboard_shortcuts.favourite": "Αγάπησε την ανάρτηση",
|
||||||
"keyboard_shortcuts.favourites": "Άνοιγμα λίστας αγαπημένων",
|
"keyboard_shortcuts.favourites": "Άνοιγμα λίστας αγαπημένων",
|
||||||
"keyboard_shortcuts.federated": "Άνοιγμα ροής συναλλαγών",
|
"keyboard_shortcuts.federated": "Άνοιγμα ροής συναλλαγών",
|
||||||
"keyboard_shortcuts.heading": "Συντομεύσεις πληκτρολογίου",
|
"keyboard_shortcuts.heading": "Συντομεύσεις πληκτρολογίου",
|
||||||
|
@ -484,13 +491,13 @@
|
||||||
"keyboard_shortcuts.profile": "Άνοιγμα προφίλ συγγραφέα",
|
"keyboard_shortcuts.profile": "Άνοιγμα προφίλ συγγραφέα",
|
||||||
"keyboard_shortcuts.reply": "Απάντηση στην ανάρτηση",
|
"keyboard_shortcuts.reply": "Απάντηση στην ανάρτηση",
|
||||||
"keyboard_shortcuts.requests": "Άνοιγμα λίστας αιτημάτων ακολούθησης",
|
"keyboard_shortcuts.requests": "Άνοιγμα λίστας αιτημάτων ακολούθησης",
|
||||||
"keyboard_shortcuts.search": "Γραμμή αναζήτησης εστίασης",
|
"keyboard_shortcuts.search": "Εστίαση στη γραμμή αναζήτησης",
|
||||||
"keyboard_shortcuts.spoilers": "Εμφάνιση/απόκρυψη πεδίου CW",
|
"keyboard_shortcuts.spoilers": "Εμφάνιση/απόκρυψη πεδίου CW",
|
||||||
"keyboard_shortcuts.start": "Άνοιγμα της στήλης \"Ας ξεκινήσουμε\"",
|
"keyboard_shortcuts.start": "Άνοιγμα της στήλης \"Ας ξεκινήσουμε\"",
|
||||||
"keyboard_shortcuts.toggle_hidden": "Εμφάνιση/απόκρυψη κειμένου πίσω από το CW",
|
"keyboard_shortcuts.toggle_hidden": "Εμφάνιση/απόκρυψη κειμένου πίσω από το CW",
|
||||||
"keyboard_shortcuts.toggle_sensitivity": "Εμφάνιση/απόκρυψη πολυμέσων",
|
"keyboard_shortcuts.toggle_sensitivity": "Εμφάνιση/απόκρυψη πολυμέσων",
|
||||||
"keyboard_shortcuts.toot": "Δημιουργία νέας ανάρτησης",
|
"keyboard_shortcuts.toot": "Δημιουργία νέας ανάρτησης",
|
||||||
"keyboard_shortcuts.translate": "να μεταφράσει μια δημοσίευση",
|
"keyboard_shortcuts.translate": "για να μεταφραστεί μια ανάρτηση",
|
||||||
"keyboard_shortcuts.unfocus": "Αποεστίαση του πεδίου σύνθεσης/αναζήτησης",
|
"keyboard_shortcuts.unfocus": "Αποεστίαση του πεδίου σύνθεσης/αναζήτησης",
|
||||||
"keyboard_shortcuts.up": "Μετακίνηση προς τα πάνω στη λίστα",
|
"keyboard_shortcuts.up": "Μετακίνηση προς τα πάνω στη λίστα",
|
||||||
"lightbox.close": "Κλείσιμο",
|
"lightbox.close": "Κλείσιμο",
|
||||||
|
@ -553,10 +560,12 @@
|
||||||
"navigation_bar.favourites": "Αγαπημένα",
|
"navigation_bar.favourites": "Αγαπημένα",
|
||||||
"navigation_bar.filters": "Αποσιωπημένες λέξεις",
|
"navigation_bar.filters": "Αποσιωπημένες λέξεις",
|
||||||
"navigation_bar.follow_requests": "Αιτήματα ακολούθησης",
|
"navigation_bar.follow_requests": "Αιτήματα ακολούθησης",
|
||||||
"navigation_bar.followed_tags": "Ετικέτες που ακολουθούνται",
|
"navigation_bar.followed_tags": "Ακολουθούμενες ετικέτες",
|
||||||
"navigation_bar.follows_and_followers": "Ακολουθείς και σε ακολουθούν",
|
"navigation_bar.follows_and_followers": "Ακολουθείς και σε ακολουθούν",
|
||||||
"navigation_bar.import_export": "Εισαγωγή και εξαγωγή",
|
"navigation_bar.import_export": "Εισαγωγή και εξαγωγή",
|
||||||
"navigation_bar.lists": "Λίστες",
|
"navigation_bar.lists": "Λίστες",
|
||||||
|
"navigation_bar.live_feed_local": "Ζωντανή ροή (τοπική)",
|
||||||
|
"navigation_bar.live_feed_public": "Ζωντανή ροή (δημόσια)",
|
||||||
"navigation_bar.logout": "Αποσύνδεση",
|
"navigation_bar.logout": "Αποσύνδεση",
|
||||||
"navigation_bar.moderation": "Συντονισμός",
|
"navigation_bar.moderation": "Συντονισμός",
|
||||||
"navigation_bar.more": "Περισσότερα",
|
"navigation_bar.more": "Περισσότερα",
|
||||||
|
@ -566,9 +575,9 @@
|
||||||
"navigation_bar.privacy_and_reach": "Ιδιωτικότητα και προσιτότητα",
|
"navigation_bar.privacy_and_reach": "Ιδιωτικότητα και προσιτότητα",
|
||||||
"navigation_bar.search": "Αναζήτηση",
|
"navigation_bar.search": "Αναζήτηση",
|
||||||
"navigation_bar.search_trends": "Αναζήτηση / Τάσεις",
|
"navigation_bar.search_trends": "Αναζήτηση / Τάσεις",
|
||||||
"navigation_panel.collapse_followed_tags": "Σύμπτυξη μενού ετικετών που ακολουθούνται",
|
"navigation_panel.collapse_followed_tags": "Σύμπτυξη μενού ετικετών που ακολουθείτε",
|
||||||
"navigation_panel.collapse_lists": "Σύμπτυξη μενού λίστας",
|
"navigation_panel.collapse_lists": "Σύμπτυξη μενού λίστας",
|
||||||
"navigation_panel.expand_followed_tags": "Επέκταση μενού ετικετών που ακολουθούνται",
|
"navigation_panel.expand_followed_tags": "Επέκταση μενού ετικετών που ακολουθείτε",
|
||||||
"navigation_panel.expand_lists": "Επέκταση μενού λίστας",
|
"navigation_panel.expand_lists": "Επέκταση μενού λίστας",
|
||||||
"not_signed_in_indicator.not_signed_in": "Πρέπει να συνδεθείς για να αποκτήσεις πρόσβαση σε αυτόν τον πόρο.",
|
"not_signed_in_indicator.not_signed_in": "Πρέπει να συνδεθείς για να αποκτήσεις πρόσβαση σε αυτόν τον πόρο.",
|
||||||
"notification.admin.report": "Ο/Η {name} ανέφερε τον {target}",
|
"notification.admin.report": "Ο/Η {name} ανέφερε τον {target}",
|
||||||
|
@ -580,11 +589,11 @@
|
||||||
"notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} έχουν εγγραφεί",
|
"notification.admin.sign_up.name_and_others": "{name} και {count, plural, one {# ακόμη} other {# ακόμη}} έχουν εγγραφεί",
|
||||||
"notification.annual_report.message": "Το #Wrapstodon {year} σε περιμένει! Αποκάλυψε τα στιγμιότυπα της χρονιάς και αξέχαστες στιγμές σου στο Mastodon!",
|
"notification.annual_report.message": "Το #Wrapstodon {year} σε περιμένει! Αποκάλυψε τα στιγμιότυπα της χρονιάς και αξέχαστες στιγμές σου στο Mastodon!",
|
||||||
"notification.annual_report.view": "Προβολή #Wrapstodon",
|
"notification.annual_report.view": "Προβολή #Wrapstodon",
|
||||||
"notification.favourite": "{name} favorited your post\n{name} προτίμησε την ανάρτηση σου",
|
"notification.favourite": "{name} αγάπησε την ανάρτηση σου",
|
||||||
"notification.favourite.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ανάρτησή σου",
|
"notification.favourite.name_and_others_with_link": "{name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ανάρτησή σου",
|
||||||
"notification.favourite_pm": "Ο χρήστης {name} αγάπησε την ιδιωτική σου επισήμανση",
|
"notification.favourite_pm": "Ο χρήστης {name} αγάπησε την ιδιωτική σου επισήμανση",
|
||||||
"notification.favourite_pm.name_and_others_with_link": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ιδωτική σου επισήμανση",
|
"notification.favourite_pm.name_and_others_with_link": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> αγάπησαν την ιδωτική σου επισήμανση",
|
||||||
"notification.follow": "Ο/Η {name} σε ακολούθησε",
|
"notification.follow": "Ο χρήστης {name} σε ακολούθησε",
|
||||||
"notification.follow.name_and_others": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> σε ακολούθησαν",
|
"notification.follow.name_and_others": "Ο χρήστης {name} και <a>{count, plural, one {# ακόμη} other {# ακόμη}}</a> σε ακολούθησαν",
|
||||||
"notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει",
|
"notification.follow_request": "Ο/H {name} ζήτησε να σε ακολουθήσει",
|
||||||
"notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν",
|
"notification.follow_request.name_and_others": "{name} και {count, plural, one {# άλλος} other {# άλλοι}} ζήτησαν να σε ακολουθήσουν",
|
||||||
|
@ -717,7 +726,7 @@
|
||||||
"poll_button.add_poll": "Προσθήκη δημοσκόπησης",
|
"poll_button.add_poll": "Προσθήκη δημοσκόπησης",
|
||||||
"poll_button.remove_poll": "Αφαίρεση δημοσκόπησης",
|
"poll_button.remove_poll": "Αφαίρεση δημοσκόπησης",
|
||||||
"privacy.change": "Προσαρμογή ιδιωτικότητας ανάρτησης",
|
"privacy.change": "Προσαρμογή ιδιωτικότητας ανάρτησης",
|
||||||
"privacy.direct.long": "Όλοι όσοι αναφέρθηκαν στη δημοσίευση",
|
"privacy.direct.long": "Όλοι όσοι αναφέρθηκαν στην ανάρτηση",
|
||||||
"privacy.direct.short": "Ιδιωτική επισήμανση",
|
"privacy.direct.short": "Ιδιωτική επισήμανση",
|
||||||
"privacy.private.long": "Μόνο οι ακόλουθοί σας",
|
"privacy.private.long": "Μόνο οι ακόλουθοί σας",
|
||||||
"privacy.private.short": "Ακόλουθοι",
|
"privacy.private.short": "Ακόλουθοι",
|
||||||
|
@ -795,7 +804,8 @@
|
||||||
"report_notification.categories.spam_sentence": "ανεπιθύμητα",
|
"report_notification.categories.spam_sentence": "ανεπιθύμητα",
|
||||||
"report_notification.categories.violation": "Παραβίαση κανόνα",
|
"report_notification.categories.violation": "Παραβίαση κανόνα",
|
||||||
"report_notification.categories.violation_sentence": "παραβίαση κανόνα",
|
"report_notification.categories.violation_sentence": "παραβίαση κανόνα",
|
||||||
"report_notification.open": "Ανοιχτή αναφορά",
|
"report_notification.open": "Άνοιγμα αναφοράς",
|
||||||
|
"search.clear": "Εκκαθάριση αναζήτησης",
|
||||||
"search.no_recent_searches": "Καμία πρόσφατη αναζήτηση",
|
"search.no_recent_searches": "Καμία πρόσφατη αναζήτηση",
|
||||||
"search.placeholder": "Αναζήτηση",
|
"search.placeholder": "Αναζήτηση",
|
||||||
"search.quick_action.account_search": "Προφίλ που ταιριάζουν με {x}",
|
"search.quick_action.account_search": "Προφίλ που ταιριάζουν με {x}",
|
||||||
|
@ -848,7 +858,7 @@
|
||||||
"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.favourite": "Αγαπημένα",
|
"status.favourite": "Αγαπημένα",
|
||||||
"status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}",
|
"status.favourites": "{count, plural, one {αγαπημένο} other {αγαπημένα}}",
|
||||||
"status.filter": "Φιλτράρισμα αυτής της ανάρτησης",
|
"status.filter": "Φιλτράρισμα αυτής της ανάρτησης",
|
||||||
"status.history.created": "{name} δημιούργησε στις {date}",
|
"status.history.created": "{name} δημιούργησε στις {date}",
|
||||||
"status.history.edited": "{name} επεξεργάστηκε στις {date}",
|
"status.history.edited": "{name} επεξεργάστηκε στις {date}",
|
||||||
|
@ -873,7 +883,7 @@
|
||||||
"status.reblog": "Ενίσχυση",
|
"status.reblog": "Ενίσχυση",
|
||||||
"status.reblog_private": "Ενίσχυση με αρχική ορατότητα",
|
"status.reblog_private": "Ενίσχυση με αρχική ορατότητα",
|
||||||
"status.reblogged_by": "{name} προώθησε",
|
"status.reblogged_by": "{name} προώθησε",
|
||||||
"status.reblogs": "{count, plural, one {# ενίσχυση} other {# ενισχύσεις}}",
|
"status.reblogs": "{count, plural, one {ενίσχυση} other {ενισχύσεις}}",
|
||||||
"status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
"status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
||||||
"status.redraft": "Σβήσε & ξαναγράψε",
|
"status.redraft": "Σβήσε & ξαναγράψε",
|
||||||
"status.remove_bookmark": "Αφαίρεση σελιδοδείκτη",
|
"status.remove_bookmark": "Αφαίρεση σελιδοδείκτη",
|
||||||
|
@ -885,8 +895,8 @@
|
||||||
"status.report": "Αναφορά @{name}",
|
"status.report": "Αναφορά @{name}",
|
||||||
"status.sensitive_warning": "Ευαίσθητο περιεχόμενο",
|
"status.sensitive_warning": "Ευαίσθητο περιεχόμενο",
|
||||||
"status.share": "Κοινοποίηση",
|
"status.share": "Κοινοποίηση",
|
||||||
"status.show_less_all": "Δείξε λιγότερα για όλα",
|
"status.show_less_all": "Δείξε λιγότερο για όλες",
|
||||||
"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} συνημμένα}}",
|
||||||
"status.translate": "Μετάφραση",
|
"status.translate": "Μετάφραση",
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"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.delete_list.title": "Delete list?",
|
||||||
|
"confirmations.discard_draft.confirm": "Discard and continue",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Resume editing",
|
||||||
|
"confirmations.discard_draft.edit.message": "Continuing will discard any changes you have made to the post you are currently editing.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Discard changes to your post?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Resume draft",
|
||||||
|
"confirmations.discard_draft.post.message": "Continuing will discard the post you are currently composing.",
|
||||||
|
"confirmations.discard_draft.post.title": "Discard your draft post?",
|
||||||
"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.follow_to_list.confirm": "Follow and add to list",
|
"confirmations.follow_to_list.confirm": "Follow and add to list",
|
||||||
|
@ -330,6 +337,7 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
||||||
"errors.unexpected_crash.report_issue": "Report issue",
|
"errors.unexpected_crash.report_issue": "Report issue",
|
||||||
"explore.suggested_follows": "People",
|
"explore.suggested_follows": "People",
|
||||||
|
"explore.title": "Trending",
|
||||||
"explore.trending_links": "News",
|
"explore.trending_links": "News",
|
||||||
"explore.trending_statuses": "Posts",
|
"explore.trending_statuses": "Posts",
|
||||||
"explore.trending_tags": "Hashtags",
|
"explore.trending_tags": "Hashtags",
|
||||||
|
@ -541,8 +549,10 @@
|
||||||
"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.",
|
||||||
"navigation_bar.about": "About",
|
"navigation_bar.about": "About",
|
||||||
|
"navigation_bar.account_settings": "Password and security",
|
||||||
"navigation_bar.administration": "Administration",
|
"navigation_bar.administration": "Administration",
|
||||||
"navigation_bar.advanced_interface": "Open in advanced web interface",
|
"navigation_bar.advanced_interface": "Open in advanced web interface",
|
||||||
|
"navigation_bar.automated_deletion": "Automated post deletion",
|
||||||
"navigation_bar.blocks": "Blocked users",
|
"navigation_bar.blocks": "Blocked users",
|
||||||
"navigation_bar.bookmarks": "Bookmarks",
|
"navigation_bar.bookmarks": "Bookmarks",
|
||||||
"navigation_bar.direct": "Private mentions",
|
"navigation_bar.direct": "Private mentions",
|
||||||
|
@ -552,13 +562,23 @@
|
||||||
"navigation_bar.follow_requests": "Follow requests",
|
"navigation_bar.follow_requests": "Follow requests",
|
||||||
"navigation_bar.followed_tags": "Followed hashtags",
|
"navigation_bar.followed_tags": "Followed hashtags",
|
||||||
"navigation_bar.follows_and_followers": "Follows and followers",
|
"navigation_bar.follows_and_followers": "Follows and followers",
|
||||||
|
"navigation_bar.import_export": "Import and export",
|
||||||
"navigation_bar.lists": "Lists",
|
"navigation_bar.lists": "Lists",
|
||||||
|
"navigation_bar.live_feed_local": "Live feed (local)",
|
||||||
|
"navigation_bar.live_feed_public": "Live feed (public)",
|
||||||
"navigation_bar.logout": "Logout",
|
"navigation_bar.logout": "Logout",
|
||||||
"navigation_bar.moderation": "Moderation",
|
"navigation_bar.moderation": "Moderation",
|
||||||
|
"navigation_bar.more": "More",
|
||||||
"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.preferences": "Preferences",
|
"navigation_bar.preferences": "Preferences",
|
||||||
|
"navigation_bar.privacy_and_reach": "Privacy and reach",
|
||||||
"navigation_bar.search": "Search",
|
"navigation_bar.search": "Search",
|
||||||
|
"navigation_bar.search_trends": "Search / Trending",
|
||||||
|
"navigation_panel.collapse_followed_tags": "Collapse followed hashtags menu",
|
||||||
|
"navigation_panel.collapse_lists": "Collapse list menu",
|
||||||
|
"navigation_panel.expand_followed_tags": "Expand followed hashtags menu",
|
||||||
|
"navigation_panel.expand_lists": "Expand list menu",
|
||||||
"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.admin.report": "{name} reported {target}",
|
"notification.admin.report": "{name} reported {target}",
|
||||||
"notification.admin.report_account": "{name} reported {count, plural, one {one post} other {# posts}} from {target} for {category}",
|
"notification.admin.report_account": "{name} reported {count, plural, one {one post} other {# posts}} from {target} for {category}",
|
||||||
|
@ -785,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "Rule violation",
|
"report_notification.categories.violation": "Rule violation",
|
||||||
"report_notification.categories.violation_sentence": "rule violation",
|
"report_notification.categories.violation_sentence": "rule violation",
|
||||||
"report_notification.open": "Open report",
|
"report_notification.open": "Open report",
|
||||||
|
"search.clear": "Clear search",
|
||||||
"search.no_recent_searches": "No recent searches",
|
"search.no_recent_searches": "No recent searches",
|
||||||
"search.placeholder": "Search",
|
"search.placeholder": "Search",
|
||||||
"search.quick_action.account_search": "Profiles matching {x}",
|
"search.quick_action.account_search": "Profiles matching {x}",
|
||||||
|
@ -887,7 +908,10 @@
|
||||||
"subscribed_languages.save": "Save changes",
|
"subscribed_languages.save": "Save changes",
|
||||||
"subscribed_languages.target": "Change subscribed languages for {target}",
|
"subscribed_languages.target": "Change subscribed languages for {target}",
|
||||||
"tabs_bar.home": "Home",
|
"tabs_bar.home": "Home",
|
||||||
|
"tabs_bar.menu": "Menu",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
|
"tabs_bar.publish": "New Post",
|
||||||
|
"tabs_bar.search": "Search",
|
||||||
"terms_of_service.effective_as_of": "Effective as of {date}",
|
"terms_of_service.effective_as_of": "Effective as of {date}",
|
||||||
"terms_of_service.title": "Terms of Service",
|
"terms_of_service.title": "Terms of Service",
|
||||||
"terms_of_service.upcoming_changes_on": "Upcoming changes on {date}",
|
"terms_of_service.upcoming_changes_on": "Upcoming changes on {date}",
|
||||||
|
|
|
@ -424,8 +424,6 @@
|
||||||
"hints.profiles.see_more_followers": "See more followers on {domain}",
|
"hints.profiles.see_more_followers": "See more followers on {domain}",
|
||||||
"hints.profiles.see_more_follows": "See more follows on {domain}",
|
"hints.profiles.see_more_follows": "See more follows on {domain}",
|
||||||
"hints.profiles.see_more_posts": "See more posts 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_quotes": "Show quotes",
|
"home.column_settings.show_quotes": "Show quotes",
|
||||||
"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",
|
||||||
|
@ -847,6 +845,8 @@
|
||||||
"status.bookmark": "Bookmark",
|
"status.bookmark": "Bookmark",
|
||||||
"status.cancel_reblog_private": "Unboost",
|
"status.cancel_reblog_private": "Unboost",
|
||||||
"status.cannot_reblog": "This post cannot be boosted",
|
"status.cannot_reblog": "This post cannot be boosted",
|
||||||
|
"status.context.load_new_replies": "New replies available",
|
||||||
|
"status.context.loading": "Checking for more replies",
|
||||||
"status.continued_thread": "Continued thread",
|
"status.continued_thread": "Continued thread",
|
||||||
"status.copy": "Copy link to post",
|
"status.copy": "Copy link to post",
|
||||||
"status.delete": "Delete",
|
"status.delete": "Delete",
|
||||||
|
|
|
@ -858,7 +858,7 @@
|
||||||
"status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}",
|
"status.edited_x_times": "Editado {count, plural, one {{count} vez} other {{count} veces}}",
|
||||||
"status.embed": "Obtener código para insertar",
|
"status.embed": "Obtener código para insertar",
|
||||||
"status.favourite": "Marcar como favorito",
|
"status.favourite": "Marcar como favorito",
|
||||||
"status.favourites": "{count, plural, one {# vez marcado como favorito} other {# veces marcado como favorito}}",
|
"status.favourites": "{count, plural, one {vez marcado como favorito} other {veces marcado como favorito}}",
|
||||||
"status.filter": "Filtrar este mensaje",
|
"status.filter": "Filtrar este 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}",
|
||||||
|
|
|
@ -221,7 +221,7 @@
|
||||||
"confirmations.delete_list.title": "¿Eliminar lista?",
|
"confirmations.delete_list.title": "¿Eliminar lista?",
|
||||||
"confirmations.discard_draft.confirm": "Descartar y continuar",
|
"confirmations.discard_draft.confirm": "Descartar y continuar",
|
||||||
"confirmations.discard_draft.edit.cancel": "Continuar edición",
|
"confirmations.discard_draft.edit.cancel": "Continuar edición",
|
||||||
"confirmations.discard_draft.edit.message": "Continuar descartará cualquier cambio que haya realizado en la publicación que estás editando actualmente.",
|
"confirmations.discard_draft.edit.message": "Continuar descartará cualquier cambio que hayas realizado en la publicación que estás editando actualmente.",
|
||||||
"confirmations.discard_draft.edit.title": "¿Descartar cambios en tu publicación?",
|
"confirmations.discard_draft.edit.title": "¿Descartar cambios en tu publicación?",
|
||||||
"confirmations.discard_draft.post.cancel": "Retomar el borrador",
|
"confirmations.discard_draft.post.cancel": "Retomar el borrador",
|
||||||
"confirmations.discard_draft.post.message": "Continuar descartará el mensaje que estás escribiendo actualmente.",
|
"confirmations.discard_draft.post.message": "Continuar descartará el mensaje que estás escribiendo actualmente.",
|
||||||
|
@ -795,7 +795,7 @@
|
||||||
"report.thanks.title_actionable": "Gracias por informar, estudiaremos esto.",
|
"report.thanks.title_actionable": "Gracias por informar, estudiaremos esto.",
|
||||||
"report.unfollow": "Dejar de seguir a @{name}",
|
"report.unfollow": "Dejar de seguir a @{name}",
|
||||||
"report.unfollow_explanation": "Estás siguiendo esta cuenta. Para dejar de ver sus publicaciones en tu página de inicio, deja de seguirla.",
|
"report.unfollow_explanation": "Estás siguiendo esta cuenta. Para dejar de ver sus publicaciones en tu página de inicio, deja de seguirla.",
|
||||||
"report_notification.attached_statuses": "{count, plural, one {{count} publicación} other {{count} publicaciones}} adjunta(s)",
|
"report_notification.attached_statuses": "{count, plural, one {{count} publicación adjunta} other {{count} publicaciones adjuntas}}",
|
||||||
"report_notification.categories.legal": "Legal",
|
"report_notification.categories.legal": "Legal",
|
||||||
"report_notification.categories.legal_sentence": "contenido ilegal",
|
"report_notification.categories.legal_sentence": "contenido ilegal",
|
||||||
"report_notification.categories.other": "Otros",
|
"report_notification.categories.other": "Otros",
|
||||||
|
|
|
@ -167,7 +167,7 @@
|
||||||
"column.domain_blocks": "Peidetud domeenid",
|
"column.domain_blocks": "Peidetud domeenid",
|
||||||
"column.edit_list": "Muuda loendit",
|
"column.edit_list": "Muuda loendit",
|
||||||
"column.favourites": "Lemmikud",
|
"column.favourites": "Lemmikud",
|
||||||
"column.firehose": "Laiv lõimed",
|
"column.firehose": "Postitused reaalajas",
|
||||||
"column.follow_requests": "Jälgimistaotlused",
|
"column.follow_requests": "Jälgimistaotlused",
|
||||||
"column.home": "Kodu",
|
"column.home": "Kodu",
|
||||||
"column.list_members": "Halda loendi liikmeid",
|
"column.list_members": "Halda loendi liikmeid",
|
||||||
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Kustuta",
|
"confirmations.delete_list.confirm": "Kustuta",
|
||||||
"confirmations.delete_list.message": "Oled kindel, et soovid selle loetelu pöördumatult kustutada?",
|
"confirmations.delete_list.message": "Oled kindel, et soovid selle loetelu pöördumatult kustutada?",
|
||||||
"confirmations.delete_list.title": "Kustutada loetelu?",
|
"confirmations.delete_list.title": "Kustutada loetelu?",
|
||||||
|
"confirmations.discard_draft.confirm": "Loobu ja jätka",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Jätka muutmist",
|
||||||
|
"confirmations.discard_draft.edit.message": "Jätkates loobud kõikidest sellese postitusse tehtud muudatustest.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Kas loobud oma postituse muudatustest?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Jätka kavandi koostamist",
|
||||||
|
"confirmations.discard_draft.post.message": "Jätkates loobud hetkel koostamisel postituse kõikidest muudatustest.",
|
||||||
|
"confirmations.discard_draft.post.title": "Kas loobud postituse kavandist?",
|
||||||
"confirmations.discard_edit_media.confirm": "Hülga",
|
"confirmations.discard_edit_media.confirm": "Hülga",
|
||||||
"confirmations.discard_edit_media.message": "Sul on salvestamata muudatusi meediakirjelduses või eelvaates, kas hülgad need?",
|
"confirmations.discard_edit_media.message": "Sul on salvestamata muudatusi meediakirjelduses või eelvaates, kas hülgad need?",
|
||||||
"confirmations.follow_to_list.confirm": "Jälgi ja lisa loetellu",
|
"confirmations.follow_to_list.confirm": "Jälgi ja lisa loetellu",
|
||||||
|
@ -330,7 +337,7 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale",
|
"errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale",
|
||||||
"errors.unexpected_crash.report_issue": "Teavita veast",
|
"errors.unexpected_crash.report_issue": "Teavita veast",
|
||||||
"explore.suggested_follows": "Inimesed",
|
"explore.suggested_follows": "Inimesed",
|
||||||
"explore.title": "Populaarsust kohuv",
|
"explore.title": "Populaarsust koguv",
|
||||||
"explore.trending_links": "Uudised",
|
"explore.trending_links": "Uudised",
|
||||||
"explore.trending_statuses": "Postitused",
|
"explore.trending_statuses": "Postitused",
|
||||||
"explore.trending_tags": "Sildid",
|
"explore.trending_tags": "Sildid",
|
||||||
|
@ -382,7 +389,7 @@
|
||||||
"followed_tags": "Jälgitavad märksõnad",
|
"followed_tags": "Jälgitavad märksõnad",
|
||||||
"footer.about": "Teave",
|
"footer.about": "Teave",
|
||||||
"footer.directory": "Profiilikataloog",
|
"footer.directory": "Profiilikataloog",
|
||||||
"footer.get_app": "Tõmba äpp",
|
"footer.get_app": "Laadi rakendus",
|
||||||
"footer.keyboard_shortcuts": "Kiirklahvid",
|
"footer.keyboard_shortcuts": "Kiirklahvid",
|
||||||
"footer.privacy_policy": "Isikuandmete kaitse",
|
"footer.privacy_policy": "Isikuandmete kaitse",
|
||||||
"footer.source_code": "Lähtekood",
|
"footer.source_code": "Lähtekood",
|
||||||
|
@ -557,6 +564,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Jälgitavad ja jälgijad",
|
"navigation_bar.follows_and_followers": "Jälgitavad ja jälgijad",
|
||||||
"navigation_bar.import_export": "Import ja eksport",
|
"navigation_bar.import_export": "Import ja eksport",
|
||||||
"navigation_bar.lists": "Loetelud",
|
"navigation_bar.lists": "Loetelud",
|
||||||
|
"navigation_bar.live_feed_local": "Ajajoon reaalajas (sinu server)",
|
||||||
|
"navigation_bar.live_feed_public": "Ajajoon reaalajas (Födiversum)",
|
||||||
"navigation_bar.logout": "Logi välja",
|
"navigation_bar.logout": "Logi välja",
|
||||||
"navigation_bar.moderation": "Modereerimine",
|
"navigation_bar.moderation": "Modereerimine",
|
||||||
"navigation_bar.more": "Lisavalikud",
|
"navigation_bar.more": "Lisavalikud",
|
||||||
|
@ -565,7 +574,10 @@
|
||||||
"navigation_bar.preferences": "Eelistused",
|
"navigation_bar.preferences": "Eelistused",
|
||||||
"navigation_bar.privacy_and_reach": "Privaatsus ja ulatus",
|
"navigation_bar.privacy_and_reach": "Privaatsus ja ulatus",
|
||||||
"navigation_bar.search": "Otsing",
|
"navigation_bar.search": "Otsing",
|
||||||
|
"navigation_bar.search_trends": "Otsi / Populaarsust koguv",
|
||||||
|
"navigation_panel.collapse_followed_tags": "Ahenda jälgitavate teemaviidete menüü",
|
||||||
"navigation_panel.collapse_lists": "Ahenda loendimenüü",
|
"navigation_panel.collapse_lists": "Ahenda loendimenüü",
|
||||||
|
"navigation_panel.expand_followed_tags": "Ava jälgitavate teemaviidete menüü",
|
||||||
"navigation_panel.expand_lists": "Laienda loendimenüüd",
|
"navigation_panel.expand_lists": "Laienda loendimenüüd",
|
||||||
"not_signed_in_indicator.not_signed_in": "Pead sisse logima, et saada ligipääsu sellele ressursile.",
|
"not_signed_in_indicator.not_signed_in": "Pead sisse logima, et saada ligipääsu sellele ressursile.",
|
||||||
"notification.admin.report": "{name} saatis teavituse {target} kohta",
|
"notification.admin.report": "{name} saatis teavituse {target} kohta",
|
||||||
|
@ -793,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "Reeglite rikkumine",
|
"report_notification.categories.violation": "Reeglite rikkumine",
|
||||||
"report_notification.categories.violation_sentence": "reeglite rikkumine",
|
"report_notification.categories.violation_sentence": "reeglite rikkumine",
|
||||||
"report_notification.open": "Ava teavitus",
|
"report_notification.open": "Ava teavitus",
|
||||||
|
"search.clear": "Tühjenda otsing",
|
||||||
"search.no_recent_searches": "Pole viimatisi otsinguid",
|
"search.no_recent_searches": "Pole viimatisi otsinguid",
|
||||||
"search.placeholder": "Otsi",
|
"search.placeholder": "Otsi",
|
||||||
"search.quick_action.account_search": "Sobivaid profiile {x}",
|
"search.quick_action.account_search": "Sobivaid profiile {x}",
|
||||||
|
@ -818,7 +831,7 @@
|
||||||
"search_results.statuses": "Postitused",
|
"search_results.statuses": "Postitused",
|
||||||
"search_results.title": "Otsi märksõna: {q}",
|
"search_results.title": "Otsi märksõna: {q}",
|
||||||
"server_banner.about_active_users": "Inimesed, kes kasutavad seda serverit viimase 30 päeva jooksul (kuu aktiivsed kasutajad)",
|
"server_banner.about_active_users": "Inimesed, kes kasutavad seda serverit viimase 30 päeva jooksul (kuu aktiivsed kasutajad)",
|
||||||
"server_banner.active_users": "aktiivsed kasutajad",
|
"server_banner.active_users": "aktiivset kasutajaid",
|
||||||
"server_banner.administered_by": "Administraator:",
|
"server_banner.administered_by": "Administraator:",
|
||||||
"server_banner.is_one_of_many": "{domain} on üks paljudest sõltumatutest Mastodoni serveritest, mida saab fediversumis osalemiseks kasutada.",
|
"server_banner.is_one_of_many": "{domain} on üks paljudest sõltumatutest Mastodoni serveritest, mida saab fediversumis osalemiseks kasutada.",
|
||||||
"server_banner.server_stats": "Serveri statistika:",
|
"server_banner.server_stats": "Serveri statistika:",
|
||||||
|
@ -845,7 +858,7 @@
|
||||||
"status.edited_x_times": "Muudetud {count, plural, one{{count} kord} other {{count} korda}}",
|
"status.edited_x_times": "Muudetud {count, plural, one{{count} kord} other {{count} korda}}",
|
||||||
"status.embed": "Hangi manustamiskood",
|
"status.embed": "Hangi manustamiskood",
|
||||||
"status.favourite": "Lemmik",
|
"status.favourite": "Lemmik",
|
||||||
"status.favourites": "{count, plural, one {lemmik} other {lemmikud}}",
|
"status.favourites": "{count, plural, one {lemmik} other {lemmikut}}",
|
||||||
"status.filter": "Filtreeri seda postitust",
|
"status.filter": "Filtreeri seda postitust",
|
||||||
"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}",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"about.blocks": "Moderatutako zerbitzariak",
|
"about.blocks": "Moderatutako zerbitzariak",
|
||||||
"about.contact": "Kontaktua:",
|
"about.contact": "Kontaktua:",
|
||||||
|
"about.default_locale": "Lehenetsia",
|
||||||
"about.disclaimer": "Mastodon software libre eta kode irekikoa da, eta Mastodon gGmbH-ren marka erregistratua.",
|
"about.disclaimer": "Mastodon software libre eta kode irekikoa da, eta Mastodon gGmbH-ren marka erregistratua.",
|
||||||
"about.domain_blocks.no_reason_available": "Arrazoia ez dago eskuragarri",
|
"about.domain_blocks.no_reason_available": "Arrazoia ez dago eskuragarri",
|
||||||
"about.domain_blocks.preamble": "Mastodonek orokorrean aukera ematen dizu fedibertsoko beste zerbitzarietako erabiltzaileen edukia ikusi eta haiekin komunikatzeko. Zerbitzari zehatz honi ezarritako salbuespenak hauek dira.",
|
"about.domain_blocks.preamble": "Mastodonek orokorrean aukera ematen dizu fedibertsoko beste zerbitzarietako erabiltzaileen edukia ikusi eta haiekin komunikatzeko. Zerbitzari zehatz honi ezarritako salbuespenak hauek dira.",
|
||||||
|
@ -8,6 +9,7 @@
|
||||||
"about.domain_blocks.silenced.title": "Mugatua",
|
"about.domain_blocks.silenced.title": "Mugatua",
|
||||||
"about.domain_blocks.suspended.explanation": "Ez da zerbitzari honetako daturik prozesatuko, gordeko, edo partekatuko, zerbitzari honetako erabiltzaileekin komunikatzea ezinezkoa eginez.",
|
"about.domain_blocks.suspended.explanation": "Ez da zerbitzari honetako daturik prozesatuko, gordeko, edo partekatuko, zerbitzari honetako erabiltzaileekin komunikatzea ezinezkoa eginez.",
|
||||||
"about.domain_blocks.suspended.title": "Kanporatua",
|
"about.domain_blocks.suspended.title": "Kanporatua",
|
||||||
|
"about.language_label": "Hizkuntza",
|
||||||
"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",
|
||||||
|
@ -19,13 +21,20 @@
|
||||||
"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.blocking": "Eragotzitakoak",
|
||||||
"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}",
|
||||||
"account.disable_notifications": "Utzi jakinarazteari @{name} erabiltzaileak argitaratzean",
|
"account.disable_notifications": "Utzi jakinarazteari @{name} erabiltzaileak argitaratzean",
|
||||||
|
"account.domain_blocking": "Eragotzitako domeinua",
|
||||||
"account.edit_profile": "Editatu profila",
|
"account.edit_profile": "Editatu profila",
|
||||||
"account.enable_notifications": "Jakinarazi @{name} erabiltzaileak argitaratzean",
|
"account.enable_notifications": "Jakinarazi @{name} erabiltzaileak argitaratzean",
|
||||||
"account.endorse": "Nabarmendu profilean",
|
"account.endorse": "Nabarmendu profilean",
|
||||||
|
"account.familiar_followers_one": "{name1}-k jarraitzen du",
|
||||||
|
"account.familiar_followers_two": "{name1}-k eta {name2}-k jarraitzen dute",
|
||||||
|
"account.featured": "Gailenak",
|
||||||
|
"account.featured.accounts": "Profilak",
|
||||||
|
"account.featured.hashtags": "Traolak",
|
||||||
"account.featured_tags.last_status_at": "Azken bidalketa {date} datan",
|
"account.featured_tags.last_status_at": "Azken bidalketa {date} datan",
|
||||||
"account.featured_tags.last_status_never": "Bidalketarik ez",
|
"account.featured_tags.last_status_never": "Bidalketarik ez",
|
||||||
"account.follow": "Jarraitu",
|
"account.follow": "Jarraitu",
|
||||||
|
@ -33,9 +42,11 @@
|
||||||
"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.followers_counter": "{count, plural, one {{counter} jarraitzaile} other {{counter} jarraitzaile}}",
|
||||||
|
"account.followers_you_know_counter": "{counter} ezagutzen dituzu",
|
||||||
"account.following": "Jarraitzen",
|
"account.following": "Jarraitzen",
|
||||||
"account.following_counter": "{count, plural, one {{counter} jarraitzen} other {{counter} 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.follows_you": "Jarraitzen zaitu",
|
||||||
"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",
|
||||||
"account.in_memoriam": "Oroimenezkoa.",
|
"account.in_memoriam": "Oroimenezkoa.",
|
||||||
|
@ -50,18 +61,23 @@
|
||||||
"account.mute_notifications_short": "Mututu jakinarazpenak",
|
"account.mute_notifications_short": "Mututu jakinarazpenak",
|
||||||
"account.mute_short": "Mututu",
|
"account.mute_short": "Mututu",
|
||||||
"account.muted": "Mutututa",
|
"account.muted": "Mutututa",
|
||||||
|
"account.muting": "Isilarazitakoak",
|
||||||
|
"account.mutual": "Elkar jarraitzen duzue",
|
||||||
"account.no_bio": "Ez da deskribapenik eman.",
|
"account.no_bio": "Ez da deskribapenik eman.",
|
||||||
"account.open_original_page": "Ireki jatorrizko orria",
|
"account.open_original_page": "Ireki jatorrizko orria",
|
||||||
"account.posts": "Bidalketa",
|
"account.posts": "Bidalketa",
|
||||||
"account.posts_with_replies": "Bidalketak eta erantzunak",
|
"account.posts_with_replies": "Bidalketak eta erantzunak",
|
||||||
|
"account.remove_from_followers": "Kendu {name} zure jarraitzaileengandik",
|
||||||
"account.report": "Salatu @{name}",
|
"account.report": "Salatu @{name}",
|
||||||
"account.requested": "Onarpenaren zain. Egin klik jarraipen-eskaera ezeztatzeko",
|
"account.requested": "Onarpenaren zain. Egin klik jarraipen-eskaera ezeztatzeko",
|
||||||
"account.requested_follow": "{name}-(e)k zu jarraitzeko eskaera egin du",
|
"account.requested_follow": "{name}-(e)k zu jarraitzeko eskaera egin du",
|
||||||
|
"account.requests_to_follow_you": "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.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_domain_short": "Desblokeatu",
|
||||||
"account.unblock_short": "Desblokeatu",
|
"account.unblock_short": "Desblokeatu",
|
||||||
"account.unendorse": "Ez nabarmendu profilean",
|
"account.unendorse": "Ez nabarmendu profilean",
|
||||||
"account.unfollow": "Utzi jarraitzeari",
|
"account.unfollow": "Utzi jarraitzeari",
|
||||||
|
@ -87,10 +103,13 @@
|
||||||
"alt_text_modal.add_text_from_image": "Gehitu testua iruditik",
|
"alt_text_modal.add_text_from_image": "Gehitu testua iruditik",
|
||||||
"alt_text_modal.cancel": "Utzi",
|
"alt_text_modal.cancel": "Utzi",
|
||||||
"alt_text_modal.change_thumbnail": "Aldatu koadro txikia",
|
"alt_text_modal.change_thumbnail": "Aldatu koadro txikia",
|
||||||
|
"alt_text_modal.describe_for_people_with_hearing_impairments": "Deskribatu hau entzumen arazoak dituzten pertsonentzat…",
|
||||||
|
"alt_text_modal.describe_for_people_with_visual_impairments": "Deskribatu hau ikusmen arazoak dituzten pertsonentzat…",
|
||||||
"alt_text_modal.done": "Egina",
|
"alt_text_modal.done": "Egina",
|
||||||
"announcement.announcement": "Iragarpena",
|
"announcement.announcement": "Iragarpena",
|
||||||
"annual_report.summary.followers.followers": "jarraitzaileak",
|
"annual_report.summary.followers.followers": "jarraitzaileak",
|
||||||
"annual_report.summary.followers.total": "{count} guztira",
|
"annual_report.summary.followers.total": "{count} guztira",
|
||||||
|
"annual_report.summary.here_it_is": "Hona hemen zure {year}. urtearen bilduma:",
|
||||||
"annual_report.summary.highlighted_post.by_favourites": "egindako bidalketa gogokoena",
|
"annual_report.summary.highlighted_post.by_favourites": "egindako bidalketa gogokoena",
|
||||||
"annual_report.summary.highlighted_post.by_reblogs": "egindako bidalketa zabalduena",
|
"annual_report.summary.highlighted_post.by_reblogs": "egindako bidalketa zabalduena",
|
||||||
"annual_report.summary.highlighted_post.by_replies": "erantzun gehien izan dituen bidalketa",
|
"annual_report.summary.highlighted_post.by_replies": "erantzun gehien izan dituen bidalketa",
|
||||||
|
@ -192,6 +211,12 @@
|
||||||
"confirmations.delete_list.confirm": "Ezabatu",
|
"confirmations.delete_list.confirm": "Ezabatu",
|
||||||
"confirmations.delete_list.message": "Ziur behin betiko ezabatu nahi duzula zerrenda hau?",
|
"confirmations.delete_list.message": "Ziur behin betiko ezabatu nahi duzula zerrenda hau?",
|
||||||
"confirmations.delete_list.title": "Ezabatu zerrenda?",
|
"confirmations.delete_list.title": "Ezabatu zerrenda?",
|
||||||
|
"confirmations.discard_draft.confirm": "Baztertu eta jarraitu",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Berrekin edizioari",
|
||||||
|
"confirmations.discard_draft.edit.message": "Jarraitzeak editatzen ari zaren mezuan egindako aldaketak baztertuko ditu.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Baztertu zure argitalpenari egindako aldaketak?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Zirriborroa berrekin",
|
||||||
|
"confirmations.discard_draft.post.title": "Zure argitalpenaren zirriborroa baztertu nahi duzu?",
|
||||||
"confirmations.discard_edit_media.confirm": "Baztertu",
|
"confirmations.discard_edit_media.confirm": "Baztertu",
|
||||||
"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.follow_to_list.confirm": "Jarraitu eta zerrendan sartu",
|
"confirmations.follow_to_list.confirm": "Jarraitu eta zerrendan sartu",
|
||||||
|
@ -201,12 +226,16 @@
|
||||||
"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?",
|
||||||
"confirmations.missing_alt_text.confirm": "Gehitu testu alternatiboa",
|
"confirmations.missing_alt_text.confirm": "Gehitu testu alternatiboa",
|
||||||
|
"confirmations.missing_alt_text.message": "Zure argitalpenak \"alt text\"-urik gabeko multimedia edukia dauka. Deskribapenak gehitzeak zure edukia jende gehiagorentzat eskuragarri jartzen laguntzen du.",
|
||||||
"confirmations.missing_alt_text.secondary": "Bidali edonola ere",
|
"confirmations.missing_alt_text.secondary": "Bidali edonola ere",
|
||||||
"confirmations.missing_alt_text.title": "Testu alternatiboa gehitu?",
|
"confirmations.missing_alt_text.title": "Testu alternatiboa gehitu?",
|
||||||
"confirmations.mute.confirm": "Mututu",
|
"confirmations.mute.confirm": "Mututu",
|
||||||
"confirmations.redraft.confirm": "Ezabatu eta berridatzi",
|
"confirmations.redraft.confirm": "Ezabatu eta berridatzi",
|
||||||
"confirmations.redraft.message": "Ziur argitalpen hau ezabatu eta zirriborroa berriro egitea nahi duzula? Gogokoak eta bultzadak galduko dira, eta jatorrizko argitalpenaren erantzunak zurtz geratuko dira.",
|
"confirmations.redraft.message": "Ziur argitalpen hau ezabatu eta zirriborroa berriro egitea nahi duzula? Gogokoak eta bultzadak galduko dira, eta jatorrizko argitalpenaren erantzunak zurtz geratuko dira.",
|
||||||
"confirmations.redraft.title": "Ezabatu eta berridatzi bidalketa?",
|
"confirmations.redraft.title": "Ezabatu eta berridatzi bidalketa?",
|
||||||
|
"confirmations.remove_from_followers.confirm": "Jarraitzailea Kendu",
|
||||||
|
"confirmations.remove_from_followers.message": "{name}-k zu jarraitzeari utziko dio. Seguru zaude jarraitu nahi duzula?",
|
||||||
|
"confirmations.remove_from_followers.title": "Jarraitzailea kendu nahi duzu?",
|
||||||
"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?",
|
"confirmations.unfollow.title": "Erabiltzailea jarraitzeari utzi?",
|
||||||
|
@ -228,12 +257,14 @@
|
||||||
"disabled_account_banner.text": "Zure {disabledAccount} kontua desgaituta dago une honetan.",
|
"disabled_account_banner.text": "Zure {disabledAccount} kontua desgaituta dago une honetan.",
|
||||||
"dismissable_banner.community_timeline": "Hauek dira {domain} zerbitzarian ostatatutako kontuen bidalketa publiko berrienak.",
|
"dismissable_banner.community_timeline": "Hauek dira {domain} zerbitzarian ostatatutako kontuen bidalketa publiko berrienak.",
|
||||||
"dismissable_banner.dismiss": "Baztertu",
|
"dismissable_banner.dismiss": "Baztertu",
|
||||||
|
"dismissable_banner.public_timeline": "Hauek dira {domain}-eko jendeak jarraitzen dituen fedibertsoko erabiltzaileen azken mezu publikoak.",
|
||||||
"domain_block_modal.block": "Blokeatu zerbitzaria",
|
"domain_block_modal.block": "Blokeatu zerbitzaria",
|
||||||
"domain_block_modal.block_account_instead": "Blokeatu @{name} bestela",
|
"domain_block_modal.block_account_instead": "Blokeatu @{name} bestela",
|
||||||
"domain_block_modal.they_can_interact_with_old_posts": "Zerbitzari honetako jendea zure argitalpen zaharrekin elkarreragin dezake.",
|
"domain_block_modal.they_can_interact_with_old_posts": "Zerbitzari honetako jendea zure argitalpen zaharrekin elkarreragin dezake.",
|
||||||
"domain_block_modal.they_cant_follow": "Zerbitzari honetako inork ezin zaitu jarraitu.",
|
"domain_block_modal.they_cant_follow": "Zerbitzari honetako inork ezin zaitu jarraitu.",
|
||||||
"domain_block_modal.they_wont_know": "Ez dute jakingo blokeatuak izan direnik.",
|
"domain_block_modal.they_wont_know": "Ez dute jakingo blokeatuak izan direnik.",
|
||||||
"domain_block_modal.title": "Domeinua blokeatu nahi duzu?",
|
"domain_block_modal.title": "Domeinua blokeatu nahi duzu?",
|
||||||
|
"domain_block_modal.you_will_lose_relationships": "Instantzia honetatik jarraitzen dituzun jarraitzaile eta pertsona guztiak galduko dituzu.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Ez dituzu zerbitzari honetako erabiltzaileen argitalpenik edota jakinarazpenik ikusiko.",
|
"domain_block_modal.you_wont_see_posts": "Ez dituzu zerbitzari honetako erabiltzaileen argitalpenik edota jakinarazpenik ikusiko.",
|
||||||
"domain_pill.activitypub_lets_connect": "Mastodon-en ez ezik, beste sare sozialen aplikazioetako jendearekin konektatzea eta harremanetan jartzea uzten dizu.",
|
"domain_pill.activitypub_lets_connect": "Mastodon-en ez ezik, beste sare sozialen aplikazioetako jendearekin konektatzea eta harremanetan jartzea uzten dizu.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub, Mastodon-ek beste sare sozialekin hitz egiteko erabiltzen duen hizkuntza bezalakoxea da.",
|
"domain_pill.activitypub_like_language": "ActivityPub, Mastodon-ek beste sare sozialekin hitz egiteko erabiltzen duen hizkuntza bezalakoxea da.",
|
||||||
|
@ -265,6 +296,9 @@
|
||||||
"emoji_button.search_results": "Bilaketaren emaitzak",
|
"emoji_button.search_results": "Bilaketaren emaitzak",
|
||||||
"emoji_button.symbols": "Sinboloak",
|
"emoji_button.symbols": "Sinboloak",
|
||||||
"emoji_button.travel": "Bidaiak eta tokiak",
|
"emoji_button.travel": "Bidaiak eta tokiak",
|
||||||
|
"empty_column.account_featured.me": "Oraindik ez duzu ezer nabarmendu. Ba al zenekien gehien erabiltzen dituzun traolak eta baita zure lagunen kontuak ere zure profilean nabarmendu ditzakezula?",
|
||||||
|
"empty_column.account_featured.other": "{acct}-ek ez du ezer nabarmendu oraindik. Ba al zenekien gehien erabiltzen dituzun traolak eta baita zure lagunen kontuak ere zure profilean nabarmendu ditzakezula?",
|
||||||
|
"empty_column.account_featured_other.unknown": "Kontu honek ez du ezer nabarmendu oraindik.",
|
||||||
"empty_column.account_hides_collections": "Erabiltzaile honek informazio hau erabilgarri ez egotea aukeratu du.",
|
"empty_column.account_hides_collections": "Erabiltzaile honek informazio hau erabilgarri ez egotea aukeratu du.",
|
||||||
"empty_column.account_suspended": "Kanporatutako kontua",
|
"empty_column.account_suspended": "Kanporatutako kontua",
|
||||||
"empty_column.account_timeline": "Ez dago bidalketarik hemen!",
|
"empty_column.account_timeline": "Ez dago bidalketarik hemen!",
|
||||||
|
@ -293,9 +327,14 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera",
|
"errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera",
|
||||||
"errors.unexpected_crash.report_issue": "Eman arazoaren berri",
|
"errors.unexpected_crash.report_issue": "Eman arazoaren berri",
|
||||||
"explore.suggested_follows": "Jendea",
|
"explore.suggested_follows": "Jendea",
|
||||||
|
"explore.title": "Joerak",
|
||||||
"explore.trending_links": "Berriak",
|
"explore.trending_links": "Berriak",
|
||||||
"explore.trending_statuses": "Tutak",
|
"explore.trending_statuses": "Tutak",
|
||||||
"explore.trending_tags": "Traolak",
|
"explore.trending_tags": "Traolak",
|
||||||
|
"featured_carousel.next": "Hurrengoa",
|
||||||
|
"featured_carousel.post": "Argitaratu",
|
||||||
|
"featured_carousel.previous": "Aurrekoa",
|
||||||
|
"featured_carousel.slide": "{total}-tik {index}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "Iragazki-kategoria hau ez zaio aplikatzen bidalketa honetara sartzeko erabili duzun testuinguruari. Bidalketa testuinguru horretan ere iragaztea nahi baduzu, iragazkia editatu beharko duzu.",
|
"filter_modal.added.context_mismatch_explanation": "Iragazki-kategoria hau ez zaio aplikatzen bidalketa honetara sartzeko erabili duzun testuinguruari. Bidalketa testuinguru horretan ere iragaztea nahi baduzu, iragazkia editatu beharko duzu.",
|
||||||
"filter_modal.added.context_mismatch_title": "Testuingurua ez dator bat!",
|
"filter_modal.added.context_mismatch_title": "Testuingurua ez dator bat!",
|
||||||
"filter_modal.added.expired_explanation": "Iragazki kategoria hau iraungi da, eragina izan dezan bere iraungitze-data aldatu beharko duzu.",
|
"filter_modal.added.expired_explanation": "Iragazki kategoria hau iraungi da, eragina izan dezan bere iraungitze-data aldatu beharko duzu.",
|
||||||
|
@ -348,6 +387,8 @@
|
||||||
"generic.saved": "Gordea",
|
"generic.saved": "Gordea",
|
||||||
"getting_started.heading": "Menua",
|
"getting_started.heading": "Menua",
|
||||||
"hashtag.admin_moderation": "#{name}-(r)en moderazio-interfazea ireki",
|
"hashtag.admin_moderation": "#{name}-(r)en moderazio-interfazea ireki",
|
||||||
|
"hashtag.browse": "Arakatu bidalketak #{hashtag}(e)n",
|
||||||
|
"hashtag.browse_from_account": "Arakatu @{name}(r)en bidalketak #{hashtag}(e)n",
|
||||||
"hashtag.column_header.tag_mode.all": "eta {osagarria}",
|
"hashtag.column_header.tag_mode.all": "eta {osagarria}",
|
||||||
"hashtag.column_header.tag_mode.any": "edo {osagarria}",
|
"hashtag.column_header.tag_mode.any": "edo {osagarria}",
|
||||||
"hashtag.column_header.tag_mode.none": "gabe {osagarria}",
|
"hashtag.column_header.tag_mode.none": "gabe {osagarria}",
|
||||||
|
@ -360,7 +401,10 @@
|
||||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} parte-hartzaile} other {{counter} parte-hartzaile}}",
|
"hashtag.counter_by_accounts": "{count, plural, one {{counter} parte-hartzaile} other {{counter} parte-hartzaile}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}}",
|
"hashtag.counter_by_uses": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}} gaur",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} argitalpen} other {{counter} argitalpen}} gaur",
|
||||||
|
"hashtag.feature": "Nabarmendu profilean",
|
||||||
"hashtag.follow": "Jarraitu traolari",
|
"hashtag.follow": "Jarraitu traolari",
|
||||||
|
"hashtag.mute": "Mututu #{hashtag}",
|
||||||
|
"hashtag.unfeature": "Ez nabarmendu profilean",
|
||||||
"hashtag.unfollow": "Utzi traola jarraitzeari",
|
"hashtag.unfollow": "Utzi traola jarraitzeari",
|
||||||
"hashtags.and_other": "…eta {count, plural, one {}other {# gehiago}}",
|
"hashtags.and_other": "…eta {count, plural, one {}other {# gehiago}}",
|
||||||
"hints.profiles.followers_may_be_missing": "Baliteke profil honen jarraitzaile guztiak ez agertzea.",
|
"hints.profiles.followers_may_be_missing": "Baliteke profil honen jarraitzaile guztiak ez agertzea.",
|
||||||
|
@ -371,6 +415,7 @@
|
||||||
"hints.profiles.see_more_posts": "Ikusi bidalketa gehiago {domain}-(e)n",
|
"hints.profiles.see_more_posts": "Ikusi bidalketa gehiago {domain}-(e)n",
|
||||||
"hints.threads.replies_may_be_missing": "Baliteke beste zerbitzari batzuen erantzun batzuk ez erakustea.",
|
"hints.threads.replies_may_be_missing": "Baliteke beste zerbitzari batzuen erantzun batzuk ez erakustea.",
|
||||||
"hints.threads.see_more": "Ikusi erantzun gehiago {domain}-(e)n",
|
"hints.threads.see_more": "Ikusi erantzun gehiago {domain}-(e)n",
|
||||||
|
"home.column_settings.show_quotes": "Erakutsi aipamenak",
|
||||||
"home.column_settings.show_reblogs": "Erakutsi bultzadak",
|
"home.column_settings.show_reblogs": "Erakutsi bultzadak",
|
||||||
"home.column_settings.show_replies": "Erakutsi erantzunak",
|
"home.column_settings.show_replies": "Erakutsi erantzunak",
|
||||||
"home.hide_announcements": "Ezkutatu iragarpenak",
|
"home.hide_announcements": "Ezkutatu iragarpenak",
|
||||||
|
@ -389,6 +434,11 @@
|
||||||
"ignore_notifications_modal.not_followers_title": "Jarraitzen ez zaituzten pertsonen 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?",
|
"ignore_notifications_modal.not_following_title": "Jarraitzen ez dituzun pertsonen jakinarazpenei ez ikusiarena egin?",
|
||||||
"ignore_notifications_modal.private_mentions_title": "Eskatu gabeko aipamen pribatuen jakinarazpenei ez ikusiarena egin?",
|
"ignore_notifications_modal.private_mentions_title": "Eskatu gabeko aipamen pribatuen jakinarazpenei ez ikusiarena egin?",
|
||||||
|
"info_button.label": "Laguntza",
|
||||||
|
"interaction_modal.action.favourite": "Jarraitzeko, zure kontutik atsegindu behar duzu.",
|
||||||
|
"interaction_modal.action.follow": "Jarraitzeko zure kontutik jarraitu behar duzu.",
|
||||||
|
"interaction_modal.action.reply": "Jarraitzeko zure kontutik erantzun behar duzu.",
|
||||||
|
"interaction_modal.action.vote": "Jarraitzeko, zure kontutik bozkatu behar duzu.",
|
||||||
"interaction_modal.go": "Joan",
|
"interaction_modal.go": "Joan",
|
||||||
"interaction_modal.no_account_yet": "Ez al duzu konturik oraindik?",
|
"interaction_modal.no_account_yet": "Ez al duzu konturik oraindik?",
|
||||||
"interaction_modal.on_another_server": "Beste zerbitzari batean",
|
"interaction_modal.on_another_server": "Beste zerbitzari batean",
|
||||||
|
@ -433,11 +483,14 @@
|
||||||
"keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean",
|
"keyboard_shortcuts.toggle_hidden": "testua erakustea/ezkutatzea abisu baten atzean",
|
||||||
"keyboard_shortcuts.toggle_sensitivity": "multimedia erakutsi/ezkutatzeko",
|
"keyboard_shortcuts.toggle_sensitivity": "multimedia erakutsi/ezkutatzeko",
|
||||||
"keyboard_shortcuts.toot": "Hasi bidalketa berri bat",
|
"keyboard_shortcuts.toot": "Hasi bidalketa berri bat",
|
||||||
|
"keyboard_shortcuts.translate": "bidalketa itzultzeko",
|
||||||
"keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea",
|
"keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea",
|
||||||
"keyboard_shortcuts.up": "zerrendan gora mugitzea",
|
"keyboard_shortcuts.up": "zerrendan gora mugitzea",
|
||||||
"lightbox.close": "Itxi",
|
"lightbox.close": "Itxi",
|
||||||
"lightbox.next": "Hurrengoa",
|
"lightbox.next": "Hurrengoa",
|
||||||
"lightbox.previous": "Aurrekoa",
|
"lightbox.previous": "Aurrekoa",
|
||||||
|
"lightbox.zoom_in": "Zooma egungo tamainara",
|
||||||
|
"lightbox.zoom_out": "Zooma egokitzeko",
|
||||||
"limited_account_hint.action": "Erakutsi profila hala ere",
|
"limited_account_hint.action": "Erakutsi profila hala ere",
|
||||||
"limited_account_hint.title": "Profil hau ezkutatu egin dute {domain} zerbitzariko moderatzaileek.",
|
"limited_account_hint.title": "Profil hau ezkutatu egin dute {domain} zerbitzariko moderatzaileek.",
|
||||||
"link_preview.author": "Egilea: {name}",
|
"link_preview.author": "Egilea: {name}",
|
||||||
|
@ -447,13 +500,24 @@
|
||||||
"lists.add_to_list": "Gehitu zerrendara",
|
"lists.add_to_list": "Gehitu zerrendara",
|
||||||
"lists.add_to_lists": "Gehitu {name} zerrendetara",
|
"lists.add_to_lists": "Gehitu {name} zerrendetara",
|
||||||
"lists.create": "Sortu",
|
"lists.create": "Sortu",
|
||||||
|
"lists.create_a_list_to_organize": "Sortu zerrenda berria zure Hasierako jarioa antolatzeko",
|
||||||
"lists.create_list": "Sortu zerrenda",
|
"lists.create_list": "Sortu zerrenda",
|
||||||
"lists.delete": "Ezabatu zerrenda",
|
"lists.delete": "Ezabatu zerrenda",
|
||||||
"lists.done": "Egina",
|
"lists.done": "Egina",
|
||||||
"lists.edit": "Editatu zerrenda",
|
"lists.edit": "Editatu zerrenda",
|
||||||
|
"lists.exclusive": "Ezkutatu kideak Hasieran",
|
||||||
|
"lists.exclusive_hint": "Norbait zerrenda honetan badago, ezkutatu zure Hasierako jariotik mezuak bi aldiz ez ikusteko.",
|
||||||
|
"lists.find_users_to_add": "Bilatu erabiltzaileak gehitzeko",
|
||||||
|
"lists.list_name": "Zerrenda izena",
|
||||||
|
"lists.new_list_name": "Zerrenda izen berria",
|
||||||
|
"lists.no_lists_yet": "Ez duzu zerrendarik oraindik.",
|
||||||
|
"lists.no_members_yet": "Ez duzu kiderik oraindik.",
|
||||||
|
"lists.no_results_found": "Ez da emaitzarik aurkitu.",
|
||||||
|
"lists.remove_member": "Ezabatu",
|
||||||
"lists.replies_policy.followed": "Jarraitutako edozein erabiltzaile",
|
"lists.replies_policy.followed": "Jarraitutako edozein erabiltzaile",
|
||||||
"lists.replies_policy.list": "Zerrendako kideak",
|
"lists.replies_policy.list": "Zerrendako kideak",
|
||||||
"lists.replies_policy.none": "Bat ere ez",
|
"lists.replies_policy.none": "Bat ere ez",
|
||||||
|
"lists.save": "Gorde",
|
||||||
"lists.search": "Bilatu",
|
"lists.search": "Bilatu",
|
||||||
"load_pending": "{count, plural, one {elementu berri #} other {# elementu berri}}",
|
"load_pending": "{count, plural, one {elementu berri #} other {# elementu berri}}",
|
||||||
"loading_indicator.label": "Kargatzen…",
|
"loading_indicator.label": "Kargatzen…",
|
||||||
|
@ -469,8 +533,10 @@
|
||||||
"mute_modal.you_wont_see_mentions": "Ez duzu ikusiko bera aipatzen duen argitalpenik.",
|
"mute_modal.you_wont_see_mentions": "Ez duzu ikusiko bera aipatzen duen argitalpenik.",
|
||||||
"mute_modal.you_wont_see_posts": "Zure argitalpenak ikus ditzake, baina ez dituzu bereak ikusiko.",
|
"mute_modal.you_wont_see_posts": "Zure argitalpenak ikus ditzake, baina ez dituzu bereak ikusiko.",
|
||||||
"navigation_bar.about": "Honi buruz",
|
"navigation_bar.about": "Honi buruz",
|
||||||
|
"navigation_bar.account_settings": "Pasahitza eta segurtasuna",
|
||||||
"navigation_bar.administration": "Administrazioa",
|
"navigation_bar.administration": "Administrazioa",
|
||||||
"navigation_bar.advanced_interface": "Ireki web interfaze aurreratuan",
|
"navigation_bar.advanced_interface": "Ireki web interfaze aurreratuan",
|
||||||
|
"navigation_bar.automated_deletion": "Bidalketa automatikoaren ezabaketa",
|
||||||
"navigation_bar.blocks": "Blokeatutako erabiltzaileak",
|
"navigation_bar.blocks": "Blokeatutako erabiltzaileak",
|
||||||
"navigation_bar.bookmarks": "Laster-markak",
|
"navigation_bar.bookmarks": "Laster-markak",
|
||||||
"navigation_bar.direct": "Aipamen pribatuak",
|
"navigation_bar.direct": "Aipamen pribatuak",
|
||||||
|
@ -480,13 +546,19 @@
|
||||||
"navigation_bar.follow_requests": "Jarraitzeko eskaerak",
|
"navigation_bar.follow_requests": "Jarraitzeko eskaerak",
|
||||||
"navigation_bar.followed_tags": "Jarraitutako traolak",
|
"navigation_bar.followed_tags": "Jarraitutako traolak",
|
||||||
"navigation_bar.follows_and_followers": "Jarraitutakoak eta jarraitzaileak",
|
"navigation_bar.follows_and_followers": "Jarraitutakoak eta jarraitzaileak",
|
||||||
|
"navigation_bar.import_export": "Inportazioa eta esportazioa",
|
||||||
"navigation_bar.lists": "Zerrendak",
|
"navigation_bar.lists": "Zerrendak",
|
||||||
|
"navigation_bar.live_feed_local": "Zuzeneko jarioa (lokala)",
|
||||||
|
"navigation_bar.live_feed_public": "Zuzeneko jarioa (publikoa)",
|
||||||
"navigation_bar.logout": "Amaitu saioa",
|
"navigation_bar.logout": "Amaitu saioa",
|
||||||
"navigation_bar.moderation": "Moderazioa",
|
"navigation_bar.moderation": "Moderazioa",
|
||||||
|
"navigation_bar.more": "Gehiago",
|
||||||
"navigation_bar.mutes": "Mutututako erabiltzaileak",
|
"navigation_bar.mutes": "Mutututako erabiltzaileak",
|
||||||
"navigation_bar.opened_in_classic_interface": "Argitalpenak, kontuak eta beste orri jakin batzuk lehenespenez irekitzen dira web-interfaze klasikoan.",
|
"navigation_bar.opened_in_classic_interface": "Argitalpenak, kontuak eta beste orri jakin batzuk lehenespenez irekitzen dira web-interfaze klasikoan.",
|
||||||
"navigation_bar.preferences": "Hobespenak",
|
"navigation_bar.preferences": "Hobespenak",
|
||||||
|
"navigation_bar.privacy_and_reach": "Pribatutasuna eta irismena",
|
||||||
"navigation_bar.search": "Bilatu",
|
"navigation_bar.search": "Bilatu",
|
||||||
|
"navigation_bar.search_trends": "Bilatu / Joera",
|
||||||
"not_signed_in_indicator.not_signed_in": "Baliabide honetara sarbidea izateko saioa hasi behar duzu.",
|
"not_signed_in_indicator.not_signed_in": "Baliabide honetara sarbidea izateko saioa hasi behar duzu.",
|
||||||
"notification.admin.report": "{name} erabiltzaileak {target} salatu du",
|
"notification.admin.report": "{name} erabiltzaileak {target} salatu du",
|
||||||
"notification.admin.report_account": "{name}-(e)k {target}-ren {count, plural, one {bidalketa bat} other {# bidalketa}} salatu zituen {category} delakoagatik",
|
"notification.admin.report_account": "{name}-(e)k {target}-ren {count, plural, one {bidalketa bat} other {# bidalketa}} salatu zituen {category} delakoagatik",
|
||||||
|
@ -497,6 +569,7 @@
|
||||||
"notification.admin.sign_up.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiago} other {# erabiltzaile gehiago}} erregistratu dira",
|
"notification.admin.sign_up.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiago} other {# erabiltzaile gehiago}} erregistratu dira",
|
||||||
"notification.favourite": "{name}(e)k zure bidalketa gogoko du",
|
"notification.favourite": "{name}(e)k zure bidalketa gogoko du",
|
||||||
"notification.favourite.name_and_others_with_link": "{name} eta <a>{count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}}</a> zure bidalketa gogoko dute",
|
"notification.favourite.name_and_others_with_link": "{name} eta <a>{count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}}</a> zure bidalketa gogoko dute",
|
||||||
|
"notification.favourite_pm": "{name}-ek zure aipamen pribatua gogokoetan jarri 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.follow_request.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} zu jarraitzeko eskaera egin dute",
|
"notification.follow_request.name_and_others": "{name} eta {count, plural, one {erabiltzaile # gehiagok} other {# erabiltzaile gehiagok}} zu jarraitzeko eskaera egin dute",
|
||||||
|
@ -505,6 +578,7 @@
|
||||||
"notification.label.private_reply": "Erantzun pribatua",
|
"notification.label.private_reply": "Erantzun pribatua",
|
||||||
"notification.label.reply": "Erantzuna",
|
"notification.label.reply": "Erantzuna",
|
||||||
"notification.mention": "Aipamena",
|
"notification.mention": "Aipamena",
|
||||||
|
"notification.mentioned_you": "{name}(e)k aipatu zaitu",
|
||||||
"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.",
|
||||||
|
@ -551,6 +625,7 @@
|
||||||
"notifications.column_settings.filter_bar.category": "Iragazki-barra bizkorra",
|
"notifications.column_settings.filter_bar.category": "Iragazki-barra bizkorra",
|
||||||
"notifications.column_settings.follow": "Jarraitzaile berriak:",
|
"notifications.column_settings.follow": "Jarraitzaile berriak:",
|
||||||
"notifications.column_settings.follow_request": "Jarraitzeko eskaera berriak:",
|
"notifications.column_settings.follow_request": "Jarraitzeko eskaera berriak:",
|
||||||
|
"notifications.column_settings.group": "Taldea",
|
||||||
"notifications.column_settings.mention": "Aipamenak:",
|
"notifications.column_settings.mention": "Aipamenak:",
|
||||||
"notifications.column_settings.poll": "Inkestaren emaitzak:",
|
"notifications.column_settings.poll": "Inkestaren emaitzak:",
|
||||||
"notifications.column_settings.push": "Push jakinarazpenak",
|
"notifications.column_settings.push": "Push jakinarazpenak",
|
||||||
|
@ -701,6 +776,7 @@
|
||||||
"report_notification.categories.violation": "Arau haustea",
|
"report_notification.categories.violation": "Arau haustea",
|
||||||
"report_notification.categories.violation_sentence": "arau haustea",
|
"report_notification.categories.violation_sentence": "arau haustea",
|
||||||
"report_notification.open": "Ireki salaketa",
|
"report_notification.open": "Ireki salaketa",
|
||||||
|
"search.clear": "Garbitu bilaketa",
|
||||||
"search.no_recent_searches": "Duela gutxiko bilaketarik ez",
|
"search.no_recent_searches": "Duela gutxiko bilaketarik ez",
|
||||||
"search.placeholder": "Bilatu",
|
"search.placeholder": "Bilatu",
|
||||||
"search.quick_action.account_search": "{x}-(r)ekin bat datozen profilak",
|
"search.quick_action.account_search": "{x}-(r)ekin bat datozen profilak",
|
||||||
|
@ -765,6 +841,8 @@
|
||||||
"status.mute_conversation": "Mututu elkarrizketa",
|
"status.mute_conversation": "Mututu elkarrizketa",
|
||||||
"status.open": "Hedatu bidalketa hau",
|
"status.open": "Hedatu bidalketa hau",
|
||||||
"status.pin": "Finkatu profilean",
|
"status.pin": "Finkatu profilean",
|
||||||
|
"status.quote_error.not_found": "Bidalketa hau ezin da erakutsi.",
|
||||||
|
"status.quote_error.pending_approval": "Bidalketa hau egile originalak onartzeko zain dago.",
|
||||||
"status.read_more": "Irakurri gehiago",
|
"status.read_more": "Irakurri gehiago",
|
||||||
"status.reblog": "Bultzada",
|
"status.reblog": "Bultzada",
|
||||||
"status.reblog_private": "Bultzada jatorrizko hartzaileei",
|
"status.reblog_private": "Bultzada jatorrizko hartzaileei",
|
||||||
|
@ -793,7 +871,11 @@
|
||||||
"subscribed_languages.save": "Gorde aldaketak",
|
"subscribed_languages.save": "Gorde aldaketak",
|
||||||
"subscribed_languages.target": "Aldatu {target}(e)n harpidetutako hizkuntzak",
|
"subscribed_languages.target": "Aldatu {target}(e)n harpidetutako hizkuntzak",
|
||||||
"tabs_bar.home": "Hasiera",
|
"tabs_bar.home": "Hasiera",
|
||||||
|
"tabs_bar.menu": "Menua",
|
||||||
"tabs_bar.notifications": "Jakinarazpenak",
|
"tabs_bar.notifications": "Jakinarazpenak",
|
||||||
|
"tabs_bar.publish": "Bidalketa berria",
|
||||||
|
"tabs_bar.search": "Bilatu",
|
||||||
|
"terms_of_service.title": "Zerbitzuaren baldintzak",
|
||||||
"time_remaining.days": "{number, plural, one {egun #} other {# egun}} amaitzeko",
|
"time_remaining.days": "{number, plural, one {egun #} other {# egun}} amaitzeko",
|
||||||
"time_remaining.hours": "{number, plural, one {ordu #} other {# ordu}} amaitzeko",
|
"time_remaining.hours": "{number, plural, one {ordu #} other {# ordu}} amaitzeko",
|
||||||
"time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko",
|
"time_remaining.minutes": "{number, plural, one {minutu #} other {# minutu}} amaitzeko",
|
||||||
|
@ -820,5 +902,8 @@
|
||||||
"video.fullscreen": "Pantaila osoa",
|
"video.fullscreen": "Pantaila osoa",
|
||||||
"video.hide": "Ezkutatu bideoa",
|
"video.hide": "Ezkutatu bideoa",
|
||||||
"video.pause": "Pausatu",
|
"video.pause": "Pausatu",
|
||||||
"video.play": "Jo"
|
"video.play": "Jo",
|
||||||
|
"video.unmute": "Soinua ezarri",
|
||||||
|
"video.volume_down": "Bolumena jaitsi",
|
||||||
|
"video.volume_up": "Bolumena Igo"
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "حذف",
|
"confirmations.delete_list.confirm": "حذف",
|
||||||
"confirmations.delete_list.message": "مطمئنید میخواهید این سیاهه را برای همیشه حذف کنید؟",
|
"confirmations.delete_list.message": "مطمئنید میخواهید این سیاهه را برای همیشه حذف کنید؟",
|
||||||
"confirmations.delete_list.title": "حذف سیاهه؟",
|
"confirmations.delete_list.title": "حذف سیاهه؟",
|
||||||
|
"confirmations.discard_draft.confirm": "دور انداختن و ادامه",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "ادامهٔ ویرایش",
|
||||||
|
"confirmations.discard_draft.edit.message": "ادامه دادن هر تغییری که روی فرستهٔ در حال ویرایش دادهاید را دور خواهد ریخت.",
|
||||||
|
"confirmations.discard_draft.edit.title": "دور ریختن تغییرات فرستهتان؟",
|
||||||
|
"confirmations.discard_draft.post.cancel": "از سر گیری پیشنویس",
|
||||||
|
"confirmations.discard_draft.post.message": "ادامه دادن باعث دور ریخته شدن تغییرات روی فرستهای که دارید مینویسید خواهد شد.",
|
||||||
|
"confirmations.discard_draft.post.title": "دور ریختن فرستهٔ پیشنویستان؟",
|
||||||
"confirmations.discard_edit_media.confirm": "دور انداختن",
|
"confirmations.discard_edit_media.confirm": "دور انداختن",
|
||||||
"confirmations.discard_edit_media.message": "تغییرات ذخیره نشدهای در توضیحات یا پیشنمایش رسانه دارید. همگی نادیده گرفته شوند؟",
|
"confirmations.discard_edit_media.message": "تغییرات ذخیره نشدهای در توضیحات یا پیشنمایش رسانه دارید. همگی نادیده گرفته شوند؟",
|
||||||
"confirmations.follow_to_list.confirm": "پیگیری و افزودن به سیاهه",
|
"confirmations.follow_to_list.confirm": "پیگیری و افزودن به سیاهه",
|
||||||
|
@ -557,6 +564,8 @@
|
||||||
"navigation_bar.follows_and_followers": "پیگرفتگان و پیگیرندگان",
|
"navigation_bar.follows_and_followers": "پیگرفتگان و پیگیرندگان",
|
||||||
"navigation_bar.import_export": "درونریزی و برونبری",
|
"navigation_bar.import_export": "درونریزی و برونبری",
|
||||||
"navigation_bar.lists": "سیاههها",
|
"navigation_bar.lists": "سیاههها",
|
||||||
|
"navigation_bar.live_feed_local": "خوراک زنده (محلی)",
|
||||||
|
"navigation_bar.live_feed_public": "خوراک زنده (عمومی)",
|
||||||
"navigation_bar.logout": "خروج",
|
"navigation_bar.logout": "خروج",
|
||||||
"navigation_bar.moderation": "نظارت",
|
"navigation_bar.moderation": "نظارت",
|
||||||
"navigation_bar.more": "بیشتر",
|
"navigation_bar.more": "بیشتر",
|
||||||
|
@ -566,6 +575,10 @@
|
||||||
"navigation_bar.privacy_and_reach": "محرمانگی و دسترسی",
|
"navigation_bar.privacy_and_reach": "محرمانگی و دسترسی",
|
||||||
"navigation_bar.search": "جستوجو",
|
"navigation_bar.search": "جستوجو",
|
||||||
"navigation_bar.search_trends": "جستجو \\ پرطرفدار",
|
"navigation_bar.search_trends": "جستجو \\ پرطرفدار",
|
||||||
|
"navigation_panel.collapse_followed_tags": "جمع کردن فهرست برچسبهای پیگرفته",
|
||||||
|
"navigation_panel.collapse_lists": "جمع کردن فهرست سیاهه",
|
||||||
|
"navigation_panel.expand_followed_tags": "گسترش فهرست برچسبهای پیگرفته",
|
||||||
|
"navigation_panel.expand_lists": "گسترش فهرست سیاهه",
|
||||||
"not_signed_in_indicator.not_signed_in": "برای دسترسی به این منبع باید وارد شوید.",
|
"not_signed_in_indicator.not_signed_in": "برای دسترسی به این منبع باید وارد شوید.",
|
||||||
"notification.admin.report": "{name}، {target} را گزارش داد",
|
"notification.admin.report": "{name}، {target} را گزارش داد",
|
||||||
"notification.admin.report_account": "{name} {count, plural, one {یک پست} other {پست}} از {target} برای {category} را گزارش داد",
|
"notification.admin.report_account": "{name} {count, plural, one {یک پست} other {پست}} از {target} برای {category} را گزارش داد",
|
||||||
|
@ -792,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "تخطّی از قانون",
|
"report_notification.categories.violation": "تخطّی از قانون",
|
||||||
"report_notification.categories.violation_sentence": "تخطّی از قانون",
|
"report_notification.categories.violation_sentence": "تخطّی از قانون",
|
||||||
"report_notification.open": "گشودن گزارش",
|
"report_notification.open": "گشودن گزارش",
|
||||||
|
"search.clear": "پاکسازی جستوجو",
|
||||||
"search.no_recent_searches": "جستوجوی اخیری نیست",
|
"search.no_recent_searches": "جستوجوی اخیری نیست",
|
||||||
"search.placeholder": "جستوجو",
|
"search.placeholder": "جستوجو",
|
||||||
"search.quick_action.account_search": "نمایههای جور با {x}",
|
"search.quick_action.account_search": "نمایههای جور با {x}",
|
||||||
|
@ -858,6 +872,12 @@
|
||||||
"status.mute_conversation": "خموشاندن گفتوگو",
|
"status.mute_conversation": "خموشاندن گفتوگو",
|
||||||
"status.open": "گسترش این فرسته",
|
"status.open": "گسترش این فرسته",
|
||||||
"status.pin": "سنجاق به نمایه",
|
"status.pin": "سنجاق به نمایه",
|
||||||
|
"status.quote_error.filtered": "نهفته بنا بر یکی از پالایههایتان",
|
||||||
|
"status.quote_error.not_found": "این فرسته قابل نمایش نیست.",
|
||||||
|
"status.quote_error.pending_approval": "این فرسته منظر تأیید نگارندهٔ اصلی است.",
|
||||||
|
"status.quote_error.rejected": "از آنجا که نگارندهٔ اصلی فرسته اجازهٔ نقل قولش را نمیدهد این فرسته قابل نمایش نیست.",
|
||||||
|
"status.quote_error.removed": "این فرسته به دست نگارندهاش برداشته شده.",
|
||||||
|
"status.quote_error.unauthorized": "از آنجا که اجازهٔ دیدن این فرسته را ندارید قابل نمایش نیست.",
|
||||||
"status.quote_post_author": "فرسته توسط {name}",
|
"status.quote_post_author": "فرسته توسط {name}",
|
||||||
"status.read_more": "بیشتر بخوانید",
|
"status.read_more": "بیشتر بخوانید",
|
||||||
"status.reblog": "تقویت",
|
"status.reblog": "تقویت",
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"about.domain_blocks.silenced.title": "Limité",
|
"about.domain_blocks.silenced.title": "Limité",
|
||||||
"about.domain_blocks.suspended.explanation": "Aucune donnée de ce serveur ne sera traitée, stockée ou échangée, rendant toute interaction ou communication avec des utilisateurs de ce serveur impossible.",
|
"about.domain_blocks.suspended.explanation": "Aucune donnée de ce serveur ne sera traitée, stockée ou échangée, rendant toute interaction ou communication avec des utilisateurs de ce serveur impossible.",
|
||||||
"about.domain_blocks.suspended.title": "Suspendu",
|
"about.domain_blocks.suspended.title": "Suspendu",
|
||||||
|
"about.language_label": "Langue",
|
||||||
"about.not_available": "Cette information n'a pas été rendue disponible sur ce serveur.",
|
"about.not_available": "Cette information n'a pas été rendue disponible sur ce serveur.",
|
||||||
"about.powered_by": "Réseau social décentralisé propulsé par {mastodon}",
|
"about.powered_by": "Réseau social décentralisé propulsé par {mastodon}",
|
||||||
"about.rules": "Règles du serveur",
|
"about.rules": "Règles du serveur",
|
||||||
|
@ -20,14 +21,20 @@
|
||||||
"account.block_domain": "Bloquer le domaine {domain}",
|
"account.block_domain": "Bloquer le domaine {domain}",
|
||||||
"account.block_short": "Bloquer",
|
"account.block_short": "Bloquer",
|
||||||
"account.blocked": "Bloqué·e",
|
"account.blocked": "Bloqué·e",
|
||||||
|
"account.blocking": "Bloquer",
|
||||||
"account.cancel_follow_request": "Retirer cette demande d'abonnement",
|
"account.cancel_follow_request": "Retirer cette demande d'abonnement",
|
||||||
"account.copy": "Copier le lien vers le profil",
|
"account.copy": "Copier le lien vers le profil",
|
||||||
"account.direct": "Mention privée @{name}",
|
"account.direct": "Mention privée @{name}",
|
||||||
"account.disable_notifications": "Ne plus me notifier quand @{name} publie",
|
"account.disable_notifications": "Ne plus me notifier quand @{name} publie",
|
||||||
|
"account.domain_blocking": "Bloquer domaine",
|
||||||
"account.edit_profile": "Modifier le profil",
|
"account.edit_profile": "Modifier le profil",
|
||||||
"account.enable_notifications": "Me notifier quand @{name} publie",
|
"account.enable_notifications": "Me notifier quand @{name} publie",
|
||||||
"account.endorse": "Inclure sur profil",
|
"account.endorse": "Inclure sur profil",
|
||||||
|
"account.familiar_followers_many": "Suivi par {name1},{name2}, et {othersCount, plural,one {une personne connue} other {# autres personnel connues}}",
|
||||||
|
"account.familiar_followers_one": "Suivi par {name1}",
|
||||||
|
"account.familiar_followers_two": "Suivi par {name1} et {name2}",
|
||||||
"account.featured": "En vedette",
|
"account.featured": "En vedette",
|
||||||
|
"account.featured.accounts": "Profiles",
|
||||||
"account.featured.hashtags": "Hashtags",
|
"account.featured.hashtags": "Hashtags",
|
||||||
"account.featured_tags.last_status_at": "Dernière publication {date}",
|
"account.featured_tags.last_status_at": "Dernière publication {date}",
|
||||||
"account.featured_tags.last_status_never": "Aucune publication",
|
"account.featured_tags.last_status_never": "Aucune publication",
|
||||||
|
@ -36,9 +43,11 @@
|
||||||
"account.followers": "abonné·e·s",
|
"account.followers": "abonné·e·s",
|
||||||
"account.followers.empty": "Personne ne suit ce compte pour l'instant.",
|
"account.followers.empty": "Personne ne suit ce compte pour l'instant.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}",
|
"account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}",
|
||||||
|
"account.followers_you_know_counter": "Vous connaissez {counter}",
|
||||||
"account.following": "Abonné·e",
|
"account.following": "Abonné·e",
|
||||||
"account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}",
|
"account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}",
|
||||||
"account.follows.empty": "Ce compte ne suit personne présentement.",
|
"account.follows.empty": "Ce compte ne suit personne présentement.",
|
||||||
|
"account.follows_you": "Vous suit",
|
||||||
"account.go_to_profile": "Voir ce profil",
|
"account.go_to_profile": "Voir ce profil",
|
||||||
"account.hide_reblogs": "Masquer les boosts de @{name}",
|
"account.hide_reblogs": "Masquer les boosts de @{name}",
|
||||||
"account.in_memoriam": "En souvenir de",
|
"account.in_memoriam": "En souvenir de",
|
||||||
|
@ -53,13 +62,17 @@
|
||||||
"account.mute_notifications_short": "Rendre les notifications muettes",
|
"account.mute_notifications_short": "Rendre les notifications muettes",
|
||||||
"account.mute_short": "Rendre muet",
|
"account.mute_short": "Rendre muet",
|
||||||
"account.muted": "Masqué·e",
|
"account.muted": "Masqué·e",
|
||||||
|
"account.muting": "Sourdine",
|
||||||
|
"account.mutual": "Vous vous suivez mutuellement",
|
||||||
"account.no_bio": "Description manquante.",
|
"account.no_bio": "Description manquante.",
|
||||||
"account.open_original_page": "Ouvrir la page d'origine",
|
"account.open_original_page": "Ouvrir la page d'origine",
|
||||||
"account.posts": "Publications",
|
"account.posts": "Publications",
|
||||||
"account.posts_with_replies": "Publications et réponses",
|
"account.posts_with_replies": "Publications et réponses",
|
||||||
|
"account.remove_from_followers": "Retirer {name} des suiveurs",
|
||||||
"account.report": "Signaler @{name}",
|
"account.report": "Signaler @{name}",
|
||||||
"account.requested": "En attente d’approbation. Cliquez pour annuler la demande",
|
"account.requested": "En attente d’approbation. Cliquez pour annuler la demande",
|
||||||
"account.requested_follow": "{name} a demandé à vous suivre",
|
"account.requested_follow": "{name} a demandé à vous suivre",
|
||||||
|
"account.requests_to_follow_you": "Demande a vous suivre",
|
||||||
"account.share": "Partager le profil de @{name}",
|
"account.share": "Partager le profil de @{name}",
|
||||||
"account.show_reblogs": "Afficher les boosts de @{name}",
|
"account.show_reblogs": "Afficher les boosts de @{name}",
|
||||||
"account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
"account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
||||||
|
@ -111,7 +124,7 @@
|
||||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé",
|
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé",
|
||||||
"annual_report.summary.most_used_hashtag.none": "Aucun",
|
"annual_report.summary.most_used_hashtag.none": "Aucun",
|
||||||
"annual_report.summary.new_posts.new_posts": "nouveaux messages",
|
"annual_report.summary.new_posts.new_posts": "nouveaux messages",
|
||||||
"annual_report.summary.percentile.text": "<topLabel>Cela vous place dans le top</topLabel><pourcentage></percentage><bottomLabel>des utilisateurs de {domain}.</bottomLabel>",
|
"annual_report.summary.percentile.text": "<topLabel>Cela vous place dans le top</topLabel><percentage></percentage><bottomLabel>des utilisateurs de {domain}.</bottomLabel>",
|
||||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.",
|
"annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.",
|
||||||
"annual_report.summary.thanks": "Merci de faire partie de Mastodon!",
|
"annual_report.summary.thanks": "Merci de faire partie de Mastodon!",
|
||||||
"attachments_list.unprocessed": "(non traité)",
|
"attachments_list.unprocessed": "(non traité)",
|
||||||
|
@ -206,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Supprimer",
|
"confirmations.delete_list.confirm": "Supprimer",
|
||||||
"confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste?",
|
"confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste?",
|
||||||
"confirmations.delete_list.title": "Supprimer la liste ?",
|
"confirmations.delete_list.title": "Supprimer la liste ?",
|
||||||
|
"confirmations.discard_draft.confirm": "Effacer et continuer",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Retour vers l'éditeur",
|
||||||
|
"confirmations.discard_draft.edit.message": "Continued va perdre les changements que vous avez faits dans le message courant.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Jeter les changements faits au message?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Retour au brouillon",
|
||||||
|
"confirmations.discard_draft.post.message": "En continuant, vous perdez le message que vous êtes en train d'écrire.",
|
||||||
|
"confirmations.discard_draft.post.title": "Jeter le brouillon de message?",
|
||||||
"confirmations.discard_edit_media.confirm": "Rejeter",
|
"confirmations.discard_edit_media.confirm": "Rejeter",
|
||||||
"confirmations.discard_edit_media.message": "Vous avez des modifications non enregistrées de la description ou de l'aperçu du média, voulez-vous quand même les supprimer?",
|
"confirmations.discard_edit_media.message": "Vous avez des modifications non enregistrées de la description ou de l'aperçu du média, voulez-vous quand même les supprimer?",
|
||||||
"confirmations.follow_to_list.confirm": "Suivre et ajouter à la liste",
|
"confirmations.follow_to_list.confirm": "Suivre et ajouter à la liste",
|
||||||
|
@ -222,6 +242,9 @@
|
||||||
"confirmations.redraft.confirm": "Supprimer et réécrire",
|
"confirmations.redraft.confirm": "Supprimer et réécrire",
|
||||||
"confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer cette publication pour la réécrire? Ses ses mises en favori et boosts seront perdus et ses réponses seront orphelines.",
|
"confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer cette publication pour la réécrire? Ses ses mises en favori et boosts seront perdus et ses réponses seront orphelines.",
|
||||||
"confirmations.redraft.title": "Supprimer et réécrire le message ?",
|
"confirmations.redraft.title": "Supprimer et réécrire le message ?",
|
||||||
|
"confirmations.remove_from_followers.confirm": "Supprimer l'abonné·e",
|
||||||
|
"confirmations.remove_from_followers.message": "{name} cessera de vous suivre. Êtes-vous sûr de vouloir continuer ?",
|
||||||
|
"confirmations.remove_from_followers.title": "Supprimer l'abonné·e ?",
|
||||||
"confirmations.unfollow.confirm": "Ne plus suivre",
|
"confirmations.unfollow.confirm": "Ne plus suivre",
|
||||||
"confirmations.unfollow.message": "Voulez-vous vraiment arrêter de suivre {name}?",
|
"confirmations.unfollow.message": "Voulez-vous vraiment arrêter de suivre {name}?",
|
||||||
"confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?",
|
"confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?",
|
||||||
|
@ -283,6 +306,9 @@
|
||||||
"emoji_button.search_results": "Résultats",
|
"emoji_button.search_results": "Résultats",
|
||||||
"emoji_button.symbols": "Symboles",
|
"emoji_button.symbols": "Symboles",
|
||||||
"emoji_button.travel": "Voyage et lieux",
|
"emoji_button.travel": "Voyage et lieux",
|
||||||
|
"empty_column.account_featured.me": "Vous n'avez pas encore mis de contenu en avant. Saviez-vous que vous pouviez mettre en avant les hashtags que vous utilisez le plus, et même les comptes de vos amis sur votre profil ?",
|
||||||
|
"empty_column.account_featured.other": "{acct} n'a pas encore mis de contenu en avant. Saviez-vous que vous pouviez mettre en avant les hashtags que vous utilisez le plus, et même les comptes de vos amis sur votre profil ?",
|
||||||
|
"empty_column.account_featured_other.unknown": "Ce compte n'a mis aucun contenu en avant pour l'instant.",
|
||||||
"empty_column.account_hides_collections": "Cet utilisateur·ice préfère ne pas rendre publiques ces informations",
|
"empty_column.account_hides_collections": "Cet utilisateur·ice préfère ne pas rendre publiques ces informations",
|
||||||
"empty_column.account_suspended": "Compte suspendu",
|
"empty_column.account_suspended": "Compte suspendu",
|
||||||
"empty_column.account_timeline": "Aucune publication ici!",
|
"empty_column.account_timeline": "Aucune publication ici!",
|
||||||
|
@ -311,9 +337,14 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
|
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
|
||||||
"errors.unexpected_crash.report_issue": "Signaler un problème",
|
"errors.unexpected_crash.report_issue": "Signaler un problème",
|
||||||
"explore.suggested_follows": "Personnes",
|
"explore.suggested_follows": "Personnes",
|
||||||
|
"explore.title": "Tendances",
|
||||||
"explore.trending_links": "Nouvelles",
|
"explore.trending_links": "Nouvelles",
|
||||||
"explore.trending_statuses": "Messages",
|
"explore.trending_statuses": "Messages",
|
||||||
"explore.trending_tags": "Hashtags",
|
"explore.trending_tags": "Hashtags",
|
||||||
|
"featured_carousel.next": "Suivant",
|
||||||
|
"featured_carousel.post": "Poste",
|
||||||
|
"featured_carousel.previous": "Précédent",
|
||||||
|
"featured_carousel.slide": "{index} de {total}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "Cette catégorie de filtre ne s'applique pas au contexte dans lequel vous avez accédé à cette publication. Si vous voulez que la publication soit filtrée dans ce contexte également, vous devrez modifier le filtre.",
|
"filter_modal.added.context_mismatch_explanation": "Cette catégorie de filtre ne s'applique pas au contexte dans lequel vous avez accédé à cette publication. Si vous voulez que la publication soit filtrée dans ce contexte également, vous devrez modifier le filtre.",
|
||||||
"filter_modal.added.context_mismatch_title": "Incompatibilité du contexte!",
|
"filter_modal.added.context_mismatch_title": "Incompatibilité du contexte!",
|
||||||
"filter_modal.added.expired_explanation": "Cette catégorie de filtre a expiré, vous devrez modifier la date d'expiration pour qu'elle soit appliquée.",
|
"filter_modal.added.expired_explanation": "Cette catégorie de filtre a expiré, vous devrez modifier la date d'expiration pour qu'elle soit appliquée.",
|
||||||
|
@ -366,6 +397,8 @@
|
||||||
"generic.saved": "Sauvegardé",
|
"generic.saved": "Sauvegardé",
|
||||||
"getting_started.heading": "Pour commencer",
|
"getting_started.heading": "Pour commencer",
|
||||||
"hashtag.admin_moderation": "Ouvrir l'interface de modération pour #{name}",
|
"hashtag.admin_moderation": "Ouvrir l'interface de modération pour #{name}",
|
||||||
|
"hashtag.browse": "Parcourir les posts dans #{hashtag}",
|
||||||
|
"hashtag.browse_from_account": "Parcourir les posts de @{name} dans #{hashtag}",
|
||||||
"hashtag.column_header.tag_mode.all": "et {additional}",
|
"hashtag.column_header.tag_mode.all": "et {additional}",
|
||||||
"hashtag.column_header.tag_mode.any": "ou {additional}",
|
"hashtag.column_header.tag_mode.any": "ou {additional}",
|
||||||
"hashtag.column_header.tag_mode.none": "sans {additional}",
|
"hashtag.column_header.tag_mode.none": "sans {additional}",
|
||||||
|
@ -378,7 +411,10 @@
|
||||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
|
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
"hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourd’hui",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourd’hui",
|
||||||
|
"hashtag.feature": "Mettre en avant sur votre profil",
|
||||||
"hashtag.follow": "Suivre ce hashtag",
|
"hashtag.follow": "Suivre ce hashtag",
|
||||||
|
"hashtag.mute": "Mettre #{hashtag} en sourdine",
|
||||||
|
"hashtag.unfeature": "Ne plus mettre en avant sur votre profil",
|
||||||
"hashtag.unfollow": "Ne plus suivre ce hashtag",
|
"hashtag.unfollow": "Ne plus suivre ce hashtag",
|
||||||
"hashtags.and_other": "…et {count, plural, other {# de plus}}",
|
"hashtags.and_other": "…et {count, plural, other {# de plus}}",
|
||||||
"hints.profiles.followers_may_be_missing": "Les abonné·e·s à ce profil peuvent être manquant·e·s.",
|
"hints.profiles.followers_may_be_missing": "Les abonné·e·s à ce profil peuvent être manquant·e·s.",
|
||||||
|
@ -389,6 +425,7 @@
|
||||||
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
|
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
|
||||||
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
|
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
|
||||||
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
|
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
|
||||||
|
"home.column_settings.show_quotes": "Afficher les citations",
|
||||||
"home.column_settings.show_reblogs": "Afficher boosts",
|
"home.column_settings.show_reblogs": "Afficher boosts",
|
||||||
"home.column_settings.show_replies": "Afficher réponses",
|
"home.column_settings.show_replies": "Afficher réponses",
|
||||||
"home.hide_announcements": "Masquer les annonces",
|
"home.hide_announcements": "Masquer les annonces",
|
||||||
|
@ -511,8 +548,10 @@
|
||||||
"mute_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.",
|
"mute_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.",
|
||||||
"mute_modal.you_wont_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.",
|
"mute_modal.you_wont_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.",
|
||||||
"navigation_bar.about": "À propos",
|
"navigation_bar.about": "À propos",
|
||||||
|
"navigation_bar.account_settings": "Mot de passe et sécurité",
|
||||||
"navigation_bar.administration": "Administration",
|
"navigation_bar.administration": "Administration",
|
||||||
"navigation_bar.advanced_interface": "Ouvrir dans l’interface avancée",
|
"navigation_bar.advanced_interface": "Ouvrir dans l’interface avancée",
|
||||||
|
"navigation_bar.automated_deletion": "Suppression automatique du message",
|
||||||
"navigation_bar.blocks": "Comptes bloqués",
|
"navigation_bar.blocks": "Comptes bloqués",
|
||||||
"navigation_bar.bookmarks": "Signets",
|
"navigation_bar.bookmarks": "Signets",
|
||||||
"navigation_bar.direct": "Mention privée",
|
"navigation_bar.direct": "Mention privée",
|
||||||
|
@ -522,13 +561,19 @@
|
||||||
"navigation_bar.follow_requests": "Demandes d'abonnements",
|
"navigation_bar.follow_requests": "Demandes d'abonnements",
|
||||||
"navigation_bar.followed_tags": "Hashtags suivis",
|
"navigation_bar.followed_tags": "Hashtags suivis",
|
||||||
"navigation_bar.follows_and_followers": "Abonnements et abonnés",
|
"navigation_bar.follows_and_followers": "Abonnements et abonnés",
|
||||||
|
"navigation_bar.import_export": "Import et export",
|
||||||
"navigation_bar.lists": "Listes",
|
"navigation_bar.lists": "Listes",
|
||||||
|
"navigation_bar.live_feed_local": "Flux en direct (local)",
|
||||||
|
"navigation_bar.live_feed_public": "Flux en direct (public)",
|
||||||
"navigation_bar.logout": "Se déconnecter",
|
"navigation_bar.logout": "Se déconnecter",
|
||||||
"navigation_bar.moderation": "Modération",
|
"navigation_bar.moderation": "Modération",
|
||||||
|
"navigation_bar.more": "Plus",
|
||||||
"navigation_bar.mutes": "Utilisateurs masqués",
|
"navigation_bar.mutes": "Utilisateurs masqués",
|
||||||
"navigation_bar.opened_in_classic_interface": "Les messages, les comptes et les pages spécifiques sont ouvertes dans l’interface classique.",
|
"navigation_bar.opened_in_classic_interface": "Les messages, les comptes et les pages spécifiques sont ouvertes dans l’interface classique.",
|
||||||
"navigation_bar.preferences": "Préférences",
|
"navigation_bar.preferences": "Préférences",
|
||||||
|
"navigation_bar.privacy_and_reach": "Vie privée et visibilité",
|
||||||
"navigation_bar.search": "Rechercher",
|
"navigation_bar.search": "Rechercher",
|
||||||
|
"navigation_bar.search_trends": "Recherche / Tendance",
|
||||||
"not_signed_in_indicator.not_signed_in": "Vous devez vous connecter pour accéder à cette ressource.",
|
"not_signed_in_indicator.not_signed_in": "Vous devez vous connecter pour accéder à cette ressource.",
|
||||||
"notification.admin.report": "{name} a signalé {target}",
|
"notification.admin.report": "{name} a signalé {target}",
|
||||||
"notification.admin.report_account": "{name} a signalé {count, plural, one {un message} other {# messages}} de {target} pour {category}",
|
"notification.admin.report_account": "{name} a signalé {count, plural, one {un message} other {# messages}} de {target} pour {category}",
|
||||||
|
@ -821,6 +866,9 @@
|
||||||
"status.mute_conversation": "Masquer la conversation",
|
"status.mute_conversation": "Masquer la conversation",
|
||||||
"status.open": "Afficher la publication entière",
|
"status.open": "Afficher la publication entière",
|
||||||
"status.pin": "Épingler sur profil",
|
"status.pin": "Épingler sur profil",
|
||||||
|
"status.quote_error.removed": "Ce message a été retiré par son auteur·ice.",
|
||||||
|
"status.quote_error.unauthorized": "Ce message ne peut pas être affiché car vous n'êtes pas autorisé·e à le voir.",
|
||||||
|
"status.quote_post_author": "Message par {name}",
|
||||||
"status.read_more": "En savoir plus",
|
"status.read_more": "En savoir plus",
|
||||||
"status.reblog": "Booster",
|
"status.reblog": "Booster",
|
||||||
"status.reblog_private": "Booster avec visibilité originale",
|
"status.reblog_private": "Booster avec visibilité originale",
|
||||||
|
@ -850,7 +898,10 @@
|
||||||
"subscribed_languages.save": "Enregistrer les modifications",
|
"subscribed_languages.save": "Enregistrer les modifications",
|
||||||
"subscribed_languages.target": "Changer les langues abonnées pour {target}",
|
"subscribed_languages.target": "Changer les langues abonnées pour {target}",
|
||||||
"tabs_bar.home": "Accueil",
|
"tabs_bar.home": "Accueil",
|
||||||
|
"tabs_bar.menu": "Menu",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
|
"tabs_bar.publish": "Nouveau message",
|
||||||
|
"tabs_bar.search": "Chercher",
|
||||||
"terms_of_service.effective_as_of": "En vigueur à compter du {date}",
|
"terms_of_service.effective_as_of": "En vigueur à compter du {date}",
|
||||||
"terms_of_service.title": "Conditions d'utilisation",
|
"terms_of_service.title": "Conditions d'utilisation",
|
||||||
"terms_of_service.upcoming_changes_on": "Modifications à venir le {date}",
|
"terms_of_service.upcoming_changes_on": "Modifications à venir le {date}",
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"about.domain_blocks.silenced.title": "Limité",
|
"about.domain_blocks.silenced.title": "Limité",
|
||||||
"about.domain_blocks.suspended.explanation": "Aucune donnée de ce serveur ne sera traitée, enregistrée ou échangée, rendant impossible toute interaction ou communication avec les comptes de ce serveur.",
|
"about.domain_blocks.suspended.explanation": "Aucune donnée de ce serveur ne sera traitée, enregistrée ou échangée, rendant impossible toute interaction ou communication avec les comptes de ce serveur.",
|
||||||
"about.domain_blocks.suspended.title": "Suspendu",
|
"about.domain_blocks.suspended.title": "Suspendu",
|
||||||
|
"about.language_label": "Langue",
|
||||||
"about.not_available": "Cette information n'a pas été rendue disponible sur ce serveur.",
|
"about.not_available": "Cette information n'a pas été rendue disponible sur ce serveur.",
|
||||||
"about.powered_by": "Réseau social décentralisé propulsé par {mastodon}",
|
"about.powered_by": "Réseau social décentralisé propulsé par {mastodon}",
|
||||||
"about.rules": "Règles du serveur",
|
"about.rules": "Règles du serveur",
|
||||||
|
@ -20,14 +21,20 @@
|
||||||
"account.block_domain": "Bloquer le domaine {domain}",
|
"account.block_domain": "Bloquer le domaine {domain}",
|
||||||
"account.block_short": "Bloquer",
|
"account.block_short": "Bloquer",
|
||||||
"account.blocked": "Bloqué·e",
|
"account.blocked": "Bloqué·e",
|
||||||
|
"account.blocking": "Bloquer",
|
||||||
"account.cancel_follow_request": "Annuler l'abonnement",
|
"account.cancel_follow_request": "Annuler l'abonnement",
|
||||||
"account.copy": "Copier le lien vers le profil",
|
"account.copy": "Copier le lien vers le profil",
|
||||||
"account.direct": "Mention privée @{name}",
|
"account.direct": "Mention privée @{name}",
|
||||||
"account.disable_notifications": "Ne plus me notifier quand @{name} publie quelque chose",
|
"account.disable_notifications": "Ne plus me notifier quand @{name} publie quelque chose",
|
||||||
|
"account.domain_blocking": "Bloquer domaine",
|
||||||
"account.edit_profile": "Modifier le profil",
|
"account.edit_profile": "Modifier le profil",
|
||||||
"account.enable_notifications": "Me notifier quand @{name} publie quelque chose",
|
"account.enable_notifications": "Me notifier quand @{name} publie quelque chose",
|
||||||
"account.endorse": "Recommander sur votre profil",
|
"account.endorse": "Recommander sur votre profil",
|
||||||
|
"account.familiar_followers_many": "Suivi par {name1},{name2}, et {othersCount, plural,one {une personne connue} other {# autres personnel connues}}",
|
||||||
|
"account.familiar_followers_one": "Suivi par {name1}",
|
||||||
|
"account.familiar_followers_two": "Suivi par {name1} et {name2}",
|
||||||
"account.featured": "En vedette",
|
"account.featured": "En vedette",
|
||||||
|
"account.featured.accounts": "Profiles",
|
||||||
"account.featured.hashtags": "Hashtags",
|
"account.featured.hashtags": "Hashtags",
|
||||||
"account.featured_tags.last_status_at": "Dernier message le {date}",
|
"account.featured_tags.last_status_at": "Dernier message le {date}",
|
||||||
"account.featured_tags.last_status_never": "Aucun message",
|
"account.featured_tags.last_status_never": "Aucun message",
|
||||||
|
@ -36,9 +43,11 @@
|
||||||
"account.followers": "Abonné·e·s",
|
"account.followers": "Abonné·e·s",
|
||||||
"account.followers.empty": "Personne ne suit cet·te utilisateur·rice pour l’instant.",
|
"account.followers.empty": "Personne ne suit cet·te utilisateur·rice pour l’instant.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}",
|
"account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}",
|
||||||
|
"account.followers_you_know_counter": "Vous connaissez {counter}",
|
||||||
"account.following": "Abonnements",
|
"account.following": "Abonnements",
|
||||||
"account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}",
|
"account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}",
|
||||||
"account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.",
|
"account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.",
|
||||||
|
"account.follows_you": "Vous suit",
|
||||||
"account.go_to_profile": "Voir le profil",
|
"account.go_to_profile": "Voir le profil",
|
||||||
"account.hide_reblogs": "Masquer les partages de @{name}",
|
"account.hide_reblogs": "Masquer les partages de @{name}",
|
||||||
"account.in_memoriam": "En mémoire de.",
|
"account.in_memoriam": "En mémoire de.",
|
||||||
|
@ -53,13 +62,17 @@
|
||||||
"account.mute_notifications_short": "Désactiver les notifications",
|
"account.mute_notifications_short": "Désactiver les notifications",
|
||||||
"account.mute_short": "Mettre en sourdine",
|
"account.mute_short": "Mettre en sourdine",
|
||||||
"account.muted": "Masqué·e",
|
"account.muted": "Masqué·e",
|
||||||
|
"account.muting": "Sourdine",
|
||||||
|
"account.mutual": "Vous vous suivez mutuellement",
|
||||||
"account.no_bio": "Aucune description fournie.",
|
"account.no_bio": "Aucune description fournie.",
|
||||||
"account.open_original_page": "Ouvrir la page d'origine",
|
"account.open_original_page": "Ouvrir la page d'origine",
|
||||||
"account.posts": "Messages",
|
"account.posts": "Messages",
|
||||||
"account.posts_with_replies": "Messages et réponses",
|
"account.posts_with_replies": "Messages et réponses",
|
||||||
|
"account.remove_from_followers": "Retirer {name} des suiveurs",
|
||||||
"account.report": "Signaler @{name}",
|
"account.report": "Signaler @{name}",
|
||||||
"account.requested": "En attente d’approbation. Cliquez pour annuler la demande",
|
"account.requested": "En attente d’approbation. Cliquez pour annuler la demande",
|
||||||
"account.requested_follow": "{name} a demandé à vous suivre",
|
"account.requested_follow": "{name} a demandé à vous suivre",
|
||||||
|
"account.requests_to_follow_you": "Demande a vous suivre",
|
||||||
"account.share": "Partager le profil de @{name}",
|
"account.share": "Partager le profil de @{name}",
|
||||||
"account.show_reblogs": "Afficher les partages de @{name}",
|
"account.show_reblogs": "Afficher les partages de @{name}",
|
||||||
"account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
"account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
||||||
|
@ -111,7 +124,7 @@
|
||||||
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé",
|
"annual_report.summary.most_used_hashtag.most_used_hashtag": "hashtag le plus utilisé",
|
||||||
"annual_report.summary.most_used_hashtag.none": "Aucun",
|
"annual_report.summary.most_used_hashtag.none": "Aucun",
|
||||||
"annual_report.summary.new_posts.new_posts": "nouveaux messages",
|
"annual_report.summary.new_posts.new_posts": "nouveaux messages",
|
||||||
"annual_report.summary.percentile.text": "<topLabel>Cela vous place dans le top</topLabel><pourcentage></percentage><bottomLabel>des utilisateurs de {domain}.</bottomLabel>",
|
"annual_report.summary.percentile.text": "<topLabel>Cela vous place dans le top</topLabel><percentage></percentage><bottomLabel>des utilisateurs de {domain}.</bottomLabel>",
|
||||||
"annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.",
|
"annual_report.summary.percentile.we_wont_tell_bernie": "Nous ne le dirons pas à Bernie.",
|
||||||
"annual_report.summary.thanks": "Merci de faire partie de Mastodon!",
|
"annual_report.summary.thanks": "Merci de faire partie de Mastodon!",
|
||||||
"attachments_list.unprocessed": "(non traité)",
|
"attachments_list.unprocessed": "(non traité)",
|
||||||
|
@ -175,7 +188,7 @@
|
||||||
"community.column_settings.media_only": "Média uniquement",
|
"community.column_settings.media_only": "Média uniquement",
|
||||||
"community.column_settings.remote_only": "Distant seulement",
|
"community.column_settings.remote_only": "Distant seulement",
|
||||||
"compose.language.change": "Changer de langue",
|
"compose.language.change": "Changer de langue",
|
||||||
"compose.language.search": "Rechercher des langues …",
|
"compose.language.search": "Rechercher des langues...",
|
||||||
"compose.published.body": "Message Publié.",
|
"compose.published.body": "Message Publié.",
|
||||||
"compose.published.open": "Ouvrir",
|
"compose.published.open": "Ouvrir",
|
||||||
"compose.saved.body": "Message enregistré.",
|
"compose.saved.body": "Message enregistré.",
|
||||||
|
@ -206,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Supprimer",
|
"confirmations.delete_list.confirm": "Supprimer",
|
||||||
"confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?",
|
"confirmations.delete_list.message": "Voulez-vous vraiment supprimer définitivement cette liste ?",
|
||||||
"confirmations.delete_list.title": "Supprimer la liste ?",
|
"confirmations.delete_list.title": "Supprimer la liste ?",
|
||||||
|
"confirmations.discard_draft.confirm": "Effacer et continuer",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Retour vers l'éditeur",
|
||||||
|
"confirmations.discard_draft.edit.message": "Continued va perdre les changements que vous avez faits dans le message courant.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Jeter les changements faits au message?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Retour au brouillon",
|
||||||
|
"confirmations.discard_draft.post.message": "En continuant, vous perdez le message que vous êtes en train d'écrire.",
|
||||||
|
"confirmations.discard_draft.post.title": "Jeter le brouillon de message?",
|
||||||
"confirmations.discard_edit_media.confirm": "Rejeter",
|
"confirmations.discard_edit_media.confirm": "Rejeter",
|
||||||
"confirmations.discard_edit_media.message": "Vous avez des modifications non enregistrées de la description ou de l'aperçu du média, les supprimer quand même ?",
|
"confirmations.discard_edit_media.message": "Vous avez des modifications non enregistrées de la description ou de l'aperçu du média, les supprimer quand même ?",
|
||||||
"confirmations.follow_to_list.confirm": "Suivre et ajouter à la liste",
|
"confirmations.follow_to_list.confirm": "Suivre et ajouter à la liste",
|
||||||
|
@ -222,6 +242,9 @@
|
||||||
"confirmations.redraft.confirm": "Supprimer et ré-écrire",
|
"confirmations.redraft.confirm": "Supprimer et ré-écrire",
|
||||||
"confirmations.redraft.message": "Voulez-vous vraiment supprimer le message pour le réécrire ? Ses partages ainsi que ses mises en favori seront perdues, et ses réponses seront orphelines.",
|
"confirmations.redraft.message": "Voulez-vous vraiment supprimer le message pour le réécrire ? Ses partages ainsi que ses mises en favori seront perdues, et ses réponses seront orphelines.",
|
||||||
"confirmations.redraft.title": "Supprimer et réécrire le message ?",
|
"confirmations.redraft.title": "Supprimer et réécrire le message ?",
|
||||||
|
"confirmations.remove_from_followers.confirm": "Supprimer l'abonné·e",
|
||||||
|
"confirmations.remove_from_followers.message": "{name} cessera de vous suivre. Êtes-vous sûr de vouloir continuer ?",
|
||||||
|
"confirmations.remove_from_followers.title": "Supprimer l'abonné·e ?",
|
||||||
"confirmations.unfollow.confirm": "Ne plus suivre",
|
"confirmations.unfollow.confirm": "Ne plus suivre",
|
||||||
"confirmations.unfollow.message": "Voulez-vous vraiment vous désabonner de {name} ?",
|
"confirmations.unfollow.message": "Voulez-vous vraiment vous désabonner de {name} ?",
|
||||||
"confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?",
|
"confirmations.unfollow.title": "Se désabonner de l'utilisateur·rice ?",
|
||||||
|
@ -283,6 +306,9 @@
|
||||||
"emoji_button.search_results": "Résultats de la recherche",
|
"emoji_button.search_results": "Résultats de la recherche",
|
||||||
"emoji_button.symbols": "Symboles",
|
"emoji_button.symbols": "Symboles",
|
||||||
"emoji_button.travel": "Voyage et lieux",
|
"emoji_button.travel": "Voyage et lieux",
|
||||||
|
"empty_column.account_featured.me": "Vous n'avez pas encore mis de contenu en avant. Saviez-vous que vous pouviez mettre en avant les hashtags que vous utilisez le plus, et même les comptes de vos amis sur votre profil ?",
|
||||||
|
"empty_column.account_featured.other": "{acct} n'a pas encore mis de contenu en avant. Saviez-vous que vous pouviez mettre en avant les hashtags que vous utilisez le plus, et même les comptes de vos amis sur votre profil ?",
|
||||||
|
"empty_column.account_featured_other.unknown": "Ce compte n'a mis aucun contenu en avant pour l'instant.",
|
||||||
"empty_column.account_hides_collections": "Cet utilisateur·ice préfère ne pas rendre publiques ces informations",
|
"empty_column.account_hides_collections": "Cet utilisateur·ice préfère ne pas rendre publiques ces informations",
|
||||||
"empty_column.account_suspended": "Compte suspendu",
|
"empty_column.account_suspended": "Compte suspendu",
|
||||||
"empty_column.account_timeline": "Aucun message ici !",
|
"empty_column.account_timeline": "Aucun message ici !",
|
||||||
|
@ -311,9 +337,14 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
|
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
|
||||||
"errors.unexpected_crash.report_issue": "Signaler le problème",
|
"errors.unexpected_crash.report_issue": "Signaler le problème",
|
||||||
"explore.suggested_follows": "Personnes",
|
"explore.suggested_follows": "Personnes",
|
||||||
|
"explore.title": "Tendances",
|
||||||
"explore.trending_links": "Nouvelles",
|
"explore.trending_links": "Nouvelles",
|
||||||
"explore.trending_statuses": "Messages",
|
"explore.trending_statuses": "Messages",
|
||||||
"explore.trending_tags": "Hashtags",
|
"explore.trending_tags": "Hashtags",
|
||||||
|
"featured_carousel.next": "Suivant",
|
||||||
|
"featured_carousel.post": "Poste",
|
||||||
|
"featured_carousel.previous": "Précédent",
|
||||||
|
"featured_carousel.slide": "{index} de {total}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "Cette catégorie de filtre ne s'applique pas au contexte dans lequel vous avez accédé à ce message. Si vous voulez que le message soit filtré dans ce contexte également, vous devrez modifier le filtre.",
|
"filter_modal.added.context_mismatch_explanation": "Cette catégorie de filtre ne s'applique pas au contexte dans lequel vous avez accédé à ce message. Si vous voulez que le message soit filtré dans ce contexte également, vous devrez modifier le filtre.",
|
||||||
"filter_modal.added.context_mismatch_title": "Incompatibilité du contexte !",
|
"filter_modal.added.context_mismatch_title": "Incompatibilité du contexte !",
|
||||||
"filter_modal.added.expired_explanation": "Cette catégorie de filtre a expiré, vous devrez modifier la date d'expiration pour qu'elle soit appliquée.",
|
"filter_modal.added.expired_explanation": "Cette catégorie de filtre a expiré, vous devrez modifier la date d'expiration pour qu'elle soit appliquée.",
|
||||||
|
@ -366,6 +397,8 @@
|
||||||
"generic.saved": "Sauvegardé",
|
"generic.saved": "Sauvegardé",
|
||||||
"getting_started.heading": "Pour commencer",
|
"getting_started.heading": "Pour commencer",
|
||||||
"hashtag.admin_moderation": "Ouvrir l'interface de modération pour #{name}",
|
"hashtag.admin_moderation": "Ouvrir l'interface de modération pour #{name}",
|
||||||
|
"hashtag.browse": "Parcourir les posts dans #{hashtag}",
|
||||||
|
"hashtag.browse_from_account": "Parcourir les posts de @{name} dans #{hashtag}",
|
||||||
"hashtag.column_header.tag_mode.all": "et {additional}",
|
"hashtag.column_header.tag_mode.all": "et {additional}",
|
||||||
"hashtag.column_header.tag_mode.any": "ou {additional}",
|
"hashtag.column_header.tag_mode.any": "ou {additional}",
|
||||||
"hashtag.column_header.tag_mode.none": "sans {additional}",
|
"hashtag.column_header.tag_mode.none": "sans {additional}",
|
||||||
|
@ -378,7 +411,10 @@
|
||||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
|
"hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
"hashtag.counter_by_uses": "{count, plural, one {{counter} message} other {{counter} messages}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourd’hui",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} message} other {{counter} messages}} aujourd’hui",
|
||||||
|
"hashtag.feature": "Mettre en avant sur votre profil",
|
||||||
"hashtag.follow": "Suivre le hashtag",
|
"hashtag.follow": "Suivre le hashtag",
|
||||||
|
"hashtag.mute": "Mettre #{hashtag} en sourdine",
|
||||||
|
"hashtag.unfeature": "Ne plus mettre en avant sur votre profil",
|
||||||
"hashtag.unfollow": "Ne plus suivre le hashtag",
|
"hashtag.unfollow": "Ne plus suivre le hashtag",
|
||||||
"hashtags.and_other": "…et {count, plural, other {# de plus}}",
|
"hashtags.and_other": "…et {count, plural, other {# de plus}}",
|
||||||
"hints.profiles.followers_may_be_missing": "Les abonné·e·s à ce profil peuvent être manquant·e·s.",
|
"hints.profiles.followers_may_be_missing": "Les abonné·e·s à ce profil peuvent être manquant·e·s.",
|
||||||
|
@ -389,6 +425,7 @@
|
||||||
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
|
"hints.profiles.see_more_posts": "Voir plus de messages sur {domain}",
|
||||||
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
|
"hints.threads.replies_may_be_missing": "Les réponses provenant des autres serveurs pourraient être manquantes.",
|
||||||
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
|
"hints.threads.see_more": "Afficher plus de réponses sur {domain}",
|
||||||
|
"home.column_settings.show_quotes": "Afficher les citations",
|
||||||
"home.column_settings.show_reblogs": "Afficher les partages",
|
"home.column_settings.show_reblogs": "Afficher les partages",
|
||||||
"home.column_settings.show_replies": "Afficher les réponses",
|
"home.column_settings.show_replies": "Afficher les réponses",
|
||||||
"home.hide_announcements": "Masquer les annonces",
|
"home.hide_announcements": "Masquer les annonces",
|
||||||
|
@ -511,8 +548,10 @@
|
||||||
"mute_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.",
|
"mute_modal.you_wont_see_mentions": "Vous ne verrez pas les publications qui le mentionne.",
|
||||||
"mute_modal.you_wont_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.",
|
"mute_modal.you_wont_see_posts": "Il peut toujours voir vos publications, mais vous ne verrez pas les siennes.",
|
||||||
"navigation_bar.about": "À propos",
|
"navigation_bar.about": "À propos",
|
||||||
|
"navigation_bar.account_settings": "Mot de passe et sécurité",
|
||||||
"navigation_bar.administration": "Administration",
|
"navigation_bar.administration": "Administration",
|
||||||
"navigation_bar.advanced_interface": "Ouvrir dans l’interface avancée",
|
"navigation_bar.advanced_interface": "Ouvrir dans l’interface avancée",
|
||||||
|
"navigation_bar.automated_deletion": "Suppression automatique du message",
|
||||||
"navigation_bar.blocks": "Comptes bloqués",
|
"navigation_bar.blocks": "Comptes bloqués",
|
||||||
"navigation_bar.bookmarks": "Marque-pages",
|
"navigation_bar.bookmarks": "Marque-pages",
|
||||||
"navigation_bar.direct": "Mention privée",
|
"navigation_bar.direct": "Mention privée",
|
||||||
|
@ -522,13 +561,19 @@
|
||||||
"navigation_bar.follow_requests": "Demandes d’abonnement",
|
"navigation_bar.follow_requests": "Demandes d’abonnement",
|
||||||
"navigation_bar.followed_tags": "Hashtags suivis",
|
"navigation_bar.followed_tags": "Hashtags suivis",
|
||||||
"navigation_bar.follows_and_followers": "Abonnements et abonnés",
|
"navigation_bar.follows_and_followers": "Abonnements et abonnés",
|
||||||
|
"navigation_bar.import_export": "Import et export",
|
||||||
"navigation_bar.lists": "Listes",
|
"navigation_bar.lists": "Listes",
|
||||||
|
"navigation_bar.live_feed_local": "Flux en direct (local)",
|
||||||
|
"navigation_bar.live_feed_public": "Flux en direct (public)",
|
||||||
"navigation_bar.logout": "Déconnexion",
|
"navigation_bar.logout": "Déconnexion",
|
||||||
"navigation_bar.moderation": "Modération",
|
"navigation_bar.moderation": "Modération",
|
||||||
|
"navigation_bar.more": "Plus",
|
||||||
"navigation_bar.mutes": "Comptes masqués",
|
"navigation_bar.mutes": "Comptes masqués",
|
||||||
"navigation_bar.opened_in_classic_interface": "Les messages, les comptes et les pages spécifiques sont ouvertes dans l’interface classique.",
|
"navigation_bar.opened_in_classic_interface": "Les messages, les comptes et les pages spécifiques sont ouvertes dans l’interface classique.",
|
||||||
"navigation_bar.preferences": "Préférences",
|
"navigation_bar.preferences": "Préférences",
|
||||||
|
"navigation_bar.privacy_and_reach": "Vie privée et visibilité",
|
||||||
"navigation_bar.search": "Rechercher",
|
"navigation_bar.search": "Rechercher",
|
||||||
|
"navigation_bar.search_trends": "Recherche / Tendance",
|
||||||
"not_signed_in_indicator.not_signed_in": "Vous devez vous connecter pour accéder à cette ressource.",
|
"not_signed_in_indicator.not_signed_in": "Vous devez vous connecter pour accéder à cette ressource.",
|
||||||
"notification.admin.report": "{name} a signalé {target}",
|
"notification.admin.report": "{name} a signalé {target}",
|
||||||
"notification.admin.report_account": "{name} a signalé {count, plural, one {un message} other {# messages}} de {target} pour {category}",
|
"notification.admin.report_account": "{name} a signalé {count, plural, one {un message} other {# messages}} de {target} pour {category}",
|
||||||
|
@ -821,6 +866,9 @@
|
||||||
"status.mute_conversation": "Masquer la conversation",
|
"status.mute_conversation": "Masquer la conversation",
|
||||||
"status.open": "Afficher le message entier",
|
"status.open": "Afficher le message entier",
|
||||||
"status.pin": "Épingler sur le profil",
|
"status.pin": "Épingler sur le profil",
|
||||||
|
"status.quote_error.removed": "Ce message a été retiré par son auteur·ice.",
|
||||||
|
"status.quote_error.unauthorized": "Ce message ne peut pas être affiché car vous n'êtes pas autorisé·e à le voir.",
|
||||||
|
"status.quote_post_author": "Message par {name}",
|
||||||
"status.read_more": "En savoir plus",
|
"status.read_more": "En savoir plus",
|
||||||
"status.reblog": "Partager",
|
"status.reblog": "Partager",
|
||||||
"status.reblog_private": "Partager à l’audience originale",
|
"status.reblog_private": "Partager à l’audience originale",
|
||||||
|
@ -850,7 +898,10 @@
|
||||||
"subscribed_languages.save": "Enregistrer les modifications",
|
"subscribed_languages.save": "Enregistrer les modifications",
|
||||||
"subscribed_languages.target": "Changer les langues abonnées pour {target}",
|
"subscribed_languages.target": "Changer les langues abonnées pour {target}",
|
||||||
"tabs_bar.home": "Accueil",
|
"tabs_bar.home": "Accueil",
|
||||||
|
"tabs_bar.menu": "Menu",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
|
"tabs_bar.publish": "Nouveau message",
|
||||||
|
"tabs_bar.search": "Chercher",
|
||||||
"terms_of_service.effective_as_of": "En vigueur à compter du {date}",
|
"terms_of_service.effective_as_of": "En vigueur à compter du {date}",
|
||||||
"terms_of_service.title": "Conditions d'utilisation",
|
"terms_of_service.title": "Conditions d'utilisation",
|
||||||
"terms_of_service.upcoming_changes_on": "Modifications à venir le {date}",
|
"terms_of_service.upcoming_changes_on": "Modifications à venir le {date}",
|
||||||
|
|
|
@ -564,6 +564,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Folgers en folgjenden",
|
"navigation_bar.follows_and_followers": "Folgers en folgjenden",
|
||||||
"navigation_bar.import_export": "Ymportearje en eksportearje",
|
"navigation_bar.import_export": "Ymportearje en eksportearje",
|
||||||
"navigation_bar.lists": "Listen",
|
"navigation_bar.lists": "Listen",
|
||||||
|
"navigation_bar.live_feed_local": "Livefeed (lokaal)",
|
||||||
|
"navigation_bar.live_feed_public": "Livefeed (iepenbier)",
|
||||||
"navigation_bar.logout": "Ofmelde",
|
"navigation_bar.logout": "Ofmelde",
|
||||||
"navigation_bar.moderation": "Moderaasje",
|
"navigation_bar.moderation": "Moderaasje",
|
||||||
"navigation_bar.more": "Mear",
|
"navigation_bar.more": "Mear",
|
||||||
|
@ -803,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "Skeinde regels",
|
"report_notification.categories.violation": "Skeinde regels",
|
||||||
"report_notification.categories.violation_sentence": "skeinde regels",
|
"report_notification.categories.violation_sentence": "skeinde regels",
|
||||||
"report_notification.open": "Rapport iepenje",
|
"report_notification.open": "Rapport iepenje",
|
||||||
|
"search.clear": "Sykopdracht wiskje",
|
||||||
"search.no_recent_searches": "Gjin resinte sykopdrachten",
|
"search.no_recent_searches": "Gjin resinte sykopdrachten",
|
||||||
"search.placeholder": "Sykje",
|
"search.placeholder": "Sykje",
|
||||||
"search.quick_action.account_search": "Accounts dy’t oerienkomme mei {x}",
|
"search.quick_action.account_search": "Accounts dy’t oerienkomme mei {x}",
|
||||||
|
|
|
@ -167,7 +167,7 @@
|
||||||
"column.domain_blocks": "Àrainnean bacte",
|
"column.domain_blocks": "Àrainnean bacte",
|
||||||
"column.edit_list": "Deasaich an liosta",
|
"column.edit_list": "Deasaich an liosta",
|
||||||
"column.favourites": "Annsachdan",
|
"column.favourites": "Annsachdan",
|
||||||
"column.firehose": "An saoghal poblach",
|
"column.firehose": "An saoghal beò",
|
||||||
"column.follow_requests": "Iarrtasan leantainn",
|
"column.follow_requests": "Iarrtasan leantainn",
|
||||||
"column.home": "Dachaigh",
|
"column.home": "Dachaigh",
|
||||||
"column.list_members": "Stiùir buill na liosta",
|
"column.list_members": "Stiùir buill na liosta",
|
||||||
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Sguab às",
|
"confirmations.delete_list.confirm": "Sguab às",
|
||||||
"confirmations.delete_list.message": "A bheil thu cinnteach gu bheil thu airson an liosta seo a sguabadh às gu buan?",
|
"confirmations.delete_list.message": "A bheil thu cinnteach gu bheil thu airson an liosta seo a sguabadh às gu buan?",
|
||||||
"confirmations.delete_list.title": "A bheil thu airson an liosta a sguabadh às?",
|
"confirmations.delete_list.title": "A bheil thu airson an liosta a sguabadh às?",
|
||||||
|
"confirmations.discard_draft.confirm": "Tilg air falbh ’s lean air adhart",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Lean air an deasachadh",
|
||||||
|
"confirmations.discard_draft.edit.message": "Ma leanas tu air adhart, thèid atharraichean sam bith a rinn thu air a’ phost a tha thu a’ deasachadh a thilgeil air falbh.",
|
||||||
|
"confirmations.discard_draft.edit.title": "A bheil thu airson na h-atharraichean air a’ phost agad a thilgeil air falbh?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Lean air an dreachd",
|
||||||
|
"confirmations.discard_draft.post.message": "Ma leanas tu air adhart, thèid am post a tha thu a’ sgrìobhadh a thilgeil air falbh.",
|
||||||
|
"confirmations.discard_draft.post.title": "A bheil thu airson dreachd a’ phuist agad a thilgeil air falbh?",
|
||||||
"confirmations.discard_edit_media.confirm": "Tilg air falbh",
|
"confirmations.discard_edit_media.confirm": "Tilg air falbh",
|
||||||
"confirmations.discard_edit_media.message": "Tha atharraichean gun sàbhaladh agad ann an tuairisgeul no ro-shealladh a’ mheadhain, a bheil thu airson an tilgeil air falbh co-dhiù?",
|
"confirmations.discard_edit_media.message": "Tha atharraichean gun sàbhaladh agad ann an tuairisgeul no ro-shealladh a’ mheadhain, a bheil thu airson an tilgeil air falbh co-dhiù?",
|
||||||
"confirmations.follow_to_list.confirm": "Lean ’s cuir ris an liosta",
|
"confirmations.follow_to_list.confirm": "Lean ’s cuir ris an liosta",
|
||||||
|
@ -557,6 +564,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Dàimhean leantainn",
|
"navigation_bar.follows_and_followers": "Dàimhean leantainn",
|
||||||
"navigation_bar.import_export": "Ion-phortadh ⁊ às-phortadh",
|
"navigation_bar.import_export": "Ion-phortadh ⁊ às-phortadh",
|
||||||
"navigation_bar.lists": "Liostaichean",
|
"navigation_bar.lists": "Liostaichean",
|
||||||
|
"navigation_bar.live_feed_local": "An saoghal beò (ionadail)",
|
||||||
|
"navigation_bar.live_feed_public": "An saoghal beò (poblach)",
|
||||||
"navigation_bar.logout": "Clàraich a-mach",
|
"navigation_bar.logout": "Clàraich a-mach",
|
||||||
"navigation_bar.moderation": "Maorsainneachd",
|
"navigation_bar.moderation": "Maorsainneachd",
|
||||||
"navigation_bar.more": "Barrachd",
|
"navigation_bar.more": "Barrachd",
|
||||||
|
@ -565,7 +574,10 @@
|
||||||
"navigation_bar.preferences": "Roghainnean",
|
"navigation_bar.preferences": "Roghainnean",
|
||||||
"navigation_bar.privacy_and_reach": "Prìobhaideachd ’s ruigse",
|
"navigation_bar.privacy_and_reach": "Prìobhaideachd ’s ruigse",
|
||||||
"navigation_bar.search": "Lorg",
|
"navigation_bar.search": "Lorg",
|
||||||
|
"navigation_bar.search_trends": "Lorg / A’ treandadh",
|
||||||
|
"navigation_panel.collapse_followed_tags": "Co-theannaich clàr-taice nan tagaichean hais ’gan leantainn",
|
||||||
"navigation_panel.collapse_lists": "Co-theannaich clàr-taice na liosta",
|
"navigation_panel.collapse_lists": "Co-theannaich clàr-taice na liosta",
|
||||||
|
"navigation_panel.expand_followed_tags": "Leudaich clàr-taice nan tagaichean hais ’gan leantainn",
|
||||||
"navigation_panel.expand_lists": "Leudaich clàr-taice na liosta",
|
"navigation_panel.expand_lists": "Leudaich clàr-taice na liosta",
|
||||||
"not_signed_in_indicator.not_signed_in": "Feumaidh tu clàradh a-steach mus fhaigh thu cothrom air a’ ghoireas seo.",
|
"not_signed_in_indicator.not_signed_in": "Feumaidh tu clàradh a-steach mus fhaigh thu cothrom air a’ ghoireas seo.",
|
||||||
"notification.admin.report": "Rinn {name} gearan mu {target}",
|
"notification.admin.report": "Rinn {name} gearan mu {target}",
|
||||||
|
@ -685,6 +697,7 @@
|
||||||
"notifications_permission_banner.enable": "Cuir brathan deasga an comas",
|
"notifications_permission_banner.enable": "Cuir brathan deasga an comas",
|
||||||
"notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de chonaltradh a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.",
|
"notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de chonaltradh a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.",
|
||||||
"notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh",
|
"notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh",
|
||||||
|
"onboarding.follows.back": "Air ais",
|
||||||
"onboarding.follows.done": "Deiseil",
|
"onboarding.follows.done": "Deiseil",
|
||||||
"onboarding.follows.empty": "Gu mì-fhortanach, chan urrainn dhuinn toradh a shealltainn an-dràsta. Feuch gleus an luirg no duilleag an rùrachaidh airson daoine ri leantainn a lorg no feuch ris a-rithist an ceann tamaill.",
|
"onboarding.follows.empty": "Gu mì-fhortanach, chan urrainn dhuinn toradh a shealltainn an-dràsta. Feuch gleus an luirg no duilleag an rùrachaidh airson daoine ri leantainn a lorg no feuch ris a-rithist an ceann tamaill.",
|
||||||
"onboarding.follows.search": "Lorg",
|
"onboarding.follows.search": "Lorg",
|
||||||
|
@ -792,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "Briseadh riaghailte",
|
"report_notification.categories.violation": "Briseadh riaghailte",
|
||||||
"report_notification.categories.violation_sentence": "briseadh riaghailte",
|
"report_notification.categories.violation_sentence": "briseadh riaghailte",
|
||||||
"report_notification.open": "Fosgail an gearan",
|
"report_notification.open": "Fosgail an gearan",
|
||||||
|
"search.clear": "Falamhaich an lorg",
|
||||||
"search.no_recent_searches": "Cha do rinn thu lorg o chionn goirid",
|
"search.no_recent_searches": "Cha do rinn thu lorg o chionn goirid",
|
||||||
"search.placeholder": "Lorg",
|
"search.placeholder": "Lorg",
|
||||||
"search.quick_action.account_search": "Pròifilean a fhreagras ri {x}",
|
"search.quick_action.account_search": "Pròifilean a fhreagras ri {x}",
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Elimina",
|
"confirmations.delete_list.confirm": "Elimina",
|
||||||
"confirmations.delete_list.message": "Sei sicuro/a di voler eliminare permanentemente questo elenco?",
|
"confirmations.delete_list.message": "Sei sicuro/a di voler eliminare permanentemente questo elenco?",
|
||||||
"confirmations.delete_list.title": "Eliminare la lista?",
|
"confirmations.delete_list.title": "Eliminare la lista?",
|
||||||
|
"confirmations.discard_draft.confirm": "Scarta e continua",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Continua modifica",
|
||||||
|
"confirmations.discard_draft.edit.message": "Continuare scarterà ogni modifica che hai fatto al post che stai attualmente modificando.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Scartare le modifiche al tuo post?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Continua bozza",
|
||||||
|
"confirmations.discard_draft.post.message": "Continuare scarterà il post che stai attualmente creando.",
|
||||||
|
"confirmations.discard_draft.post.title": "Scartare la tua bozza del post?",
|
||||||
"confirmations.discard_edit_media.confirm": "Scarta",
|
"confirmations.discard_edit_media.confirm": "Scarta",
|
||||||
"confirmations.discard_edit_media.message": "Hai delle modifiche non salvate alla descrizione o anteprima del media, scartarle comunque?",
|
"confirmations.discard_edit_media.message": "Hai delle modifiche non salvate alla descrizione o anteprima del media, scartarle comunque?",
|
||||||
"confirmations.follow_to_list.confirm": "Segui e aggiungi alla lista",
|
"confirmations.follow_to_list.confirm": "Segui e aggiungi alla lista",
|
||||||
|
@ -557,6 +564,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Seguiti e seguaci",
|
"navigation_bar.follows_and_followers": "Seguiti e seguaci",
|
||||||
"navigation_bar.import_export": "Importa ed esporta",
|
"navigation_bar.import_export": "Importa ed esporta",
|
||||||
"navigation_bar.lists": "Liste",
|
"navigation_bar.lists": "Liste",
|
||||||
|
"navigation_bar.live_feed_local": "Feed live (locale)",
|
||||||
|
"navigation_bar.live_feed_public": "Feed live (pubblico)",
|
||||||
"navigation_bar.logout": "Disconnettiti",
|
"navigation_bar.logout": "Disconnettiti",
|
||||||
"navigation_bar.moderation": "Moderazione",
|
"navigation_bar.moderation": "Moderazione",
|
||||||
"navigation_bar.more": "Altro",
|
"navigation_bar.more": "Altro",
|
||||||
|
@ -565,7 +574,10 @@
|
||||||
"navigation_bar.preferences": "Preferenze",
|
"navigation_bar.preferences": "Preferenze",
|
||||||
"navigation_bar.privacy_and_reach": "Privacy e copertura",
|
"navigation_bar.privacy_and_reach": "Privacy e copertura",
|
||||||
"navigation_bar.search": "Cerca",
|
"navigation_bar.search": "Cerca",
|
||||||
|
"navigation_bar.search_trends": "Cerca / In tendenza",
|
||||||
|
"navigation_panel.collapse_followed_tags": "Comprimi il menù degli hashtag seguiti",
|
||||||
"navigation_panel.collapse_lists": "Chiudi il menu elenco",
|
"navigation_panel.collapse_lists": "Chiudi il menu elenco",
|
||||||
|
"navigation_panel.expand_followed_tags": "Espandi il menù degli hashtag seguiti",
|
||||||
"navigation_panel.expand_lists": "Espandi il menu elenco",
|
"navigation_panel.expand_lists": "Espandi il menu elenco",
|
||||||
"not_signed_in_indicator.not_signed_in": "Devi accedere per consultare questa risorsa.",
|
"not_signed_in_indicator.not_signed_in": "Devi accedere per consultare questa risorsa.",
|
||||||
"notification.admin.report": "{name} ha segnalato {target}",
|
"notification.admin.report": "{name} ha segnalato {target}",
|
||||||
|
@ -793,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "Violazione delle regole",
|
"report_notification.categories.violation": "Violazione delle regole",
|
||||||
"report_notification.categories.violation_sentence": "violazione delle regole",
|
"report_notification.categories.violation_sentence": "violazione delle regole",
|
||||||
"report_notification.open": "Apri segnalazione",
|
"report_notification.open": "Apri segnalazione",
|
||||||
|
"search.clear": "Cancella ricerca",
|
||||||
"search.no_recent_searches": "Nessuna ricerca recente",
|
"search.no_recent_searches": "Nessuna ricerca recente",
|
||||||
"search.placeholder": "Cerca",
|
"search.placeholder": "Cerca",
|
||||||
"search.quick_action.account_search": "Profili corrispondenti a {x}",
|
"search.quick_action.account_search": "Profili corrispondenti a {x}",
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
"about.domain_blocks.preamble": "Maṣṭudun s umata yeḍmen-ak ad teẓreḍ agbur, ad tesdemreḍ akked yimseqdacen-nniḍen seg yal aqeddac deg fedivers. Ha-tent-an ɣur-k tsuraf i yellan deg uqeddac-agi.",
|
"about.domain_blocks.preamble": "Maṣṭudun s umata yeḍmen-ak ad teẓreḍ agbur, ad tesdemreḍ akked yimseqdacen-nniḍen seg yal aqeddac deg fedivers. Ha-tent-an ɣur-k tsuraf i yellan deg uqeddac-agi.",
|
||||||
"about.domain_blocks.silenced.title": "Ɣur-s talast",
|
"about.domain_blocks.silenced.title": "Ɣur-s talast",
|
||||||
"about.domain_blocks.suspended.title": "Yettwaḥbes",
|
"about.domain_blocks.suspended.title": "Yettwaḥbes",
|
||||||
|
"about.language_label": "Tutlayt",
|
||||||
"about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.",
|
"about.not_available": "Talɣut-a ur tettwabder ara deg uqeddac-a.",
|
||||||
"about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}",
|
"about.powered_by": "Azeṭṭa inmetti yettwasɣelsen sɣur {mastodon}",
|
||||||
"about.rules": "Ilugan n uqeddac",
|
"about.rules": "Ilugan n uqeddac",
|
||||||
|
@ -237,6 +238,10 @@
|
||||||
"explore.trending_links": "Isallen",
|
"explore.trending_links": "Isallen",
|
||||||
"explore.trending_statuses": "Tisuffaɣ",
|
"explore.trending_statuses": "Tisuffaɣ",
|
||||||
"explore.trending_tags": "Ihacṭagen",
|
"explore.trending_tags": "Ihacṭagen",
|
||||||
|
"featured_carousel.next": "Uḍfiṛ",
|
||||||
|
"featured_carousel.post": "Tasuffeɣt",
|
||||||
|
"featured_carousel.previous": "Uzwir",
|
||||||
|
"featured_carousel.slide": "{index} ɣef {total}",
|
||||||
"filter_modal.added.review_and_configure_title": "Iɣewwaṛen n imzizdig",
|
"filter_modal.added.review_and_configure_title": "Iɣewwaṛen n imzizdig",
|
||||||
"filter_modal.added.settings_link": "asebter n yiɣewwaṛen",
|
"filter_modal.added.settings_link": "asebter n yiɣewwaṛen",
|
||||||
"filter_modal.added.short_explanation": "Tasuffeɣt-a tettwarna ɣer taggayt-a n yimsizdegen: {title}.",
|
"filter_modal.added.short_explanation": "Tasuffeɣt-a tettwarna ɣer taggayt-a n yimsizdegen: {title}.",
|
||||||
|
@ -357,6 +362,7 @@
|
||||||
"lists.add_to_list": "Rnu ɣer tebdart",
|
"lists.add_to_list": "Rnu ɣer tebdart",
|
||||||
"lists.add_to_lists": "Rnu {name} ɣer tebdarin",
|
"lists.add_to_lists": "Rnu {name} ɣer tebdarin",
|
||||||
"lists.create": "Snulfu-d",
|
"lists.create": "Snulfu-d",
|
||||||
|
"lists.create_list": "Snulfu-d tabdart",
|
||||||
"lists.delete": "Kkes tabdart",
|
"lists.delete": "Kkes tabdart",
|
||||||
"lists.done": "Immed",
|
"lists.done": "Immed",
|
||||||
"lists.edit": "Ẓreg tabdart",
|
"lists.edit": "Ẓreg tabdart",
|
||||||
|
@ -397,6 +403,7 @@
|
||||||
"navigation_bar.lists": "Tibdarin",
|
"navigation_bar.lists": "Tibdarin",
|
||||||
"navigation_bar.logout": "Ffeɣ",
|
"navigation_bar.logout": "Ffeɣ",
|
||||||
"navigation_bar.moderation": "Aseɣyed",
|
"navigation_bar.moderation": "Aseɣyed",
|
||||||
|
"navigation_bar.more": "Ugar",
|
||||||
"navigation_bar.mutes": "Iseqdacen yettwasusmen",
|
"navigation_bar.mutes": "Iseqdacen yettwasusmen",
|
||||||
"navigation_bar.opened_in_classic_interface": "Tisuffaɣ, imiḍanen akked isebtar-nniḍen igejdanen ldin-d s wudem amezwer deg ugrudem web aklasiki.",
|
"navigation_bar.opened_in_classic_interface": "Tisuffaɣ, imiḍanen akked isebtar-nniḍen igejdanen ldin-d s wudem amezwer deg ugrudem web aklasiki.",
|
||||||
"navigation_bar.preferences": "Imenyafen",
|
"navigation_bar.preferences": "Imenyafen",
|
||||||
|
@ -610,6 +617,7 @@
|
||||||
"status.mute_conversation": "Sgugem adiwenni",
|
"status.mute_conversation": "Sgugem adiwenni",
|
||||||
"status.open": "Semɣeṛ tasuffeɣt-ayi",
|
"status.open": "Semɣeṛ tasuffeɣt-ayi",
|
||||||
"status.pin": "Senteḍ-itt deg umaɣnu",
|
"status.pin": "Senteḍ-itt deg umaɣnu",
|
||||||
|
"status.quote_post_author": "Izen sɣur {name}",
|
||||||
"status.read_more": "Issin ugar",
|
"status.read_more": "Issin ugar",
|
||||||
"status.reblog": "Bḍu",
|
"status.reblog": "Bḍu",
|
||||||
"status.reblogged_by": "Yebḍa-tt {name}",
|
"status.reblogged_by": "Yebḍa-tt {name}",
|
||||||
|
@ -635,7 +643,10 @@
|
||||||
"status.unpin": "Kkes asenteḍ seg umaɣnu",
|
"status.unpin": "Kkes asenteḍ seg umaɣnu",
|
||||||
"subscribed_languages.save": "Sekles ibeddilen",
|
"subscribed_languages.save": "Sekles ibeddilen",
|
||||||
"tabs_bar.home": "Agejdan",
|
"tabs_bar.home": "Agejdan",
|
||||||
|
"tabs_bar.menu": "Umuɣ",
|
||||||
"tabs_bar.notifications": "Ilɣa",
|
"tabs_bar.notifications": "Ilɣa",
|
||||||
|
"tabs_bar.publish": "Tasuffeɣt tamaynut",
|
||||||
|
"tabs_bar.search": "Nadi",
|
||||||
"terms_of_service.title": "Tiwtilin n useqdec",
|
"terms_of_service.title": "Tiwtilin n useqdec",
|
||||||
"time_remaining.days": "Mazal {number, plural, one {# wass} other {# wussan}}",
|
"time_remaining.days": "Mazal {number, plural, one {# wass} other {# wussan}}",
|
||||||
"time_remaining.hours": "Mazal {number, plural, one {# usarag} other {# yisragen}}",
|
"time_remaining.hours": "Mazal {number, plural, one {# usarag} other {# yisragen}}",
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "삭제",
|
"confirmations.delete_list.confirm": "삭제",
|
||||||
"confirmations.delete_list.message": "정말로 이 리스트를 영구적으로 삭제하시겠습니까?",
|
"confirmations.delete_list.message": "정말로 이 리스트를 영구적으로 삭제하시겠습니까?",
|
||||||
"confirmations.delete_list.title": "리스트를 삭제할까요?",
|
"confirmations.delete_list.title": "리스트를 삭제할까요?",
|
||||||
|
"confirmations.discard_draft.confirm": "삭제 및 계속",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "계속 편집",
|
||||||
|
"confirmations.discard_draft.edit.message": "편집중인 게시물 변경사항을 모두 잃게 됩니다.",
|
||||||
|
"confirmations.discard_draft.edit.title": "게시물 변경사항을 삭제할까요?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "초안으로 돌아가기",
|
||||||
|
"confirmations.discard_draft.post.message": "작성하고 있던 변경사항을 잃게 됩니다.",
|
||||||
|
"confirmations.discard_draft.post.title": "게시물 초안을 삭제할까요?",
|
||||||
"confirmations.discard_edit_media.confirm": "저장 안함",
|
"confirmations.discard_edit_media.confirm": "저장 안함",
|
||||||
"confirmations.discard_edit_media.message": "미디어 설명이나 미리보기에 대한 저장하지 않은 변경사항이 있습니다. 버리시겠습니까?",
|
"confirmations.discard_edit_media.message": "미디어 설명이나 미리보기에 대한 저장하지 않은 변경사항이 있습니다. 버리시겠습니까?",
|
||||||
"confirmations.follow_to_list.confirm": "팔로우하고 리스트에 추가",
|
"confirmations.follow_to_list.confirm": "팔로우하고 리스트에 추가",
|
||||||
|
|
|
@ -356,6 +356,7 @@
|
||||||
"hashtag.counter_by_accounts": "{count, plural, one {{counter} partisipante} other {{counter} partisipantes}}",
|
"hashtag.counter_by_accounts": "{count, plural, one {{counter} partisipante} other {{counter} partisipantes}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}",
|
"hashtag.counter_by_uses": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}} oy",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}} oy",
|
||||||
|
"hashtag.feature": "Avalia en profil",
|
||||||
"hashtag.follow": "Sige etiketa",
|
"hashtag.follow": "Sige etiketa",
|
||||||
"hashtag.mute": "Silensia #{hashtag}",
|
"hashtag.mute": "Silensia #{hashtag}",
|
||||||
"hashtag.unfeature": "No avalia en profil",
|
"hashtag.unfeature": "No avalia en profil",
|
||||||
|
@ -390,6 +391,7 @@
|
||||||
"interaction_modal.title.reblog": "Repartaja publikasyon de {name}",
|
"interaction_modal.title.reblog": "Repartaja publikasyon de {name}",
|
||||||
"interaction_modal.title.reply": "Arisponde a publikasyon de {name}",
|
"interaction_modal.title.reply": "Arisponde a publikasyon de {name}",
|
||||||
"interaction_modal.title.vote": "Vota en la anketa de {name}",
|
"interaction_modal.title.vote": "Vota en la anketa de {name}",
|
||||||
|
"interaction_modal.username_prompt": "Por enshemplo {example}",
|
||||||
"intervals.full.days": "{number, plural, one {# diya} other {# diyas}}",
|
"intervals.full.days": "{number, plural, one {# diya} other {# diyas}}",
|
||||||
"intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
|
"intervals.full.hours": "{number, plural, one {# ora} other {# oras}}",
|
||||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
|
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
|
||||||
|
@ -442,6 +444,7 @@
|
||||||
"lists.delete": "Efasa lista",
|
"lists.delete": "Efasa lista",
|
||||||
"lists.done": "Fecho",
|
"lists.done": "Fecho",
|
||||||
"lists.edit": "Edita lista",
|
"lists.edit": "Edita lista",
|
||||||
|
"lists.list_name": "Nombre de lista",
|
||||||
"lists.new_list_name": "Nombre de mueva lista",
|
"lists.new_list_name": "Nombre de mueva lista",
|
||||||
"lists.replies_policy.followed": "Kualseker utilizador segido",
|
"lists.replies_policy.followed": "Kualseker utilizador segido",
|
||||||
"lists.replies_policy.list": "Miembros de la lista",
|
"lists.replies_policy.list": "Miembros de la lista",
|
||||||
|
@ -738,6 +741,7 @@
|
||||||
"status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.",
|
"status.reblogs.empty": "Ainda nadie tiene repartajado esta publikasyon. Kuando algien lo aga, se amostrara aki.",
|
||||||
"status.redraft": "Efasa i eskrive de muevo",
|
"status.redraft": "Efasa i eskrive de muevo",
|
||||||
"status.remove_bookmark": "Kita markador",
|
"status.remove_bookmark": "Kita markador",
|
||||||
|
"status.remove_favourite": "Kita de los favoritos",
|
||||||
"status.replied_in_thread": "Arispondo en filo",
|
"status.replied_in_thread": "Arispondo en filo",
|
||||||
"status.replied_to": "Arispondio a {name}",
|
"status.replied_to": "Arispondio a {name}",
|
||||||
"status.reply": "Arisponde",
|
"status.reply": "Arisponde",
|
||||||
|
@ -758,6 +762,7 @@
|
||||||
"subscribed_languages.save": "Guadra trokamientos",
|
"subscribed_languages.save": "Guadra trokamientos",
|
||||||
"subscribed_languages.target": "Troka linguas abonadas para {target}",
|
"subscribed_languages.target": "Troka linguas abonadas para {target}",
|
||||||
"tabs_bar.home": "Linya prinsipala",
|
"tabs_bar.home": "Linya prinsipala",
|
||||||
|
"tabs_bar.menu": "Menu",
|
||||||
"tabs_bar.notifications": "Avizos",
|
"tabs_bar.notifications": "Avizos",
|
||||||
"tabs_bar.publish": "Mueva publikasyon",
|
"tabs_bar.publish": "Mueva publikasyon",
|
||||||
"tabs_bar.search": "Bushkeda",
|
"tabs_bar.search": "Bushkeda",
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Thâi掉",
|
"confirmations.delete_list.confirm": "Thâi掉",
|
||||||
"confirmations.delete_list.message": "Lí kám確定beh永永thâi掉tsit ê列單?",
|
"confirmations.delete_list.message": "Lí kám確定beh永永thâi掉tsit ê列單?",
|
||||||
"confirmations.delete_list.title": "Kám beh thâi掉tsit ê列單?",
|
"confirmations.delete_list.title": "Kám beh thâi掉tsit ê列單?",
|
||||||
|
"confirmations.discard_draft.confirm": "棄sak了後繼續",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "恢復編輯",
|
||||||
|
"confirmations.discard_draft.edit.message": "Nā繼續,ē棄sak lí tuì當leh編輯ê PO文,所做ê任何改變。",
|
||||||
|
"confirmations.discard_draft.edit.title": "Kám beh棄sak lí tuì PO文ê改變?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "恢復草稿",
|
||||||
|
"confirmations.discard_draft.post.message": "nā繼續,ē棄sak lí當leh編寫ê PO文",
|
||||||
|
"confirmations.discard_draft.post.title": "Kám beh棄sak lí PO文ê草稿?",
|
||||||
"confirmations.discard_edit_media.confirm": "棄sak",
|
"confirmations.discard_edit_media.confirm": "棄sak",
|
||||||
"confirmations.discard_edit_media.message": "Lí佇媒體敘述á是先看māi ê所在有iáu buē儲存ê改變,kám beh kā in棄sak?",
|
"confirmations.discard_edit_media.message": "Lí佇媒體敘述á是先看māi ê所在有iáu buē儲存ê改變,kám beh kā in棄sak?",
|
||||||
"confirmations.follow_to_list.confirm": "跟tuè,加入kàu列單",
|
"confirmations.follow_to_list.confirm": "跟tuè,加入kàu列單",
|
||||||
|
@ -557,6 +564,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Leh跟tuè ê kap跟tuè lí ê",
|
"navigation_bar.follows_and_followers": "Leh跟tuè ê kap跟tuè lí ê",
|
||||||
"navigation_bar.import_export": "匯入kap匯出",
|
"navigation_bar.import_export": "匯入kap匯出",
|
||||||
"navigation_bar.lists": "列單",
|
"navigation_bar.lists": "列單",
|
||||||
|
"navigation_bar.live_feed_local": "即時ê內容(本地)",
|
||||||
|
"navigation_bar.live_feed_public": "即時ê內容(公開)",
|
||||||
"navigation_bar.logout": "登出",
|
"navigation_bar.logout": "登出",
|
||||||
"navigation_bar.moderation": "審核",
|
"navigation_bar.moderation": "審核",
|
||||||
"navigation_bar.more": "其他",
|
"navigation_bar.more": "其他",
|
||||||
|
@ -796,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "違反規則",
|
"report_notification.categories.violation": "違反規則",
|
||||||
"report_notification.categories.violation_sentence": "違反規則",
|
"report_notification.categories.violation_sentence": "違反規則",
|
||||||
"report_notification.open": "Phah開檢舉",
|
"report_notification.open": "Phah開檢舉",
|
||||||
|
"search.clear": "清掉tshiau-tshuē",
|
||||||
"search.no_recent_searches": "無最近ê tshiau-tshuē",
|
"search.no_recent_searches": "無最近ê tshiau-tshuē",
|
||||||
"search.placeholder": "Tshiau-tshuē",
|
"search.placeholder": "Tshiau-tshuē",
|
||||||
"search.quick_action.account_search": "合 {x} ê個人檔案",
|
"search.quick_action.account_search": "合 {x} ê個人檔案",
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Slett",
|
"confirmations.delete_list.confirm": "Slett",
|
||||||
"confirmations.delete_list.message": "Er du sikker på at du vil sletta denne lista for alltid?",
|
"confirmations.delete_list.message": "Er du sikker på at du vil sletta denne lista for alltid?",
|
||||||
"confirmations.delete_list.title": "Slett lista?",
|
"confirmations.delete_list.title": "Slett lista?",
|
||||||
|
"confirmations.discard_draft.confirm": "Forkast og hald fram",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Rediger vidare",
|
||||||
|
"confirmations.discard_draft.edit.message": "Viss du held fram, vil du forkasta alle endringane du har gjort på dette innlegget.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Vil du forkasta endringane på innlegget?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Hald fram med kladden",
|
||||||
|
"confirmations.discard_draft.post.message": "Viss du held fram, forkastar du det innlegget du skriv på no.",
|
||||||
|
"confirmations.discard_draft.post.title": "Forkast kladden?",
|
||||||
"confirmations.discard_edit_media.confirm": "Forkast",
|
"confirmations.discard_edit_media.confirm": "Forkast",
|
||||||
"confirmations.discard_edit_media.message": "Du har ulagra endringar i mediaskildringa eller førehandsvisinga. Vil du forkasta dei likevel?",
|
"confirmations.discard_edit_media.message": "Du har ulagra endringar i mediaskildringa eller førehandsvisinga. Vil du forkasta dei likevel?",
|
||||||
"confirmations.follow_to_list.confirm": "Fylg og legg til lista",
|
"confirmations.follow_to_list.confirm": "Fylg og legg til lista",
|
||||||
|
@ -542,10 +549,10 @@
|
||||||
"mute_modal.you_wont_see_mentions": "Du vil ikkje sjå innlegg som nemner dei.",
|
"mute_modal.you_wont_see_mentions": "Du vil ikkje sjå innlegg som nemner dei.",
|
||||||
"mute_modal.you_wont_see_posts": "Dei kan framleis sjå innlegga dine, men du vil ikkje sjå deira.",
|
"mute_modal.you_wont_see_posts": "Dei kan framleis sjå innlegga dine, men du vil ikkje sjå deira.",
|
||||||
"navigation_bar.about": "Om",
|
"navigation_bar.about": "Om",
|
||||||
"navigation_bar.account_settings": "Passord og sikkerhet",
|
"navigation_bar.account_settings": "Passord og tryggleik",
|
||||||
"navigation_bar.administration": "Administrasjon",
|
"navigation_bar.administration": "Administrasjon",
|
||||||
"navigation_bar.advanced_interface": "Opne i avansert nettgrensesnitt",
|
"navigation_bar.advanced_interface": "Opne i avansert nettgrensesnitt",
|
||||||
"navigation_bar.automated_deletion": "Automatisert sletting av innlegg",
|
"navigation_bar.automated_deletion": "Automatisk sletting av innlegg",
|
||||||
"navigation_bar.blocks": "Blokkerte brukarar",
|
"navigation_bar.blocks": "Blokkerte brukarar",
|
||||||
"navigation_bar.bookmarks": "Bokmerke",
|
"navigation_bar.bookmarks": "Bokmerke",
|
||||||
"navigation_bar.direct": "Private omtaler",
|
"navigation_bar.direct": "Private omtaler",
|
||||||
|
@ -555,18 +562,23 @@
|
||||||
"navigation_bar.follow_requests": "Fylgjeførespurnader",
|
"navigation_bar.follow_requests": "Fylgjeførespurnader",
|
||||||
"navigation_bar.followed_tags": "Fylgde emneknaggar",
|
"navigation_bar.followed_tags": "Fylgde emneknaggar",
|
||||||
"navigation_bar.follows_and_followers": "Fylgje og fylgjarar",
|
"navigation_bar.follows_and_followers": "Fylgje og fylgjarar",
|
||||||
"navigation_bar.import_export": "Importer og eksporter",
|
"navigation_bar.import_export": "Import og eksport",
|
||||||
"navigation_bar.lists": "Lister",
|
"navigation_bar.lists": "Lister",
|
||||||
|
"navigation_bar.live_feed_local": "Direktestraum (lokal)",
|
||||||
|
"navigation_bar.live_feed_public": "Direktestraum (allheimen)",
|
||||||
"navigation_bar.logout": "Logg ut",
|
"navigation_bar.logout": "Logg ut",
|
||||||
"navigation_bar.moderation": "Moderering",
|
"navigation_bar.moderation": "Moderering",
|
||||||
"navigation_bar.more": "Mer",
|
"navigation_bar.more": "Meir",
|
||||||
"navigation_bar.mutes": "Målbundne brukarar",
|
"navigation_bar.mutes": "Målbundne brukarar",
|
||||||
"navigation_bar.opened_in_classic_interface": "Innlegg, kontoar, og enkelte andre sider blir opna som standard i det klassiske webgrensesnittet.",
|
"navigation_bar.opened_in_classic_interface": "Innlegg, kontoar, og enkelte andre sider blir opna som standard i det klassiske webgrensesnittet.",
|
||||||
"navigation_bar.preferences": "Innstillingar",
|
"navigation_bar.preferences": "Innstillingar",
|
||||||
"navigation_bar.privacy_and_reach": "Personvern og rekkevidde",
|
"navigation_bar.privacy_and_reach": "Personvern og rekkjevidd",
|
||||||
"navigation_bar.search": "Søk",
|
"navigation_bar.search": "Søk",
|
||||||
"navigation_panel.collapse_lists": "Skjul listemeny",
|
"navigation_bar.search_trends": "Søk / Populært",
|
||||||
"navigation_panel.expand_lists": "Utvid listemeny",
|
"navigation_panel.collapse_followed_tags": "Gøym menyen over merkelappar du fylgjer",
|
||||||
|
"navigation_panel.collapse_lists": "Gøym listemenyen",
|
||||||
|
"navigation_panel.expand_followed_tags": "Utvid menyen over merkelappar du fylgjer",
|
||||||
|
"navigation_panel.expand_lists": "Utvid listemenyen",
|
||||||
"not_signed_in_indicator.not_signed_in": "Du må logga inn for å få tilgang til denne ressursen.",
|
"not_signed_in_indicator.not_signed_in": "Du må logga inn for å få tilgang til denne ressursen.",
|
||||||
"notification.admin.report": "{name} rapporterte {target}",
|
"notification.admin.report": "{name} rapporterte {target}",
|
||||||
"notification.admin.report_account": "{name} rapporterte {count, plural, one {eitt innlegg} other {# innlegg}} frå {target} for {category}",
|
"notification.admin.report_account": "{name} rapporterte {count, plural, one {eitt innlegg} other {# innlegg}} frå {target} for {category}",
|
||||||
|
@ -793,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "Regelbrot",
|
"report_notification.categories.violation": "Regelbrot",
|
||||||
"report_notification.categories.violation_sentence": "regelbrot",
|
"report_notification.categories.violation_sentence": "regelbrot",
|
||||||
"report_notification.open": "Opne rapport",
|
"report_notification.open": "Opne rapport",
|
||||||
|
"search.clear": "Nullstill søket",
|
||||||
"search.no_recent_searches": "Ingen søk nylig",
|
"search.no_recent_searches": "Ingen søk nylig",
|
||||||
"search.placeholder": "Søk",
|
"search.placeholder": "Søk",
|
||||||
"search.quick_action.account_search": "Profiler som samsvarer med {x}",
|
"search.quick_action.account_search": "Profiler som samsvarer med {x}",
|
||||||
|
@ -895,7 +908,10 @@
|
||||||
"subscribed_languages.save": "Lagre endringar",
|
"subscribed_languages.save": "Lagre endringar",
|
||||||
"subscribed_languages.target": "Endre abonnerte språk for {target}",
|
"subscribed_languages.target": "Endre abonnerte språk for {target}",
|
||||||
"tabs_bar.home": "Heim",
|
"tabs_bar.home": "Heim",
|
||||||
|
"tabs_bar.menu": "Meny",
|
||||||
"tabs_bar.notifications": "Varsel",
|
"tabs_bar.notifications": "Varsel",
|
||||||
|
"tabs_bar.publish": "Nytt innlegg",
|
||||||
|
"tabs_bar.search": "Søk",
|
||||||
"terms_of_service.effective_as_of": "I kraft frå {date}",
|
"terms_of_service.effective_as_of": "I kraft frå {date}",
|
||||||
"terms_of_service.title": "Bruksvilkår",
|
"terms_of_service.title": "Bruksvilkår",
|
||||||
"terms_of_service.upcoming_changes_on": "Komande endringar {date}",
|
"terms_of_service.upcoming_changes_on": "Komande endringar {date}",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"about.blocks": "Servidores moderados",
|
"about.blocks": "Servidores moderados",
|
||||||
"about.contact": "Contato:",
|
"about.contact": "Contato:",
|
||||||
|
"about.default_locale": "Padrão",
|
||||||
"about.disclaimer": "Mastodon é um software de código aberto e livre, e uma marca registrada de Mastodon gGmbH.",
|
"about.disclaimer": "Mastodon é um software de código aberto e livre, e uma marca registrada de Mastodon gGmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "Razão não disponível",
|
"about.domain_blocks.no_reason_available": "Razão não disponível",
|
||||||
"about.domain_blocks.preamble": "O Mastodon geralmente permite que você veja o conteúdo e interaja com usuários de qualquer outro servidor no fediverso. Estas são as exceções deste servidor em específico.",
|
"about.domain_blocks.preamble": "O Mastodon geralmente permite que você veja o conteúdo e interaja com usuários de qualquer outro servidor no fediverso. Estas são as exceções deste servidor em específico.",
|
||||||
|
@ -8,6 +9,7 @@
|
||||||
"about.domain_blocks.silenced.title": "Limitado",
|
"about.domain_blocks.silenced.title": "Limitado",
|
||||||
"about.domain_blocks.suspended.explanation": "Nenhum dado desse servidor será processado, armazenado ou trocado, impossibilitando qualquer interação ou comunicação com os usuários deste servidor.",
|
"about.domain_blocks.suspended.explanation": "Nenhum dado desse servidor será processado, armazenado ou trocado, impossibilitando qualquer interação ou comunicação com os usuários deste servidor.",
|
||||||
"about.domain_blocks.suspended.title": "Suspenso",
|
"about.domain_blocks.suspended.title": "Suspenso",
|
||||||
|
"about.language_label": "Idioma",
|
||||||
"about.not_available": "Esta informação não foi disponibilizada neste servidor.",
|
"about.not_available": "Esta informação não foi disponibilizada neste servidor.",
|
||||||
"about.powered_by": "Redes sociais descentralizadas alimentadas por {mastodon}",
|
"about.powered_by": "Redes sociais descentralizadas alimentadas por {mastodon}",
|
||||||
"about.rules": "Regras do servidor",
|
"about.rules": "Regras do servidor",
|
||||||
|
@ -217,6 +219,11 @@
|
||||||
"confirmations.delete_list.confirm": "Excluir",
|
"confirmations.delete_list.confirm": "Excluir",
|
||||||
"confirmations.delete_list.message": "Você tem certeza de que deseja excluir esta lista?",
|
"confirmations.delete_list.message": "Você tem certeza de que deseja excluir esta lista?",
|
||||||
"confirmations.delete_list.title": "Excluir lista?",
|
"confirmations.delete_list.title": "Excluir lista?",
|
||||||
|
"confirmations.discard_draft.confirm": "Descartar e continuar",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Continuar editando",
|
||||||
|
"confirmations.discard_draft.edit.message": "Continuar vai descartar quaisquer mudanças feitas ao post sendo editado.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Descartar mudanças no seu post?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Continuar rascunho",
|
||||||
"confirmations.discard_edit_media.confirm": "Descartar",
|
"confirmations.discard_edit_media.confirm": "Descartar",
|
||||||
"confirmations.discard_edit_media.message": "Há mudanças não salvas na descrição ou pré-visualização da mídia. Descartar assim mesmo?",
|
"confirmations.discard_edit_media.message": "Há mudanças não salvas na descrição ou pré-visualização da mídia. Descartar assim mesmo?",
|
||||||
"confirmations.follow_to_list.confirm": "Seguir e adicionar à lista",
|
"confirmations.follow_to_list.confirm": "Seguir e adicionar à lista",
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Eliminar",
|
"confirmations.delete_list.confirm": "Eliminar",
|
||||||
"confirmations.delete_list.message": "Tens a certeza de que desejas eliminar permanentemente esta lista?",
|
"confirmations.delete_list.message": "Tens a certeza de que desejas eliminar permanentemente esta lista?",
|
||||||
"confirmations.delete_list.title": "Eliminar lista?",
|
"confirmations.delete_list.title": "Eliminar lista?",
|
||||||
|
"confirmations.discard_draft.confirm": "Descartar e continuar",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Retomar edição",
|
||||||
|
"confirmations.discard_draft.edit.message": "Continuar irá descartar quaisquer alterações que tenha feito na publicação que está a editar.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Descartar alterações à sua publicação?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Retomar rascunho",
|
||||||
|
"confirmations.discard_draft.post.message": "Continuar irá descartar a publicação que está a escrever.",
|
||||||
|
"confirmations.discard_draft.post.title": "Descartar o rascunho da publicação?",
|
||||||
"confirmations.discard_edit_media.confirm": "Descartar",
|
"confirmations.discard_edit_media.confirm": "Descartar",
|
||||||
"confirmations.discard_edit_media.message": "Tens alterações por guardar na descrição da multimédia ou pré-visualização do conteúdo. Descartar mesmo assim?",
|
"confirmations.discard_edit_media.message": "Tens alterações por guardar na descrição da multimédia ou pré-visualização do conteúdo. Descartar mesmo assim?",
|
||||||
"confirmations.follow_to_list.confirm": "Seguir e adicionar à lista",
|
"confirmations.follow_to_list.confirm": "Seguir e adicionar à lista",
|
||||||
|
|
|
@ -4,17 +4,17 @@
|
||||||
"about.default_locale": "по умолчанию",
|
"about.default_locale": "по умолчанию",
|
||||||
"about.disclaimer": "Mastodon — свободное программное обеспечение с открытым исходным кодом и торговая марка Mastodon gGmbH.",
|
"about.disclaimer": "Mastodon — свободное программное обеспечение с открытым исходным кодом и торговая марка Mastodon gGmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "Причина не указана",
|
"about.domain_blocks.no_reason_available": "Причина не указана",
|
||||||
"about.domain_blocks.preamble": "Mastodon обычно позволяет просматривать содержимое и взаимодействовать с пользователями любых других серверов в федивёрсе. Вот исключения, сделанные конкретно для этого сервера.",
|
"about.domain_blocks.preamble": "Обычно Mastodon даёт вам возможность просматривать содержимое с любых других серверов в федивёрсе и взаимодействовать с их пользователями. Вот исключения, сделанные конкретно для этого сервера:",
|
||||||
"about.domain_blocks.silenced.explanation": "Как правило, вы не увидите профили и контент с этого сервера, если специально не будете их искать или не подпишетесь на них.",
|
"about.domain_blocks.silenced.explanation": "Как правило, вы не увидите профили и содержимое с этого сервера, если только вы не запросите их с помощью поиска или не подпишетесь на пользователя с этого сервера.",
|
||||||
"about.domain_blocks.silenced.title": "Ограничивается",
|
"about.domain_blocks.silenced.title": "Ограничивается",
|
||||||
"about.domain_blocks.suspended.explanation": "Никакие данные с этого сервера не будут обрабатываться, храниться или обмениваться, что делает невозможным любое взаимодействие или связь с пользователями с этого сервера.",
|
"about.domain_blocks.suspended.explanation": "Никакие данные с этого сервера не будут обрабатываться, храниться и обмениваться, что делает невозможным любое взаимодействие и связь с пользователями на этом сервере.",
|
||||||
"about.domain_blocks.suspended.title": "Заблокирован",
|
"about.domain_blocks.suspended.title": "Заблокирован",
|
||||||
"about.language_label": "Язык",
|
"about.language_label": "Язык",
|
||||||
"about.not_available": "Эта информация не указана на данном сервере.",
|
"about.not_available": "Администраторы сервера предпочли не раскрывать эту информацию.",
|
||||||
"about.powered_by": "Децентрализованная социальная сеть на базе {mastodon}",
|
"about.powered_by": "Децентрализованная социальная сеть на базе {mastodon}",
|
||||||
"about.rules": "Правила сервера",
|
"about.rules": "Правила сервера",
|
||||||
"account.account_note_header": "Личная заметка",
|
"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": "Группа",
|
||||||
"account.block": "Заблокировать @{name}",
|
"account.block": "Заблокировать @{name}",
|
||||||
|
@ -25,10 +25,10 @@
|
||||||
"account.cancel_follow_request": "Отозвать запрос на подписку",
|
"account.cancel_follow_request": "Отозвать запрос на подписку",
|
||||||
"account.copy": "Копировать ссылку на профиль",
|
"account.copy": "Копировать ссылку на профиль",
|
||||||
"account.direct": "Упомянуть @{name} лично",
|
"account.direct": "Упомянуть @{name} лично",
|
||||||
"account.disable_notifications": "Не уведомлять о постах от @{name}",
|
"account.disable_notifications": "Не уведомлять о постах пользователя @{name}",
|
||||||
"account.domain_blocking": "Домен заблокирован",
|
"account.domain_blocking": "Домен заблокирован",
|
||||||
"account.edit_profile": "Редактировать",
|
"account.edit_profile": "Редактировать",
|
||||||
"account.enable_notifications": "Уведомлять о постах от @{name}",
|
"account.enable_notifications": "Уведомлять о постах пользователя @{name}",
|
||||||
"account.endorse": "Рекомендовать в профиле",
|
"account.endorse": "Рекомендовать в профиле",
|
||||||
"account.familiar_followers_many": "В подписках у {name1}, {name2}, и ещё {othersCount, plural, one {# человека, которого вы знаете} other {# человек, которых вы знаете}}",
|
"account.familiar_followers_many": "В подписках у {name1}, {name2}, и ещё {othersCount, plural, one {# человека, которого вы знаете} other {# человек, которых вы знаете}}",
|
||||||
"account.familiar_followers_one": "В подписках у {name1}",
|
"account.familiar_followers_one": "В подписках у {name1}",
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
"account.featured": "Рекомендации",
|
"account.featured": "Рекомендации",
|
||||||
"account.featured.accounts": "Профили",
|
"account.featured.accounts": "Профили",
|
||||||
"account.featured.hashtags": "Хештеги",
|
"account.featured.hashtags": "Хештеги",
|
||||||
"account.featured_tags.last_status_at": "Последний пост {date}",
|
"account.featured_tags.last_status_at": "Последний пост опубликован {date}",
|
||||||
"account.featured_tags.last_status_never": "Нет постов",
|
"account.featured_tags.last_status_never": "Нет постов",
|
||||||
"account.follow": "Подписаться",
|
"account.follow": "Подписаться",
|
||||||
"account.follow_back": "Подписаться в ответ",
|
"account.follow_back": "Подписаться в ответ",
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
"account.mention": "Упомянуть @{name}",
|
"account.mention": "Упомянуть @{name}",
|
||||||
"account.moved_to": "У {name} теперь новая учётная запись:",
|
"account.moved_to": "У {name} теперь новая учётная запись:",
|
||||||
"account.mute": "Игнорировать @{name}",
|
"account.mute": "Игнорировать @{name}",
|
||||||
"account.mute_notifications_short": "Отключить уведомления",
|
"account.mute_notifications_short": "Скрыть уведомления",
|
||||||
"account.mute_short": "Игнорировать",
|
"account.mute_short": "Игнорировать",
|
||||||
"account.muted": "Игнорируется",
|
"account.muted": "Игнорируется",
|
||||||
"account.muting": "Игнорируется",
|
"account.muting": "Игнорируется",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"account.unendorse": "Не рекомендовать в профиле",
|
"account.unendorse": "Не рекомендовать в профиле",
|
||||||
"account.unfollow": "Отписаться",
|
"account.unfollow": "Отписаться",
|
||||||
"account.unmute": "Не игнорировать @{name}",
|
"account.unmute": "Не игнорировать @{name}",
|
||||||
"account.unmute_notifications_short": "Включить уведомления",
|
"account.unmute_notifications_short": "Показать уведомления",
|
||||||
"account.unmute_short": "Не игнорировать",
|
"account.unmute_short": "Не игнорировать",
|
||||||
"account_note.placeholder": "Текст заметки",
|
"account_note.placeholder": "Текст заметки",
|
||||||
"admin.dashboard.daily_retention": "Уровень удержания пользователей после регистрации, в днях",
|
"admin.dashboard.daily_retention": "Уровень удержания пользователей после регистрации, в днях",
|
||||||
|
@ -129,10 +129,10 @@
|
||||||
"annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!",
|
"annual_report.summary.thanks": "Спасибо за то, что были вместе с Mastodon!",
|
||||||
"attachments_list.unprocessed": "(не обработан)",
|
"attachments_list.unprocessed": "(не обработан)",
|
||||||
"audio.hide": "Скрыть аудио",
|
"audio.hide": "Скрыть аудио",
|
||||||
"block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение, однако соблюдение им блокировки не гарантировано, поскольку некоторые серверы могут по-разному обрабатывать запросы. Публичные посты по-прежнему могут быть видны неавторизованным пользователям.",
|
"block_modal.remote_users_caveat": "Мы попросим сервер {domain} уважать ваше решение, однако нельзя гарантировать, что он будет соблюдать блокировку, поскольку некоторые серверы могут по-разному обрабатывать запросы. Публичные посты по-прежнему могут быть видны неавторизованным пользователям.",
|
||||||
"block_modal.show_less": "Показать меньше",
|
"block_modal.show_less": "Показать меньше",
|
||||||
"block_modal.show_more": "Показать больше",
|
"block_modal.show_more": "Показать больше",
|
||||||
"block_modal.they_cant_mention": "Он не сможет упоминать вас или подписаться на вас.",
|
"block_modal.they_cant_mention": "Он не сможет ни упоминать вас, ни подписаться на вас.",
|
||||||
"block_modal.they_cant_see_posts": "Он не сможет видеть ваши посты, а вы не будете видеть его посты.",
|
"block_modal.they_cant_see_posts": "Он не сможет видеть ваши посты, а вы не будете видеть его посты.",
|
||||||
"block_modal.they_will_know": "Он будет знать, что вы его блокируете.",
|
"block_modal.they_will_know": "Он будет знать, что вы его блокируете.",
|
||||||
"block_modal.title": "Заблокировать пользователя?",
|
"block_modal.title": "Заблокировать пользователя?",
|
||||||
|
@ -141,21 +141,21 @@
|
||||||
"boost_modal.reblog": "Продвинуть пост?",
|
"boost_modal.reblog": "Продвинуть пост?",
|
||||||
"boost_modal.undo_reblog": "Отменить продвижение?",
|
"boost_modal.undo_reblog": "Отменить продвижение?",
|
||||||
"bundle_column_error.copy_stacktrace": "Копировать отчёт об ошибке",
|
"bundle_column_error.copy_stacktrace": "Копировать отчёт об ошибке",
|
||||||
"bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это может быть вызвано ошибкой в нашем коде или проблемой совместимости браузера.",
|
"bundle_column_error.error.body": "Запрошенная страница не может быть отображена. Это могло произойти из-за ошибки в нашем коде или из-за проблемы совместимости браузера.",
|
||||||
"bundle_column_error.error.title": "О нет!",
|
"bundle_column_error.error.title": "О нет!",
|
||||||
"bundle_column_error.network.body": "При загрузке этой страницы произошла ошибка. Это может быть вызвано временными проблемами с вашим подключением к интернету или ошибкой на сервере.",
|
"bundle_column_error.network.body": "При загрузке этой страницы произошла ошибка. Она могла быть вызвана временными проблемами либо с вашим подключением к интернету, либо с этим сервером.",
|
||||||
"bundle_column_error.network.title": "Ошибка сети",
|
"bundle_column_error.network.title": "Ошибка сети",
|
||||||
"bundle_column_error.retry": "Попробовать снова",
|
"bundle_column_error.retry": "Попробовать снова",
|
||||||
"bundle_column_error.return": "Вернуться на главную",
|
"bundle_column_error.return": "Вернуться на главную",
|
||||||
"bundle_column_error.routing.body": "Запрошенная страница не найдена. Вы уверены, что в адресной строке указан правильный URL?",
|
"bundle_column_error.routing.body": "Запрошенная страница не найдена. Вы уверены, что в адресной строке указан правильный URL?",
|
||||||
"bundle_column_error.routing.title": "404",
|
"bundle_column_error.routing.title": "404",
|
||||||
"bundle_modal_error.close": "Закрыть",
|
"bundle_modal_error.close": "Закрыть",
|
||||||
"bundle_modal_error.message": "Что-то пошло не так при загрузке этой страницы.",
|
"bundle_modal_error.message": "Кое-что пошло не так при загрузке этой страницы.",
|
||||||
"bundle_modal_error.retry": "Попробовать снова",
|
"bundle_modal_error.retry": "Попробовать снова",
|
||||||
"closed_registrations.other_server_instructions": "Поскольку Mastodon децентрализован, вы можете зарегистрироваться на другом сервере и всё равно взаимодействовать с этим сервером.",
|
"closed_registrations.other_server_instructions": "Благодаря тому что Mastodon децентрализован, вы можете взаимодействовать с этим сервером, даже если зарегистрируетесь на другом сервере.",
|
||||||
"closed_registrations_modal.description": "Зарегистрироваться на {domain} сейчас не выйдет, но имейте в виду, что вам не нужна учётная запись именно на {domain}, чтобы использовать Mastodon.",
|
"closed_registrations_modal.description": "Зарегистрироваться на {domain} сейчас не выйдет, но имейте в виду, что вам не нужна учётная запись именно на {domain}, чтобы использовать Mastodon.",
|
||||||
"closed_registrations_modal.find_another_server": "Найти другой сервер",
|
"closed_registrations_modal.find_another_server": "Найти другой сервер",
|
||||||
"closed_registrations_modal.preamble": "Mastodon децентрализован, поэтому независимо от того, где именно вы зарегистрируетесь, вы сможете подписываться и взаимодействовать с кем угодно на этом сервере. Вы даже можете создать свой собственный сервер!",
|
"closed_registrations_modal.preamble": "Mastodon децентрализован, поэтому независимо от того, где именно вы зарегистрируетесь, вы сможете подписываться на кого угодно и взаимодействовать с кем угодно на этом сервере. Вы даже можете создать свой собственный сервер!",
|
||||||
"closed_registrations_modal.title": "Регистрация в Mastodon",
|
"closed_registrations_modal.title": "Регистрация в Mastodon",
|
||||||
"column.about": "О проекте",
|
"column.about": "О проекте",
|
||||||
"column.blocks": "Заблокированные пользователи",
|
"column.blocks": "Заблокированные пользователи",
|
||||||
|
@ -170,7 +170,7 @@
|
||||||
"column.firehose": "Живая лента",
|
"column.firehose": "Живая лента",
|
||||||
"column.follow_requests": "Запросы на подписку",
|
"column.follow_requests": "Запросы на подписку",
|
||||||
"column.home": "Главная",
|
"column.home": "Главная",
|
||||||
"column.list_members": "Добавить или удалить из списка",
|
"column.list_members": "Пользователи в списке",
|
||||||
"column.lists": "Списки",
|
"column.lists": "Списки",
|
||||||
"column.mutes": "Игнорируемые пользователи",
|
"column.mutes": "Игнорируемые пользователи",
|
||||||
"column.notifications": "Уведомления",
|
"column.notifications": "Уведомления",
|
||||||
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Удалить",
|
"confirmations.delete_list.confirm": "Удалить",
|
||||||
"confirmations.delete_list.message": "Вы уверены, что хотите навсегда удалить этот список?",
|
"confirmations.delete_list.message": "Вы уверены, что хотите навсегда удалить этот список?",
|
||||||
"confirmations.delete_list.title": "Удалить список?",
|
"confirmations.delete_list.title": "Удалить список?",
|
||||||
|
"confirmations.discard_draft.confirm": "Сбросить и продолжить",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Вернуться к редактированию",
|
||||||
|
"confirmations.discard_draft.edit.message": "Если вы продолжите, то все изменения в редактируемом в данный момент посте будут отброшены.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Сбросить несохранённые изменения?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Вернуться к черновику",
|
||||||
|
"confirmations.discard_draft.post.message": "Если вы продолжите, то набираемый в данный момент пост будет стёрт.",
|
||||||
|
"confirmations.discard_draft.post.title": "Стереть несохранённый черновик поста?",
|
||||||
"confirmations.discard_edit_media.confirm": "Сбросить",
|
"confirmations.discard_edit_media.confirm": "Сбросить",
|
||||||
"confirmations.discard_edit_media.message": "У вас есть несохранённые изменения, касающиеся описания медиа или области предпросмотра. Сбросить их?",
|
"confirmations.discard_edit_media.message": "У вас есть несохранённые изменения, касающиеся описания медиа или области предпросмотра. Сбросить их?",
|
||||||
"confirmations.follow_to_list.confirm": "Подписаться и добавить",
|
"confirmations.follow_to_list.confirm": "Подписаться и добавить",
|
||||||
|
@ -228,12 +235,12 @@
|
||||||
"confirmations.logout.message": "Вы уверены, что хотите выйти?",
|
"confirmations.logout.message": "Вы уверены, что хотите выйти?",
|
||||||
"confirmations.logout.title": "Выйти?",
|
"confirmations.logout.title": "Выйти?",
|
||||||
"confirmations.missing_alt_text.confirm": "Добавить",
|
"confirmations.missing_alt_text.confirm": "Добавить",
|
||||||
"confirmations.missing_alt_text.message": "Ваш пост содержит медиафайлы без альтернативного текста. Добавляя описания, вы делаете ваш контент доступным для более широкого круга людей.",
|
"confirmations.missing_alt_text.message": "Ваш пост содержит медиа без альтернативного текста. Добавляя описания, вы делаете ваш контент доступным для более широкого круга людей.",
|
||||||
"confirmations.missing_alt_text.secondary": "Опубликовать",
|
"confirmations.missing_alt_text.secondary": "Опубликовать",
|
||||||
"confirmations.missing_alt_text.title": "Добавить альтернативный текст?",
|
"confirmations.missing_alt_text.title": "Добавить альтернативный текст?",
|
||||||
"confirmations.mute.confirm": "Игнорировать",
|
"confirmations.mute.confirm": "Игнорировать",
|
||||||
"confirmations.redraft.confirm": "Удалить и исправить",
|
"confirmations.redraft.confirm": "Удалить и исправить",
|
||||||
"confirmations.redraft.message": "Вы уверены, что хотите удалить этот пост и создать его заново? Взаимодействия, такие как добавление в избранное или продвижение, будут потеряны, а ответы к оригинальному посту перестанут на него ссылаться.",
|
"confirmations.redraft.message": "Вы уверены, что хотите удалить этот пост и создать его заново? Взаимодействия, такие как добавление в избранное и продвижение, будут потеряны, а ответы к оригинальному посту перестанут на него ссылаться.",
|
||||||
"confirmations.redraft.title": "Удалить и создать пост заново?",
|
"confirmations.redraft.title": "Удалить и создать пост заново?",
|
||||||
"confirmations.remove_from_followers.confirm": "Убрать подписчика",
|
"confirmations.remove_from_followers.confirm": "Убрать подписчика",
|
||||||
"confirmations.remove_from_followers.message": "Пользователь {name} перестанет быть подписан на вас. Продолжить?",
|
"confirmations.remove_from_followers.message": "Пользователь {name} перестанет быть подписан на вас. Продолжить?",
|
||||||
|
@ -257,7 +264,7 @@
|
||||||
"directory.recently_active": "Недавно активные",
|
"directory.recently_active": "Недавно активные",
|
||||||
"disabled_account_banner.account_settings": "Настройки учётной записи",
|
"disabled_account_banner.account_settings": "Настройки учётной записи",
|
||||||
"disabled_account_banner.text": "Ваша учётная запись {disabledAccount} в настоящее время отключена.",
|
"disabled_account_banner.text": "Ваша учётная запись {disabledAccount} в настоящее время отключена.",
|
||||||
"dismissable_banner.community_timeline": "Это самые новые публичные посты от тех пользователей, чьи учётные записи находятся на сервере {domain}.",
|
"dismissable_banner.community_timeline": "Это самые новые публичные посты от тех пользователей, чьи учётные записи размещены на сервере {domain}.",
|
||||||
"dismissable_banner.dismiss": "Закрыть",
|
"dismissable_banner.dismiss": "Закрыть",
|
||||||
"dismissable_banner.public_timeline": "Это самые новые публичные посты от всех тех людей в федивёрсе, на которых подписаны пользователи {domain}.",
|
"dismissable_banner.public_timeline": "Это самые новые публичные посты от всех тех людей в федивёрсе, на которых подписаны пользователи {domain}.",
|
||||||
"domain_block_modal.block": "Заблокировать сервер",
|
"domain_block_modal.block": "Заблокировать сервер",
|
||||||
|
@ -268,9 +275,9 @@
|
||||||
"domain_block_modal.title": "Заблокировать домен?",
|
"domain_block_modal.title": "Заблокировать домен?",
|
||||||
"domain_block_modal.you_will_lose_num_followers": "Вы потеряете {followersCount, plural, one {{followersCountDisplay} подписчика} few {{followersCountDisplay} подписчика} other {{followersCountDisplay} подписчиков}} и {followingCount, plural, one {{followingCountDisplay} подписку} few {{followingCountDisplay} подписки} other {{followingCountDisplay} подписок}}.",
|
"domain_block_modal.you_will_lose_num_followers": "Вы потеряете {followersCount, plural, one {{followersCountDisplay} подписчика} few {{followersCountDisplay} подписчика} other {{followersCountDisplay} подписчиков}} и {followingCount, plural, one {{followingCountDisplay} подписку} few {{followingCountDisplay} подписки} other {{followingCountDisplay} подписок}}.",
|
||||||
"domain_block_modal.you_will_lose_relationships": "Вы потеряете все подписки и всех подписчиков с этого сервера.",
|
"domain_block_modal.you_will_lose_relationships": "Вы потеряете все подписки и всех подписчиков с этого сервера.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Вы не будете видеть посты или уведомления от пользователей с этого сервера.",
|
"domain_block_modal.you_wont_see_posts": "Вы не будете видеть посты и уведомления от пользователей с этого сервера.",
|
||||||
"domain_pill.activitypub_lets_connect": "Благодаря ему вы можете связываться и взаимодействовать не только с пользователями Mastodon, но и с пользователями других платформ.",
|
"domain_pill.activitypub_lets_connect": "Благодаря ему вы можете связываться и взаимодействовать не только с пользователями Mastodon, но и с пользователями других платформ.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub это язык, на котором Mastodon говорит с другими социальными сетями.",
|
"domain_pill.activitypub_like_language": "ActivityPub — это язык, на котором Mastodon говорит с другими социальными сетями.",
|
||||||
"domain_pill.server": "Сервер",
|
"domain_pill.server": "Сервер",
|
||||||
"domain_pill.their_handle": "Адрес пользователя:",
|
"domain_pill.their_handle": "Адрес пользователя:",
|
||||||
"domain_pill.their_server": "Цифровой дом пользователя, где находятся все его посты.",
|
"domain_pill.their_server": "Цифровой дом пользователя, где находятся все его посты.",
|
||||||
|
@ -312,7 +319,7 @@
|
||||||
"empty_column.direct": "Вы ещё не упоминали кого-либо и сами не были ни разу упомянуты лично. Все личные упоминания будут показаны здесь.",
|
"empty_column.direct": "Вы ещё не упоминали кого-либо и сами не были ни разу упомянуты лично. Все личные упоминания будут показаны здесь.",
|
||||||
"empty_column.domain_blocks": "Заблокированных доменов пока нет.",
|
"empty_column.domain_blocks": "Заблокированных доменов пока нет.",
|
||||||
"empty_column.explore_statuses": "Сейчас нет популярных постов. Проверьте позже!",
|
"empty_column.explore_statuses": "Сейчас нет популярных постов. Проверьте позже!",
|
||||||
"empty_column.favourited_statuses": "Вы ещё не добавили ни один пост в избранное. Все добавленные вами в избранное посты будут показаны здесь.",
|
"empty_column.favourited_statuses": "Вы ещё не добавили ни одного поста в избранное. Все добавленные вами в избранное посты будут показаны здесь.",
|
||||||
"empty_column.favourites": "Никто ещё не добавил этот пост в избранное. Все пользователи, добавившие этот пост в избранное, будут показаны здесь.",
|
"empty_column.favourites": "Никто ещё не добавил этот пост в избранное. Все пользователи, добавившие этот пост в избранное, будут показаны здесь.",
|
||||||
"empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.",
|
"empty_column.follow_requests": "Вам ещё не приходили запросы на подписку. Все новые запросы будут показаны здесь.",
|
||||||
"empty_column.followed_tags": "Вы ещё не подписались ни на один хештег. Все хештеги, на которые вы подписаны, будут показаны здесь.",
|
"empty_column.followed_tags": "Вы ещё не подписались ни на один хештег. Все хештеги, на которые вы подписаны, будут показаны здесь.",
|
||||||
|
@ -339,7 +346,7 @@
|
||||||
"featured_carousel.post": "Пост",
|
"featured_carousel.post": "Пост",
|
||||||
"featured_carousel.previous": "Предыдущий",
|
"featured_carousel.previous": "Предыдущий",
|
||||||
"featured_carousel.slide": "{index} из {total}",
|
"featured_carousel.slide": "{index} из {total}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "Этот фильтр не применяется в том контексте, в котором вы видели этот пост. Если вы хотите, чтобы пост был отфильтрован в этом контексте, необходимо редактировать фильтр.",
|
"filter_modal.added.context_mismatch_explanation": "Этот фильтр не применяется в том контексте, в котором вы видели этот пост. Если вы хотите, чтобы пост был отфильтрован в текущем контексте, необходимо редактировать фильтр.",
|
||||||
"filter_modal.added.context_mismatch_title": "Несоответствие контекста!",
|
"filter_modal.added.context_mismatch_title": "Несоответствие контекста!",
|
||||||
"filter_modal.added.expired_explanation": "Этот фильтр истёк. Чтобы он был применён, вам нужно изменить срок действия фильтра.",
|
"filter_modal.added.expired_explanation": "Этот фильтр истёк. Чтобы он был применён, вам нужно изменить срок действия фильтра.",
|
||||||
"filter_modal.added.expired_title": "Истёкший фильтр!",
|
"filter_modal.added.expired_title": "Истёкший фильтр!",
|
||||||
|
@ -356,7 +363,7 @@
|
||||||
"filter_modal.select_filter.title": "Фильтровать этот пост",
|
"filter_modal.select_filter.title": "Фильтровать этот пост",
|
||||||
"filter_modal.title.status": "Фильтровать пост",
|
"filter_modal.title.status": "Фильтровать пост",
|
||||||
"filter_warning.matches_filter": "Соответствует фильтру «<span>{title}</span>»",
|
"filter_warning.matches_filter": "Соответствует фильтру «<span>{title}</span>»",
|
||||||
"filtered_notifications_banner.pending_requests": "От {count, plural, =0 {не знакомых вам людей} one {# человека, которого вы можете знать} other {# человек, которых вы можете знать}}",
|
"filtered_notifications_banner.pending_requests": "От {count, plural, =0 {незнакомых вам людей} one {# человека, которого вы можете знать} other {# человек, которых вы можете знать}}",
|
||||||
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
|
"filtered_notifications_banner.title": "Отфильтрованные уведомления",
|
||||||
"firehose.all": "Всё вместе",
|
"firehose.all": "Всё вместе",
|
||||||
"firehose.local": "Этот сервер",
|
"firehose.local": "Этот сервер",
|
||||||
|
@ -406,18 +413,18 @@
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}",
|
"hashtag.counter_by_uses": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}} сегодня",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}} сегодня",
|
||||||
"hashtag.feature": "Рекомендовать в профиле",
|
"hashtag.feature": "Рекомендовать в профиле",
|
||||||
"hashtag.follow": "Подписаться на новые посты",
|
"hashtag.follow": "Подписаться на хештег",
|
||||||
"hashtag.mute": "Игнорировать #{hashtag}",
|
"hashtag.mute": "Игнорировать #{hashtag}",
|
||||||
"hashtag.unfeature": "Не рекомендовать в профиле",
|
"hashtag.unfeature": "Не рекомендовать в профиле",
|
||||||
"hashtag.unfollow": "Отписаться от новых постов",
|
"hashtag.unfollow": "Отписаться от хештега",
|
||||||
"hashtags.and_other": "…и {count, plural, other {ещё #}}",
|
"hashtags.and_other": "…и {count, plural, other {ещё #}}",
|
||||||
"hints.profiles.followers_may_be_missing": "Некоторые подписчики этого профиля могут отсутствовать.",
|
"hints.profiles.followers_may_be_missing": "Некоторые подписчики этого профиля могут здесь отсутствовать.",
|
||||||
"hints.profiles.follows_may_be_missing": "Некоторые подписки этого профиля могут отсутствовать.",
|
"hints.profiles.follows_may_be_missing": "Некоторые подписки этого профиля могут здесь отсутствовать.",
|
||||||
"hints.profiles.posts_may_be_missing": "Некоторые посты в этом профиле могут отсутствовать.",
|
"hints.profiles.posts_may_be_missing": "Некоторые посты в этом профиле могут здесь отсутствовать.",
|
||||||
"hints.profiles.see_more_followers": "Перейдите на {domain}, чтобы увидеть всех подписчиков",
|
"hints.profiles.see_more_followers": "Перейдите на {domain}, чтобы увидеть всех подписчиков",
|
||||||
"hints.profiles.see_more_follows": "Перейдите на {domain}, чтобы увидеть все подписки",
|
"hints.profiles.see_more_follows": "Перейдите на {domain}, чтобы увидеть все подписки",
|
||||||
"hints.profiles.see_more_posts": "Перейдите на {domain}, чтобы увидеть все посты",
|
"hints.profiles.see_more_posts": "Перейдите на {domain}, чтобы увидеть все посты",
|
||||||
"hints.threads.replies_may_be_missing": "Некоторые ответы с других серверов могут отсутствовать.",
|
"hints.threads.replies_may_be_missing": "Некоторые ответы с других серверов могут здесь отсутствовать.",
|
||||||
"hints.threads.see_more": "Перейдите на {domain}, чтобы увидеть все ответы",
|
"hints.threads.see_more": "Перейдите на {domain}, чтобы увидеть все ответы",
|
||||||
"home.column_settings.show_quotes": "Показывать цитирования",
|
"home.column_settings.show_quotes": "Показывать цитирования",
|
||||||
"home.column_settings.show_reblogs": "Показывать продвижения",
|
"home.column_settings.show_reblogs": "Показывать продвижения",
|
||||||
|
@ -459,7 +466,7 @@
|
||||||
"intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
|
"intervals.full.hours": "{number, plural, one {# час} few {# часа} other {# часов}}",
|
||||||
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
|
"intervals.full.minutes": "{number, plural, one {# минута} few {# минуты} other {# минут}}",
|
||||||
"keyboard_shortcuts.back": "перейти назад",
|
"keyboard_shortcuts.back": "перейти назад",
|
||||||
"keyboard_shortcuts.blocked": "открыть список заблокированных",
|
"keyboard_shortcuts.blocked": "открыть список заблокированных пользователей",
|
||||||
"keyboard_shortcuts.boost": "продвинуть пост",
|
"keyboard_shortcuts.boost": "продвинуть пост",
|
||||||
"keyboard_shortcuts.column": "фокус на одном из столбцов",
|
"keyboard_shortcuts.column": "фокус на одном из столбцов",
|
||||||
"keyboard_shortcuts.compose": "фокус на поле ввода",
|
"keyboard_shortcuts.compose": "фокус на поле ввода",
|
||||||
|
@ -476,7 +483,7 @@
|
||||||
"keyboard_shortcuts.legend": "показать эту справку",
|
"keyboard_shortcuts.legend": "показать эту справку",
|
||||||
"keyboard_shortcuts.local": "перейти к локальной ленте",
|
"keyboard_shortcuts.local": "перейти к локальной ленте",
|
||||||
"keyboard_shortcuts.mention": "упомянуть автора поста",
|
"keyboard_shortcuts.mention": "упомянуть автора поста",
|
||||||
"keyboard_shortcuts.muted": "открыть список игнорируемых",
|
"keyboard_shortcuts.muted": "открыть список игнорируемых пользователей",
|
||||||
"keyboard_shortcuts.my_profile": "перейти к своему профилю",
|
"keyboard_shortcuts.my_profile": "перейти к своему профилю",
|
||||||
"keyboard_shortcuts.notifications": "перейти к уведомлениям",
|
"keyboard_shortcuts.notifications": "перейти к уведомлениям",
|
||||||
"keyboard_shortcuts.open_media": "открыть медиа",
|
"keyboard_shortcuts.open_media": "открыть медиа",
|
||||||
|
@ -539,7 +546,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.account_settings": "Пароль и безопасность",
|
"navigation_bar.account_settings": "Пароль и безопасность",
|
||||||
|
@ -600,9 +607,9 @@
|
||||||
"notification.moderation_warning": "Модераторы вынесли вам предупреждение",
|
"notification.moderation_warning": "Модераторы вынесли вам предупреждение",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Некоторые ваши посты были удалены.",
|
"notification.moderation_warning.action_delete_statuses": "Некоторые ваши посты были удалены.",
|
||||||
"notification.moderation_warning.action_disable": "Ваша учётная запись была отключена.",
|
"notification.moderation_warning.action_disable": "Ваша учётная запись была отключена.",
|
||||||
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некоторые ваши посты получили отметку деликатного содержания.",
|
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Некоторые ваши посты были отмечены как содержимое деликатного характера.",
|
||||||
"notification.moderation_warning.action_none": "Модераторы вынесли вам предупреждение.",
|
"notification.moderation_warning.action_none": "Модераторы вынесли вам предупреждение.",
|
||||||
"notification.moderation_warning.action_sensitive": "С этого момента ваши посты будут иметь отметку деликатного содержания.",
|
"notification.moderation_warning.action_sensitive": "С этого момента все ваши новые посты будут отмечены как содержимое деликатного характера.",
|
||||||
"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": "Ваш опрос завершился",
|
||||||
|
@ -611,9 +618,9 @@
|
||||||
"notification.reblog.name_and_others_with_link": "{name} и ещё <a>{count, plural, one {# пользователь} few {# пользователя} other {# пользователей}}</a> продвинули ваш пост",
|
"notification.reblog.name_and_others_with_link": "{name} и ещё <a>{count, plural, one {# пользователь} few {# пользователя} 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 {# пользователей, на которых вы подписаны}}.",
|
||||||
"notification.relationships_severance_event.learn_more": "Узнать больше",
|
"notification.relationships_severance_event.learn_more": "Узнать больше",
|
||||||
"notification.relationships_severance_event.user_domain_block": "Вы заблокировали сервер {target}, где размещены учётные записи у {followersCount} ваших подписчиков и {followingCount, plural, one {# пользователя, на которого вы подписаны} other {# пользователей, на которых вы подписаны}}.",
|
"notification.relationships_severance_event.user_domain_block": "Вы заблокировали сервер {target}, где размещены учётные записи {followersCount} ваших подписчиков и {followingCount, plural, one {# пользователя, на которого вы подписаны} other {# пользователей, на которых вы подписаны}}.",
|
||||||
"notification.status": "{name} опубликовал(а) новый пост",
|
"notification.status": "{name} опубликовал(а) новый пост",
|
||||||
"notification.update": "{name} отредактировал(а) пост",
|
"notification.update": "{name} отредактировал(а) пост",
|
||||||
"notification_requests.accept": "Принять",
|
"notification_requests.accept": "Принять",
|
||||||
|
@ -649,7 +656,7 @@
|
||||||
"notifications.column_settings.group": "Группировать",
|
"notifications.column_settings.group": "Группировать",
|
||||||
"notifications.column_settings.mention": "Вас упомянули в посте:",
|
"notifications.column_settings.mention": "Вас упомянули в посте:",
|
||||||
"notifications.column_settings.poll": "Опрос, в котором вы приняли участие, завершился:",
|
"notifications.column_settings.poll": "Опрос, в котором вы приняли участие, завершился:",
|
||||||
"notifications.column_settings.push": "Пуш-уведомления",
|
"notifications.column_settings.push": "Push-уведомления",
|
||||||
"notifications.column_settings.reblog": "Ваш пост продвинули:",
|
"notifications.column_settings.reblog": "Ваш пост продвинули:",
|
||||||
"notifications.column_settings.show": "Отображать в списке",
|
"notifications.column_settings.show": "Отображать в списке",
|
||||||
"notifications.column_settings.sound": "Проигрывать звук",
|
"notifications.column_settings.sound": "Проигрывать звук",
|
||||||
|
@ -858,7 +865,7 @@
|
||||||
"status.load_more": "Загрузить ещё",
|
"status.load_more": "Загрузить ещё",
|
||||||
"status.media.open": "Нажмите, чтобы открыть.",
|
"status.media.open": "Нажмите, чтобы открыть.",
|
||||||
"status.media.show": "Нажмите, чтобы показать",
|
"status.media.show": "Нажмите, чтобы показать",
|
||||||
"status.media_hidden": "Вложения скрыты",
|
"status.media_hidden": "Медиа скрыты",
|
||||||
"status.mention": "Упомянуть @{name}",
|
"status.mention": "Упомянуть @{name}",
|
||||||
"status.more": "Ещё",
|
"status.more": "Ещё",
|
||||||
"status.mute": "Игнорировать @{name}",
|
"status.mute": "Игнорировать @{name}",
|
||||||
|
@ -866,7 +873,8 @@
|
||||||
"status.open": "Открыть пост",
|
"status.open": "Открыть пост",
|
||||||
"status.pin": "Закрепить в профиле",
|
"status.pin": "Закрепить в профиле",
|
||||||
"status.quote_error.filtered": "Скрыто одним из ваших фильтров",
|
"status.quote_error.filtered": "Скрыто одним из ваших фильтров",
|
||||||
"status.quote_error.removed": "Этот пост был удалён его автором.",
|
"status.quote_error.not_found": "Пост не может быть показан.",
|
||||||
|
"status.quote_error.removed": "Пост был удалён его автором.",
|
||||||
"status.read_more": "Читать далее",
|
"status.read_more": "Читать далее",
|
||||||
"status.reblog": "Продвинуть",
|
"status.reblog": "Продвинуть",
|
||||||
"status.reblog_private": "Продвинуть для своей аудитории",
|
"status.reblog_private": "Продвинуть для своей аудитории",
|
||||||
|
@ -881,7 +889,7 @@
|
||||||
"status.reply": "Ответить",
|
"status.reply": "Ответить",
|
||||||
"status.replyAll": "Ответить в обсуждении",
|
"status.replyAll": "Ответить в обсуждении",
|
||||||
"status.report": "Пожаловаться на @{name}",
|
"status.report": "Пожаловаться на @{name}",
|
||||||
"status.sensitive_warning": "Медиа деликатного содержания",
|
"status.sensitive_warning": "Медиа деликатного характера",
|
||||||
"status.share": "Поделиться",
|
"status.share": "Поделиться",
|
||||||
"status.show_less_all": "Свернуть все предупреждения о содержании в ветке",
|
"status.show_less_all": "Свернуть все предупреждения о содержании в ветке",
|
||||||
"status.show_more_all": "Развернуть все предупреждения о содержании в ветке",
|
"status.show_more_all": "Развернуть все предупреждения о содержании в ветке",
|
||||||
|
@ -918,7 +926,7 @@
|
||||||
"upload_button.label": "Прикрепить фото, видео или аудио",
|
"upload_button.label": "Прикрепить фото, видео или аудио",
|
||||||
"upload_error.limit": "Превышено максимальное количество вложений.",
|
"upload_error.limit": "Превышено максимальное количество вложений.",
|
||||||
"upload_error.poll": "К опросам нельзя прикреплять файлы.",
|
"upload_error.poll": "К опросам нельзя прикреплять файлы.",
|
||||||
"upload_form.drag_and_drop.instructions": "Чтобы выбрать вложение, нажмите \"Пробел\" (Space) или \"Ввод\" (Enter). Используйте клавиши со стрелками, чтобы передвинуть вложение в любом направлении. Нажмите \"Пробел\" (Space) или \"Ввод\" (Enter) ещё раз, чтобы переместить вложение на новое место, либо нажмите кнопку \"Выйти\" (Escape), чтобы отменить перемещение.",
|
"upload_form.drag_and_drop.instructions": "Чтобы выбрать вложение, нажмите \"Пробел\" (Space) или \"Ввод\" (Enter). Используйте клавиши со стрелками, чтобы передвинуть вложение в любом направлении. Нажмите \"Пробел\" (Space) или \"Ввод\" (Enter) ещё раз, чтобы переместить вложение на новое место, либо нажмите кнопку \"Выйти\" (Escape) для отмены перемещения.",
|
||||||
"upload_form.drag_and_drop.on_drag_cancel": "Перемещение отменено. Вложение {item} было оставлено на прежнем месте.",
|
"upload_form.drag_and_drop.on_drag_cancel": "Перемещение отменено. Вложение {item} было оставлено на прежнем месте.",
|
||||||
"upload_form.drag_and_drop.on_drag_end": "Вложение {item} было перемещено.",
|
"upload_form.drag_and_drop.on_drag_end": "Вложение {item} было перемещено.",
|
||||||
"upload_form.drag_and_drop.on_drag_over": "Вложение {item} было передвинуто.",
|
"upload_form.drag_and_drop.on_drag_over": "Вложение {item} было передвинуто.",
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
"account.edit_profile": "Upraviť profil",
|
"account.edit_profile": "Upraviť profil",
|
||||||
"account.enable_notifications": "Zapnúť upozornenia na príspevky od @{name}",
|
"account.enable_notifications": "Zapnúť upozornenia na príspevky od @{name}",
|
||||||
"account.endorse": "Zobraziť na vlastnom profile",
|
"account.endorse": "Zobraziť na vlastnom profile",
|
||||||
|
"account.featured": "Zviditeľnené",
|
||||||
"account.featured.accounts": "Profily",
|
"account.featured.accounts": "Profily",
|
||||||
"account.featured.hashtags": "Hashtagy",
|
"account.featured.hashtags": "Hashtagy",
|
||||||
"account.featured_tags.last_status_at": "Posledný príspevok dňa {date}",
|
"account.featured_tags.last_status_at": "Posledný príspevok dňa {date}",
|
||||||
|
|
|
@ -214,6 +214,13 @@
|
||||||
"confirmations.delete_list.confirm": "Fshije",
|
"confirmations.delete_list.confirm": "Fshije",
|
||||||
"confirmations.delete_list.message": "Jeni i sigurt se doni të fshihet përgjithmonë kjo listë?",
|
"confirmations.delete_list.message": "Jeni i sigurt se doni të fshihet përgjithmonë kjo listë?",
|
||||||
"confirmations.delete_list.title": "Të fshihet lista?",
|
"confirmations.delete_list.title": "Të fshihet lista?",
|
||||||
|
"confirmations.discard_draft.confirm": "Hidhe tej dhe vazhdo",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Rikthejuni përpunimit",
|
||||||
|
"confirmations.discard_draft.edit.message": "Vazhdimi do të hedhë tej çfarëdo ndryshimesh që keni bërë te postimi që po përpunoni aktualisht.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Të hidhen tej ndryshimet te postimi juaj?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Rikthejuni skicës",
|
||||||
|
"confirmations.discard_draft.post.message": "Vazhdimi do të hedhë tej postimin që po hartoni aktualisht.",
|
||||||
|
"confirmations.discard_draft.post.title": "Të hidhet tej skica e postimit tuaj?",
|
||||||
"confirmations.discard_edit_media.confirm": "Hidhe tej",
|
"confirmations.discard_edit_media.confirm": "Hidhe tej",
|
||||||
"confirmations.discard_edit_media.message": "Keni ndryshime të paruajtura te përshkrimi ose paraparja e medias, të hidhen tej, sido qoftë?",
|
"confirmations.discard_edit_media.message": "Keni ndryshime të paruajtura te përshkrimi ose paraparja e medias, të hidhen tej, sido qoftë?",
|
||||||
"confirmations.follow_to_list.confirm": "Ndiqe dhe shtoje te listë",
|
"confirmations.follow_to_list.confirm": "Ndiqe dhe shtoje te listë",
|
||||||
|
@ -791,6 +798,7 @@
|
||||||
"report_notification.categories.violation": "Cenim rregullash",
|
"report_notification.categories.violation": "Cenim rregullash",
|
||||||
"report_notification.categories.violation_sentence": "cenim rregullash",
|
"report_notification.categories.violation_sentence": "cenim rregullash",
|
||||||
"report_notification.open": "Hape raportimin",
|
"report_notification.open": "Hape raportimin",
|
||||||
|
"search.clear": "Spastroje kërkimin",
|
||||||
"search.no_recent_searches": "Pa kërkime së fundi",
|
"search.no_recent_searches": "Pa kërkime së fundi",
|
||||||
"search.placeholder": "Kërkoni",
|
"search.placeholder": "Kërkoni",
|
||||||
"search.quick_action.account_search": "Profile me përputhje me {x}",
|
"search.quick_action.account_search": "Profile me përputhje me {x}",
|
||||||
|
|
|
@ -219,6 +219,13 @@
|
||||||
"confirmations.delete_list.confirm": "Radera",
|
"confirmations.delete_list.confirm": "Radera",
|
||||||
"confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?",
|
"confirmations.delete_list.message": "Är du säker på att du vill radera denna lista permanent?",
|
||||||
"confirmations.delete_list.title": "Ta bort listan?",
|
"confirmations.delete_list.title": "Ta bort listan?",
|
||||||
|
"confirmations.discard_draft.confirm": "Släng bort och fortsätt",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "Fortsätt redigera",
|
||||||
|
"confirmations.discard_draft.edit.message": "Fortsätter du, kommer ändringarna till inlägget att förkastas.",
|
||||||
|
"confirmations.discard_draft.edit.title": "Vill du förkasta ändringarna i inlägget?",
|
||||||
|
"confirmations.discard_draft.post.cancel": "Återuppta utkast",
|
||||||
|
"confirmations.discard_draft.post.message": "Fortsätter du, kommer inlägget du skriver att förkastas.",
|
||||||
|
"confirmations.discard_draft.post.title": "Vill du förkasta utkastet?",
|
||||||
"confirmations.discard_edit_media.confirm": "Kasta",
|
"confirmations.discard_edit_media.confirm": "Kasta",
|
||||||
"confirmations.discard_edit_media.message": "Du har osparade ändringar till mediabeskrivningen eller förhandsgranskningen, kasta bort dem ändå?",
|
"confirmations.discard_edit_media.message": "Du har osparade ändringar till mediabeskrivningen eller förhandsgranskningen, kasta bort dem ändå?",
|
||||||
"confirmations.follow_to_list.confirm": "Följ och lägg till i listan",
|
"confirmations.follow_to_list.confirm": "Följ och lägg till i listan",
|
||||||
|
@ -557,6 +564,8 @@
|
||||||
"navigation_bar.follows_and_followers": "Följer och följare",
|
"navigation_bar.follows_and_followers": "Följer och följare",
|
||||||
"navigation_bar.import_export": "Importera och exportera",
|
"navigation_bar.import_export": "Importera och exportera",
|
||||||
"navigation_bar.lists": "Listor",
|
"navigation_bar.lists": "Listor",
|
||||||
|
"navigation_bar.live_feed_local": "Direkt flöde (lokalt)",
|
||||||
|
"navigation_bar.live_feed_public": "Direkt flöde (publikt)",
|
||||||
"navigation_bar.logout": "Logga ut",
|
"navigation_bar.logout": "Logga ut",
|
||||||
"navigation_bar.moderation": "Moderering",
|
"navigation_bar.moderation": "Moderering",
|
||||||
"navigation_bar.more": "Fler",
|
"navigation_bar.more": "Fler",
|
||||||
|
@ -796,6 +805,7 @@
|
||||||
"report_notification.categories.violation": "Regelöverträdelse",
|
"report_notification.categories.violation": "Regelöverträdelse",
|
||||||
"report_notification.categories.violation_sentence": "regelöverträdelse",
|
"report_notification.categories.violation_sentence": "regelöverträdelse",
|
||||||
"report_notification.open": "Öppna rapport",
|
"report_notification.open": "Öppna rapport",
|
||||||
|
"search.clear": "Rensa sökning",
|
||||||
"search.no_recent_searches": "Inga sökningar nyligen",
|
"search.no_recent_searches": "Inga sökningar nyligen",
|
||||||
"search.placeholder": "Sök",
|
"search.placeholder": "Sök",
|
||||||
"search.quick_action.account_search": "Profiler som matchar {x}",
|
"search.quick_action.account_search": "Profiler som matchar {x}",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"about.blocks": "เซิร์ฟเวอร์ที่ได้รับการกลั่นกรอง",
|
"about.blocks": "เซิร์ฟเวอร์ที่ได้รับการกลั่นกรอง",
|
||||||
"about.contact": "ติดต่อ:",
|
"about.contact": "ติดต่อ:",
|
||||||
|
"about.default_locale": "ค่าเริ่มต้น",
|
||||||
"about.disclaimer": "Mastodon เป็นซอฟต์แวร์เสรี โอเพนซอร์ส และเครื่องหมายการค้าของ Mastodon gGmbH",
|
"about.disclaimer": "Mastodon เป็นซอฟต์แวร์เสรี โอเพนซอร์ส และเครื่องหมายการค้าของ Mastodon gGmbH",
|
||||||
"about.domain_blocks.no_reason_available": "เหตุผลไม่พร้อมใช้งาน",
|
"about.domain_blocks.no_reason_available": "เหตุผลไม่พร้อมใช้งาน",
|
||||||
"about.domain_blocks.preamble": "โดยทั่วไป Mastodon อนุญาตให้คุณดูเนื้อหาจากและโต้ตอบกับผู้ใช้จากเซิร์ฟเวอร์อื่นใดในจักรวาลสหพันธ์ นี่คือข้อยกเว้นที่ทำขึ้นในเซิร์ฟเวอร์นี้โดยเฉพาะ",
|
"about.domain_blocks.preamble": "โดยทั่วไป Mastodon อนุญาตให้คุณดูเนื้อหาจากและโต้ตอบกับผู้ใช้จากเซิร์ฟเวอร์อื่นใดในจักรวาลสหพันธ์ นี่คือข้อยกเว้นที่ทำขึ้นในเซิร์ฟเวอร์นี้โดยเฉพาะ",
|
||||||
|
@ -8,6 +9,7 @@
|
||||||
"about.domain_blocks.silenced.title": "จำกัดอยู่",
|
"about.domain_blocks.silenced.title": "จำกัดอยู่",
|
||||||
"about.domain_blocks.suspended.explanation": "จะไม่ประมวลผล จัดเก็บ หรือแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์นี้ ทำให้การโต้ตอบหรือการสื่อสารใด ๆ กับผู้ใช้จากเซิร์ฟเวอร์นี้เป็นไปไม่ได้",
|
"about.domain_blocks.suspended.explanation": "จะไม่ประมวลผล จัดเก็บ หรือแลกเปลี่ยนข้อมูลจากเซิร์ฟเวอร์นี้ ทำให้การโต้ตอบหรือการสื่อสารใด ๆ กับผู้ใช้จากเซิร์ฟเวอร์นี้เป็นไปไม่ได้",
|
||||||
"about.domain_blocks.suspended.title": "ระงับอยู่",
|
"about.domain_blocks.suspended.title": "ระงับอยู่",
|
||||||
|
"about.language_label": "ภาษา",
|
||||||
"about.not_available": "ไม่ได้ทำให้ข้อมูลนี้พร้อมใช้งานในเซิร์ฟเวอร์นี้",
|
"about.not_available": "ไม่ได้ทำให้ข้อมูลนี้พร้อมใช้งานในเซิร์ฟเวอร์นี้",
|
||||||
"about.powered_by": "สื่อสังคมแบบกระจายศูนย์ที่ขับเคลื่อนโดย {mastodon}",
|
"about.powered_by": "สื่อสังคมแบบกระจายศูนย์ที่ขับเคลื่อนโดย {mastodon}",
|
||||||
"about.rules": "กฎของเซิร์ฟเวอร์",
|
"about.rules": "กฎของเซิร์ฟเวอร์",
|
||||||
|
@ -19,14 +21,18 @@
|
||||||
"account.block_domain": "ปิดกั้นโดเมน {domain}",
|
"account.block_domain": "ปิดกั้นโดเมน {domain}",
|
||||||
"account.block_short": "ปิดกั้น",
|
"account.block_short": "ปิดกั้น",
|
||||||
"account.blocked": "ปิดกั้นอยู่",
|
"account.blocked": "ปิดกั้นอยู่",
|
||||||
|
"account.blocking": "กำลังปิดกั้น",
|
||||||
"account.cancel_follow_request": "ยกเลิกการติดตาม",
|
"account.cancel_follow_request": "ยกเลิกการติดตาม",
|
||||||
"account.copy": "คัดลอกลิงก์ไปยังโปรไฟล์",
|
"account.copy": "คัดลอกลิงก์ไปยังโปรไฟล์",
|
||||||
"account.direct": "กล่าวถึง @{name} แบบส่วนตัว",
|
"account.direct": "กล่าวถึง @{name} แบบส่วนตัว",
|
||||||
"account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์",
|
"account.disable_notifications": "หยุดแจ้งเตือนฉันเมื่อ @{name} โพสต์",
|
||||||
"account.domain_blocking": "โดเมน",
|
"account.domain_blocking": "กำลังปิดกั้นโดเมน",
|
||||||
"account.edit_profile": "แก้ไขโปรไฟล์",
|
"account.edit_profile": "แก้ไขโปรไฟล์",
|
||||||
"account.enable_notifications": "แจ้งเตือนฉันเมื่อ @{name} โพสต์",
|
"account.enable_notifications": "แจ้งเตือนฉันเมื่อ @{name} โพสต์",
|
||||||
"account.endorse": "แสดงในโปรไฟล์",
|
"account.endorse": "แสดงในโปรไฟล์",
|
||||||
|
"account.featured": "น่าสนใจ",
|
||||||
|
"account.featured.accounts": "โปรไฟล์",
|
||||||
|
"account.featured.hashtags": "แฮชแท็ก",
|
||||||
"account.featured_tags.last_status_at": "โพสต์ล่าสุดเมื่อ {date}",
|
"account.featured_tags.last_status_at": "โพสต์ล่าสุดเมื่อ {date}",
|
||||||
"account.featured_tags.last_status_never": "ไม่มีโพสต์",
|
"account.featured_tags.last_status_never": "ไม่มีโพสต์",
|
||||||
"account.follow": "ติดตาม",
|
"account.follow": "ติดตาม",
|
||||||
|
@ -37,6 +43,7 @@
|
||||||
"account.following": "กำลังติดตาม",
|
"account.following": "กำลังติดตาม",
|
||||||
"account.following_counter": "{count, plural, other {{counter} กำลังติดตาม}}",
|
"account.following_counter": "{count, plural, other {{counter} กำลังติดตาม}}",
|
||||||
"account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร",
|
"account.follows.empty": "ผู้ใช้นี้ยังไม่ได้ติดตามใคร",
|
||||||
|
"account.follows_you": "ติดตามคุณ",
|
||||||
"account.go_to_profile": "ไปยังโปรไฟล์",
|
"account.go_to_profile": "ไปยังโปรไฟล์",
|
||||||
"account.hide_reblogs": "ซ่อนการดันจาก @{name}",
|
"account.hide_reblogs": "ซ่อนการดันจาก @{name}",
|
||||||
"account.in_memoriam": "เพื่อระลึกถึง",
|
"account.in_memoriam": "เพื่อระลึกถึง",
|
||||||
|
@ -51,6 +58,7 @@
|
||||||
"account.mute_notifications_short": "ซ่อนการแจ้งเตือน",
|
"account.mute_notifications_short": "ซ่อนการแจ้งเตือน",
|
||||||
"account.mute_short": "ซ่อน",
|
"account.mute_short": "ซ่อน",
|
||||||
"account.muted": "ซ่อนอยู่",
|
"account.muted": "ซ่อนอยู่",
|
||||||
|
"account.muting": "กำลังซ่อน",
|
||||||
"account.no_bio": "ไม่ได้ให้คำอธิบาย",
|
"account.no_bio": "ไม่ได้ให้คำอธิบาย",
|
||||||
"account.open_original_page": "เปิดหน้าดั้งเดิม",
|
"account.open_original_page": "เปิดหน้าดั้งเดิม",
|
||||||
"account.posts": "โพสต์",
|
"account.posts": "โพสต์",
|
||||||
|
@ -305,9 +313,14 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด",
|
"errors.unexpected_crash.copy_stacktrace": "คัดลอกการติดตามสแตกไปยังคลิปบอร์ด",
|
||||||
"errors.unexpected_crash.report_issue": "รายงานปัญหา",
|
"errors.unexpected_crash.report_issue": "รายงานปัญหา",
|
||||||
"explore.suggested_follows": "ผู้คน",
|
"explore.suggested_follows": "ผู้คน",
|
||||||
|
"explore.title": "กำลังนิยม",
|
||||||
"explore.trending_links": "ข่าว",
|
"explore.trending_links": "ข่าว",
|
||||||
"explore.trending_statuses": "โพสต์",
|
"explore.trending_statuses": "โพสต์",
|
||||||
"explore.trending_tags": "แฮชแท็ก",
|
"explore.trending_tags": "แฮชแท็ก",
|
||||||
|
"featured_carousel.next": "ถัดไป",
|
||||||
|
"featured_carousel.post": "โพสต์",
|
||||||
|
"featured_carousel.previous": "ก่อนหน้า",
|
||||||
|
"featured_carousel.slide": "{index} จาก {total}",
|
||||||
"filter_modal.added.context_mismatch_explanation": "หมวดหมู่ตัวกรองนี้ไม่นำไปใช้กับบริบทที่คุณได้เข้าถึงโพสต์นี้ หากคุณต้องการกรองโพสต์ในบริบทนี้ด้วย คุณจะต้องแก้ไขตัวกรอง",
|
"filter_modal.added.context_mismatch_explanation": "หมวดหมู่ตัวกรองนี้ไม่นำไปใช้กับบริบทที่คุณได้เข้าถึงโพสต์นี้ หากคุณต้องการกรองโพสต์ในบริบทนี้ด้วย คุณจะต้องแก้ไขตัวกรอง",
|
||||||
"filter_modal.added.context_mismatch_title": "บริบทไม่ตรงกัน!",
|
"filter_modal.added.context_mismatch_title": "บริบทไม่ตรงกัน!",
|
||||||
"filter_modal.added.expired_explanation": "หมวดหมู่ตัวกรองนี้หมดอายุแล้ว คุณจะต้องเปลี่ยนวันหมดอายุสำหรับหมวดหมู่เพื่อนำไปใช้",
|
"filter_modal.added.expired_explanation": "หมวดหมู่ตัวกรองนี้หมดอายุแล้ว คุณจะต้องเปลี่ยนวันหมดอายุสำหรับหมวดหมู่เพื่อนำไปใช้",
|
||||||
|
@ -372,7 +385,10 @@
|
||||||
"hashtag.counter_by_accounts": "{count, plural, other {{counter} ผู้มีส่วนร่วม}}",
|
"hashtag.counter_by_accounts": "{count, plural, other {{counter} ผู้มีส่วนร่วม}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, other {{counter} โพสต์}}",
|
"hashtag.counter_by_uses": "{count, plural, other {{counter} โพสต์}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, other {{counter} โพสต์}}วันนี้",
|
"hashtag.counter_by_uses_today": "{count, plural, other {{counter} โพสต์}}วันนี้",
|
||||||
|
"hashtag.feature": "แสดงในโปรไฟล์",
|
||||||
"hashtag.follow": "ติดตามแฮชแท็ก",
|
"hashtag.follow": "ติดตามแฮชแท็ก",
|
||||||
|
"hashtag.mute": "ซ่อน #{hashtag}",
|
||||||
|
"hashtag.unfeature": "ไม่แสดงในโปรไฟล์",
|
||||||
"hashtag.unfollow": "เลิกติดตามแฮชแท็ก",
|
"hashtag.unfollow": "เลิกติดตามแฮชแท็ก",
|
||||||
"hashtags.and_other": "…และอีก {count, plural, other {# เพิ่มเติม}}",
|
"hashtags.and_other": "…และอีก {count, plural, other {# เพิ่มเติม}}",
|
||||||
"hints.profiles.followers_may_be_missing": "ผู้ติดตามสำหรับโปรไฟล์นี้อาจขาดหายไป",
|
"hints.profiles.followers_may_be_missing": "ผู้ติดตามสำหรับโปรไฟล์นี้อาจขาดหายไป",
|
||||||
|
@ -504,8 +520,10 @@
|
||||||
"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.account_settings": "รหัสผ่านและความปลอดภัย",
|
||||||
"navigation_bar.administration": "การดูแล",
|
"navigation_bar.administration": "การดูแล",
|
||||||
"navigation_bar.advanced_interface": "เปิดในส่วนติดต่อเว็บขั้นสูง",
|
"navigation_bar.advanced_interface": "เปิดในส่วนติดต่อเว็บขั้นสูง",
|
||||||
|
"navigation_bar.automated_deletion": "การลบโพสต์แบบอัตโนมัติ",
|
||||||
"navigation_bar.blocks": "ผู้ใช้ที่ปิดกั้นอยู่",
|
"navigation_bar.blocks": "ผู้ใช้ที่ปิดกั้นอยู่",
|
||||||
"navigation_bar.bookmarks": "ที่คั่นหน้า",
|
"navigation_bar.bookmarks": "ที่คั่นหน้า",
|
||||||
"navigation_bar.direct": "การกล่าวถึงแบบส่วนตัว",
|
"navigation_bar.direct": "การกล่าวถึงแบบส่วนตัว",
|
||||||
|
@ -515,12 +533,15 @@
|
||||||
"navigation_bar.follow_requests": "คำขอติดตาม",
|
"navigation_bar.follow_requests": "คำขอติดตาม",
|
||||||
"navigation_bar.followed_tags": "แฮชแท็กที่ติดตาม",
|
"navigation_bar.followed_tags": "แฮชแท็กที่ติดตาม",
|
||||||
"navigation_bar.follows_and_followers": "การติดตามและผู้ติดตาม",
|
"navigation_bar.follows_and_followers": "การติดตามและผู้ติดตาม",
|
||||||
|
"navigation_bar.import_export": "การนำเข้าและการส่งออก",
|
||||||
"navigation_bar.lists": "รายการ",
|
"navigation_bar.lists": "รายการ",
|
||||||
"navigation_bar.logout": "ออกจากระบบ",
|
"navigation_bar.logout": "ออกจากระบบ",
|
||||||
"navigation_bar.moderation": "การกลั่นกรอง",
|
"navigation_bar.moderation": "การกลั่นกรอง",
|
||||||
|
"navigation_bar.more": "เพิ่มเติม",
|
||||||
"navigation_bar.mutes": "ผู้ใช้ที่ซ่อนอยู่",
|
"navigation_bar.mutes": "ผู้ใช้ที่ซ่อนอยู่",
|
||||||
"navigation_bar.opened_in_classic_interface": "จะเปิดโพสต์, บัญชี และหน้าที่เฉพาะเจาะจงอื่น ๆ เป็นค่าเริ่มต้นในส่วนติดต่อเว็บแบบคลาสสิก",
|
"navigation_bar.opened_in_classic_interface": "จะเปิดโพสต์, บัญชี และหน้าที่เฉพาะเจาะจงอื่น ๆ เป็นค่าเริ่มต้นในส่วนติดต่อเว็บแบบคลาสสิก",
|
||||||
"navigation_bar.preferences": "การกำหนดลักษณะ",
|
"navigation_bar.preferences": "การกำหนดลักษณะ",
|
||||||
|
"navigation_bar.privacy_and_reach": "ความเป็นส่วนตัวและการเข้าถึง",
|
||||||
"navigation_bar.search": "ค้นหา",
|
"navigation_bar.search": "ค้นหา",
|
||||||
"not_signed_in_indicator.not_signed_in": "คุณจำเป็นต้องเข้าสู่ระบบเพื่อเข้าถึงทรัพยากรนี้",
|
"not_signed_in_indicator.not_signed_in": "คุณจำเป็นต้องเข้าสู่ระบบเพื่อเข้าถึงทรัพยากรนี้",
|
||||||
"notification.admin.report": "{name} ได้รายงาน {target}",
|
"notification.admin.report": "{name} ได้รายงาน {target}",
|
||||||
|
@ -747,6 +768,7 @@
|
||||||
"report_notification.categories.violation": "การละเมิดกฎ",
|
"report_notification.categories.violation": "การละเมิดกฎ",
|
||||||
"report_notification.categories.violation_sentence": "การละเมิดกฎ",
|
"report_notification.categories.violation_sentence": "การละเมิดกฎ",
|
||||||
"report_notification.open": "รายงานที่เปิด",
|
"report_notification.open": "รายงานที่เปิด",
|
||||||
|
"search.clear": "ล้างการค้นหา",
|
||||||
"search.no_recent_searches": "ไม่มีการค้นหาล่าสุด",
|
"search.no_recent_searches": "ไม่มีการค้นหาล่าสุด",
|
||||||
"search.placeholder": "ค้นหา",
|
"search.placeholder": "ค้นหา",
|
||||||
"search.quick_action.account_search": "โปรไฟล์ที่ตรงกับ {x}",
|
"search.quick_action.account_search": "โปรไฟล์ที่ตรงกับ {x}",
|
||||||
|
@ -812,6 +834,7 @@
|
||||||
"status.mute_conversation": "ซ่อนการสนทนา",
|
"status.mute_conversation": "ซ่อนการสนทนา",
|
||||||
"status.open": "ขยายโพสต์นี้",
|
"status.open": "ขยายโพสต์นี้",
|
||||||
"status.pin": "ปักหมุดในโปรไฟล์",
|
"status.pin": "ปักหมุดในโปรไฟล์",
|
||||||
|
"status.quote_post_author": "โพสต์โดย {name}",
|
||||||
"status.read_more": "อ่านเพิ่มเติม",
|
"status.read_more": "อ่านเพิ่มเติม",
|
||||||
"status.reblog": "ดัน",
|
"status.reblog": "ดัน",
|
||||||
"status.reblog_private": "ดันด้วยการมองเห็นดั้งเดิม",
|
"status.reblog_private": "ดันด้วยการมองเห็นดั้งเดิม",
|
||||||
|
@ -841,7 +864,10 @@
|
||||||
"subscribed_languages.save": "บันทึกการเปลี่ยนแปลง",
|
"subscribed_languages.save": "บันทึกการเปลี่ยนแปลง",
|
||||||
"subscribed_languages.target": "เปลี่ยนภาษาที่บอกรับสำหรับ {target}",
|
"subscribed_languages.target": "เปลี่ยนภาษาที่บอกรับสำหรับ {target}",
|
||||||
"tabs_bar.home": "หน้าแรก",
|
"tabs_bar.home": "หน้าแรก",
|
||||||
|
"tabs_bar.menu": "เมนู",
|
||||||
"tabs_bar.notifications": "การแจ้งเตือน",
|
"tabs_bar.notifications": "การแจ้งเตือน",
|
||||||
|
"tabs_bar.publish": "โพสต์ใหม่",
|
||||||
|
"tabs_bar.search": "ค้นหา",
|
||||||
"terms_of_service.title": "เงื่อนไขการให้บริการ",
|
"terms_of_service.title": "เงื่อนไขการให้บริการ",
|
||||||
"time_remaining.days": "เหลืออีก {number, plural, other {# วัน}}",
|
"time_remaining.days": "เหลืออีก {number, plural, other {# วัน}}",
|
||||||
"time_remaining.hours": "เหลืออีก {number, plural, other {# ชั่วโมง}}",
|
"time_remaining.hours": "เหลืออีก {number, plural, other {# ชั่วโมง}}",
|
||||||
|
|
|
@ -458,6 +458,8 @@
|
||||||
"navigation_bar.favourites": "ijo pona",
|
"navigation_bar.favourites": "ijo pona",
|
||||||
"navigation_bar.filters": "nimi len",
|
"navigation_bar.filters": "nimi len",
|
||||||
"navigation_bar.lists": "kulupu lipu",
|
"navigation_bar.lists": "kulupu lipu",
|
||||||
|
"navigation_bar.logout": "o weka tan sijelo",
|
||||||
|
"navigation_bar.moderation": "nasin lawa",
|
||||||
"navigation_bar.mutes": "sina wile ala kute e jan ni",
|
"navigation_bar.mutes": "sina wile ala kute e jan ni",
|
||||||
"navigation_bar.preferences": "wile sina",
|
"navigation_bar.preferences": "wile sina",
|
||||||
"navigation_bar.search": "o alasa",
|
"navigation_bar.search": "o alasa",
|
||||||
|
|
|
@ -98,7 +98,7 @@
|
||||||
"alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.",
|
"alert.rate_limited.message": "Vui lòng thử lại sau {retry_time, time, medium}.",
|
||||||
"alert.rate_limited.title": "Vượt giới hạn",
|
"alert.rate_limited.title": "Vượt giới hạn",
|
||||||
"alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.",
|
"alert.unexpected.message": "Đã xảy ra lỗi không mong muốn.",
|
||||||
"alert.unexpected.title": "Ốiii!",
|
"alert.unexpected.title": "Ốii!",
|
||||||
"alt_text_badge.title": "Văn bản thay thế",
|
"alt_text_badge.title": "Văn bản thay thế",
|
||||||
"alt_text_modal.add_alt_text": "Thêm văn bản thay thế",
|
"alt_text_modal.add_alt_text": "Thêm văn bản thay thế",
|
||||||
"alt_text_modal.add_text_from_image": "Thêm văn bản từ ảnh",
|
"alt_text_modal.add_text_from_image": "Thêm văn bản từ ảnh",
|
||||||
|
@ -276,7 +276,7 @@
|
||||||
"domain_block_modal.you_will_lose_num_followers": "Bạn sẽ mất {followersCount, plural, other {{followersCountDisplay} người theo dõi}} và {followingCount, plural, other {{followingCountDisplay} người bạn theo dõi}}.",
|
"domain_block_modal.you_will_lose_num_followers": "Bạn sẽ mất {followersCount, plural, other {{followersCountDisplay} người theo dõi}} và {followingCount, plural, other {{followingCountDisplay} người bạn theo dõi}}.",
|
||||||
"domain_block_modal.you_will_lose_relationships": "Bạn sẽ mất tất cả người theo dõi và những người bạn theo dõi từ máy chủ này.",
|
"domain_block_modal.you_will_lose_relationships": "Bạn sẽ mất tất cả người theo dõi và những người bạn theo dõi từ máy chủ này.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Bạn không còn thấy tút hoặc thông báo từ thành viên máy chủ này.",
|
"domain_block_modal.you_wont_see_posts": "Bạn không còn thấy tút hoặc thông báo từ thành viên máy chủ này.",
|
||||||
"domain_pill.activitypub_lets_connect": "Nó cho phép bạn kết nối và tương tác với mọi người không chỉ trên Mastodon mà còn trên các ứng dụng xã hội khác.",
|
"domain_pill.activitypub_lets_connect": "Nó cho phép bạn kết nối và tương tác với mọi người, không chỉ trên Mastodon mà còn trên các nền tảng khác.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.",
|
"domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.",
|
||||||
"domain_pill.server": "Máy chủ",
|
"domain_pill.server": "Máy chủ",
|
||||||
"domain_pill.their_handle": "Địa chỉ Mastodon:",
|
"domain_pill.their_handle": "Địa chỉ Mastodon:",
|
||||||
|
|
|
@ -218,6 +218,9 @@
|
||||||
"confirmations.delete_list.confirm": "删除",
|
"confirmations.delete_list.confirm": "删除",
|
||||||
"confirmations.delete_list.message": "确定要永久删除此列表吗?",
|
"confirmations.delete_list.message": "确定要永久删除此列表吗?",
|
||||||
"confirmations.delete_list.title": "确定要删除列表?",
|
"confirmations.delete_list.title": "确定要删除列表?",
|
||||||
|
"confirmations.discard_draft.confirm": "放弃并继续",
|
||||||
|
"confirmations.discard_draft.edit.cancel": "恢复编辑",
|
||||||
|
"confirmations.discard_draft.post.cancel": "恢复草稿",
|
||||||
"confirmations.discard_edit_media.confirm": "丢弃",
|
"confirmations.discard_edit_media.confirm": "丢弃",
|
||||||
"confirmations.discard_edit_media.message": "你还有未保存的媒体描述或预览修改,仍要丢弃吗?",
|
"confirmations.discard_edit_media.message": "你还有未保存的媒体描述或预览修改,仍要丢弃吗?",
|
||||||
"confirmations.follow_to_list.confirm": "关注并添加到列表",
|
"confirmations.follow_to_list.confirm": "关注并添加到列表",
|
||||||
|
|
|
@ -126,6 +126,9 @@ export function createAccountFromServerJSON(serverJSON: ApiAccountJSON) {
|
||||||
? accountJSON.username
|
? accountJSON.username
|
||||||
: accountJSON.display_name;
|
: accountJSON.display_name;
|
||||||
|
|
||||||
|
const accountNote =
|
||||||
|
accountJSON.note && accountJSON.note !== '<p></p>' ? accountJSON.note : '';
|
||||||
|
|
||||||
return AccountFactory({
|
return AccountFactory({
|
||||||
...accountJSON,
|
...accountJSON,
|
||||||
moved: moved?.id,
|
moved: moved?.id,
|
||||||
|
@ -142,8 +145,8 @@ export function createAccountFromServerJSON(serverJSON: ApiAccountJSON) {
|
||||||
escapeTextContentForBrowser(displayName),
|
escapeTextContentForBrowser(displayName),
|
||||||
emojiMap,
|
emojiMap,
|
||||||
),
|
),
|
||||||
note_emojified: emojify(accountJSON.note, emojiMap),
|
note_emojified: emojify(accountNote, emojiMap),
|
||||||
note_plain: unescapeHTML(accountJSON.note),
|
note_plain: unescapeHTML(accountNote),
|
||||||
url:
|
url:
|
||||||
accountJSON.url.startsWith('http://') ||
|
accountJSON.url.startsWith('http://') ||
|
||||||
accountJSON.url.startsWith('https://')
|
accountJSON.url.startsWith('https://')
|
||||||
|
|
|
@ -4,6 +4,7 @@ import type { Draft, UnknownAction } from '@reduxjs/toolkit';
|
||||||
import type { List as ImmutableList } from 'immutable';
|
import type { List as ImmutableList } from 'immutable';
|
||||||
|
|
||||||
import { timelineDelete } from 'mastodon/actions/timelines_typed';
|
import { timelineDelete } from 'mastodon/actions/timelines_typed';
|
||||||
|
import type { AsyncRefreshHeader } from 'mastodon/api';
|
||||||
import type { ApiRelationshipJSON } from 'mastodon/api_types/relationships';
|
import type { ApiRelationshipJSON } from 'mastodon/api_types/relationships';
|
||||||
import type {
|
import type {
|
||||||
ApiStatusJSON,
|
ApiStatusJSON,
|
||||||
|
@ -12,7 +13,7 @@ import type {
|
||||||
import type { Status } from 'mastodon/models/status';
|
import type { Status } from 'mastodon/models/status';
|
||||||
|
|
||||||
import { blockAccountSuccess, muteAccountSuccess } from '../actions/accounts';
|
import { blockAccountSuccess, muteAccountSuccess } from '../actions/accounts';
|
||||||
import { fetchContext } from '../actions/statuses';
|
import { fetchContext, completeContextRefresh } from '../actions/statuses';
|
||||||
import { TIMELINE_UPDATE } from '../actions/timelines';
|
import { TIMELINE_UPDATE } from '../actions/timelines';
|
||||||
import { compareId } from '../compare_id';
|
import { compareId } from '../compare_id';
|
||||||
|
|
||||||
|
@ -25,11 +26,13 @@ interface TimelineUpdateAction extends UnknownAction {
|
||||||
interface State {
|
interface State {
|
||||||
inReplyTos: Record<string, string>;
|
inReplyTos: Record<string, string>;
|
||||||
replies: Record<string, string[]>;
|
replies: Record<string, string[]>;
|
||||||
|
refreshing: Record<string, AsyncRefreshHeader>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const initialState: State = {
|
const initialState: State = {
|
||||||
inReplyTos: {},
|
inReplyTos: {},
|
||||||
replies: {},
|
replies: {},
|
||||||
|
refreshing: {},
|
||||||
};
|
};
|
||||||
|
|
||||||
const normalizeContext = (
|
const normalizeContext = (
|
||||||
|
@ -127,6 +130,13 @@ export const contextsReducer = createReducer(initialState, (builder) => {
|
||||||
builder
|
builder
|
||||||
.addCase(fetchContext.fulfilled, (state, action) => {
|
.addCase(fetchContext.fulfilled, (state, action) => {
|
||||||
normalizeContext(state, action.meta.arg.statusId, action.payload.context);
|
normalizeContext(state, action.meta.arg.statusId, action.payload.context);
|
||||||
|
|
||||||
|
if (action.payload.refresh) {
|
||||||
|
state.refreshing[action.meta.arg.statusId] = action.payload.refresh;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.addCase(completeContextRefresh, (state, action) => {
|
||||||
|
delete state.refreshing[action.payload.statusId];
|
||||||
})
|
})
|
||||||
.addCase(blockAccountSuccess, (state, action) => {
|
.addCase(blockAccountSuccess, (state, action) => {
|
||||||
filterContexts(
|
filterContexts(
|
||||||
|
|
|
@ -101,7 +101,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change the background colors of statuses
|
// Change the background colors of statuses
|
||||||
.focusable:focus {
|
.focusable:focus-visible {
|
||||||
background: lighten($white, 4%);
|
background: lighten($white, 4%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,11 @@ $inverted-text-color: $ui-base-color !default;
|
||||||
$lighter-text-color: $ui-base-lighter-color !default;
|
$lighter-text-color: $ui-base-lighter-color !default;
|
||||||
$light-text-color: $ui-primary-color !default;
|
$light-text-color: $ui-primary-color !default;
|
||||||
|
|
||||||
|
// Keep this filter a SCSS variable rather than
|
||||||
|
// a CSS Custom Property due to this Safari bug:
|
||||||
|
// https://github.com/mdn/browser-compat-data/issues/25914#issuecomment-2676190245
|
||||||
|
$backdrop-blur-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
|
||||||
|
|
||||||
// Language codes that uses CJK fonts
|
// Language codes that uses CJK fonts
|
||||||
$cjk-langs: ja, ko, zh-CN, zh-HK, zh-TW;
|
$cjk-langs: ja, ko, zh-CN, zh-HK, zh-TW;
|
||||||
|
|
||||||
|
|
|
@ -362,7 +362,7 @@
|
||||||
&.overlayed {
|
&.overlayed {
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
background: rgba($black, 0.65);
|
background: rgba($black, 0.65);
|
||||||
backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
color: rgba($white, 0.7);
|
color: rgba($white, 0.7);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
|
@ -2016,7 +2016,7 @@ body > [data-popper-placement] {
|
||||||
|
|
||||||
&__popout {
|
&__popout {
|
||||||
background: var(--dropdown-background-color);
|
background: var(--dropdown-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--dropdown-border-color);
|
border: 1px solid var(--dropdown-border-color);
|
||||||
box-shadow: var(--dropdown-shadow);
|
box-shadow: var(--dropdown-shadow);
|
||||||
max-width: 320px;
|
max-width: 320px;
|
||||||
|
@ -2693,7 +2693,7 @@ a.account__display-name {
|
||||||
|
|
||||||
.dropdown-menu {
|
.dropdown-menu {
|
||||||
background: var(--dropdown-background-color);
|
background: var(--dropdown-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--dropdown-border-color);
|
border: 1px solid var(--dropdown-border-color);
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
@ -2848,7 +2848,6 @@ a.account__display-name {
|
||||||
&__pane {
|
&__pane {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
pointer-events: none;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
min-width: 285px;
|
min-width: 285px;
|
||||||
|
@ -2860,7 +2859,6 @@ a.account__display-name {
|
||||||
&__inner {
|
&__inner {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: 285px;
|
width: 285px;
|
||||||
pointer-events: auto;
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2892,7 +2890,7 @@ a.account__display-name {
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
padding-bottom: env(safe-area-inset-bottom);
|
padding-bottom: env(safe-area-inset-bottom);
|
||||||
background: var(--background-color);
|
background: var(--background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border-top: 1px solid var(--background-border-color);
|
border-top: 1px solid var(--background-border-color);
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
@ -2952,7 +2950,7 @@ a.account__display-name {
|
||||||
|
|
||||||
.tabs-bar__wrapper {
|
.tabs-bar__wrapper {
|
||||||
background: var(--background-color);
|
background: var(--background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0;
|
top: 0;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
@ -3247,6 +3245,7 @@ a.account__display-name {
|
||||||
.columns-area__panels__pane--overlay {
|
.columns-area__panels__pane--overlay {
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
background: rgba($base-overlay-background, 0.5);
|
background: rgba($base-overlay-background, 0.5);
|
||||||
|
z-index: 3;
|
||||||
|
|
||||||
.columns-area__panels__pane__inner {
|
.columns-area__panels__pane__inner {
|
||||||
box-shadow: var(--dropdown-shadow);
|
box-shadow: var(--dropdown-shadow);
|
||||||
|
@ -3873,16 +3872,18 @@ a.account__display-name {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
width: 100%;
|
||||||
|
padding: 12px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
padding: 12px;
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
border: 0;
|
|
||||||
background: transparent;
|
|
||||||
color: $secondary-text-color;
|
color: $secondary-text-color;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
border-left: 4px solid transparent;
|
border-left: 4px solid transparent;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus,
|
&:focus,
|
||||||
|
@ -4033,7 +4034,7 @@ a.account__display-name {
|
||||||
background: rgba($base-shadow-color, 0.6);
|
background: rgba($base-shadow-color, 0.6);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 12px 9px;
|
padding: 12px 9px;
|
||||||
backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
@ -4817,7 +4818,7 @@ a.status-card {
|
||||||
|
|
||||||
&__label {
|
&__label {
|
||||||
background-color: rgba($black, 0.45);
|
background-color: rgba($black, 0.45);
|
||||||
backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 12px 16px;
|
padding: 12px 16px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -5168,7 +5169,7 @@ a.status-card {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
background: var(--dropdown-background-color);
|
background: var(--dropdown-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--dropdown-border-color);
|
border: 1px solid var(--dropdown-border-color);
|
||||||
box-shadow: var(--dropdown-shadow);
|
box-shadow: var(--dropdown-shadow);
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
|
@ -5366,7 +5367,7 @@ a.status-card {
|
||||||
.language-dropdown__dropdown {
|
.language-dropdown__dropdown {
|
||||||
box-shadow: var(--dropdown-shadow);
|
box-shadow: var(--dropdown-shadow);
|
||||||
background: var(--dropdown-background-color);
|
background: var(--dropdown-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--dropdown-border-color);
|
border: 1px solid var(--dropdown-border-color);
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
@ -6046,7 +6047,7 @@ a.status-card {
|
||||||
min-height: 478px;
|
min-height: 478px;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: var(--modal-background-color);
|
background: var(--modal-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--modal-border-color);
|
border: 1px solid var(--modal-border-color);
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
|
|
||||||
|
@ -6090,7 +6091,7 @@ a.status-card {
|
||||||
padding: 24px;
|
padding: 24px;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: var(--modal-background-color);
|
background: var(--modal-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--modal-border-color);
|
border: 1px solid var(--modal-border-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6308,7 +6309,7 @@ a.status-card {
|
||||||
max-height: 80vh;
|
max-height: 80vh;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: var(--modal-background-color);
|
background: var(--modal-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--modal-border-color);
|
border: 1px solid var(--modal-border-color);
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
|
|
||||||
|
@ -6375,7 +6376,7 @@ a.status-card {
|
||||||
|
|
||||||
&__popout {
|
&__popout {
|
||||||
background: var(--dropdown-background-color);
|
background: var(--dropdown-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--dropdown-border-color);
|
border: 1px solid var(--dropdown-border-color);
|
||||||
box-shadow: var(--dropdown-shadow);
|
box-shadow: var(--dropdown-shadow);
|
||||||
max-width: 320px;
|
max-width: 320px;
|
||||||
|
@ -6735,7 +6736,7 @@ a.status-card {
|
||||||
.actions-modal {
|
.actions-modal {
|
||||||
border-radius: 8px 8px 0 0;
|
border-radius: 8px 8px 0 0;
|
||||||
background: var(--dropdown-background-color);
|
background: var(--dropdown-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border-color: var(--dropdown-border-color);
|
border-color: var(--dropdown-border-color);
|
||||||
box-shadow: var(--dropdown-shadow);
|
box-shadow: var(--dropdown-shadow);
|
||||||
max-height: 80vh;
|
max-height: 80vh;
|
||||||
|
@ -6861,7 +6862,7 @@ a.status-card {
|
||||||
color: $white;
|
color: $white;
|
||||||
border: 0;
|
border: 0;
|
||||||
background: rgba($black, 0.65);
|
background: rgba($black, 0.65);
|
||||||
backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
padding: 3px 12px;
|
padding: 3px 12px;
|
||||||
border-radius: 99px;
|
border-radius: 99px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -6886,7 +6887,7 @@ a.status-card {
|
||||||
color: $white;
|
color: $white;
|
||||||
border: 0;
|
border: 0;
|
||||||
background: rgba($black, 0.65);
|
background: rgba($black, 0.65);
|
||||||
backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
padding: 3px 8px;
|
padding: 3px 8px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
@ -6908,7 +6909,7 @@ a.status-card {
|
||||||
|
|
||||||
.media-gallery__alt__popover {
|
.media-gallery__alt__popover {
|
||||||
background: rgba($black, 0.65);
|
background: rgba($black, 0.65);
|
||||||
backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
box-shadow: var(--dropdown-shadow);
|
box-shadow: var(--dropdown-shadow);
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
|
@ -7661,7 +7662,7 @@ a.status-card {
|
||||||
inset-inline-start: 50%;
|
inset-inline-start: 50%;
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
background: rgba($base-shadow-color, 0.45);
|
background: rgba($base-shadow-color, 0.45);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
color: $white;
|
color: $white;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 16px 24px;
|
padding: 16px 24px;
|
||||||
|
@ -8834,7 +8835,7 @@ noscript {
|
||||||
&__footer {
|
&__footer {
|
||||||
border-radius: 0 0 4px 4px;
|
border-radius: 0 0 4px 4px;
|
||||||
background: var(--modal-background-variant-color);
|
background: var(--modal-background-variant-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--modal-border-color);
|
border: 1px solid var(--modal-border-color);
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
|
@ -8845,7 +8846,7 @@ noscript {
|
||||||
&__header {
|
&__header {
|
||||||
border-radius: 4px 4px 0 0;
|
border-radius: 4px 4px 0 0;
|
||||||
background: var(--modal-background-variant-color);
|
background: var(--modal-background-variant-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--modal-border-color);
|
border: 1px solid var(--modal-border-color);
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
|
@ -9251,7 +9252,7 @@ noscript {
|
||||||
display: block;
|
display: block;
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
background: var(--modal-background-color);
|
background: var(--modal-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--modal-border-color);
|
border: 1px solid var(--modal-border-color);
|
||||||
padding: 24px;
|
padding: 24px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
@ -10885,7 +10886,7 @@ noscript {
|
||||||
.hover-card {
|
.hover-card {
|
||||||
box-shadow: var(--dropdown-shadow);
|
box-shadow: var(--dropdown-shadow);
|
||||||
background: var(--modal-background-color);
|
background: var(--modal-background-color);
|
||||||
backdrop-filter: var(--background-filter);
|
backdrop-filter: $backdrop-blur-filter;
|
||||||
border: 1px solid var(--modal-border-color);
|
border: 1px solid var(--modal-border-color);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
--modal-background-variant-color: #{rgba($ui-base-color, 0.7)};
|
--modal-background-variant-color: #{rgba($ui-base-color, 0.7)};
|
||||||
--modal-border-color: #{lighten($ui-base-color, 4%)};
|
--modal-border-color: #{lighten($ui-base-color, 4%)};
|
||||||
--background-border-color: #{lighten($ui-base-color, 4%)};
|
--background-border-color: #{lighten($ui-base-color, 4%)};
|
||||||
--background-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%);
|
|
||||||
--background-color: #{darken($ui-base-color, 8%)};
|
--background-color: #{darken($ui-base-color, 8%)};
|
||||||
--background-color-tint: #{rgba(darken($ui-base-color, 8%), 0.9)};
|
--background-color-tint: #{rgba(darken($ui-base-color, 8%), 0.9)};
|
||||||
--surface-background-color: #{darken($ui-base-color, 4%)};
|
--surface-background-color: #{darken($ui-base-color, 4%)};
|
||||||
|
|
|
@ -28,7 +28,7 @@ class AnnualReport::Archetype < AnnualReport::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
def polls_count
|
def polls_count
|
||||||
@polls_count ||= report_statuses.where.not(poll_id: nil).count
|
@polls_count ||= report_statuses.only_polls.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def reblogs_count
|
def reblogs_count
|
||||||
|
@ -36,7 +36,7 @@ class AnnualReport::Archetype < AnnualReport::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
def replies_count
|
def replies_count
|
||||||
@replies_count ||= report_statuses.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count
|
@replies_count ||= report_statuses.where.not(in_reply_to_id: nil).not_replying_to_account(@account).count
|
||||||
end
|
end
|
||||||
|
|
||||||
def standalone_count
|
def standalone_count
|
||||||
|
|
|
@ -18,7 +18,7 @@ class AnnualReport::CommonlyInteractedWithAccounts < AnnualReport::Source
|
||||||
private
|
private
|
||||||
|
|
||||||
def commonly_interacted_with_accounts
|
def commonly_interacted_with_accounts
|
||||||
report_statuses.where.not(in_reply_to_account_id: @account.id).group(:in_reply_to_account_id).having(minimum_interaction_count).order(count_all: :desc).limit(SET_SIZE).count
|
report_statuses.not_replying_to_account(@account).group(:in_reply_to_account_id).having(minimum_interaction_count).order(count_all: :desc).limit(SET_SIZE).count
|
||||||
end
|
end
|
||||||
|
|
||||||
def minimum_interaction_count
|
def minimum_interaction_count
|
||||||
|
|
|
@ -2,20 +2,44 @@
|
||||||
|
|
||||||
class AnnualReport::TopStatuses < AnnualReport::Source
|
class AnnualReport::TopStatuses < AnnualReport::Source
|
||||||
def generate
|
def generate
|
||||||
top_reblogs = base_scope.order(reblogs_count: :desc).first&.id
|
|
||||||
top_favourites = base_scope.where.not(id: top_reblogs).order(favourites_count: :desc).first&.id
|
|
||||||
top_replies = base_scope.where.not(id: [top_reblogs, top_favourites]).order(replies_count: :desc).first&.id
|
|
||||||
|
|
||||||
{
|
{
|
||||||
top_statuses: {
|
top_statuses: {
|
||||||
by_reblogs: top_reblogs&.to_s,
|
by_reblogs: status_identifier(most_reblogged_status),
|
||||||
by_favourites: top_favourites&.to_s,
|
by_favourites: status_identifier(most_favourited_status),
|
||||||
by_replies: top_replies&.to_s,
|
by_replies: status_identifier(most_replied_status),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def status_identifier(status)
|
||||||
|
status.id.to_s if status.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def most_reblogged_status
|
||||||
|
base_scope
|
||||||
|
.order(reblogs_count: :desc)
|
||||||
|
.first
|
||||||
|
end
|
||||||
|
|
||||||
|
def most_favourited_status
|
||||||
|
base_scope
|
||||||
|
.excluding(most_reblogged_status)
|
||||||
|
.order(favourites_count: :desc)
|
||||||
|
.first
|
||||||
|
end
|
||||||
|
|
||||||
|
def most_replied_status
|
||||||
|
base_scope
|
||||||
|
.excluding(most_reblogged_status, most_favourited_status)
|
||||||
|
.order(replies_count: :desc)
|
||||||
|
.first
|
||||||
|
end
|
||||||
|
|
||||||
def base_scope
|
def base_scope
|
||||||
report_statuses.public_visibility.joins(:status_stat)
|
report_statuses
|
||||||
|
.public_visibility
|
||||||
|
.joins(:status_stat)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ class AnnualReport::TypeDistribution < AnnualReport::Source
|
||||||
type_distribution: {
|
type_distribution: {
|
||||||
total: report_statuses.count,
|
total: report_statuses.count,
|
||||||
reblogs: report_statuses.only_reblogs.count,
|
reblogs: report_statuses.only_reblogs.count,
|
||||||
replies: report_statuses.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count,
|
replies: report_statuses.where.not(in_reply_to_id: nil).not_replying_to_account(@account).count,
|
||||||
standalone: report_statuses.without_replies.without_reblogs.count,
|
standalone: report_statuses.without_replies.without_reblogs.count,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,8 @@ class Fasp::Request
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate!(response)
|
def validate!(response)
|
||||||
|
raise Mastodon::UnexpectedResponseError, response if response.code >= 400
|
||||||
|
|
||||||
content_digest_header = response.headers['content-digest']
|
content_digest_header = response.headers['content-digest']
|
||||||
raise Mastodon::SignatureVerificationError, 'content-digest missing' if content_digest_header.blank?
|
raise Mastodon::SignatureVerificationError, 'content-digest missing' if content_digest_header.blank?
|
||||||
raise Mastodon::SignatureVerificationError, 'content-digest does not match' if content_digest_header != content_digest(response.body)
|
raise Mastodon::SignatureVerificationError, 'content-digest does not match' if content_digest_header != content_digest(response.body)
|
||||||
|
|
|
@ -196,6 +196,8 @@ class SignedRequest
|
||||||
return if body_digest == received_digest
|
return if body_digest == received_digest
|
||||||
|
|
||||||
raise Mastodon::SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{received_digest}"
|
raise Mastodon::SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{received_digest}"
|
||||||
|
rescue Starry::ParseError
|
||||||
|
raise Mastodon::MalformedHeaderError, 'Content-Digest could not be parsed. It does not contain a valid RFC8941 dictionary.'
|
||||||
end
|
end
|
||||||
|
|
||||||
def created_time
|
def created_time
|
||||||
|
|
18
app/mailers/concerns/bulk_mail_settings_concern.rb
Normal file
18
app/mailers/concerns/bulk_mail_settings_concern.rb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module BulkMailSettingsConcern
|
||||||
|
include ActiveSupport::Concern
|
||||||
|
include Mastodon::EmailConfigurationHelper
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def use_bulk_mail_delivery_settings
|
||||||
|
return if bulk_mail_configuration&.dig(:smtp_settings, :address).blank?
|
||||||
|
|
||||||
|
mail.delivery_method.settings = convert_smtp_settings(bulk_mail_configuration[:smtp_settings])
|
||||||
|
end
|
||||||
|
|
||||||
|
def bulk_mail_configuration
|
||||||
|
Rails.configuration.x.email&.bulk_mail
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class UserMailer < Devise::Mailer
|
class UserMailer < Devise::Mailer
|
||||||
|
include BulkMailSettingsConcern
|
||||||
|
|
||||||
layout 'mailer'
|
layout 'mailer'
|
||||||
|
|
||||||
helper :accounts
|
helper :accounts
|
||||||
|
@ -12,6 +14,8 @@ class UserMailer < Devise::Mailer
|
||||||
|
|
||||||
before_action :set_instance
|
before_action :set_instance
|
||||||
|
|
||||||
|
after_action :use_bulk_mail_delivery_settings, only: [:announcement_published, :terms_of_service_changed]
|
||||||
|
|
||||||
default to: -> { @resource.email }
|
default to: -> { @resource.email }
|
||||||
|
|
||||||
def confirmation_instructions(user, token, *, **)
|
def confirmation_instructions(user, token, *, **)
|
||||||
|
|
|
@ -138,10 +138,7 @@ class Account < ApplicationRecord
|
||||||
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
|
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
|
||||||
scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) }
|
scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) }
|
||||||
scope :recent, -> { reorder(id: :desc) }
|
scope :recent, -> { reorder(id: :desc) }
|
||||||
scope :bots, -> { where(actor_type: AUTOMATED_ACTOR_TYPES) }
|
|
||||||
scope :non_automated, -> { where.not(actor_type: AUTOMATED_ACTOR_TYPES) }
|
scope :non_automated, -> { where.not(actor_type: AUTOMATED_ACTOR_TYPES) }
|
||||||
scope :groups, -> { where(actor_type: 'Group') }
|
|
||||||
scope :alphabetic, -> { order(domain: :asc, username: :asc) }
|
|
||||||
scope :matches_uri_prefix, ->(value) { where(arel_table[:uri].matches("#{sanitize_sql_like(value)}/%", false, true)).or(where(uri: value)) }
|
scope :matches_uri_prefix, ->(value) { where(arel_table[:uri].matches("#{sanitize_sql_like(value)}/%", false, true)).or(where(uri: value)) }
|
||||||
scope :matches_username, ->(value) { where('lower((username)::text) LIKE lower(?)', "#{value}%") }
|
scope :matches_username, ->(value) { where('lower((username)::text) LIKE lower(?)', "#{value}%") }
|
||||||
scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) }
|
scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) }
|
||||||
|
|
|
@ -161,7 +161,7 @@ class AccountStatusesCleanupPolicy < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def without_poll_scope
|
def without_poll_scope
|
||||||
Status.where(poll_id: nil)
|
Status.without_polls
|
||||||
end
|
end
|
||||||
|
|
||||||
def without_popular_scope
|
def without_popular_scope
|
||||||
|
|
|
@ -8,6 +8,7 @@ class AccountSuggestions
|
||||||
AccountSuggestions::FriendsOfFriendsSource,
|
AccountSuggestions::FriendsOfFriendsSource,
|
||||||
AccountSuggestions::SimilarProfilesSource,
|
AccountSuggestions::SimilarProfilesSource,
|
||||||
AccountSuggestions::GlobalSource,
|
AccountSuggestions::GlobalSource,
|
||||||
|
AccountSuggestions::FaspSource,
|
||||||
].freeze
|
].freeze
|
||||||
|
|
||||||
BATCH_SIZE = 40
|
BATCH_SIZE = 40
|
||||||
|
|
17
app/models/account_suggestions/fasp_source.rb
Normal file
17
app/models/account_suggestions/fasp_source.rb
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class AccountSuggestions::FaspSource < AccountSuggestions::Source
|
||||||
|
def get(account, limit: DEFAULT_LIMIT)
|
||||||
|
return [] unless Mastodon::Feature.fasp_enabled?
|
||||||
|
|
||||||
|
base_account_scope(account).where(id: fasp_follow_recommendations_for(account)).limit(limit).pluck(:id).map do |account_id|
|
||||||
|
[account_id, :fasp]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def fasp_follow_recommendations_for(account)
|
||||||
|
Fasp::FollowRecommendation.for_account(account).newest_first.select(:recommended_account_id)
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
class Admin::AccountAction
|
class Admin::AccountAction
|
||||||
include ActiveModel::Model
|
include ActiveModel::Model
|
||||||
|
include ActiveModel::Attributes
|
||||||
include AccountableConcern
|
include AccountableConcern
|
||||||
include Authorization
|
include Authorization
|
||||||
|
|
||||||
|
@ -20,7 +21,10 @@ class Admin::AccountAction
|
||||||
:report_id,
|
:report_id,
|
||||||
:warning_preset_id
|
:warning_preset_id
|
||||||
|
|
||||||
attr_reader :warning, :send_email_notification, :include_statuses
|
attr_reader :warning
|
||||||
|
|
||||||
|
attribute :include_statuses, :boolean, default: true
|
||||||
|
attribute :send_email_notification, :boolean, default: true
|
||||||
|
|
||||||
alias send_email_notification? send_email_notification
|
alias send_email_notification? send_email_notification
|
||||||
alias include_statuses? include_statuses
|
alias include_statuses? include_statuses
|
||||||
|
@ -28,23 +32,8 @@ class Admin::AccountAction
|
||||||
validates :type, :target_account, :current_account, presence: true
|
validates :type, :target_account, :current_account, presence: true
|
||||||
validates :type, inclusion: { in: TYPES }
|
validates :type, inclusion: { in: TYPES }
|
||||||
|
|
||||||
def initialize(attributes = {})
|
def save
|
||||||
@send_email_notification = true
|
return false unless valid?
|
||||||
@include_statuses = true
|
|
||||||
|
|
||||||
super
|
|
||||||
end
|
|
||||||
|
|
||||||
def send_email_notification=(value)
|
|
||||||
@send_email_notification = ActiveModel::Type::Boolean.new.cast(value)
|
|
||||||
end
|
|
||||||
|
|
||||||
def include_statuses=(value)
|
|
||||||
@include_statuses = ActiveModel::Type::Boolean.new.cast(value)
|
|
||||||
end
|
|
||||||
|
|
||||||
def save!
|
|
||||||
raise ActiveRecord::RecordInvalid, self unless valid?
|
|
||||||
|
|
||||||
ApplicationRecord.transaction do
|
ApplicationRecord.transaction do
|
||||||
process_action!
|
process_action!
|
||||||
|
@ -54,6 +43,12 @@ class Admin::AccountAction
|
||||||
|
|
||||||
process_notification!
|
process_notification!
|
||||||
process_queue!
|
process_queue!
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def save!
|
||||||
|
raise ActiveRecord::RecordInvalid, self unless save
|
||||||
end
|
end
|
||||||
|
|
||||||
def report
|
def report
|
||||||
|
@ -185,7 +180,7 @@ class Admin::AccountAction
|
||||||
@reports ||= if type == 'none'
|
@reports ||= if type == 'none'
|
||||||
with_report? ? [report] : []
|
with_report? ? [report] : []
|
||||||
else
|
else
|
||||||
Report.where(target_account: target_account).unresolved
|
target_account.targeted_reports.unresolved
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
class Admin::StatusBatchAction
|
class Admin::StatusBatchAction
|
||||||
include ActiveModel::Model
|
include ActiveModel::Model
|
||||||
|
include ActiveModel::Attributes
|
||||||
include AccountableConcern
|
include AccountableConcern
|
||||||
include Authorization
|
include Authorization
|
||||||
|
|
||||||
|
@ -9,11 +10,7 @@ class Admin::StatusBatchAction
|
||||||
:status_ids, :report_id,
|
:status_ids, :report_id,
|
||||||
:text
|
:text
|
||||||
|
|
||||||
attr_reader :send_email_notification
|
attribute :send_email_notification, :boolean
|
||||||
|
|
||||||
def send_email_notification=(value)
|
|
||||||
@send_email_notification = ActiveModel::Type::Boolean.new.cast(value)
|
|
||||||
end
|
|
||||||
|
|
||||||
def save!
|
def save!
|
||||||
process_action!
|
process_action!
|
||||||
|
|
|
@ -3,10 +3,12 @@
|
||||||
module Account::AttributionDomains
|
module Account::AttributionDomains
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
ATTRIBUTION_DOMAINS_LIMIT = 100
|
||||||
|
|
||||||
included do
|
included do
|
||||||
normalizes :attribution_domains, with: ->(arr) { arr.filter_map { |str| str.to_s.strip.delete_prefix('http://').delete_prefix('https://').delete_prefix('*.').presence }.uniq }
|
normalizes :attribution_domains, with: ->(arr) { arr.filter_map { |str| str.to_s.strip.delete_prefix('http://').delete_prefix('https://').delete_prefix('*.').presence }.uniq }
|
||||||
|
|
||||||
validates :attribution_domains, domain: true, length: { maximum: 100 }, if: -> { local? && will_save_change_to_attribution_domains? }
|
validates :attribution_domains, domain: true, length: { maximum: ATTRIBUTION_DOMAINS_LIMIT }, if: -> { local? && will_save_change_to_attribution_domains? }
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_be_attributed_from?(domain)
|
def can_be_attributed_from?(domain)
|
||||||
|
|
|
@ -10,12 +10,6 @@ module DatabaseViewRecord
|
||||||
concurrently: true,
|
concurrently: true,
|
||||||
cascade: false
|
cascade: false
|
||||||
)
|
)
|
||||||
rescue ActiveRecord::StatementInvalid
|
|
||||||
Scenic.database.refresh_materialized_view(
|
|
||||||
table_name,
|
|
||||||
concurrently: false,
|
|
||||||
cascade: false
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,14 +4,8 @@ module FollowLimitable
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
validates_with FollowLimitValidator, on: :create, unless: :bypass_follow_limit?
|
validates_with FollowLimitValidator, on: :create, unless: :bypass_follow_limit
|
||||||
end
|
|
||||||
|
|
||||||
def bypass_follow_limit=(value)
|
attribute :bypass_follow_limit, :boolean, default: false
|
||||||
@bypass_follow_limit = value
|
|
||||||
end
|
|
||||||
|
|
||||||
def bypass_follow_limit?
|
|
||||||
@bypass_follow_limit
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user