Compare commits
161 Commits
af987a2c5e
...
3a8047c9f2
Author | SHA1 | Date | |
---|---|---|---|
3a8047c9f2 | |||
3bd575ac61 | |||
|
a7f9a34d89 | ||
|
d45671066c | ||
|
92771e5afb | ||
|
ab50b2613e | ||
|
075eb3ed38 | ||
|
71a6ced55c | ||
|
9b3aaa9609 | ||
|
1a9be3e0eb | ||
|
39723a4d9c | ||
|
6cedbb4c50 | ||
|
4d9b4ef72f | ||
|
7c10b0fb7a | ||
|
ffa1032381 | ||
|
cc70acc11c | ||
|
d8eab3d81f | ||
|
2404d6d1a1 | ||
|
06d6b35e88 | ||
|
2343ce4441 | ||
|
555fb98cbb | ||
|
05bc82e1ab | ||
|
e9eac64896 | ||
|
de422a37e8 | ||
|
b0dd38433b | ||
|
888e6a3439 | ||
|
e15befebbd | ||
|
10ea6da09f | ||
|
bb0cf04d71 | ||
|
6e96ec840d | ||
|
22fd767425 | ||
|
3b07fe1bba | ||
|
9350cd31d7 | ||
|
a5a3733c97 | ||
|
cdf603239e | ||
|
d9fbb071da | ||
|
03dbebdfef | ||
|
fda52b2a52 | ||
|
c574f5b53f | ||
|
6d6565eee7 | ||
|
0d91db3d77 | ||
|
7033b3476e | ||
|
258dce1256 | ||
|
0e5dd35e84 | ||
|
e8ec6667bd | ||
|
f49161ab1d | ||
|
3cf2d35c49 | ||
|
d20a899bb9 | ||
|
022c1ae6f2 | ||
|
c3a38c7d8c | ||
|
d04e2e9104 | ||
|
1de6d511f4 | ||
|
ff3e2c9cfa | ||
|
562105c69a | ||
|
c60d4ecc82 | ||
|
0c16365991 | ||
|
fd75087534 | ||
|
ee17081793 | ||
|
9ca99b7dc1 | ||
|
7e06d724c9 | ||
|
4238da6ee3 | ||
|
bfabd6a2b8 | ||
|
1f5bd571cd | ||
|
a59160cf01 | ||
|
0ce2db4f7d | ||
|
498024558a | ||
|
2c54b91dd1 | ||
|
6967031144 | ||
|
bbc7be1d95 | ||
|
c37daa11f2 | ||
|
7b40f14452 | ||
|
c720623dc7 | ||
|
819abbdb2f | ||
|
b22272fcdc | ||
|
299372babe | ||
|
54b209243b | ||
|
ce3bedade3 | ||
|
61a0c58dee | ||
|
af39ac6edc | ||
|
edfa716a18 | ||
|
8572fa1452 | ||
|
b28ce2424c | ||
|
c40ab43dc7 | ||
|
51769e0670 | ||
|
1f720366e9 | ||
|
ebdeac0731 | ||
|
e4e07b1c34 | ||
|
4fe7f213a6 | ||
|
77f5b127fa | ||
|
463f9197d8 | ||
|
49407e7623 | ||
|
cf28104317 | ||
|
82e7d53d54 | ||
|
160917e718 | ||
|
63a959099b | ||
|
12a8ac1f85 | ||
|
1b247a1dc2 | ||
|
aba888c4a6 | ||
|
4c0e44ebbe | ||
|
cc8d723e71 | ||
|
d95f6f4410 | ||
|
52afa94f1c | ||
|
1db91ab8d9 | ||
|
fe3f5375e3 | ||
|
d96351a87d | ||
|
0be1d332f2 | ||
|
6ef510fe3f | ||
|
f768a6eb16 | ||
|
cec8961372 | ||
|
7d6b9ccd34 | ||
|
36f9c96812 | ||
|
b7bb850efd | ||
|
f760899b04 | ||
|
b5006539c9 | ||
|
d270d6dd4f | ||
|
2151dfb8d6 | ||
|
cf859d151b | ||
|
1f65a95421 | ||
|
4aa26eba53 | ||
|
4a737a948a | ||
|
ebab3b80c7 | ||
|
33d3ca7cf1 | ||
|
f0716368e6 | ||
|
ea72d5ec3a | ||
|
66b2bc1c84 | ||
|
f91f077985 | ||
|
a2c4ba2001 | ||
|
4cae309f6a | ||
|
65508bb0c0 | ||
|
df98cf71e3 | ||
|
f10d61bf86 | ||
|
f73787a4b8 | ||
|
7b92cf3b47 | ||
|
c5f0da98e4 | ||
|
44071fdbae | ||
|
ec16ed37c3 | ||
|
c009507912 | ||
|
651846c622 | ||
|
4b4bf82ea9 | ||
|
489abb8173 | ||
|
7e35bef97e | ||
|
8ae381fd04 | ||
|
efd3f59627 | ||
|
454d21ab5a | ||
|
e975b55c24 | ||
|
e6cda8388c | ||
|
0b89765e9a | ||
|
f251edfc1d | ||
|
7a653001b4 | ||
|
b7ddf45924 | ||
|
3d943f03fd | ||
|
2829f72d16 | ||
|
f811fcb2b2 | ||
|
675d3ea5c1 | ||
|
497e8d00b9 | ||
|
d9973f3b70 | ||
|
685067efd1 | ||
|
1be55ce244 | ||
|
5839ee434b | ||
|
0b6d217b9e | ||
|
07cd1fd1ef |
@ -64,7 +64,6 @@ module.exports = defineConfig({
|
|||||||
'indent': ['error', 2],
|
'indent': ['error', 2],
|
||||||
'jsx-quotes': ['error', 'prefer-single'],
|
'jsx-quotes': ['error', 'prefer-single'],
|
||||||
'semi': ['error', 'always'],
|
'semi': ['error', 'always'],
|
||||||
'no-case-declarations': 'off',
|
|
||||||
'no-catch-shadow': 'error',
|
'no-catch-shadow': 'error',
|
||||||
'no-console': [
|
'no-console': [
|
||||||
'warn',
|
'warn',
|
||||||
|
6
.github/workflows/build-push-pr.yml
vendored
6
.github/workflows/build-push-pr.yml
vendored
@ -21,9 +21,11 @@ jobs:
|
|||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- id: version_vars
|
- id: version_vars
|
||||||
run: |
|
run: |
|
||||||
echo mastodon_version_metadata=pr-${{ github.event.pull_request.number }}-$(git rev-parse --short HEAD) >> $GITHUB_OUTPUT
|
echo mastodon_version_metadata=pr-${{ github.event.pull_request.number }}-$(git rev-parse --short ${{github.event.pull_request.head.sha}}) >> $GITHUB_OUTPUT
|
||||||
|
echo mastodon_short_sha=$(git rev-parse --short ${{github.event.pull_request.head.sha}}) >> $GITHUB_OUTPUT
|
||||||
outputs:
|
outputs:
|
||||||
metadata: ${{ steps.version_vars.outputs.mastodon_version_metadata }}
|
metadata: ${{ steps.version_vars.outputs.mastodon_version_metadata }}
|
||||||
|
short_sha: ${{ steps.version_vars.outputs.mastodon_short_sha }}
|
||||||
|
|
||||||
build-image:
|
build-image:
|
||||||
needs: compute-suffix
|
needs: compute-suffix
|
||||||
@ -39,6 +41,7 @@ jobs:
|
|||||||
latest=auto
|
latest=auto
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,event=pr
|
type=ref,event=pr
|
||||||
|
type=ref,event=pr,suffix=-${{ needs.compute-suffix.outputs.short_sha }}
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
|
||||||
build-image-streaming:
|
build-image-streaming:
|
||||||
@ -55,4 +58,5 @@ jobs:
|
|||||||
latest=auto
|
latest=auto
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,event=pr
|
type=ref,event=pr
|
||||||
|
type=ref,event=pr,suffix=-${{ needs.compute-suffix.outputs.short_sha }}
|
||||||
secrets: inherit
|
secrets: inherit
|
||||||
|
4
.github/workflows/build-security.yml
vendored
4
.github/workflows/build-security.yml
vendored
@ -32,7 +32,7 @@ jobs:
|
|||||||
labels: |
|
labels: |
|
||||||
org.opencontainers.image.description=Nightly build image used for testing purposes
|
org.opencontainers.image.description=Nightly build image used for testing purposes
|
||||||
flavor: |
|
flavor: |
|
||||||
latest=true
|
latest=auto
|
||||||
tags: |
|
tags: |
|
||||||
type=raw,value=edge
|
type=raw,value=edge
|
||||||
type=raw,value=nightly
|
type=raw,value=nightly
|
||||||
@ -53,7 +53,7 @@ jobs:
|
|||||||
labels: |
|
labels: |
|
||||||
org.opencontainers.image.description=Nightly build image used for testing purposes
|
org.opencontainers.image.description=Nightly build image used for testing purposes
|
||||||
flavor: |
|
flavor: |
|
||||||
latest=true
|
latest=auto
|
||||||
tags: |
|
tags: |
|
||||||
type=raw,value=edge
|
type=raw,value=edge
|
||||||
type=raw,value=nightly
|
type=raw,value=nightly
|
||||||
|
26
CHANGELOG.md
26
CHANGELOG.md
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## [4.3.0] - UNRELEASED
|
## [4.3.0] - 2024-10-08
|
||||||
|
|
||||||
The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski.
|
The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski.
|
||||||
|
|
||||||
@ -11,12 +11,12 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
- **Add confirmation interstitial instead of silently redirecting logged-out visitors to remote resources** (#27792, #28902, and #30651 by @ClearlyClaire and @Gargron)\
|
- **Add confirmation interstitial instead of silently redirecting logged-out visitors to remote resources** (#27792, #28902, and #30651 by @ClearlyClaire and @Gargron)\
|
||||||
This fixes a longstanding open redirect in Mastodon, at the cost of added friction when local links to remote resources are shared.
|
This fixes a longstanding open redirect in Mastodon, at the cost of added friction when local links to remote resources are shared.
|
||||||
- Fix ReDoS vulnerability on some Ruby versions ([GHSA-jpxp-r43f-rhvx](https://github.com/mastodon/mastodon/security/advisories/GHSA-jpxp-r43f-rhvx))
|
- Fix ReDoS vulnerability on some Ruby versions ([GHSA-jpxp-r43f-rhvx](https://github.com/mastodon/mastodon/security/advisories/GHSA-jpxp-r43f-rhvx))
|
||||||
- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 by @ClearlyClaire)
|
- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 and #32241 by @ClearlyClaire)
|
||||||
- Update dependencies
|
- Update dependencies
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089 and #32085 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\
|
- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089, #32085, #32243, #32179 and #32254 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\
|
||||||
Group notifications of the same type for the same target, so that your notifications no longer get cluttered by boost and favorite notifications as soon as a couple of your posts get traction.\
|
Group notifications of the same type for the same target, so that your notifications no longer get cluttered by boost and favorite notifications as soon as a couple of your posts get traction.\
|
||||||
This is done server-side so that clients can efficiently get relevant groups without having to go through numerous pages of individual notifications.\
|
This is done server-side so that clients can efficiently get relevant groups without having to go through numerous pages of individual notifications.\
|
||||||
As part of this, the visual design of the entire notifications feature has been revamped.\
|
As part of this, the visual design of the entire notifications feature has been revamped.\
|
||||||
@ -28,7 +28,7 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
- `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts
|
- `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts
|
||||||
- `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group
|
- `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group
|
||||||
- `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count
|
- `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count
|
||||||
- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723 and #32062 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\
|
- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723, #32062 and #32281 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\
|
||||||
The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\
|
The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\
|
||||||
You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\
|
You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\
|
||||||
Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\
|
Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\
|
||||||
@ -61,7 +61,7 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
- **Add timeline of public posts about a trending link** (#30381 and #30840 by @Gargron)\
|
- **Add timeline of public posts about a trending link** (#30381 and #30840 by @Gargron)\
|
||||||
You can now see public posts mentioning currently-trending articles from people who have opted into discovery features.\
|
You can now see public posts mentioning currently-trending articles from people who have opted into discovery features.\
|
||||||
This adds a new REST API endpoint: https://docs.joinmastodon.org/methods/timelines/#link
|
This adds a new REST API endpoint: https://docs.joinmastodon.org/methods/timelines/#link
|
||||||
- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, and #31900 by @Gargron and @oneiros)\
|
- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, #31900 and #32188 by @Gargron, @mjankowski and @oneiros)\
|
||||||
This adds a mechanism to [highlight the author of news articles](https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/) shared on Mastodon.\
|
This adds a mechanism to [highlight the author of news articles](https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/) shared on Mastodon.\
|
||||||
Articles hosted outside the fediverse can indicate a fediverse author with a meta tag:
|
Articles hosted outside the fediverse can indicate a fediverse author with a meta tag:
|
||||||
```html
|
```html
|
||||||
@ -150,10 +150,12 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
- Add groundwork for annual reports for accounts (#28693 by @Gargron)\
|
- Add groundwork for annual reports for accounts (#28693 by @Gargron)\
|
||||||
This lays the groundwork for a “year-in-review”/“wrapped” style report for local users, but is currently not in use.
|
This lays the groundwork for a “year-in-review”/“wrapped” style report for local users, but is currently not in use.
|
||||||
- Add notification email on invalid second authenticator (#28822 by @ClearlyClaire)
|
- Add notification email on invalid second authenticator (#28822 by @ClearlyClaire)
|
||||||
|
- Add date of account deletion in list of accounts in the admin interface (#25640 by @tribela)
|
||||||
- Add new emojis from `jdecked/twemoji` 15.0 (#28404 by @TheEssem)
|
- Add new emojis from `jdecked/twemoji` 15.0 (#28404 by @TheEssem)
|
||||||
- Add configurable error handling in attachment batch deletion (#28184 by @vmstan)\
|
- Add configurable error handling in attachment batch deletion (#28184 by @vmstan)\
|
||||||
This makes the S3 batch size configurable through the `S3_BATCH_DELETE_LIMIT` environment variable (defaults to 1000), and adds some retry logic, configurable through the `S3_BATCH_DELETE_RETRY` environment variable (defaults to 3).
|
This makes the S3 batch size configurable through the `S3_BATCH_DELETE_LIMIT` environment variable (defaults to 1000), and adds some retry logic, configurable through the `S3_BATCH_DELETE_RETRY` environment variable (defaults to 3).
|
||||||
- Add VAPID public key to instance serializer (#28006 by @ThisIsMissEm)
|
- Add VAPID public key to instance serializer (#28006 by @ThisIsMissEm)
|
||||||
|
- Add support for serving JRD `/.well-known/host-meta.json` in addition to XRD host-meta (#32206 by @c960657)
|
||||||
- Add `nodeName` and `nodeDescription` to nodeinfo `metadata` (#28079 by @6543)
|
- Add `nodeName` and `nodeDescription` to nodeinfo `metadata` (#28079 by @6543)
|
||||||
- Add Thai diacritics and tone marks in `HASHTAG_INVALID_CHARS_RE` (#26576 by @ppnplus)
|
- Add Thai diacritics and tone marks in `HASHTAG_INVALID_CHARS_RE` (#26576 by @ppnplus)
|
||||||
- Add variable delay before link verification of remote account links (#27774 by @ClearlyClaire)
|
- Add variable delay before link verification of remote account links (#27774 by @ClearlyClaire)
|
||||||
@ -168,7 +170,7 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, and #31525 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\
|
- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, #31525, #32153, and #32201 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\
|
||||||
This changes all the interface icons from FontAwesome to Material Symbols for a more modern look, consistent with the official Mastodon Android app.\
|
This changes all the interface icons from FontAwesome to Material Symbols for a more modern look, consistent with the official Mastodon Android app.\
|
||||||
In addition, better care is given to pixel alignment, and icon variants are used to better highlight active/inactive state.
|
In addition, better care is given to pixel alignment, and icon variants are used to better highlight active/inactive state.
|
||||||
- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, #31889 and #32033 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\
|
- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, #31889 and #32033 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\
|
||||||
@ -192,9 +194,9 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
Administrators may need to update their setup accordingly.
|
Administrators may need to update their setup accordingly.
|
||||||
- Change how content warnings and filters are displayed in web UI (#31365, and #31761 by @Gargron)
|
- Change how content warnings and filters are displayed in web UI (#31365, and #31761 by @Gargron)
|
||||||
- Change preview card processing to ignore `undefined` as canonical url (#31882 by @oneiros)
|
- Change preview card processing to ignore `undefined` as canonical url (#31882 by @oneiros)
|
||||||
- Change embedded posts to use web UI (#31766 and #32135 by @Gargron)
|
- Change embedded posts to use web UI (#31766, #32135 and #32271 by @Gargron)
|
||||||
- Change inner borders in media galleries in web UI (#31852 by @Gargron)
|
- Change inner borders in media galleries in web UI (#31852 by @Gargron)
|
||||||
- Change design of media attachments and profile media tab in web UI (#31807, #32048, and #31967 by @Gargron)
|
- Change design of media attachments and profile media tab in web UI (#31807, #32048, #31967, #32217, #32224 and #32257 by @ClearlyClaire and @Gargron)
|
||||||
- Change labels on thread indicators in web UI (#31806 by @Gargron)
|
- Change labels on thread indicators in web UI (#31806 by @Gargron)
|
||||||
- Change label of "Data export" menu item in settings interface (#32099 by @c960657)
|
- Change label of "Data export" menu item in settings interface (#32099 by @c960657)
|
||||||
- Change responsive break points on navigation panel in web UI (#32034 by @Gargron)
|
- Change responsive break points on navigation panel in web UI (#32034 by @Gargron)
|
||||||
@ -284,9 +286,10 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
- Fix error when accepting an appeal for sensitive posts deleted in the meantime (#32037 by @ClearlyClaire)
|
- Fix error when accepting an appeal for sensitive posts deleted in the meantime (#32037 by @ClearlyClaire)
|
||||||
- Fix error when encountering reblog of deleted post in feed rebuild (#32001 by @ClearlyClaire)
|
- Fix error when encountering reblog of deleted post in feed rebuild (#32001 by @ClearlyClaire)
|
||||||
- Fix Safari browser glitch related to horizontal scrolling (#31960 by @Gargron)
|
- Fix Safari browser glitch related to horizontal scrolling (#31960 by @Gargron)
|
||||||
|
- Fix unresolvable mentions sometimes preventing processing incoming posts (#29215 by @tribela and @ClearlyClaire)
|
||||||
- Fix too many requests caused by relationship look-ups in web UI (#32042 by @Gargron)
|
- Fix too many requests caused by relationship look-ups in web UI (#32042 by @Gargron)
|
||||||
- Fix links for reblogs in moderation interface (#31979 by @ClearlyClaire)
|
- Fix links for reblogs in moderation interface (#31979 by @ClearlyClaire)
|
||||||
- Fix the appearance of avatars when they do not load (#31966 by @renchap)
|
- Fix the appearance of avatars when they do not load (#31966 and #32270 by @Gargron and @renchap)
|
||||||
- Fix spurious error notifications for aborted requests in web UI (#31952 by @c960657)
|
- Fix spurious error notifications for aborted requests in web UI (#31952 by @c960657)
|
||||||
- Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil)
|
- Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil)
|
||||||
- Fix security context sometimes not being added in LD-Signed activities (#31871 by @ClearlyClaire)
|
- Fix security context sometimes not being added in LD-Signed activities (#31871 by @ClearlyClaire)
|
||||||
@ -309,10 +312,12 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
- Fix “Redirect URI” field not being marked as required in “New application” form (#30311 by @ThisIsMissEm)
|
- Fix “Redirect URI” field not being marked as required in “New application” form (#30311 by @ThisIsMissEm)
|
||||||
- Fix right-to-left text in preview cards (#30930 by @ClearlyClaire)
|
- Fix right-to-left text in preview cards (#30930 by @ClearlyClaire)
|
||||||
- Fix rack attack `match_type` value typo in logging config (#30514 by @mjankowski)
|
- Fix rack attack `match_type` value typo in logging config (#30514 by @mjankowski)
|
||||||
- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445 and #32091 by @ClearlyClaire, @valtlai and @vmstan)
|
- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445, #32091, #32147 and #32137 by @ClearlyClaire, @mjankowski, @valtlai and @vmstan)
|
||||||
|
- Fix editing description of media uploads with custom thumbnails (#32221 by @ClearlyClaire)
|
||||||
- Fix race condition in `POST /api/v1/push/subscription` (#30166 by @ClearlyClaire)
|
- Fix race condition in `POST /api/v1/push/subscription` (#30166 by @ClearlyClaire)
|
||||||
- Fix post deletion not being delayed when those are part of an account warning (#30163 by @ClearlyClaire)
|
- Fix post deletion not being delayed when those are part of an account warning (#30163 by @ClearlyClaire)
|
||||||
- Fix rendering error on `/start` when not logged in (#30023 by @timothyjrogers)
|
- Fix rendering error on `/start` when not logged in (#30023 by @timothyjrogers)
|
||||||
|
- Fix unneeded requests to blocked domains when receiving relayed signed activities from them (#31161 by @ClearlyClaire)
|
||||||
- Fix logo pushing header buttons out of view on certain conditions in mobile layout (#29787 by @ClearlyClaire)
|
- Fix logo pushing header buttons out of view on certain conditions in mobile layout (#29787 by @ClearlyClaire)
|
||||||
- Fix notification-related records not being reattributed when merging accounts (#29694 by @ClearlyClaire)
|
- Fix notification-related records not being reattributed when merging accounts (#29694 by @ClearlyClaire)
|
||||||
- Fix results/query in `api/v1/featured_tags/suggestions` (#29597 by @mjankowski)
|
- Fix results/query in `api/v1/featured_tags/suggestions` (#29597 by @mjankowski)
|
||||||
@ -322,6 +327,7 @@ The following changelog entries focus on changes visible to users, administrator
|
|||||||
- Fix full date display not respecting the locale 12/24h format (#29448 by @renchap)
|
- Fix full date display not respecting the locale 12/24h format (#29448 by @renchap)
|
||||||
- Fix filters title and keywords overflow (#29396 by @GeopJr)
|
- Fix filters title and keywords overflow (#29396 by @GeopJr)
|
||||||
- Fix incorrect date format in “Follows and followers” (#29390 by @JasonPunyon)
|
- Fix incorrect date format in “Follows and followers” (#29390 by @JasonPunyon)
|
||||||
|
- Fix navigation item active highlight for some paths (#32159 by @mjankowski)
|
||||||
- Fix “Edit media” modal sizing and layout when space-constrained (#27095 by @ronilaukkarinen)
|
- Fix “Edit media” modal sizing and layout when space-constrained (#27095 by @ronilaukkarinen)
|
||||||
- Fix modal container bounds (#29185 by @nico3333fr)
|
- Fix modal container bounds (#29185 by @nico3333fr)
|
||||||
- Fix inefficient HTTP signature parsing using regexps and `StringScanner` (#29133 by @ClearlyClaire)
|
- Fix inefficient HTTP signature parsing using regexps and `StringScanner` (#29133 by @ClearlyClaire)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# syntax=docker/dockerfile:1.9
|
# syntax=docker/dockerfile:1.10
|
||||||
|
|
||||||
# This file is designed for production server deployment, not local development work
|
# This file is designed for production server deployment, not local development work
|
||||||
# For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/README.md#docker
|
# For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/README.md#docker
|
||||||
@ -214,7 +214,7 @@ FROM build AS ffmpeg
|
|||||||
|
|
||||||
# ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"]
|
# ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"]
|
||||||
# renovate: datasource=repology depName=ffmpeg packageName=openpkg_current/ffmpeg
|
# renovate: datasource=repology depName=ffmpeg packageName=openpkg_current/ffmpeg
|
||||||
ARG FFMPEG_VERSION=7.0.2
|
ARG FFMPEG_VERSION=7.1
|
||||||
# ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"]
|
# ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"]
|
||||||
ARG FFMPEG_URL=https://ffmpeg.org/releases
|
ARG FFMPEG_URL=https://ffmpeg.org/releases
|
||||||
|
|
||||||
|
30
Gemfile.lock
30
Gemfile.lock
@ -100,8 +100,8 @@ GEM
|
|||||||
attr_required (1.0.2)
|
attr_required (1.0.2)
|
||||||
awrence (1.2.1)
|
awrence (1.2.1)
|
||||||
aws-eventstream (1.3.0)
|
aws-eventstream (1.3.0)
|
||||||
aws-partitions (1.978.0)
|
aws-partitions (1.983.0)
|
||||||
aws-sdk-core (3.209.0)
|
aws-sdk-core (3.209.1)
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
aws-eventstream (~> 1, >= 1.3.0)
|
||||||
aws-partitions (~> 1, >= 1.651.0)
|
aws-partitions (~> 1, >= 1.651.0)
|
||||||
aws-sigv4 (~> 1.9)
|
aws-sigv4 (~> 1.9)
|
||||||
@ -109,7 +109,7 @@ GEM
|
|||||||
aws-sdk-kms (1.94.0)
|
aws-sdk-kms (1.94.0)
|
||||||
aws-sdk-core (~> 3, >= 3.207.0)
|
aws-sdk-core (~> 3, >= 3.207.0)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
aws-sdk-s3 (1.166.0)
|
aws-sdk-s3 (1.167.0)
|
||||||
aws-sdk-core (~> 3, >= 3.207.0)
|
aws-sdk-core (~> 3, >= 3.207.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.5)
|
aws-sigv4 (~> 1.5)
|
||||||
@ -301,7 +301,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.58.0)
|
haml_lint (0.59.0)
|
||||||
haml (>= 5.0)
|
haml (>= 5.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
rainbow
|
rainbow
|
||||||
@ -369,7 +369,7 @@ GEM
|
|||||||
json-ld-preloaded (3.3.0)
|
json-ld-preloaded (3.3.0)
|
||||||
json-ld (~> 3.3)
|
json-ld (~> 3.3)
|
||||||
rdf (~> 3.3)
|
rdf (~> 3.3)
|
||||||
json-schema (5.0.0)
|
json-schema (5.0.1)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
jsonapi-renderer (0.2.2)
|
jsonapi-renderer (0.2.2)
|
||||||
jwt (2.7.1)
|
jwt (2.7.1)
|
||||||
@ -601,7 +601,7 @@ GEM
|
|||||||
actionmailer (>= 3)
|
actionmailer (>= 3)
|
||||||
net-smtp
|
net-smtp
|
||||||
premailer (~> 1.7, >= 1.7.9)
|
premailer (~> 1.7, >= 1.7.9)
|
||||||
propshaft (1.0.1)
|
propshaft (1.1.0)
|
||||||
actionpack (>= 7.0.0)
|
actionpack (>= 7.0.0)
|
||||||
activesupport (>= 7.0.0)
|
activesupport (>= 7.0.0)
|
||||||
rack
|
rack
|
||||||
@ -615,7 +615,7 @@ GEM
|
|||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
raabro (1.4.0)
|
raabro (1.4.0)
|
||||||
racc (1.8.1)
|
racc (1.8.1)
|
||||||
rack (2.2.9)
|
rack (2.2.10)
|
||||||
rack-attack (6.7.0)
|
rack-attack (6.7.0)
|
||||||
rack (>= 1.0, < 4)
|
rack (>= 1.0, < 4)
|
||||||
rack-cors (2.0.2)
|
rack-cors (2.0.2)
|
||||||
@ -698,7 +698,7 @@ GEM
|
|||||||
responders (3.1.1)
|
responders (3.1.1)
|
||||||
actionpack (>= 5.2)
|
actionpack (>= 5.2)
|
||||||
railties (>= 5.2)
|
railties (>= 5.2)
|
||||||
rexml (3.3.7)
|
rexml (3.3.8)
|
||||||
rotp (6.3.0)
|
rotp (6.3.0)
|
||||||
rouge (4.3.0)
|
rouge (4.3.0)
|
||||||
rpam2 (4.0.2)
|
rpam2 (4.0.2)
|
||||||
@ -748,15 +748,15 @@ GEM
|
|||||||
parser (>= 3.3.1.0)
|
parser (>= 3.3.1.0)
|
||||||
rubocop-capybara (2.21.0)
|
rubocop-capybara (2.21.0)
|
||||||
rubocop (~> 1.41)
|
rubocop (~> 1.41)
|
||||||
rubocop-performance (1.21.1)
|
rubocop-performance (1.22.1)
|
||||||
rubocop (>= 1.48.1, < 2.0)
|
rubocop (>= 1.48.1, < 2.0)
|
||||||
rubocop-ast (>= 1.31.1, < 2.0)
|
rubocop-ast (>= 1.31.1, < 2.0)
|
||||||
rubocop-rails (2.25.1)
|
rubocop-rails (2.26.2)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
rack (>= 1.1)
|
rack (>= 1.1)
|
||||||
rubocop (>= 1.33.0, < 2.0)
|
rubocop (>= 1.52.0, < 2.0)
|
||||||
rubocop-ast (>= 1.31.1, < 2.0)
|
rubocop-ast (>= 1.31.1, < 2.0)
|
||||||
rubocop-rspec (3.0.4)
|
rubocop-rspec (3.1.0)
|
||||||
rubocop (~> 1.61)
|
rubocop (~> 1.61)
|
||||||
rubocop-rspec_rails (2.30.0)
|
rubocop-rspec_rails (2.30.0)
|
||||||
rubocop (~> 1.61)
|
rubocop (~> 1.61)
|
||||||
@ -815,7 +815,7 @@ GEM
|
|||||||
docile (~> 1.1)
|
docile (~> 1.1)
|
||||||
simplecov-html (~> 0.11)
|
simplecov-html (~> 0.11)
|
||||||
simplecov_json_formatter (~> 0.1)
|
simplecov_json_formatter (~> 0.1)
|
||||||
simplecov-html (0.12.3)
|
simplecov-html (0.13.1)
|
||||||
simplecov-lcov (0.8.0)
|
simplecov-lcov (0.8.0)
|
||||||
simplecov_json_formatter (0.1.4)
|
simplecov_json_formatter (0.1.4)
|
||||||
stackprof (0.2.26)
|
stackprof (0.2.26)
|
||||||
@ -862,7 +862,7 @@ GEM
|
|||||||
unf (0.1.4)
|
unf (0.1.4)
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.9.1)
|
unf_ext (0.0.9.1)
|
||||||
unicode-display_width (2.5.0)
|
unicode-display_width (2.6.0)
|
||||||
uri (0.13.1)
|
uri (0.13.1)
|
||||||
validate_email (0.1.6)
|
validate_email (0.1.6)
|
||||||
activemodel (>= 3.0)
|
activemodel (>= 3.0)
|
||||||
@ -884,7 +884,7 @@ GEM
|
|||||||
webfinger (1.2.0)
|
webfinger (1.2.0)
|
||||||
activesupport
|
activesupport
|
||||||
httpclient (>= 2.4)
|
httpclient (>= 2.4)
|
||||||
webmock (3.23.1)
|
webmock (3.24.0)
|
||||||
addressable (>= 2.8.0)
|
addressable (>= 2.8.0)
|
||||||
crack (>= 0.3.2)
|
crack (>= 0.3.2)
|
||||||
hashdiff (>= 0.4.0, < 2.0.0)
|
hashdiff (>= 0.4.0, < 2.0.0)
|
||||||
|
@ -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.3.x | Yes |
|
||||||
| 4.2.x | Yes |
|
| 4.2.x | Yes |
|
||||||
| 4.1.x | Yes |
|
| 4.1.x | Until 2025-04-08 |
|
||||||
| < 4.1 | No |
|
| < 4.1 | No |
|
||||||
|
@ -6,6 +6,7 @@ class Admin::AnnouncementsController < Admin::BaseController
|
|||||||
|
|
||||||
def index
|
def index
|
||||||
authorize :announcement, :index?
|
authorize :announcement, :index?
|
||||||
|
@published_announcements_count = Announcement.published.async_count
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@ -6,6 +6,7 @@ class Admin::Disputes::AppealsController < Admin::BaseController
|
|||||||
def index
|
def index
|
||||||
authorize :appeal, :index?
|
authorize :appeal, :index?
|
||||||
|
|
||||||
|
@pending_appeals_count = Appeal.pending.async_count
|
||||||
@appeals = filtered_appeals.page(params[:page])
|
@appeals = filtered_appeals.page(params[:page])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ class Admin::Trends::Links::PreviewCardProvidersController < Admin::BaseControll
|
|||||||
def index
|
def index
|
||||||
authorize :preview_card_provider, :review?
|
authorize :preview_card_provider, :review?
|
||||||
|
|
||||||
|
@pending_preview_card_providers_count = PreviewCardProvider.unreviewed.async_count
|
||||||
@preview_card_providers = filtered_preview_card_providers.page(params[:page])
|
@preview_card_providers = filtered_preview_card_providers.page(params[:page])
|
||||||
@form = Trends::PreviewCardProviderBatch.new
|
@form = Trends::PreviewCardProviderBatch.new
|
||||||
end
|
end
|
||||||
|
@ -4,6 +4,7 @@ class Admin::Trends::TagsController < Admin::BaseController
|
|||||||
def index
|
def index
|
||||||
authorize :tag, :review?
|
authorize :tag, :review?
|
||||||
|
|
||||||
|
@pending_tags_count = Tag.pending_review.async_count
|
||||||
@tags = filtered_tags.page(params[:page])
|
@tags = filtered_tags.page(params[:page])
|
||||||
@form = Trends::TagBatch.new
|
@form = Trends::TagBatch.new
|
||||||
end
|
end
|
||||||
|
@ -16,6 +16,7 @@ class Api::V1::AccountsController < Api::BaseController
|
|||||||
before_action :check_account_confirmation, except: [:index, :create]
|
before_action :check_account_confirmation, except: [:index, :create]
|
||||||
before_action :check_enabled_registrations, only: [:create]
|
before_action :check_enabled_registrations, only: [:create]
|
||||||
before_action :check_accounts_limit, only: [:index]
|
before_action :check_accounts_limit, only: [:index]
|
||||||
|
before_action :check_following_self, only: [:follow]
|
||||||
|
|
||||||
skip_before_action :require_authenticated_user!, only: :create
|
skip_before_action :require_authenticated_user!, only: :create
|
||||||
|
|
||||||
@ -101,6 +102,10 @@ class Api::V1::AccountsController < Api::BaseController
|
|||||||
raise(Mastodon::ValidationError) if account_ids.size > DEFAULT_ACCOUNTS_LIMIT
|
raise(Mastodon::ValidationError) if account_ids.size > DEFAULT_ACCOUNTS_LIMIT
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_following_self
|
||||||
|
render json: { error: I18n.t('accounts.self_follow_error') }, status: 403 if current_user.account.id == @account.id
|
||||||
|
end
|
||||||
|
|
||||||
def relationships(**options)
|
def relationships(**options)
|
||||||
AccountRelationshipsPresenter.new([@account], current_user.account_id, **options)
|
AccountRelationshipsPresenter.new([@account], current_user.account_id, **options)
|
||||||
end
|
end
|
||||||
|
@ -52,7 +52,7 @@ class Api::V1::Notifications::RequestsController < Api::BaseController
|
|||||||
private
|
private
|
||||||
|
|
||||||
def load_requests
|
def load_requests
|
||||||
requests = NotificationRequest.where(account: current_account).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id(
|
requests = NotificationRequest.where(account: current_account).without_suspended.includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id(
|
||||||
limit_param(DEFAULT_ACCOUNTS_LIMIT),
|
limit_param(DEFAULT_ACCOUNTS_LIMIT),
|
||||||
params_slice(:max_id, :since_id, :min_id)
|
params_slice(:max_id, :since_id, :min_id)
|
||||||
)
|
)
|
||||||
|
@ -35,7 +35,7 @@ class ApplicationController < ActionController::Base
|
|||||||
rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
|
rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
|
||||||
rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests
|
rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests
|
||||||
|
|
||||||
rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
|
rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, with: :internal_server_error)
|
||||||
rescue_from Mastodon::RaceConditionError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable
|
rescue_from Mastodon::RaceConditionError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable
|
||||||
|
|
||||||
rescue_from Seahorse::Client::NetworkingError do |e|
|
rescue_from Seahorse::Client::NetworkingError do |e|
|
||||||
|
@ -20,7 +20,7 @@ module Api::ErrorHandling
|
|||||||
render json: { error: 'Record not found' }, status: 404
|
render json: { error: 'Record not found' }, status: 404
|
||||||
end
|
end
|
||||||
|
|
||||||
rescue_from HTTP::Error, Mastodon::UnexpectedResponseError do
|
rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::UnexpectedResponseError) do
|
||||||
render json: { error: 'Remote data could not be fetched' }, status: 503
|
render json: { error: 'Remote data could not be fetched' }, status: 503
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ module SignatureVerification
|
|||||||
fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)", signed_string: compare_signed_string, signature: signature_params['signature']
|
fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)", signed_string: compare_signed_string, signature: signature_params['signature']
|
||||||
rescue SignatureVerificationError => e
|
rescue SignatureVerificationError => e
|
||||||
fail_with! e.message
|
fail_with! e.message
|
||||||
rescue HTTP::Error, OpenSSL::SSL::SSLError => e
|
rescue *Mastodon::HTTP_CONNECTION_ERRORS => e
|
||||||
fail_with! "Failed to fetch remote data: #{e.message}"
|
fail_with! "Failed to fetch remote data: #{e.message}"
|
||||||
rescue Mastodon::UnexpectedResponseError
|
rescue Mastodon::UnexpectedResponseError
|
||||||
fail_with! 'Failed to fetch remote data (got unexpected reply from server)'
|
fail_with! 'Failed to fetch remote data (got unexpected reply from server)'
|
||||||
|
@ -13,7 +13,7 @@ module WebAppControllerConcern
|
|||||||
policy = ContentSecurityPolicy.new
|
policy = ContentSecurityPolicy.new
|
||||||
|
|
||||||
if policy.sso_host.present?
|
if policy.sso_host.present?
|
||||||
p.form_action policy.sso_host
|
p.form_action policy.sso_host, -> { "https://#{request.host}/auth/auth/" }
|
||||||
else
|
else
|
||||||
p.form_action :none
|
p.form_action :none
|
||||||
end
|
end
|
||||||
|
@ -13,7 +13,7 @@ class MediaProxyController < ApplicationController
|
|||||||
rescue_from ActiveRecord::RecordInvalid, with: :not_found
|
rescue_from ActiveRecord::RecordInvalid, with: :not_found
|
||||||
rescue_from Mastodon::UnexpectedResponseError, with: :not_found
|
rescue_from Mastodon::UnexpectedResponseError, with: :not_found
|
||||||
rescue_from Mastodon::NotPermittedError, with: :not_found
|
rescue_from Mastodon::NotPermittedError, with: :not_found
|
||||||
rescue_from HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, with: :internal_server_error
|
rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, with: :internal_server_error)
|
||||||
|
|
||||||
def show
|
def show
|
||||||
with_redis_lock("media_download:#{params[:id]}") do
|
with_redis_lock("media_download:#{params[:id]}") do
|
||||||
|
@ -9,7 +9,7 @@ class Settings::ExportsController < Settings::BaseController
|
|||||||
skip_before_action :require_functional!
|
skip_before_action :require_functional!
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@export = Export.new(current_account)
|
@export_summary = ExportSummary.new(preloaded_account)
|
||||||
@backups = current_user.backups
|
@backups = current_user.backups
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -25,4 +25,15 @@ class Settings::ExportsController < Settings::BaseController
|
|||||||
|
|
||||||
redirect_to settings_export_path
|
redirect_to settings_export_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def preloaded_account
|
||||||
|
current_account.tap do |account|
|
||||||
|
ActiveRecord::Associations::Preloader.new(
|
||||||
|
records: [account],
|
||||||
|
associations: :account_stat
|
||||||
|
).call
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -15,7 +15,7 @@ module Settings
|
|||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
session[:new_otp_secret] = User.generate_otp_secret(32)
|
session[:new_otp_secret] = User.generate_otp_secret
|
||||||
|
|
||||||
redirect_to new_settings_two_factor_authentication_confirmation_path
|
redirect_to new_settings_two_factor_authentication_confirmation_path
|
||||||
end
|
end
|
||||||
|
@ -7,7 +7,23 @@ module WellKnown
|
|||||||
def show
|
def show
|
||||||
@webfinger_template = "#{webfinger_url}?resource={uri}"
|
@webfinger_template = "#{webfinger_url}?resource={uri}"
|
||||||
expires_in 3.days, public: true
|
expires_in 3.days, public: true
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.any do
|
||||||
render content_type: 'application/xrd+xml', formats: [:xml]
|
render content_type: 'application/xrd+xml', formats: [:xml]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
format.json do
|
||||||
|
render json: {
|
||||||
|
links: [
|
||||||
|
{
|
||||||
|
rel: 'lrdd',
|
||||||
|
template: @webfinger_template,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -35,4 +35,11 @@ module Admin::ActionLogsHelper
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sorted_action_log_types
|
||||||
|
Admin::ActionLogFilter::ACTION_TYPE_MAP
|
||||||
|
.keys
|
||||||
|
.map { |key| [I18n.t("admin.action_logs.action_types.#{key}"), key] }
|
||||||
|
.sort_by(&:first)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -18,6 +18,11 @@ module Admin::DashboardHelper
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def date_range(range)
|
||||||
|
[l(range.first), l(range.last)]
|
||||||
|
.join(' - ')
|
||||||
|
end
|
||||||
|
|
||||||
def relevant_account_timestamp(account)
|
def relevant_account_timestamp(account)
|
||||||
timestamp, exact = if account.user_current_sign_in_at && account.user_current_sign_in_at < 24.hours.ago
|
timestamp, exact = if account.user_current_sign_in_at && account.user_current_sign_in_at < 24.hours.ago
|
||||||
[account.user_current_sign_in_at, true]
|
[account.user_current_sign_in_at, true]
|
||||||
@ -25,6 +30,8 @@ module Admin::DashboardHelper
|
|||||||
[account.user_current_sign_in_at, false]
|
[account.user_current_sign_in_at, false]
|
||||||
elsif account.user_pending?
|
elsif account.user_pending?
|
||||||
[account.user_created_at, true]
|
[account.user_created_at, true]
|
||||||
|
elsif account.suspended_at.present? && account.local? && account.user.nil?
|
||||||
|
[account.suspended_at, true]
|
||||||
elsif account.last_status_at.present?
|
elsif account.last_status_at.present?
|
||||||
[account.last_status_at, true]
|
[account.last_status_at, true]
|
||||||
else
|
else
|
||||||
|
@ -1,12 +1,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
module ApplicationHelper
|
module ApplicationHelper
|
||||||
DANGEROUS_SCOPES = %w(
|
|
||||||
read
|
|
||||||
write
|
|
||||||
follow
|
|
||||||
).freeze
|
|
||||||
|
|
||||||
RTL_LOCALES = %i(
|
RTL_LOCALES = %i(
|
||||||
ar
|
ar
|
||||||
ckb
|
ckb
|
||||||
@ -95,8 +89,11 @@ module ApplicationHelper
|
|||||||
Rails.env.production? ? site_title : "#{site_title} (Dev)"
|
Rails.env.production? ? site_title : "#{site_title} (Dev)"
|
||||||
end
|
end
|
||||||
|
|
||||||
def class_for_scope(scope)
|
def label_for_scope(scope)
|
||||||
'scope-danger' if DANGEROUS_SCOPES.include?(scope.to_s)
|
safe_join [
|
||||||
|
tag.samp(scope, class: { 'scope-danger' => SessionActivation::DEFAULT_SCOPES.include?(scope.to_s) }),
|
||||||
|
tag.span(t("doorkeeper.scopes.#{scope}"), class: :hint),
|
||||||
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def can?(action, record)
|
def can?(action, record)
|
||||||
@ -244,6 +241,10 @@ module ApplicationHelper
|
|||||||
full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg'))
|
full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def copyable_input(options = {})
|
||||||
|
tag.input(type: :text, maxlength: 999, spellcheck: false, readonly: true, **options)
|
||||||
|
end
|
||||||
|
|
||||||
# glitch-soc addition to handle the multiple flavors
|
# glitch-soc addition to handle the multiple flavors
|
||||||
def preload_locale_pack
|
def preload_locale_pack
|
||||||
supported_locales = Themes.instance.flavour(current_flavour)['locales']
|
supported_locales = Themes.instance.flavour(current_flavour)['locales']
|
||||||
|
@ -193,6 +193,7 @@ module LanguagesHelper
|
|||||||
ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze,
|
ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze,
|
||||||
cnr: ['Montenegrin', 'crnogorski'].freeze,
|
cnr: ['Montenegrin', 'crnogorski'].freeze,
|
||||||
csb: ['Kashubian', 'Kaszëbsczi'].freeze,
|
csb: ['Kashubian', 'Kaszëbsczi'].freeze,
|
||||||
|
gsw: ['Swiss German', 'Schwiizertütsch'].freeze,
|
||||||
jbo: ['Lojban', 'la .lojban.'].freeze,
|
jbo: ['Lojban', 'la .lojban.'].freeze,
|
||||||
kab: ['Kabyle', 'Taqbaylit'].freeze,
|
kab: ['Kabyle', 'Taqbaylit'].freeze,
|
||||||
ldn: ['Láadan', 'Láadan'].freeze,
|
ldn: ['Láadan', 'Láadan'].freeze,
|
||||||
|
@ -19,11 +19,11 @@ module ThemeHelper
|
|||||||
|
|
||||||
if theme == 'system'
|
if theme == 'system'
|
||||||
''.html_safe.tap do |tags|
|
''.html_safe.tap do |tags|
|
||||||
tags << tag.meta(name: 'theme-color', content: Themes::THEME_COLORS[:dark], media: '(prefers-color-scheme: dark)')
|
tags << tag.meta(name: 'theme-color', content: '#3ff2ab', media: '(prefers-color-scheme: dark)')
|
||||||
tags << tag.meta(name: 'theme-color', content: Themes::THEME_COLORS[:light], media: '(prefers-color-scheme: light)')
|
tags << tag.meta(name: 'theme-color', content: '#3ff2ab', media: '(prefers-color-scheme: light)')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
tag.meta name: 'theme-color', content: theme_color_for(theme)
|
tag.meta name: 'theme-color', content: '#3ff2ab'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module WebfingerHelper
|
|
||||||
def webfinger!(uri)
|
|
||||||
Webfinger.new(uri).perform
|
|
||||||
end
|
|
||||||
end
|
|
@ -37,8 +37,7 @@ export const synchronouslySubmitMarkers = createAppAsyncThunk(
|
|||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
} else if ('sendBeacon' in navigator) {
|
||||||
} else if ('navigator' && 'sendBeacon' in navigator) {
|
|
||||||
// Failing that, we can use sendBeacon, but we have to encode the data as
|
// Failing that, we can use sendBeacon, but we have to encode the data as
|
||||||
// FormData for DoorKeeper to recognize the token.
|
// FormData for DoorKeeper to recognize the token.
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
@ -70,6 +70,10 @@ function dispatchAssociatedRecords(
|
|||||||
|
|
||||||
const supportedGroupedNotificationTypes = ['favourite', 'reblog'];
|
const supportedGroupedNotificationTypes = ['favourite', 'reblog'];
|
||||||
|
|
||||||
|
export function shouldGroupNotificationType(type: string) {
|
||||||
|
return supportedGroupedNotificationTypes.includes(type);
|
||||||
|
}
|
||||||
|
|
||||||
export const fetchNotifications = createDataLoadingThunk(
|
export const fetchNotifications = createDataLoadingThunk(
|
||||||
'notificationGroups/fetch',
|
'notificationGroups/fetch',
|
||||||
async (_params, { getState }) =>
|
async (_params, { getState }) =>
|
||||||
|
@ -106,12 +106,13 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
|
|||||||
dispatch(processNewNotificationForGroups(notificationJSON));
|
dispatch(processNewNotificationForGroups(notificationJSON));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'notifications_merged':
|
case 'notifications_merged': {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
if (state.notifications.top || !state.notifications.mounted)
|
if (state.notifications.top || !state.notifications.mounted)
|
||||||
dispatch(expandNotifications({ forceLoad: true, maxId: undefined }));
|
dispatch(expandNotifications({ forceLoad: true, maxId: undefined }));
|
||||||
dispatch(refreshStaleNotificationGroups());
|
dispatch(refreshStaleNotificationGroups());
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case 'conversation':
|
case 'conversation':
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
dispatch(updateConversations(JSON.parse(data.payload)));
|
dispatch(updateConversations(JSON.parse(data.payload)));
|
||||||
|
@ -13,7 +13,7 @@ export interface ApiAccountRoleJSON {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// See app/serializers/rest/account_serializer.rb
|
// See app/serializers/rest/account_serializer.rb
|
||||||
export interface ApiAccountJSON {
|
export interface BaseApiAccountJSON {
|
||||||
acct: string;
|
acct: string;
|
||||||
avatar: string;
|
avatar: string;
|
||||||
avatar_static: string;
|
avatar_static: string;
|
||||||
@ -45,3 +45,12 @@ export interface ApiAccountJSON {
|
|||||||
memorial?: boolean;
|
memorial?: boolean;
|
||||||
hide_collections: boolean;
|
hide_collections: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See app/serializers/rest/muted_account_serializer.rb
|
||||||
|
export interface ApiMutedAccountJSON extends BaseApiAccountJSON {
|
||||||
|
mute_expires_at?: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For now, we have the same type representing both `Account` and `MutedAccount`
|
||||||
|
// objects, but we should refactor this in the future.
|
||||||
|
export type ApiAccountJSON = ApiMutedAccountJSON;
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
|
import { useState, useCallback } from 'react';
|
||||||
|
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
import type {Account} from 'flavours/glitch/models/account';
|
import { useHovering } from 'flavours/glitch/hooks/useHovering';
|
||||||
|
import { autoPlayGif } from 'flavours/glitch/initial_state';
|
||||||
import {useHovering} from '../hooks/useHovering';
|
import type { Account } from 'flavours/glitch/models/account';
|
||||||
import {autoPlayGif} from '../initial_state';
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
account: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there
|
account: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there
|
||||||
@ -25,6 +26,8 @@ export const Avatar: React.FC<Props> = ({
|
|||||||
counterBorderColor,
|
counterBorderColor,
|
||||||
}) => {
|
}) => {
|
||||||
const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate);
|
const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate);
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [error, setError] = useState(false);
|
||||||
|
|
||||||
const style = {
|
const style = {
|
||||||
...styleFromParent,
|
...styleFromParent,
|
||||||
@ -37,17 +40,29 @@ export const Avatar: React.FC<Props> = ({
|
|||||||
? account?.get('avatar')
|
? account?.get('avatar')
|
||||||
: account?.get('avatar_static');
|
: account?.get('avatar_static');
|
||||||
|
|
||||||
|
const handleLoad = useCallback(() => {
|
||||||
|
setLoading(false);
|
||||||
|
}, [setLoading]);
|
||||||
|
|
||||||
|
const handleError = useCallback(() => {
|
||||||
|
setError(true);
|
||||||
|
}, [setError]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={classNames('account__avatar', {
|
className={classNames('account__avatar', {
|
||||||
'account__avatar-inline': inline,
|
'account__avatar--inline': inline,
|
||||||
|
'account__avatar--loading': loading,
|
||||||
})}
|
})}
|
||||||
onMouseEnter={handleMouseEnter}
|
onMouseEnter={handleMouseEnter}
|
||||||
onMouseLeave={handleMouseLeave}
|
onMouseLeave={handleMouseLeave}
|
||||||
style={style}
|
style={style}
|
||||||
data-avatar-of={account && `@${account.get('acct')}`}
|
data-avatar-of={account && `@${account.get('acct')}`}
|
||||||
>
|
>
|
||||||
{src && <img src={src} alt='' />}
|
{src && !error && (
|
||||||
|
<img src={src} alt='' onLoad={handleLoad} onError={handleError} />
|
||||||
|
)}
|
||||||
|
|
||||||
{counter && (
|
{counter && (
|
||||||
<div
|
<div
|
||||||
className='account__avatar__counter'
|
className='account__avatar__counter'
|
||||||
|
@ -198,7 +198,7 @@ class Item extends PureComponent {
|
|||||||
|
|
||||||
{visible && thumbnail}
|
{visible && thumbnail}
|
||||||
|
|
||||||
{badges && (
|
{visible && badges && (
|
||||||
<div className='media-gallery__item__badges'>
|
<div className='media-gallery__item__badges'>
|
||||||
{badges}
|
{badges}
|
||||||
</div>
|
</div>
|
||||||
@ -356,14 +356,14 @@ class MediaGallery extends PureComponent {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={computedClass} style={style} ref={this.handleRef}>
|
<div className={computedClass} style={style} ref={this.handleRef}>
|
||||||
|
{children}
|
||||||
|
|
||||||
{(!visible || uncached) && (
|
{(!visible || uncached) && (
|
||||||
<div className={classNames('spoiler-button', { 'spoiler-button--click-thru': uncached })}>
|
<div className={classNames('spoiler-button', { 'spoiler-button--click-thru': uncached })}>
|
||||||
{spoilerButton}
|
{spoilerButton}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{children}
|
|
||||||
|
|
||||||
{(visible && !uncached) && (
|
{(visible && !uncached) && (
|
||||||
<div className='media-gallery__actions'>
|
<div className='media-gallery__actions'>
|
||||||
<button className='media-gallery__actions__pill' onClick={this.handleOpen}><FormattedMessage id='media_gallery.hide' defaultMessage='Hide' /></button>
|
<button className='media-gallery__actions__pill' onClick={this.handleOpen}><FormattedMessage id='media_gallery.hide' defaultMessage='Hide' /></button>
|
||||||
|
@ -41,7 +41,7 @@ const isLinkMisleading = (link) => {
|
|||||||
case Node.TEXT_NODE:
|
case Node.TEXT_NODE:
|
||||||
linkTextParts.push(node.textContent);
|
linkTextParts.push(node.textContent);
|
||||||
break;
|
break;
|
||||||
case Node.ELEMENT_NODE:
|
case Node.ELEMENT_NODE: {
|
||||||
if (node.classList.contains('invisible')) return;
|
if (node.classList.contains('invisible')) return;
|
||||||
const children = node.childNodes;
|
const children = node.childNodes;
|
||||||
for (let i = 0; i < children.length; i++) {
|
for (let i = 0; i < children.length; i++) {
|
||||||
@ -49,6 +49,7 @@ const isLinkMisleading = (link) => {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
walk(link);
|
walk(link);
|
||||||
|
@ -129,8 +129,13 @@ export const InlineFollowSuggestions = ({ hidden }) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getComputedStyle(bodyRef.current).direction === 'rtl') {
|
||||||
|
setCanScrollLeft((bodyRef.current.clientWidth - bodyRef.current.scrollLeft) < bodyRef.current.scrollWidth);
|
||||||
|
setCanScrollRight(bodyRef.current.scrollLeft < 0);
|
||||||
|
} else {
|
||||||
setCanScrollLeft(bodyRef.current.scrollLeft > 0);
|
setCanScrollLeft(bodyRef.current.scrollLeft > 0);
|
||||||
setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth);
|
setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth);
|
||||||
|
}
|
||||||
}, [setCanScrollRight, setCanScrollLeft, bodyRef, suggestions]);
|
}, [setCanScrollRight, setCanScrollLeft, bodyRef, suggestions]);
|
||||||
|
|
||||||
const handleLeftNav = useCallback(() => {
|
const handleLeftNav = useCallback(() => {
|
||||||
|
@ -16,6 +16,7 @@ import {
|
|||||||
import type { IconProp } from 'flavours/glitch/components/icon';
|
import type { IconProp } from 'flavours/glitch/components/icon';
|
||||||
import { Icon } from 'flavours/glitch/components/icon';
|
import { Icon } from 'flavours/glitch/components/icon';
|
||||||
import Status from 'flavours/glitch/containers/status_container';
|
import Status from 'flavours/glitch/containers/status_container';
|
||||||
|
import { getStatusHidden } from 'flavours/glitch/selectors/filters';
|
||||||
import { useAppSelector, useAppDispatch } from 'flavours/glitch/store';
|
import { useAppSelector, useAppDispatch } from 'flavours/glitch/store';
|
||||||
|
|
||||||
import { DisplayedName } from './displayed_name';
|
import { DisplayedName } from './displayed_name';
|
||||||
@ -51,6 +52,12 @@ export const NotificationWithStatus: React.FC<{
|
|||||||
(state) => state.statuses.getIn([statusId, 'visibility']) === 'direct',
|
(state) => state.statuses.getIn([statusId, 'visibility']) === 'direct',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const isFiltered = useAppSelector(
|
||||||
|
(state) =>
|
||||||
|
statusId &&
|
||||||
|
getStatusHidden(state, { id: statusId, contextType: 'notifications' }),
|
||||||
|
);
|
||||||
|
|
||||||
const handlers = useMemo(
|
const handlers = useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
open: () => {
|
open: () => {
|
||||||
@ -77,7 +84,7 @@ export const NotificationWithStatus: React.FC<{
|
|||||||
[dispatch, statusId],
|
[dispatch, statusId],
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!statusId) return null;
|
if (!statusId || isFiltered) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HotKeys handlers={handlers}>
|
<HotKeys handlers={handlers}>
|
||||||
|
@ -15,6 +15,7 @@ import {Icon} from 'flavours/glitch/components/icon';
|
|||||||
import {
|
import {
|
||||||
selectSettingsNotificationsQuickFilterActive,
|
selectSettingsNotificationsQuickFilterActive,
|
||||||
selectSettingsNotificationsQuickFilterAdvanced,
|
selectSettingsNotificationsQuickFilterAdvanced,
|
||||||
|
selectSettingsNotificationsQuickFilterShow,
|
||||||
} from 'flavours/glitch/selectors/settings';
|
} from 'flavours/glitch/selectors/settings';
|
||||||
import {useAppDispatch, useAppSelector} from 'flavours/glitch/store';
|
import {useAppDispatch, useAppSelector} from 'flavours/glitch/store';
|
||||||
|
|
||||||
@ -70,6 +71,11 @@ export const FilterBar: React.FC = () => {
|
|||||||
const advancedMode = useAppSelector(
|
const advancedMode = useAppSelector(
|
||||||
selectSettingsNotificationsQuickFilterAdvanced,
|
selectSettingsNotificationsQuickFilterAdvanced,
|
||||||
);
|
);
|
||||||
|
const useFilterBar = useAppSelector(
|
||||||
|
selectSettingsNotificationsQuickFilterShow,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!useFilterBar) return null;
|
||||||
|
|
||||||
if (advancedMode)
|
if (advancedMode)
|
||||||
return (
|
return (
|
||||||
|
@ -267,6 +267,7 @@ export const DetailedStatus: React.FC<{
|
|||||||
src={attachment.get('url')}
|
src={attachment.get('url')}
|
||||||
alt={description}
|
alt={description}
|
||||||
lang={language}
|
lang={language}
|
||||||
|
inline
|
||||||
width={300}
|
width={300}
|
||||||
height={150}
|
height={150}
|
||||||
onOpenVideo={handleOpenVideo}
|
onOpenVideo={handleOpenVideo}
|
||||||
|
@ -15,7 +15,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text
|
|||||||
|
|
||||||
if (href) {
|
if (href) {
|
||||||
return (
|
return (
|
||||||
<a href={href} className={className} data-method={method} title={text} {...other}>
|
<a href={href} className={className} data-method={method} {...other}>
|
||||||
{active ? activeIconElement : iconElement}
|
{active ? activeIconElement : iconElement}
|
||||||
<span>{text}</span>
|
<span>{text}</span>
|
||||||
{badgeElement}
|
{badgeElement}
|
||||||
@ -23,7 +23,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text
|
|||||||
);
|
);
|
||||||
} else if (to) {
|
} else if (to) {
|
||||||
return (
|
return (
|
||||||
<NavLink to={to} className={className} title={text} exact {...other}>
|
<NavLink to={to} className={className} exact {...other}>
|
||||||
{active ? activeIconElement : iconElement}
|
{active ? activeIconElement : iconElement}
|
||||||
<span>{text}</span>
|
<span>{text}</span>
|
||||||
{badgeElement}
|
{badgeElement}
|
||||||
@ -37,7 +37,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text
|
|||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
// eslint-disable-next-line jsx-a11y/anchor-is-valid -- intentional to have the same look and feel as other menu items
|
// eslint-disable-next-line jsx-a11y/anchor-is-valid -- intentional to have the same look and feel as other menu items
|
||||||
<a href='#' onClick={onClick && handleOnClick} className={className} title={text} {...other} tabIndex={0}>
|
<a href='#' onClick={onClick && handleOnClick} className={className} {...other} tabIndex={0}>
|
||||||
{iconElement}
|
{iconElement}
|
||||||
<span>{text}</span>
|
<span>{text}</span>
|
||||||
{badgeElement}
|
{badgeElement}
|
||||||
|
@ -1,41 +1,35 @@
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import {PureComponent} from 'react';
|
import { PureComponent } from 'react';
|
||||||
|
|
||||||
import {defineMessages, FormattedMessage, injectIntl} from 'react-intl';
|
import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
|
||||||
|
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import {Redirect, Route, withRouter} from 'react-router-dom';
|
import { Redirect, Route, withRouter } from 'react-router-dom';
|
||||||
|
|
||||||
import {connect} from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
|
||||||
import Favico from 'favico.js';
|
import Favico from 'favico.js';
|
||||||
import {debounce} from 'lodash';
|
import { debounce } from 'lodash';
|
||||||
import {HotKeys} from 'react-hotkeys';
|
import { HotKeys } from 'react-hotkeys';
|
||||||
|
|
||||||
import {changeLayout, focusApp, unfocusApp} from 'flavours/glitch/actions/app';
|
import { focusApp, unfocusApp, changeLayout } from 'flavours/glitch/actions/app';
|
||||||
import {fetchMarkers, submitMarkers, synchronouslySubmitMarkers} from 'flavours/glitch/actions/markers';
|
import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'flavours/glitch/actions/markers';
|
||||||
import {initializeNotifications} from 'flavours/glitch/actions/notifications_migration';
|
import { initializeNotifications } from 'flavours/glitch/actions/notifications_migration';
|
||||||
import {INTRODUCTION_VERSION} from 'flavours/glitch/actions/onboarding';
|
import { INTRODUCTION_VERSION } from 'flavours/glitch/actions/onboarding';
|
||||||
import {HoverCardController} from 'flavours/glitch/components/hover_card_controller';
|
import { HoverCardController } from 'flavours/glitch/components/hover_card_controller';
|
||||||
import {Permalink} from 'flavours/glitch/components/permalink';
|
import { Permalink } from 'flavours/glitch/components/permalink';
|
||||||
import {PictureInPicture} from 'flavours/glitch/features/picture_in_picture';
|
import { PictureInPicture } from 'flavours/glitch/features/picture_in_picture';
|
||||||
import {identityContextPropShape, withIdentity} from 'flavours/glitch/identity_context';
|
import { identityContextPropShape, withIdentity } from 'flavours/glitch/identity_context';
|
||||||
import {layoutFromWindow} from 'flavours/glitch/is_mobile';
|
import { layoutFromWindow } from 'flavours/glitch/is_mobile';
|
||||||
import {WithRouterPropTypes} from 'flavours/glitch/utils/react_router';
|
import { selectUnreadNotificationGroupsCount } from 'flavours/glitch/selectors/notifications';
|
||||||
|
import { WithRouterPropTypes } from 'flavours/glitch/utils/react_router';
|
||||||
|
|
||||||
import {changeComposeSpoilerness, resetCompose, uploadCompose} from '../../actions/compose';
|
import { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose';
|
||||||
import {clearHeight} from '../../actions/height_cache';
|
import { clearHeight } from '../../actions/height_cache';
|
||||||
import {notificationsSetVisibility} from '../../actions/notifications';
|
import { notificationsSetVisibility } from '../../actions/notifications';
|
||||||
import {fetchServer, fetchServerTranslationLanguages} from '../../actions/server';
|
import { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';
|
||||||
import {expandHomeTimeline} from '../../actions/timelines';
|
import { expandHomeTimeline } from '../../actions/timelines';
|
||||||
import initialState, {
|
import initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding, disableHoverCards } from '../../initial_state';
|
||||||
disableHoverCards,
|
|
||||||
me,
|
|
||||||
owner,
|
|
||||||
singleUserMode,
|
|
||||||
trendsAsLanding,
|
|
||||||
trendsEnabled
|
|
||||||
} from '../../initial_state';
|
|
||||||
|
|
||||||
import BundleColumnError from './components/bundle_column_error';
|
import BundleColumnError from './components/bundle_column_error';
|
||||||
import Header from './components/header';
|
import Header from './components/header';
|
||||||
@ -45,43 +39,43 @@ import LoadingBarContainer from './containers/loading_bar_container';
|
|||||||
import ModalContainer from './containers/modal_container';
|
import ModalContainer from './containers/modal_container';
|
||||||
import NotificationsContainer from './containers/notifications_container';
|
import NotificationsContainer from './containers/notifications_container';
|
||||||
import {
|
import {
|
||||||
About,
|
|
||||||
AccountGallery,
|
|
||||||
AccountTimeline,
|
|
||||||
Blocks,
|
|
||||||
BookmarkedStatuses,
|
|
||||||
Compose,
|
Compose,
|
||||||
Directory,
|
Status,
|
||||||
DirectTimeline,
|
GettingStarted,
|
||||||
DomainBlocks,
|
KeyboardShortcuts,
|
||||||
Explore,
|
|
||||||
FavouritedStatuses,
|
|
||||||
Favourites,
|
|
||||||
Firehose,
|
Firehose,
|
||||||
FollowedTags,
|
AccountTimeline,
|
||||||
|
AccountGallery,
|
||||||
|
HomeTimeline,
|
||||||
Followers,
|
Followers,
|
||||||
Following,
|
Following,
|
||||||
FollowRequests,
|
|
||||||
GettingStarted,
|
|
||||||
GettingStartedMisc,
|
|
||||||
HashtagTimeline,
|
|
||||||
HomeTimeline,
|
|
||||||
KeyboardShortcuts,
|
|
||||||
LinkTimeline,
|
|
||||||
Lists,
|
|
||||||
ListTimeline,
|
|
||||||
Mutes,
|
|
||||||
NotificationRequest,
|
|
||||||
NotificationRequests,
|
|
||||||
NotificationsWrapper,
|
|
||||||
Onboarding,
|
|
||||||
PinnedStatuses,
|
|
||||||
PrivacyPolicy,
|
|
||||||
Reblogs,
|
Reblogs,
|
||||||
Status,
|
Favourites,
|
||||||
|
DirectTimeline,
|
||||||
|
HashtagTimeline,
|
||||||
|
NotificationsWrapper,
|
||||||
|
NotificationRequests,
|
||||||
|
NotificationRequest,
|
||||||
|
FollowRequests,
|
||||||
|
FavouritedStatuses,
|
||||||
|
BookmarkedStatuses,
|
||||||
|
FollowedTags,
|
||||||
|
LinkTimeline,
|
||||||
|
ListTimeline,
|
||||||
|
Blocks,
|
||||||
|
DomainBlocks,
|
||||||
|
Mutes,
|
||||||
|
PinnedStatuses,
|
||||||
|
Lists,
|
||||||
|
GettingStartedMisc,
|
||||||
|
Directory,
|
||||||
|
Explore,
|
||||||
|
Onboarding,
|
||||||
|
About,
|
||||||
|
PrivacyPolicy,
|
||||||
} from './util/async-components';
|
} from './util/async-components';
|
||||||
import {ColumnsContextProvider} from './util/columns_context';
|
import { ColumnsContextProvider } from './util/columns_context';
|
||||||
import {WrappedRoute, WrappedSwitch} from './util/react_router_helpers';
|
import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';
|
||||||
|
|
||||||
// Dummy import, to make sure that <Status /> ends up in the application bundle.
|
// Dummy import, to make sure that <Status /> ends up in the application bundle.
|
||||||
// Without this it ends up in ~8 very commonly used bundles.
|
// Without this it ends up in ~8 very commonly used bundles.
|
||||||
@ -97,7 +91,7 @@ const mapStateToProps = state => ({
|
|||||||
hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,
|
hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,
|
||||||
canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4,
|
canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4,
|
||||||
isWide: state.getIn(['local_settings', 'stretch']),
|
isWide: state.getIn(['local_settings', 'stretch']),
|
||||||
unreadNotifications: state.getIn(['notifications', 'unread']),
|
unreadNotifications: selectUnreadNotificationGroupsCount(state),
|
||||||
showFaviconBadge: state.getIn(['local_settings', 'notifications', 'favicon_badge']),
|
showFaviconBadge: state.getIn(['local_settings', 'notifications', 'favicon_badge']),
|
||||||
hicolorPrivacyIcons: state.getIn(['local_settings', 'hicolor_privacy_icons']),
|
hicolorPrivacyIcons: state.getIn(['local_settings', 'hicolor_privacy_icons']),
|
||||||
moved: state.getIn(['accounts', me, 'moved']) && state.getIn(['accounts', state.getIn(['accounts', me, 'moved'])]),
|
moved: state.getIn(['accounts', me, 'moved']) && state.getIn(['accounts', state.getIn(['accounts', me, 'moved'])]),
|
||||||
|
@ -95,6 +95,9 @@ export const accountDefaultValues: AccountShape = {
|
|||||||
limited: false,
|
limited: false,
|
||||||
moved: null,
|
moved: null,
|
||||||
hide_collections: false,
|
hide_collections: false,
|
||||||
|
// This comes from `ApiMutedAccountJSON`, but we should eventually
|
||||||
|
// store that in a different object.
|
||||||
|
mute_expires_at: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
const AccountFactory = ImmutableRecord<AccountShape>(accountDefaultValues);
|
const AccountFactory = ImmutableRecord<AccountShape>(accountDefaultValues);
|
||||||
|
@ -507,12 +507,12 @@ export default function compose(state = initialState, action) {
|
|||||||
.set('isUploadingThumbnail', false)
|
.set('isUploadingThumbnail', false)
|
||||||
.update('media_attachments', list => list.map(item => {
|
.update('media_attachments', list => list.map(item => {
|
||||||
if (item.get('id') === action.media.id) {
|
if (item.get('id') === action.media.id) {
|
||||||
return fromJS(action.media);
|
return fromJS(action.media).set('unattached', item.get('unattached'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}));
|
}));
|
||||||
case INIT_MEDIA_EDIT_MODAL:
|
case INIT_MEDIA_EDIT_MODAL: {
|
||||||
const media = state.get('media_attachments').find(item => item.get('id') === action.id);
|
const media = state.get('media_attachments').find(item => item.get('id') === action.id);
|
||||||
return state.set('media_modal', ImmutableMap({
|
return state.set('media_modal', ImmutableMap({
|
||||||
id: action.id,
|
id: action.id,
|
||||||
@ -521,6 +521,7 @@ export default function compose(state = initialState, action) {
|
|||||||
focusY: media.getIn(['meta', 'focus', 'y'], 0),
|
focusY: media.getIn(['meta', 'focus', 'y'], 0),
|
||||||
dirty: false,
|
dirty: false,
|
||||||
}));
|
}));
|
||||||
|
}
|
||||||
case COMPOSE_CHANGE_MEDIA_DESCRIPTION:
|
case COMPOSE_CHANGE_MEDIA_DESCRIPTION:
|
||||||
return state.setIn(['media_modal', 'description'], action.description).setIn(['media_modal', 'dirty'], true);
|
return state.setIn(['media_modal', 'description'], action.description).setIn(['media_modal', 'dirty'], true);
|
||||||
case COMPOSE_CHANGE_MEDIA_FOCUS:
|
case COMPOSE_CHANGE_MEDIA_FOCUS:
|
||||||
@ -575,7 +576,7 @@ export default function compose(state = initialState, action) {
|
|||||||
}));
|
}));
|
||||||
case COMPOSE_DOODLE_SET:
|
case COMPOSE_DOODLE_SET:
|
||||||
return state.mergeIn(['doodle'], action.options);
|
return state.mergeIn(['doodle'], action.options);
|
||||||
case REDRAFT:
|
case REDRAFT: {
|
||||||
const do_not_federate = !!action.status.get('local_only');
|
const do_not_federate = !!action.status.get('local_only');
|
||||||
let text = action.raw_text || unescapeHTML(expandMentions(action.status));
|
let text = action.raw_text || unescapeHTML(expandMentions(action.status));
|
||||||
if (do_not_federate) text = text.replace(/ ?👁\ufe0f?\u200b?$/, '');
|
if (do_not_federate) text = text.replace(/ ?👁\ufe0f?\u200b?$/, '');
|
||||||
@ -616,6 +617,7 @@ export default function compose(state = initialState, action) {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
case COMPOSE_SET_STATUS:
|
case COMPOSE_SET_STATUS:
|
||||||
return state.withMutations(map => {
|
return state.withMutations(map => {
|
||||||
map.set('id', action.status.get('id'));
|
map.set('id', action.status.get('id'));
|
||||||
|
@ -21,6 +21,7 @@ import {
|
|||||||
unmountNotifications,
|
unmountNotifications,
|
||||||
refreshStaleNotificationGroups,
|
refreshStaleNotificationGroups,
|
||||||
pollRecentNotifications,
|
pollRecentNotifications,
|
||||||
|
shouldGroupNotificationType,
|
||||||
} from 'flavours/glitch/actions/notification_groups';
|
} from 'flavours/glitch/actions/notification_groups';
|
||||||
import {
|
import {
|
||||||
disconnectTimeline,
|
disconnectTimeline,
|
||||||
@ -205,6 +206,13 @@ function processNewNotification(
|
|||||||
groups: NotificationGroupsState['groups'],
|
groups: NotificationGroupsState['groups'],
|
||||||
notification: ApiNotificationJSON,
|
notification: ApiNotificationJSON,
|
||||||
) {
|
) {
|
||||||
|
if (!shouldGroupNotificationType(notification.type)) {
|
||||||
|
notification = {
|
||||||
|
...notification,
|
||||||
|
group_key: `ungrouped-${notification.id}`,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const existingGroupIndex = groups.findIndex(
|
const existingGroupIndex = groups.findIndex(
|
||||||
(group) =>
|
(group) =>
|
||||||
group.type !== 'gap' && group.group_key === notification.group_key,
|
group.type !== 'gap' && group.group_key === notification.group_key,
|
||||||
@ -242,7 +250,7 @@ function processNewNotification(
|
|||||||
groups.unshift(existingGroup);
|
groups.unshift(existingGroup);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Create a new group
|
// We have not found an existing group, create a new one
|
||||||
groups.unshift(createNotificationGroupFromNotificationJSON(notification));
|
groups.unshift(createNotificationGroupFromNotificationJSON(notification));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -551,7 +559,10 @@ export const notificationGroupsReducer = createReducer<NotificationGroupsState>(
|
|||||||
compareId(state.lastReadId, mostRecentGroup.page_max_id) < 0
|
compareId(state.lastReadId, mostRecentGroup.page_max_id) < 0
|
||||||
)
|
)
|
||||||
state.lastReadId = mostRecentGroup.page_max_id;
|
state.lastReadId = mostRecentGroup.page_max_id;
|
||||||
commitLastReadId(state);
|
|
||||||
|
// We don't call `commitLastReadId`, because that is conditional
|
||||||
|
// and we want to unconditionally update the state instead.
|
||||||
|
state.readMarkerId = state.lastReadId;
|
||||||
})
|
})
|
||||||
.addCase(fetchMarkers.fulfilled, (state, action) => {
|
.addCase(fetchMarkers.fulfilled, (state, action) => {
|
||||||
if (
|
if (
|
||||||
|
@ -367,9 +367,10 @@ export default function notifications(state = initialState, action) {
|
|||||||
}
|
}
|
||||||
return markAllForDelete(st, action.yes);
|
return markAllForDelete(st, action.yes);
|
||||||
|
|
||||||
case NOTIFICATIONS_MARK_AS_READ:
|
case NOTIFICATIONS_MARK_AS_READ: {
|
||||||
const lastNotification = state.get('items').find(item => item !== null);
|
const lastNotification = state.get('items').find(item => item !== null);
|
||||||
return lastNotification ? recountUnread(state, lastNotification.get('id')) : state;
|
return lastNotification ? recountUnread(state, lastNotification.get('id')) : state;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
|
@ -72,9 +72,10 @@ export default function search(state = initialState, action) {
|
|||||||
});
|
});
|
||||||
case SEARCH_EXPAND_REQUEST:
|
case SEARCH_EXPAND_REQUEST:
|
||||||
return state.set('type', action.searchType).set('isLoading', true);
|
return state.set('type', action.searchType).set('isLoading', true);
|
||||||
case SEARCH_EXPAND_SUCCESS:
|
case SEARCH_EXPAND_SUCCESS: {
|
||||||
const results = action.searchType === 'hashtags' ? ImmutableOrderedSet(fromJS(action.results.hashtags)) : action.results[action.searchType].map(item => item.id);
|
const results = action.searchType === 'hashtags' ? ImmutableOrderedSet(fromJS(action.results.hashtags)) : action.results[action.searchType].map(item => item.id);
|
||||||
return state.updateIn(['results', action.searchType], list => list.union(results)).set('isLoading', false);
|
return state.updateIn(['results', action.searchType], list => list.union(results)).set('isLoading', false);
|
||||||
|
}
|
||||||
case SEARCH_HISTORY_UPDATE:
|
case SEARCH_HISTORY_UPDATE:
|
||||||
return state.set('recent', ImmutableOrderedSet(fromJS(action.recent)));
|
return state.set('recent', ImmutableOrderedSet(fromJS(action.recent)));
|
||||||
default:
|
default:
|
||||||
|
50
app/javascript/flavours/glitch/selectors/filters.ts
Normal file
50
app/javascript/flavours/glitch/selectors/filters.ts
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import { createSelector } from '@reduxjs/toolkit';
|
||||||
|
|
||||||
|
import type { RootState } from 'flavours/glitch/store';
|
||||||
|
import { toServerSideType } from 'flavours/glitch/utils/filters';
|
||||||
|
|
||||||
|
// TODO: move to `app/javascript/flavours/glitch/models` and use more globally
|
||||||
|
type Filter = Immutable.Map<string, unknown>;
|
||||||
|
|
||||||
|
// TODO: move to `app/javascript/flavours/glitch/models` and use more globally
|
||||||
|
type FilterResult = Immutable.Map<string, unknown>;
|
||||||
|
|
||||||
|
export const getFilters = createSelector(
|
||||||
|
[
|
||||||
|
(state: RootState) => state.filters as Immutable.Map<string, Filter>,
|
||||||
|
(_, { contextType }: { contextType: string }) => contextType,
|
||||||
|
],
|
||||||
|
(filters, contextType) => {
|
||||||
|
if (!contextType) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const serverSideType = toServerSideType(contextType);
|
||||||
|
|
||||||
|
return filters.filter((filter) => {
|
||||||
|
const context = filter.get('context') as Immutable.List<string>;
|
||||||
|
const expiration = filter.get('expires_at') as Date | null;
|
||||||
|
return (
|
||||||
|
context.includes(serverSideType) &&
|
||||||
|
(expiration === null || expiration > now)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
export const getStatusHidden = (
|
||||||
|
state: RootState,
|
||||||
|
{ id, contextType }: { id: string; contextType: string },
|
||||||
|
) => {
|
||||||
|
const filters = getFilters(state, { contextType });
|
||||||
|
if (filters === null) return false;
|
||||||
|
|
||||||
|
const filtered = state.statuses.getIn([id, 'filtered']) as
|
||||||
|
| Immutable.List<FilterResult>
|
||||||
|
| undefined;
|
||||||
|
return filtered?.some(
|
||||||
|
(result) =>
|
||||||
|
filters.getIn([result.get('filter'), 'filter_action']) === 'hide',
|
||||||
|
);
|
||||||
|
};
|
@ -1,23 +1,12 @@
|
|||||||
import { createSelector } from '@reduxjs/toolkit';
|
import { createSelector } from '@reduxjs/toolkit';
|
||||||
import { List as ImmutableList, Map as ImmutableMap } from 'immutable';
|
import { List as ImmutableList, Map as ImmutableMap } from 'immutable';
|
||||||
|
|
||||||
import { toServerSideType } from 'flavours/glitch/utils/filters';
|
|
||||||
|
|
||||||
import { me } from '../initial_state';
|
import { me } from '../initial_state';
|
||||||
|
|
||||||
|
import { getFilters } from './filters';
|
||||||
|
|
||||||
export { makeGetAccount } from "./accounts";
|
export { makeGetAccount } from "./accounts";
|
||||||
|
|
||||||
const getFilters = createSelector([state => state.get('filters'), (_, { contextType }) => contextType], (filters, contextType) => {
|
|
||||||
if (!contextType) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const now = new Date();
|
|
||||||
const serverSideType = toServerSideType(contextType);
|
|
||||||
|
|
||||||
return filters.filter(filter => filter.get('context').includes(serverSideType) && (filter.get('expires_at') === null || filter.get('expires_at') > now));
|
|
||||||
});
|
|
||||||
|
|
||||||
export const makeGetStatus = () => {
|
export const makeGetStatus = () => {
|
||||||
return createSelector(
|
return createSelector(
|
||||||
[
|
[
|
||||||
|
@ -226,6 +226,10 @@ $content-width: 840px;
|
|||||||
gap: 5px;
|
gap: 5px;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
||||||
|
@media screen and (max-width: $mobile-breakpoint) {
|
||||||
|
flex: 1 0 50%;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus,
|
&:focus,
|
||||||
&:active {
|
&:active {
|
||||||
@ -1046,6 +1050,12 @@ a.name-tag,
|
|||||||
color: var(--user-role-accent);
|
color: var(--user-role-accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.applications-list {
|
||||||
|
.icon {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.announcements-list,
|
.announcements-list,
|
||||||
.filters-list {
|
.filters-list {
|
||||||
border: 1px solid var(--background-border-color);
|
border: 1px solid var(--background-border-color);
|
||||||
@ -1075,6 +1085,10 @@ a.name-tag,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
a.announcements-list__item__title {
|
a.announcements-list__item__title {
|
||||||
&:hover,
|
&:hover,
|
||||||
&:focus,
|
&:focus,
|
||||||
|
@ -141,6 +141,7 @@ body {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
margin-top: -120px;
|
margin-top: -120px;
|
||||||
|
margin-bottom: -45px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2272,7 +2272,6 @@ body > [data-popper-placement] {
|
|||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: var(--avatar-border-radius);
|
border-radius: var(--avatar-border-radius);
|
||||||
background-color: var(--surface-background-color);
|
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -2282,7 +2281,11 @@ body > [data-popper-placement] {
|
|||||||
display: inline-block; // to not show broken images
|
display: inline-block; // to not show broken images
|
||||||
}
|
}
|
||||||
|
|
||||||
&-inline {
|
&--loading {
|
||||||
|
background-color: var(--surface-background-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
&--inline {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
margin-inline-end: 5px;
|
margin-inline-end: 5px;
|
||||||
@ -3806,6 +3809,7 @@ $ui-header-logo-wordmark-width: 99px;
|
|||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
z-index: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.drawer__inner__mastodon {
|
.drawer__inner__mastodon {
|
||||||
@ -8538,79 +8542,23 @@ noscript {
|
|||||||
background: rgba($base-overlay-background, 0.5);
|
background: rgba($base-overlay-background, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.list-adder,
|
||||||
.list-editor {
|
.list-editor {
|
||||||
background: $ui-base-color;
|
backdrop-filter: var(--background-filter);
|
||||||
|
background: var(--modal-background-color);
|
||||||
|
border: 1px solid var(--modal-border-color);
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
|
|
||||||
width: 380px;
|
width: 380px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
@media screen and (width <= 420px) {
|
@media screen and (width <= 420px) {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
|
|
||||||
h4 {
|
|
||||||
padding: 15px 0;
|
|
||||||
background: lighten($ui-base-color, 13%);
|
|
||||||
font-weight: 500;
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
border-radius: 8px 8px 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.drawer__pager {
|
|
||||||
height: 50vh;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.drawer__inner {
|
|
||||||
border-radius: 0 0 8px 8px;
|
|
||||||
|
|
||||||
&.backdrop {
|
|
||||||
width: calc(100% - 60px);
|
|
||||||
box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
|
|
||||||
border-radius: 0 0 0 8px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&__accounts {
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.account__display-name {
|
|
||||||
&:hover strong {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.account__avatar {
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-adder {
|
.list-adder {
|
||||||
background: $ui-base-color;
|
|
||||||
flex-direction: column;
|
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
|
|
||||||
width: 380px;
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
@media screen and (width <= 420px) {
|
|
||||||
width: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__account {
|
|
||||||
background: lighten($ui-base-color, 13%);
|
|
||||||
}
|
|
||||||
|
|
||||||
&__lists {
|
&__lists {
|
||||||
background: lighten($ui-base-color, 13%);
|
|
||||||
height: 50vh;
|
height: 50vh;
|
||||||
border-radius: 0 0 8px 8px;
|
border-radius: 0 0 8px 8px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
@ -8631,6 +8579,52 @@ noscript {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-editor {
|
||||||
|
h4 {
|
||||||
|
padding: 15px 0;
|
||||||
|
background: lighten($ui-base-color, 13%);
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 16px;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawer__pager {
|
||||||
|
height: 50vh;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawer__inner {
|
||||||
|
&.backdrop {
|
||||||
|
width: calc(100% - 60px);
|
||||||
|
box-shadow: 2px 4px 15px rgba($base-shadow-color, 0.4);
|
||||||
|
border-radius: 0 0 0 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__accounts {
|
||||||
|
background: unset;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.account__display-name {
|
||||||
|
&:hover strong {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.account__avatar {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search {
|
||||||
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11190,6 +11184,7 @@ noscript {
|
|||||||
gap: 8px;
|
gap: 8px;
|
||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
color: $darker-text-color;
|
color: $darker-text-color;
|
||||||
}
|
}
|
||||||
|
@ -137,6 +137,7 @@ a.table-action-link {
|
|||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
color: $darker-text-color;
|
color: $darker-text-color;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: $highlight-text-color;
|
color: $highlight-text-color;
|
||||||
|
@ -17,7 +17,7 @@ const dropOrientationIfNeeded = (orientation) => new Promise(resolve => {
|
|||||||
case false:
|
case false:
|
||||||
resolve(orientation);
|
resolve(orientation);
|
||||||
break;
|
break;
|
||||||
default:
|
default: {
|
||||||
// black 2x1 JPEG, with the following meta information set:
|
// black 2x1 JPEG, with the following meta information set:
|
||||||
// - EXIF Orientation: 6 (Rotated 90° CCW)
|
// - EXIF Orientation: 6 (Rotated 90° CCW)
|
||||||
const testImageURL =
|
const testImageURL =
|
||||||
@ -39,6 +39,7 @@ const dropOrientationIfNeeded = (orientation) => new Promise(resolve => {
|
|||||||
};
|
};
|
||||||
img.src = testImageURL;
|
img.src = testImageURL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Some browsers don't allow reading from a canvas and instead return all-white
|
// Some browsers don't allow reading from a canvas and instead return all-white
|
||||||
@ -52,7 +53,7 @@ const checkCanvasReliability = () => new Promise((resolve, reject) => {
|
|||||||
case false:
|
case false:
|
||||||
resolve();
|
resolve();
|
||||||
break;
|
break;
|
||||||
default:
|
default: {
|
||||||
// 2×2 GIF with white, red, green and blue pixels
|
// 2×2 GIF with white, red, green and blue pixels
|
||||||
const testImageURL =
|
const testImageURL =
|
||||||
'data:image/gif;base64,R0lGODdhAgACAKEDAAAA//8AAAD/AP///ywAAAAAAgACAAACA1wEBQA7';
|
'data:image/gif;base64,R0lGODdhAgACAKEDAAAA//8AAAD/AP///ywAAAAAAgACAAACA1wEBQA7';
|
||||||
@ -78,6 +79,7 @@ const checkCanvasReliability = () => new Promise((resolve, reject) => {
|
|||||||
};
|
};
|
||||||
img.src = testImageURL;
|
img.src = testImageURL;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const getImageUrl = inputFile => new Promise((resolve, reject) => {
|
const getImageUrl = inputFile => new Promise((resolve, reject) => {
|
||||||
|
@ -37,8 +37,7 @@ export const synchronouslySubmitMarkers = createAppAsyncThunk(
|
|||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
} else if ('sendBeacon' in navigator) {
|
||||||
} else if ('navigator' && 'sendBeacon' in navigator) {
|
|
||||||
// Failing that, we can use sendBeacon, but we have to encode the data as
|
// Failing that, we can use sendBeacon, but we have to encode the data as
|
||||||
// FormData for DoorKeeper to recognize the token.
|
// FormData for DoorKeeper to recognize the token.
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
|
@ -70,6 +70,10 @@ function dispatchAssociatedRecords(
|
|||||||
|
|
||||||
const supportedGroupedNotificationTypes = ['favourite', 'reblog'];
|
const supportedGroupedNotificationTypes = ['favourite', 'reblog'];
|
||||||
|
|
||||||
|
export function shouldGroupNotificationType(type: string) {
|
||||||
|
return supportedGroupedNotificationTypes.includes(type);
|
||||||
|
}
|
||||||
|
|
||||||
export const fetchNotifications = createDataLoadingThunk(
|
export const fetchNotifications = createDataLoadingThunk(
|
||||||
'notificationGroups/fetch',
|
'notificationGroups/fetch',
|
||||||
async (_params, { getState }) =>
|
async (_params, { getState }) =>
|
||||||
|
@ -106,12 +106,13 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
|
|||||||
dispatch(processNewNotificationForGroups(notificationJSON));
|
dispatch(processNewNotificationForGroups(notificationJSON));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'notifications_merged':
|
case 'notifications_merged': {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
if (state.notifications.top || !state.notifications.mounted)
|
if (state.notifications.top || !state.notifications.mounted)
|
||||||
dispatch(expandNotifications({ forceLoad: true, maxId: undefined }));
|
dispatch(expandNotifications({ forceLoad: true, maxId: undefined }));
|
||||||
dispatch(refreshStaleNotificationGroups());
|
dispatch(refreshStaleNotificationGroups());
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case 'conversation':
|
case 'conversation':
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
dispatch(updateConversations(JSON.parse(data.payload)));
|
dispatch(updateConversations(JSON.parse(data.payload)));
|
||||||
|
@ -13,7 +13,7 @@ export interface ApiAccountRoleJSON {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// See app/serializers/rest/account_serializer.rb
|
// See app/serializers/rest/account_serializer.rb
|
||||||
export interface ApiAccountJSON {
|
export interface BaseApiAccountJSON {
|
||||||
acct: string;
|
acct: string;
|
||||||
avatar: string;
|
avatar: string;
|
||||||
avatar_static: string;
|
avatar_static: string;
|
||||||
@ -45,3 +45,12 @@ export interface ApiAccountJSON {
|
|||||||
memorial?: boolean;
|
memorial?: boolean;
|
||||||
hide_collections: boolean;
|
hide_collections: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See app/serializers/rest/muted_account_serializer.rb
|
||||||
|
export interface ApiMutedAccountJSON extends BaseApiAccountJSON {
|
||||||
|
mute_expires_at?: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For now, we have the same type representing both `Account` and `MutedAccount`
|
||||||
|
// objects, but we should refactor this in the future.
|
||||||
|
export type ApiAccountJSON = ApiMutedAccountJSON;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
exports[`<Avatar /> Autoplay renders a animated avatar 1`] = `
|
exports[`<Avatar /> Autoplay renders a animated avatar 1`] = `
|
||||||
<div
|
<div
|
||||||
className="account__avatar"
|
className="account__avatar account__avatar--loading"
|
||||||
onMouseEnter={[Function]}
|
onMouseEnter={[Function]}
|
||||||
onMouseLeave={[Function]}
|
onMouseLeave={[Function]}
|
||||||
style={
|
style={
|
||||||
@ -14,6 +14,8 @@ exports[`<Avatar /> Autoplay renders a animated avatar 1`] = `
|
|||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
alt=""
|
alt=""
|
||||||
|
onError={[Function]}
|
||||||
|
onLoad={[Function]}
|
||||||
src="/animated/alice.gif"
|
src="/animated/alice.gif"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -21,7 +23,7 @@ exports[`<Avatar /> Autoplay renders a animated avatar 1`] = `
|
|||||||
|
|
||||||
exports[`<Avatar /> Still renders a still avatar 1`] = `
|
exports[`<Avatar /> Still renders a still avatar 1`] = `
|
||||||
<div
|
<div
|
||||||
className="account__avatar"
|
className="account__avatar account__avatar--loading"
|
||||||
onMouseEnter={[Function]}
|
onMouseEnter={[Function]}
|
||||||
onMouseLeave={[Function]}
|
onMouseLeave={[Function]}
|
||||||
style={
|
style={
|
||||||
@ -33,6 +35,8 @@ exports[`<Avatar /> Still renders a still avatar 1`] = `
|
|||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
alt=""
|
alt=""
|
||||||
|
onError={[Function]}
|
||||||
|
onLoad={[Function]}
|
||||||
src="/static/alice.jpg"
|
src="/static/alice.jpg"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
|
import { useState, useCallback } from 'react';
|
||||||
|
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
import type {Account} from 'mastodon/models/account';
|
import { useHovering } from 'mastodon/../hooks/useHovering';
|
||||||
|
import { autoPlayGif } from 'mastodon/initial_state';
|
||||||
import {useHovering} from '../../hooks/useHovering';
|
import type { Account } from 'mastodon/models/account';
|
||||||
import {autoPlayGif} from '../initial_state';
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
account: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there
|
account: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there
|
||||||
@ -25,6 +26,8 @@ export const Avatar: React.FC<Props> = ({
|
|||||||
counterBorderColor,
|
counterBorderColor,
|
||||||
}) => {
|
}) => {
|
||||||
const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate);
|
const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate);
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [error, setError] = useState(false);
|
||||||
|
|
||||||
const style = {
|
const style = {
|
||||||
...styleFromParent,
|
...styleFromParent,
|
||||||
@ -37,16 +40,28 @@ export const Avatar: React.FC<Props> = ({
|
|||||||
? account?.get('avatar')
|
? account?.get('avatar')
|
||||||
: account?.get('avatar_static');
|
: account?.get('avatar_static');
|
||||||
|
|
||||||
|
const handleLoad = useCallback(() => {
|
||||||
|
setLoading(false);
|
||||||
|
}, [setLoading]);
|
||||||
|
|
||||||
|
const handleError = useCallback(() => {
|
||||||
|
setError(true);
|
||||||
|
}, [setError]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={classNames('account__avatar', {
|
className={classNames('account__avatar', {
|
||||||
'account__avatar-inline': inline,
|
'account__avatar--inline': inline,
|
||||||
|
'account__avatar--loading': loading,
|
||||||
})}
|
})}
|
||||||
onMouseEnter={handleMouseEnter}
|
onMouseEnter={handleMouseEnter}
|
||||||
onMouseLeave={handleMouseLeave}
|
onMouseLeave={handleMouseLeave}
|
||||||
style={style}
|
style={style}
|
||||||
>
|
>
|
||||||
{src && <img src={src} alt='' />}
|
{src && !error && (
|
||||||
|
<img src={src} alt='' onLoad={handleLoad} onError={handleError} />
|
||||||
|
)}
|
||||||
|
|
||||||
{counter && (
|
{counter && (
|
||||||
<div
|
<div
|
||||||
className='account__avatar__counter'
|
className='account__avatar__counter'
|
||||||
|
@ -196,7 +196,7 @@ class Item extends PureComponent {
|
|||||||
|
|
||||||
{visible && thumbnail}
|
{visible && thumbnail}
|
||||||
|
|
||||||
{badges && (
|
{visible && badges && (
|
||||||
<div className='media-gallery__item__badges'>
|
<div className='media-gallery__item__badges'>
|
||||||
{badges}
|
{badges}
|
||||||
</div>
|
</div>
|
||||||
@ -336,14 +336,14 @@ class MediaGallery extends PureComponent {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={`media-gallery media-gallery--layout-${size}`} style={style} ref={this.handleRef}>
|
<div className={`media-gallery media-gallery--layout-${size}`} style={style} ref={this.handleRef}>
|
||||||
|
{children}
|
||||||
|
|
||||||
{(!visible || uncached) && (
|
{(!visible || uncached) && (
|
||||||
<div className={classNames('spoiler-button', { 'spoiler-button--click-thru': uncached })}>
|
<div className={classNames('spoiler-button', { 'spoiler-button--click-thru': uncached })}>
|
||||||
{spoilerButton}
|
{spoilerButton}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{children}
|
|
||||||
|
|
||||||
{(visible && !uncached) && (
|
{(visible && !uncached) && (
|
||||||
<div className='media-gallery__actions'>
|
<div className='media-gallery__actions'>
|
||||||
<button className='media-gallery__actions__pill' onClick={this.handleOpen}><FormattedMessage id='media_gallery.hide' defaultMessage='Hide' /></button>
|
<button className='media-gallery__actions__pill' onClick={this.handleOpen}><FormattedMessage id='media_gallery.hide' defaultMessage='Hide' /></button>
|
||||||
|
@ -129,8 +129,13 @@ export const InlineFollowSuggestions = ({ hidden }) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getComputedStyle(bodyRef.current).direction === 'rtl') {
|
||||||
|
setCanScrollLeft((bodyRef.current.clientWidth - bodyRef.current.scrollLeft) < bodyRef.current.scrollWidth);
|
||||||
|
setCanScrollRight(bodyRef.current.scrollLeft < 0);
|
||||||
|
} else {
|
||||||
setCanScrollLeft(bodyRef.current.scrollLeft > 0);
|
setCanScrollLeft(bodyRef.current.scrollLeft > 0);
|
||||||
setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth);
|
setCanScrollRight((bodyRef.current.scrollLeft + bodyRef.current.clientWidth) < bodyRef.current.scrollWidth);
|
||||||
|
}
|
||||||
}, [setCanScrollRight, setCanScrollLeft, bodyRef, suggestions]);
|
}, [setCanScrollRight, setCanScrollLeft, bodyRef, suggestions]);
|
||||||
|
|
||||||
const handleLeftNav = useCallback(() => {
|
const handleLeftNav = useCallback(() => {
|
||||||
|
@ -13,6 +13,7 @@ import {
|
|||||||
import type { IconProp } from 'mastodon/components/icon';
|
import type { IconProp } from 'mastodon/components/icon';
|
||||||
import { Icon } from 'mastodon/components/icon';
|
import { Icon } from 'mastodon/components/icon';
|
||||||
import Status from 'mastodon/containers/status_container';
|
import Status from 'mastodon/containers/status_container';
|
||||||
|
import { getStatusHidden } from 'mastodon/selectors/filters';
|
||||||
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
import { useAppSelector, useAppDispatch } from 'mastodon/store';
|
||||||
|
|
||||||
import { DisplayedName } from './displayed_name';
|
import { DisplayedName } from './displayed_name';
|
||||||
@ -48,6 +49,12 @@ export const NotificationWithStatus: React.FC<{
|
|||||||
(state) => state.statuses.getIn([statusId, 'visibility']) === 'direct',
|
(state) => state.statuses.getIn([statusId, 'visibility']) === 'direct',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const isFiltered = useAppSelector(
|
||||||
|
(state) =>
|
||||||
|
statusId &&
|
||||||
|
getStatusHidden(state, { id: statusId, contextType: 'notifications' }),
|
||||||
|
);
|
||||||
|
|
||||||
const handlers = useMemo(
|
const handlers = useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
open: () => {
|
open: () => {
|
||||||
@ -73,7 +80,7 @@ export const NotificationWithStatus: React.FC<{
|
|||||||
[dispatch, statusId],
|
[dispatch, statusId],
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!statusId) return null;
|
if (!statusId || isFiltered) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HotKeys handlers={handlers}>
|
<HotKeys handlers={handlers}>
|
||||||
|
@ -15,7 +15,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text
|
|||||||
|
|
||||||
if (href) {
|
if (href) {
|
||||||
return (
|
return (
|
||||||
<a href={href} className={className} data-method={method} title={text} {...other}>
|
<a href={href} className={className} data-method={method} {...other}>
|
||||||
{active ? activeIconElement : iconElement}
|
{active ? activeIconElement : iconElement}
|
||||||
<span>{text}</span>
|
<span>{text}</span>
|
||||||
{badgeElement}
|
{badgeElement}
|
||||||
@ -23,7 +23,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return (
|
return (
|
||||||
<NavLink to={to} className={className} title={text} exact {...other}>
|
<NavLink to={to} className={className} exact {...other}>
|
||||||
{active ? activeIconElement : iconElement}
|
{active ? activeIconElement : iconElement}
|
||||||
<span>{text}</span>
|
<span>{text}</span>
|
||||||
{badgeElement}
|
{badgeElement}
|
||||||
|
@ -84,6 +84,7 @@
|
|||||||
"alert.rate_limited.title": "معدل الطلبات محدود",
|
"alert.rate_limited.title": "معدل الطلبات محدود",
|
||||||
"alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.",
|
"alert.unexpected.message": "لقد طرأ خطأ غير متوقّع.",
|
||||||
"alert.unexpected.title": "المعذرة!",
|
"alert.unexpected.title": "المعذرة!",
|
||||||
|
"alt_text_badge.title": "نص بديل",
|
||||||
"announcement.announcement": "إعلان",
|
"announcement.announcement": "إعلان",
|
||||||
"attachments_list.unprocessed": "(غير معالَج)",
|
"attachments_list.unprocessed": "(غير معالَج)",
|
||||||
"audio.hide": "إخفاء المقطع الصوتي",
|
"audio.hide": "إخفاء المقطع الصوتي",
|
||||||
@ -758,7 +759,7 @@
|
|||||||
"status.history.edited": "عدله {name} {date}",
|
"status.history.edited": "عدله {name} {date}",
|
||||||
"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": "المزيد",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Ліміт перавышаны",
|
"alert.rate_limited.title": "Ліміт перавышаны",
|
||||||
"alert.unexpected.message": "Узнікла нечаканая памылка.",
|
"alert.unexpected.message": "Узнікла нечаканая памылка.",
|
||||||
"alert.unexpected.title": "Вой!",
|
"alert.unexpected.title": "Вой!",
|
||||||
|
"alt_text_badge.title": "Альтернативный текст",
|
||||||
"announcement.announcement": "Аб'ява",
|
"announcement.announcement": "Аб'ява",
|
||||||
"attachments_list.unprocessed": "(неапрацаваны)",
|
"attachments_list.unprocessed": "(неапрацаваны)",
|
||||||
"audio.hide": "Схаваць аўдыя",
|
"audio.hide": "Схаваць аўдыя",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Resposta en privat",
|
"notification.label.private_reply": "Resposta en privat",
|
||||||
"notification.label.reply": "Resposta",
|
"notification.label.reply": "Resposta",
|
||||||
"notification.mention": "Menció",
|
"notification.mention": "Menció",
|
||||||
|
"notification.mentioned_you": "{name} us ha mencionat",
|
||||||
"notification.moderation-warning.learn_more": "Per a saber-ne més",
|
"notification.moderation-warning.learn_more": "Per a saber-ne més",
|
||||||
"notification.moderation_warning": "Heu rebut un avís de moderació",
|
"notification.moderation_warning": "Heu rebut un avís de moderació",
|
||||||
"notification.moderation_warning.action_delete_statuses": "S'han eliminat algunes de les vostres publicacions.",
|
"notification.moderation_warning.action_delete_statuses": "S'han eliminat algunes de les vostres publicacions.",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Cyfradd gyfyngedig",
|
"alert.rate_limited.title": "Cyfradd gyfyngedig",
|
||||||
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
|
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
|
||||||
"alert.unexpected.title": "Wps!",
|
"alert.unexpected.title": "Wps!",
|
||||||
|
"alt_text_badge.title": "Testun Amgen",
|
||||||
"announcement.announcement": "Cyhoeddiad",
|
"announcement.announcement": "Cyhoeddiad",
|
||||||
"attachments_list.unprocessed": "(heb eu prosesu)",
|
"attachments_list.unprocessed": "(heb eu prosesu)",
|
||||||
"audio.hide": "Cuddio sain",
|
"audio.hide": "Cuddio sain",
|
||||||
@ -221,6 +222,7 @@
|
|||||||
"domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.",
|
"domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.",
|
||||||
"domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu blocio.",
|
"domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu blocio.",
|
||||||
"domain_block_modal.title": "Blocio parth?",
|
"domain_block_modal.title": "Blocio parth?",
|
||||||
|
"domain_block_modal.you_will_lose_relationships": "Byddwch yn colli'r holl ddilynwyr a phobl rydych chi'n eu dilyn o'r gweinydd hwn.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.",
|
"domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.",
|
||||||
"domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.",
|
"domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.",
|
||||||
"domain_pill.activitypub_like_language": "Mae ActivityPub fel yr iaith y mae Mastodon yn ei siarad â rhwydweithiau cymdeithasol eraill.",
|
"domain_pill.activitypub_like_language": "Mae ActivityPub fel yr iaith y mae Mastodon yn ei siarad â rhwydweithiau cymdeithasol eraill.",
|
||||||
@ -849,6 +851,11 @@
|
|||||||
"upload_error.poll": "Nid oes modd llwytho ffeiliau â phleidleisiau.",
|
"upload_error.poll": "Nid oes modd llwytho ffeiliau â phleidleisiau.",
|
||||||
"upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw",
|
"upload_form.audio_description": "Disgrifio ar gyfer pobl sydd â cholled clyw",
|
||||||
"upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg",
|
"upload_form.description": "Disgrifio i'r rheini a nam ar ei golwg",
|
||||||
|
"upload_form.drag_and_drop.instructions": "I godi atodiad cyfryngau, pwyswch y space neu enter. Wrth lusgo, defnyddiwch y bysellau saeth i symud yr atodiad cyfryngau i unrhyw gyfeiriad penodol. Pwyswch space neu enter eto i ollwng yr atodiad cyfryngau yn ei safle newydd, neu pwyswch escape i ddiddymu.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "Cafodd llusgo ei ddiddymu. Cafodd atodiad cyfryngau {item} ei ollwng.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "Cafodd atodiad cyfryngau {item} ei ollwng.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "Symudwyd atodiad cyfryngau {item}.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "Atodiad cyfryngau godwyd {item}.",
|
||||||
"upload_form.edit": "Golygu",
|
"upload_form.edit": "Golygu",
|
||||||
"upload_form.thumbnail": "Newid llun bach",
|
"upload_form.thumbnail": "Newid llun bach",
|
||||||
"upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg",
|
"upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Privat svar",
|
"notification.label.private_reply": "Privat svar",
|
||||||
"notification.label.reply": "Besvar",
|
"notification.label.reply": "Besvar",
|
||||||
"notification.mention": "Omtale",
|
"notification.mention": "Omtale",
|
||||||
|
"notification.mentioned_you": "{name} nævnte dig",
|
||||||
"notification.moderation-warning.learn_more": "Læs mere",
|
"notification.moderation-warning.learn_more": "Læs mere",
|
||||||
"notification.moderation_warning": "Du er tildelt en moderationsadvarsel",
|
"notification.moderation_warning": "Du er tildelt en moderationsadvarsel",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.",
|
"notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.",
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
"account.go_to_profile": "Profil aufrufen",
|
"account.go_to_profile": "Profil aufrufen",
|
||||||
"account.hide_reblogs": "Geteilte Beiträge von @{name} ausblenden",
|
"account.hide_reblogs": "Geteilte Beiträge von @{name} ausblenden",
|
||||||
"account.in_memoriam": "Zum Andenken.",
|
"account.in_memoriam": "Zum Andenken.",
|
||||||
"account.joined_short": "Beigetreten",
|
"account.joined_short": "Mitglied seit",
|
||||||
"account.languages": "Ausgewählte Sprachen ändern",
|
"account.languages": "Ausgewählte Sprachen ändern",
|
||||||
"account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} bestätigt",
|
"account.link_verified_on": "Das Profil mit dieser E-Mail-Adresse wurde bereits am {date} bestätigt",
|
||||||
"account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.",
|
"account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.",
|
||||||
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Private Antwort",
|
"notification.label.private_reply": "Private Antwort",
|
||||||
"notification.label.reply": "Antwort",
|
"notification.label.reply": "Antwort",
|
||||||
"notification.mention": "Erwähnung",
|
"notification.mention": "Erwähnung",
|
||||||
|
"notification.mentioned_you": "{name} erwähnte dich",
|
||||||
"notification.moderation-warning.learn_more": "Mehr erfahren",
|
"notification.moderation-warning.learn_more": "Mehr erfahren",
|
||||||
"notification.moderation_warning": "Du wurdest von den Moderator*innen verwarnt",
|
"notification.moderation_warning": "Du wurdest von den Moderator*innen verwarnt",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Einige deiner Beiträge sind entfernt worden.",
|
"notification.moderation_warning.action_delete_statuses": "Einige deiner Beiträge sind entfernt worden.",
|
||||||
@ -534,7 +535,7 @@
|
|||||||
"notification.relationships_severance_event.domain_block": "Ein Admin von {from} hat {target} blockiert – darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.",
|
"notification.relationships_severance_event.domain_block": "Ein Admin von {from} hat {target} blockiert – darunter {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst.",
|
||||||
"notification.relationships_severance_event.learn_more": "Mehr erfahren",
|
"notification.relationships_severance_event.learn_more": "Mehr erfahren",
|
||||||
"notification.relationships_severance_event.user_domain_block": "Du hast {target} blockiert – {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst, wurden entfernt.",
|
"notification.relationships_severance_event.user_domain_block": "Du hast {target} blockiert – {followersCount} deiner Follower und {followingCount, plural, one {# Konto, dem} other {# Konten, denen}} du folgst, wurden entfernt.",
|
||||||
"notification.status": "{name} hat gerade etwas gepostet",
|
"notification.status": "{name} veröffentlichte gerade",
|
||||||
"notification.update": "{name} bearbeitete einen Beitrag",
|
"notification.update": "{name} bearbeitete einen Beitrag",
|
||||||
"notification_requests.accept": "Genehmigen",
|
"notification_requests.accept": "Genehmigen",
|
||||||
"notification_requests.accept_multiple": "{count, plural, one {# Anfrage genehmigen …} other {# Anfragen genehmigen …}}",
|
"notification_requests.accept_multiple": "{count, plural, one {# Anfrage genehmigen …} other {# Anfragen genehmigen …}}",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Περιορισμός συχνότητας",
|
"alert.rate_limited.title": "Περιορισμός συχνότητας",
|
||||||
"alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
|
"alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
|
||||||
"alert.unexpected.title": "Ουπς!",
|
"alert.unexpected.title": "Ουπς!",
|
||||||
|
"alt_text_badge.title": "Εναλλακτικό κείμενο",
|
||||||
"announcement.announcement": "Ανακοίνωση",
|
"announcement.announcement": "Ανακοίνωση",
|
||||||
"attachments_list.unprocessed": "(μη επεξεργασμένο)",
|
"attachments_list.unprocessed": "(μη επεξεργασμένο)",
|
||||||
"audio.hide": "Απόκρυψη αρχείου ήχου",
|
"audio.hide": "Απόκρυψη αρχείου ήχου",
|
||||||
@ -221,6 +222,8 @@
|
|||||||
"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, one {{followersCountDisplay} ακόλουθο} other {{followersCountDisplay} ακόλουθους}} και {followingCount, plural, one {{followingCountDisplay} άτομο που ακολουθείτε} other {{followingCountDisplay} άτομα που ακολουθείτε}}.",
|
||||||
|
"domain_block_modal.you_will_lose_relationships": "Θα χάσετε όλους τους ακόλουθους και τα άτομα που ακολουθείτε από αυτόν τον διακομιστή.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Δεν θα βλέπεις αναρτήσεις ή ειδοποιήσεις από χρήστες σε αυτόν το διακομιστή.",
|
"domain_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 μιλάει με άλλα κοινωνικά δίκτυα.",
|
||||||
@ -849,6 +852,11 @@
|
|||||||
"upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
|
"upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
|
||||||
"upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής",
|
"upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής",
|
||||||
"upload_form.description": "Περιγραφή για άτομα με προβλήματα όρασης",
|
"upload_form.description": "Περιγραφή για άτομα με προβλήματα όρασης",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Για να επιλέξετε ένα συνημμένο αρχείο πολυμέσων, πατήστε το Space ή το Enter. Ενώ το σέρνετε, χρησιμοποιήστε τα πλήκτρα βέλους για να μετακινήσετε το συνημμένο αρχείο πολυμέσων προς οποιαδήποτε κατεύθυνση. Πατήστε ξανά το Space ή το Enter για να αποθέσετε το συνημμένο αρχείο πολυμέσων στη νέα του θέση ή πατήστε το Escape για ακύρωση.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "Η μετακίνηση ακυρώθηκε. Έγινε απόθεση του συνημμένου αρχείου πολυμέσων «{item}».",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "Έγινε απόθεση του συνημμένου αρχείου πολυμέσων «{item}».",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "Έγινε μετακίνηση του συνημμένου αρχείου πολυμέσων «{item}».",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "Έγινε επιλογή του συνημμένου αρχείου πολυμέσων «{item}».",
|
||||||
"upload_form.edit": "Επεξεργασία",
|
"upload_form.edit": "Επεξεργασία",
|
||||||
"upload_form.thumbnail": "Αλλαγή μικρογραφίας",
|
"upload_form.thumbnail": "Αλλαγή μικρογραφίας",
|
||||||
"upload_form.video_description": "Περιγραφή για άτομα με προβλήματα ακοής ή όρασης",
|
"upload_form.video_description": "Περιγραφή για άτομα με προβλήματα ακοής ή όρασης",
|
||||||
|
@ -852,6 +852,11 @@
|
|||||||
"upload_error.poll": "File upload not allowed with polls.",
|
"upload_error.poll": "File upload not allowed with polls.",
|
||||||
"upload_form.audio_description": "Describe for people who are deaf or hard of hearing",
|
"upload_form.audio_description": "Describe for people who are deaf or hard of hearing",
|
||||||
"upload_form.description": "Describe for people who are blind or have low vision",
|
"upload_form.description": "Describe for people who are blind or have low vision",
|
||||||
|
"upload_form.drag_and_drop.instructions": "To pick up a media attachment, press space or enter. While dragging, use the arrow keys to move the media attachment in any given direction. Press space or enter again to drop the media attachment in its new position, or press escape to cancel.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "Dragging was cancelled. Media attachment {item} was dropped.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "Media attachment {item} was dropped.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "Media attachment {item} was moved.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "Picked up media attachment {item}.",
|
||||||
"upload_form.edit": "Edit",
|
"upload_form.edit": "Edit",
|
||||||
"upload_form.thumbnail": "Change thumbnail",
|
"upload_form.thumbnail": "Change thumbnail",
|
||||||
"upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision",
|
"upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision",
|
||||||
|
@ -517,6 +517,7 @@
|
|||||||
"notification.label.private_reply": "Private reply",
|
"notification.label.private_reply": "Private reply",
|
||||||
"notification.label.reply": "Reply",
|
"notification.label.reply": "Reply",
|
||||||
"notification.mention": "Mention",
|
"notification.mention": "Mention",
|
||||||
|
"notification.mentioned_you": "{name} mentioned you",
|
||||||
"notification.moderation-warning.learn_more": "Learn more",
|
"notification.moderation-warning.learn_more": "Learn more",
|
||||||
"notification.moderation_warning": "You have received a moderation warning",
|
"notification.moderation_warning": "You have received a moderation warning",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.",
|
"notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.",
|
||||||
|
@ -22,10 +22,10 @@
|
|||||||
"account.cancel_follow_request": "Nuligi peton por sekvado",
|
"account.cancel_follow_request": "Nuligi peton por sekvado",
|
||||||
"account.copy": "Kopii ligilon al profilo",
|
"account.copy": "Kopii ligilon al profilo",
|
||||||
"account.direct": "Private mencii @{name}",
|
"account.direct": "Private mencii @{name}",
|
||||||
"account.disable_notifications": "Ne plu sciigi min, kiam @{name} mesaĝas",
|
"account.disable_notifications": "Ĉesu sciigi min kiam @{name} afiŝas",
|
||||||
"account.domain_blocked": "Domajno blokita",
|
"account.domain_blocked": "Domajno blokita",
|
||||||
"account.edit_profile": "Redakti la profilon",
|
"account.edit_profile": "Redakti la profilon",
|
||||||
"account.enable_notifications": "Sciigi min, kiam @{name} mesaĝas",
|
"account.enable_notifications": "Sciigu min kiam @{name} afiŝos",
|
||||||
"account.endorse": "Rekomendi ĉe via profilo",
|
"account.endorse": "Rekomendi ĉe via profilo",
|
||||||
"account.featured_tags.last_status_at": "Lasta afîŝo je {date}",
|
"account.featured_tags.last_status_at": "Lasta afîŝo je {date}",
|
||||||
"account.featured_tags.last_status_never": "Neniu afiŝo",
|
"account.featured_tags.last_status_never": "Neniu afiŝo",
|
||||||
@ -49,14 +49,14 @@
|
|||||||
"account.mention": "Mencii @{name}",
|
"account.mention": "Mencii @{name}",
|
||||||
"account.moved_to": "{name} indikis, ke ria nova konto estas nun:",
|
"account.moved_to": "{name} indikis, ke ria nova konto estas nun:",
|
||||||
"account.mute": "Silentigi @{name}",
|
"account.mute": "Silentigi @{name}",
|
||||||
"account.mute_notifications_short": "Silentigu Sciigojn",
|
"account.mute_notifications_short": "Silentigu sciigojn",
|
||||||
"account.mute_short": "Silentigu",
|
"account.mute_short": "Silentigu",
|
||||||
"account.muted": "Silentigita",
|
"account.muted": "Silentigita",
|
||||||
"account.mutual": "Reciproka",
|
"account.mutual": "Reciproka",
|
||||||
"account.no_bio": "Neniu priskribo estas provizita.",
|
"account.no_bio": "Neniu priskribo estas provizita.",
|
||||||
"account.open_original_page": "Malfermi la originalan paĝon",
|
"account.open_original_page": "Malfermi la originalan paĝon",
|
||||||
"account.posts": "Afiŝoj",
|
"account.posts": "Afiŝoj",
|
||||||
"account.posts_with_replies": "Mesaĝoj kaj respondoj",
|
"account.posts_with_replies": "Afiŝoj kaj respondoj",
|
||||||
"account.report": "Raporti @{name}",
|
"account.report": "Raporti @{name}",
|
||||||
"account.requested": "Atendo de aprobo. Klaku por nuligi la peton por sekvado",
|
"account.requested": "Atendo de aprobo. Klaku por nuligi la peton por sekvado",
|
||||||
"account.requested_follow": "{name} petis sekvi vin",
|
"account.requested_follow": "{name} petis sekvi vin",
|
||||||
@ -69,7 +69,7 @@
|
|||||||
"account.unendorse": "Ne plu rekomendi ĉe la profilo",
|
"account.unendorse": "Ne plu rekomendi ĉe la profilo",
|
||||||
"account.unfollow": "Ĉesi sekvi",
|
"account.unfollow": "Ĉesi sekvi",
|
||||||
"account.unmute": "Ne plu silentigi @{name}",
|
"account.unmute": "Ne plu silentigi @{name}",
|
||||||
"account.unmute_notifications_short": "Malsilentigu Sciigojn",
|
"account.unmute_notifications_short": "Malsilentigu sciigojn",
|
||||||
"account.unmute_short": "Ne plu silentigi",
|
"account.unmute_short": "Ne plu silentigi",
|
||||||
"account_note.placeholder": "Alklaku por aldoni noton",
|
"account_note.placeholder": "Alklaku por aldoni noton",
|
||||||
"admin.dashboard.daily_retention": "Uzantoretenprocento lau tag post registro",
|
"admin.dashboard.daily_retention": "Uzantoretenprocento lau tag post registro",
|
||||||
@ -81,7 +81,7 @@
|
|||||||
"admin.impact_report.instance_followers": "Sekvantojn niaj uzantoj perdus",
|
"admin.impact_report.instance_followers": "Sekvantojn niaj uzantoj perdus",
|
||||||
"admin.impact_report.instance_follows": "Sekvantojn ties uzantoj perdus",
|
"admin.impact_report.instance_follows": "Sekvantojn ties uzantoj perdus",
|
||||||
"admin.impact_report.title": "Influa reporto",
|
"admin.impact_report.title": "Influa reporto",
|
||||||
"alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.",
|
"alert.rate_limited.message": "Bonvolu reprovi poste {retry_time, time, medium}.",
|
||||||
"alert.rate_limited.title": "Mesaĝkvante limigita",
|
"alert.rate_limited.title": "Mesaĝkvante limigita",
|
||||||
"alert.unexpected.message": "Neatendita eraro okazis.",
|
"alert.unexpected.message": "Neatendita eraro okazis.",
|
||||||
"alert.unexpected.title": "Aj!",
|
"alert.unexpected.title": "Aj!",
|
||||||
@ -163,7 +163,7 @@
|
|||||||
"compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton",
|
"compose_form.poll.switch_to_single": "Ŝanĝi la balotenketon por permesi unu solan elekton",
|
||||||
"compose_form.poll.type": "Stilo",
|
"compose_form.poll.type": "Stilo",
|
||||||
"compose_form.publish": "Afiŝo",
|
"compose_form.publish": "Afiŝo",
|
||||||
"compose_form.publish_form": "Afiŝi",
|
"compose_form.publish_form": "Nova afiŝo",
|
||||||
"compose_form.reply": "Respondi",
|
"compose_form.reply": "Respondi",
|
||||||
"compose_form.save_changes": "Ĝisdatigi",
|
"compose_form.save_changes": "Ĝisdatigi",
|
||||||
"compose_form.spoiler.marked": "Forigi la averton de enhavo",
|
"compose_form.spoiler.marked": "Forigi la averton de enhavo",
|
||||||
@ -173,7 +173,7 @@
|
|||||||
"confirmations.block.confirm": "Bloki",
|
"confirmations.block.confirm": "Bloki",
|
||||||
"confirmations.delete.confirm": "Forigi",
|
"confirmations.delete.confirm": "Forigi",
|
||||||
"confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun afiŝon?",
|
"confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun afiŝon?",
|
||||||
"confirmations.delete.title": "Ĉu forigi Afiŝon?",
|
"confirmations.delete.title": "Ĉu forigi afiŝon?",
|
||||||
"confirmations.delete_list.confirm": "Forigi",
|
"confirmations.delete_list.confirm": "Forigi",
|
||||||
"confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?",
|
"confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?",
|
||||||
"confirmations.delete_list.title": "Ĉu forigi liston?",
|
"confirmations.delete_list.title": "Ĉu forigi liston?",
|
||||||
@ -213,9 +213,9 @@
|
|||||||
"dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.",
|
"dismissable_banner.community_timeline": "Jen la plej novaj publikaj afiŝoj de uzantoj, kies kontojn gastigas {domain}.",
|
||||||
"dismissable_banner.dismiss": "Eksigi",
|
"dismissable_banner.dismiss": "Eksigi",
|
||||||
"dismissable_banner.explore_links": "Tiuj novaĵoj estas aktuale priparolataj de uzantoj en tiu ĉi kaj aliaj serviloj, sur la malcentrigita reto.",
|
"dismissable_banner.explore_links": "Tiuj novaĵoj estas aktuale priparolataj de uzantoj en tiu ĉi kaj aliaj serviloj, sur la malcentrigita reto.",
|
||||||
"dismissable_banner.explore_statuses": "Ĉi tioj estas afiŝoj de socia reto kiu populariĝas hodiau.",
|
"dismissable_banner.explore_statuses": "Ĉi tiuj estas afiŝoj de la tuta socia reto, kiuj populariĝas hodiaŭ. Pli novaj afiŝoj kun pli da diskonigoj kaj plej ŝatataj estas rangigitaj pli alte.",
|
||||||
"dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.",
|
"dismissable_banner.explore_tags": "Ĉi tiuj kradvostoj populariĝas en ĉi tiu kaj aliaj serviloj en la malcentraliza reto nun.",
|
||||||
"dismissable_banner.public_timeline": "Ĉi tioj estas plej lastaj publikaj afiŝoj de personoj ĉe socia reto kiu personoj ĉe {domain} sekvas.",
|
"dismissable_banner.public_timeline": "Ĉi tiuj estas la plej lastatempaj publikaj afiŝoj de homoj en la socia reto, kiujn homoj sur {domain} sekvas.",
|
||||||
"domain_block_modal.block": "Bloki servilon",
|
"domain_block_modal.block": "Bloki servilon",
|
||||||
"domain_block_modal.block_account_instead": "Bloki @{name} anstataŭe",
|
"domain_block_modal.block_account_instead": "Bloki @{name} anstataŭe",
|
||||||
"domain_block_modal.they_can_interact_with_old_posts": "Homoj de ĉi tiu servilo povas interagi kun viaj malnovaj afiŝoj.",
|
"domain_block_modal.they_can_interact_with_old_posts": "Homoj de ĉi tiu servilo povas interagi kun viaj malnovaj afiŝoj.",
|
||||||
@ -265,8 +265,8 @@
|
|||||||
"empty_column.direct": "Vi ankoraŭ ne havas privatan mencion. Kiam vi sendos aŭ ricevos iun, tiu aperos ĉi tie.",
|
"empty_column.direct": "Vi ankoraŭ ne havas privatan mencion. Kiam vi sendos aŭ ricevos iun, tiu aperos ĉi tie.",
|
||||||
"empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.",
|
"empty_column.domain_blocks": "Ankoraŭ neniu domajno estas blokita.",
|
||||||
"empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!",
|
"empty_column.explore_statuses": "Nenio tendencas nun. Rekontrolu poste!",
|
||||||
"empty_column.favourited_statuses": "Vi ankoraŭ ne havas stelumitan afiŝon.",
|
"empty_column.favourited_statuses": "Vi ankoraŭ ne havas plej ŝatatajn afiŝojn. Kiam vi ŝatatas unu, ĝi aperos ĉi tie.",
|
||||||
"empty_column.favourites": "Ankoraŭ neniu stelumis tiun afiŝon.",
|
"empty_column.favourites": "Neniu ankoraŭ ŝatis ĉi tiun afiŝon. Kiam iu ŝatos ĝin, ili aperos ĉi tie.",
|
||||||
"empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.",
|
"empty_column.follow_requests": "Vi ne ankoraŭ havas iun peton de sekvado. Kiam vi ricevos unu, ĝi aperos ĉi tie.",
|
||||||
"empty_column.followed_tags": "Vi ankoraŭ ne sekvas iujn kradvortojn. Kiam vi faras, ili aperos ĉi tie.",
|
"empty_column.followed_tags": "Vi ankoraŭ ne sekvas iujn kradvortojn. Kiam vi faras, ili aperos ĉi tie.",
|
||||||
"empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.",
|
"empty_column.hashtag": "Ankoraŭ estas nenio per ĉi tiu kradvorto.",
|
||||||
@ -296,7 +296,7 @@
|
|||||||
"filter_modal.added.review_and_configure": "Por kontroli kaj pli modifi ĉi tiu filtrilkategorio, iru al la {settings_link}.",
|
"filter_modal.added.review_and_configure": "Por kontroli kaj pli modifi ĉi tiu filtrilkategorio, iru al la {settings_link}.",
|
||||||
"filter_modal.added.review_and_configure_title": "Filtrilopcioj",
|
"filter_modal.added.review_and_configure_title": "Filtrilopcioj",
|
||||||
"filter_modal.added.settings_link": "opciopaĝo",
|
"filter_modal.added.settings_link": "opciopaĝo",
|
||||||
"filter_modal.added.short_explanation": "Ĉi tiu mesaĝo aldonitas al la filtrilkategorio: {title}.",
|
"filter_modal.added.short_explanation": "Ĉi tiu afiŝo aldonitas al la filtrilkategorio: {title}.",
|
||||||
"filter_modal.added.title": "Filtrilo aldonita!",
|
"filter_modal.added.title": "Filtrilo aldonita!",
|
||||||
"filter_modal.select_filter.context_mismatch": "ne kongruas la kuntekston",
|
"filter_modal.select_filter.context_mismatch": "ne kongruas la kuntekston",
|
||||||
"filter_modal.select_filter.expired": "eksvalidiĝinta",
|
"filter_modal.select_filter.expired": "eksvalidiĝinta",
|
||||||
@ -304,7 +304,7 @@
|
|||||||
"filter_modal.select_filter.search": "Serĉi aŭ krei",
|
"filter_modal.select_filter.search": "Serĉi aŭ krei",
|
||||||
"filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan",
|
"filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan",
|
||||||
"filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon",
|
"filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon",
|
||||||
"filter_modal.title.status": "Filtri mesaĝon",
|
"filter_modal.title.status": "Filtri afiŝon",
|
||||||
"filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”",
|
"filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”",
|
||||||
"filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas",
|
"filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas",
|
||||||
"filtered_notifications_banner.title": "Filtritaj sciigoj",
|
"filtered_notifications_banner.title": "Filtritaj sciigoj",
|
||||||
@ -351,7 +351,7 @@
|
|||||||
"hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno",
|
"hashtag.column_settings.tag_toggle": "Aldoni pliajn etikedojn por ĉi tiu kolumno",
|
||||||
"hashtag.counter_by_accounts": "{count, plural,one {{counter} partoprenanto} other {{counter} partoprenantoj}}",
|
"hashtag.counter_by_accounts": "{count, plural,one {{counter} partoprenanto} other {{counter} partoprenantoj}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}",
|
"hashtag.counter_by_uses": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}} hodiau",
|
"hashtag.counter_by_uses_today": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}} hodiaŭ",
|
||||||
"hashtag.follow": "Sekvi la kradvorton",
|
"hashtag.follow": "Sekvi la kradvorton",
|
||||||
"hashtag.unfollow": "Ne plu sekvi la kradvorton",
|
"hashtag.unfollow": "Ne plu sekvi la kradvorton",
|
||||||
"hashtags.and_other": "…kaj {count, plural,other {# pli}}",
|
"hashtags.and_other": "…kaj {count, plural,other {# pli}}",
|
||||||
@ -382,9 +382,9 @@
|
|||||||
"ignore_notifications_modal.not_following_title": "Ĉu ignori sciigojn de homoj, kiujn vi ne sekvas?",
|
"ignore_notifications_modal.not_following_title": "Ĉu ignori sciigojn de homoj, kiujn vi ne sekvas?",
|
||||||
"ignore_notifications_modal.private_mentions_title": "Ĉu ignori sciigojn de nepetitaj privataj mencioj?",
|
"ignore_notifications_modal.private_mentions_title": "Ĉu ignori sciigojn de nepetitaj privataj mencioj?",
|
||||||
"interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumiti ĉi tiun afiŝon por sciigi la afiŝanton ke vi aprezigas ŝin kaj konservas por la estonteco.",
|
"interaction_modal.description.favourite": "Per konto ĉe Mastodon, vi povas stelumiti ĉi tiun afiŝon por sciigi la afiŝanton ke vi aprezigas ŝin kaj konservas por la estonteco.",
|
||||||
"interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povos sekvi {name} por vidi ties mesaĝojn en via hejmo.",
|
"interaction_modal.description.follow": "Kun konto ĉe Mastodon, vi povas sekvi {name} por ricevi iliajn afiŝojn en via hejma fluo.",
|
||||||
"interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.",
|
"interaction_modal.description.reblog": "Kun konto ĉe Mastodon, vi povas diskonigi ĉi tiun afiŝon, por ke viaj propraj sekvantoj vidu ĝin.",
|
||||||
"interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu mesaĝo.",
|
"interaction_modal.description.reply": "Kun konto ĉe Mastodon, vi povos respondi al ĉi tiu afiŝo.",
|
||||||
"interaction_modal.login.action": "Prenu min hejmen",
|
"interaction_modal.login.action": "Prenu min hejmen",
|
||||||
"interaction_modal.login.prompt": "Domajno de via hejma servilo, ekz. mastodon.social",
|
"interaction_modal.login.prompt": "Domajno de via hejma servilo, ekz. mastodon.social",
|
||||||
"interaction_modal.no_account_yet": "Ĉu ne estas ĉe Mastodon?",
|
"interaction_modal.no_account_yet": "Ĉu ne estas ĉe Mastodon?",
|
||||||
@ -402,12 +402,12 @@
|
|||||||
"keyboard_shortcuts.back": "reveni",
|
"keyboard_shortcuts.back": "reveni",
|
||||||
"keyboard_shortcuts.blocked": "Malfermi la liston de blokitaj uzantoj",
|
"keyboard_shortcuts.blocked": "Malfermi la liston de blokitaj uzantoj",
|
||||||
"keyboard_shortcuts.boost": "Diskonigi la mesaĝon",
|
"keyboard_shortcuts.boost": "Diskonigi la mesaĝon",
|
||||||
"keyboard_shortcuts.column": "fokusi mesaĝon en unu el la kolumnoj",
|
"keyboard_shortcuts.column": "Fokusi kolumnon",
|
||||||
"keyboard_shortcuts.compose": "enfokusigi la tekstujon",
|
"keyboard_shortcuts.compose": "enfokusigi la tekstujon",
|
||||||
"keyboard_shortcuts.description": "Priskribo",
|
"keyboard_shortcuts.description": "Priskribo",
|
||||||
"keyboard_shortcuts.direct": "por malfermi la kolumnon pri privataj mencioj",
|
"keyboard_shortcuts.direct": "por malfermi la kolumnon pri privataj mencioj",
|
||||||
"keyboard_shortcuts.down": "iri suben en la listo",
|
"keyboard_shortcuts.down": "iri suben en la listo",
|
||||||
"keyboard_shortcuts.enter": "malfermi mesaĝon",
|
"keyboard_shortcuts.enter": "Malfermi afiŝon",
|
||||||
"keyboard_shortcuts.favourite": "Stelumi afiŝon",
|
"keyboard_shortcuts.favourite": "Stelumi afiŝon",
|
||||||
"keyboard_shortcuts.favourites": "Malfermi la liston de la stelumoj",
|
"keyboard_shortcuts.favourites": "Malfermi la liston de la stelumoj",
|
||||||
"keyboard_shortcuts.federated": "Malfermi la frataran templinion",
|
"keyboard_shortcuts.federated": "Malfermi la frataran templinion",
|
||||||
@ -421,16 +421,16 @@
|
|||||||
"keyboard_shortcuts.my_profile": "malfermi vian profilon",
|
"keyboard_shortcuts.my_profile": "malfermi vian profilon",
|
||||||
"keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj",
|
"keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj",
|
||||||
"keyboard_shortcuts.open_media": "Malfermi plurmedion",
|
"keyboard_shortcuts.open_media": "Malfermi plurmedion",
|
||||||
"keyboard_shortcuts.pinned": "malfermi la liston de alpinglitaj mesaĝoj",
|
"keyboard_shortcuts.pinned": "Malfermu alpinglitajn afiŝojn-liston",
|
||||||
"keyboard_shortcuts.profile": "malfermi la profilon de la aŭtoro",
|
"keyboard_shortcuts.profile": "malfermi la profilon de la aŭtoro",
|
||||||
"keyboard_shortcuts.reply": "respondi",
|
"keyboard_shortcuts.reply": "Respondu al afiŝo",
|
||||||
"keyboard_shortcuts.requests": "Malfermi la liston de petoj por sekvado",
|
"keyboard_shortcuts.requests": "Malfermi la liston de petoj por sekvado",
|
||||||
"keyboard_shortcuts.search": "enfokusigi la serĉilon",
|
"keyboard_shortcuts.search": "enfokusigi la serĉilon",
|
||||||
"keyboard_shortcuts.spoilers": "Montri/kaŝi la kampon de averto de enhavo (\"CW\")",
|
"keyboard_shortcuts.spoilers": "Montri/kaŝi la kampon de averto de enhavo (\"CW\")",
|
||||||
"keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»",
|
"keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»",
|
||||||
"keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ la averto de enhavo (\"CW\")",
|
"keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ la averto de enhavo (\"CW\")",
|
||||||
"keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi plurmedion",
|
"keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi plurmedion",
|
||||||
"keyboard_shortcuts.toot": "Krei novan mesaĝon",
|
"keyboard_shortcuts.toot": "Komencu novan afiŝon",
|
||||||
"keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon",
|
"keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon",
|
||||||
"keyboard_shortcuts.up": "iri supren en la listo",
|
"keyboard_shortcuts.up": "iri supren en la listo",
|
||||||
"lightbox.close": "Fermi",
|
"lightbox.close": "Fermi",
|
||||||
@ -476,9 +476,9 @@
|
|||||||
"navigation_bar.blocks": "Blokitaj uzantoj",
|
"navigation_bar.blocks": "Blokitaj uzantoj",
|
||||||
"navigation_bar.bookmarks": "Legosignoj",
|
"navigation_bar.bookmarks": "Legosignoj",
|
||||||
"navigation_bar.community_timeline": "Loka templinio",
|
"navigation_bar.community_timeline": "Loka templinio",
|
||||||
"navigation_bar.compose": "Skribi novan mesaĝon",
|
"navigation_bar.compose": "Redakti novan afiŝon",
|
||||||
"navigation_bar.direct": "Privataj mencioj",
|
"navigation_bar.direct": "Privataj mencioj",
|
||||||
"navigation_bar.discover": "Esplori",
|
"navigation_bar.discover": "Malkovri",
|
||||||
"navigation_bar.domain_blocks": "Blokitaj domajnoj",
|
"navigation_bar.domain_blocks": "Blokitaj domajnoj",
|
||||||
"navigation_bar.explore": "Esplori",
|
"navigation_bar.explore": "Esplori",
|
||||||
"navigation_bar.favourites": "Stelumoj",
|
"navigation_bar.favourites": "Stelumoj",
|
||||||
@ -487,12 +487,12 @@
|
|||||||
"navigation_bar.followed_tags": "Sekvataj kradvortoj",
|
"navigation_bar.followed_tags": "Sekvataj kradvortoj",
|
||||||
"navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj",
|
"navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj",
|
||||||
"navigation_bar.lists": "Listoj",
|
"navigation_bar.lists": "Listoj",
|
||||||
"navigation_bar.logout": "Adiaŭi",
|
"navigation_bar.logout": "Elsaluti",
|
||||||
"navigation_bar.moderation": "Modereco",
|
"navigation_bar.moderation": "Modereco",
|
||||||
"navigation_bar.mutes": "Silentigitaj uzantoj",
|
"navigation_bar.mutes": "Silentigitaj uzantoj",
|
||||||
"navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.",
|
"navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.",
|
||||||
"navigation_bar.personal": "Persone",
|
"navigation_bar.personal": "Persone",
|
||||||
"navigation_bar.pins": "Alpinglitaj mesaĝoj",
|
"navigation_bar.pins": "Alpinglitaj afiŝoj",
|
||||||
"navigation_bar.preferences": "Preferoj",
|
"navigation_bar.preferences": "Preferoj",
|
||||||
"navigation_bar.public_timeline": "Fratara templinio",
|
"navigation_bar.public_timeline": "Fratara templinio",
|
||||||
"navigation_bar.search": "Serĉi",
|
"navigation_bar.search": "Serĉi",
|
||||||
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Privata respondo",
|
"notification.label.private_reply": "Privata respondo",
|
||||||
"notification.label.reply": "Respondi",
|
"notification.label.reply": "Respondi",
|
||||||
"notification.mention": "Mencii",
|
"notification.mention": "Mencii",
|
||||||
|
"notification.mentioned_you": "{name} menciis vin",
|
||||||
"notification.moderation-warning.learn_more": "Lerni pli",
|
"notification.moderation-warning.learn_more": "Lerni pli",
|
||||||
"notification.moderation_warning": "Vi ricevis moderigan averton",
|
"notification.moderation_warning": "Vi ricevis moderigan averton",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Kelkaj el viaj afiŝoj estis forigitaj.",
|
"notification.moderation_warning.action_delete_statuses": "Kelkaj el viaj afiŝoj estis forigitaj.",
|
||||||
@ -572,7 +573,7 @@
|
|||||||
"notifications.column_settings.reblog": "Diskonigoj:",
|
"notifications.column_settings.reblog": "Diskonigoj:",
|
||||||
"notifications.column_settings.show": "Montri en kolumno",
|
"notifications.column_settings.show": "Montri en kolumno",
|
||||||
"notifications.column_settings.sound": "Eligi sonon",
|
"notifications.column_settings.sound": "Eligi sonon",
|
||||||
"notifications.column_settings.status": "Novaj mesaĝoj:",
|
"notifications.column_settings.status": "Novaj afiŝoj:",
|
||||||
"notifications.column_settings.unread_notifications.category": "Nelegitaj sciigoj",
|
"notifications.column_settings.unread_notifications.category": "Nelegitaj sciigoj",
|
||||||
"notifications.column_settings.unread_notifications.highlight": "Marki nelegitajn sciigojn",
|
"notifications.column_settings.unread_notifications.highlight": "Marki nelegitajn sciigojn",
|
||||||
"notifications.column_settings.update": "Redaktoj:",
|
"notifications.column_settings.update": "Redaktoj:",
|
||||||
@ -660,7 +661,7 @@
|
|||||||
"poll.votes": "{votes, plural, one {# voĉdono} other {# voĉdonoj}}",
|
"poll.votes": "{votes, plural, one {# voĉdono} other {# voĉdonoj}}",
|
||||||
"poll_button.add_poll": "Aldoni balotenketon",
|
"poll_button.add_poll": "Aldoni balotenketon",
|
||||||
"poll_button.remove_poll": "Forigi balotenketon",
|
"poll_button.remove_poll": "Forigi balotenketon",
|
||||||
"privacy.change": "Agordi mesaĝan privatecon",
|
"privacy.change": "Ŝanĝu afiŝan privatecon",
|
||||||
"privacy.direct.long": "Ĉiuj menciitaj en la afiŝo",
|
"privacy.direct.long": "Ĉiuj menciitaj en la afiŝo",
|
||||||
"privacy.direct.short": "Specifaj homoj",
|
"privacy.direct.short": "Specifaj homoj",
|
||||||
"privacy.private.long": "Nur viaj sekvantoj",
|
"privacy.private.long": "Nur viaj sekvantoj",
|
||||||
@ -775,13 +776,13 @@
|
|||||||
"sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi",
|
"sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi",
|
||||||
"status.admin_account": "Malfermi fasadon de moderigado por @{name}",
|
"status.admin_account": "Malfermi fasadon de moderigado por @{name}",
|
||||||
"status.admin_domain": "Malfermu moderigan interfacon por {domain}",
|
"status.admin_domain": "Malfermu moderigan interfacon por {domain}",
|
||||||
"status.admin_status": "Malfermi ĉi tiun mesaĝon en la kontrola interfaco",
|
"status.admin_status": "Malfermi ĉi tiun afiŝon en la kontrola interfaco",
|
||||||
"status.block": "Bloki @{name}",
|
"status.block": "Bloki @{name}",
|
||||||
"status.bookmark": "Aldoni al la legosignoj",
|
"status.bookmark": "Aldoni al la legosignoj",
|
||||||
"status.cancel_reblog_private": "Ne plu diskonigi",
|
"status.cancel_reblog_private": "Ne plu diskonigi",
|
||||||
"status.cannot_reblog": "Ĉi tiun afiŝon ne eblas diskonigi",
|
"status.cannot_reblog": "Ĉi tiun afiŝon ne eblas diskonigi",
|
||||||
"status.continued_thread": "Daŭrigis fadenon",
|
"status.continued_thread": "Daŭrigis fadenon",
|
||||||
"status.copy": "Kopii la ligilon al la mesaĝo",
|
"status.copy": "Kopii la ligilon al la afiŝo",
|
||||||
"status.delete": "Forigi",
|
"status.delete": "Forigi",
|
||||||
"status.detailed_status": "Detala konversacia vido",
|
"status.detailed_status": "Detala konversacia vido",
|
||||||
"status.direct": "Private mencii @{name}",
|
"status.direct": "Private mencii @{name}",
|
||||||
@ -803,9 +804,9 @@
|
|||||||
"status.more": "Pli",
|
"status.more": "Pli",
|
||||||
"status.mute": "Silentigi @{name}",
|
"status.mute": "Silentigi @{name}",
|
||||||
"status.mute_conversation": "Silentigi konversacion",
|
"status.mute_conversation": "Silentigi konversacion",
|
||||||
"status.open": "Disvolvi la mesaĝon",
|
"status.open": "Pligrandigu ĉi tiun afiŝon",
|
||||||
"status.pin": "Alpingli al la profilo",
|
"status.pin": "Alpingli al la profilo",
|
||||||
"status.pinned": "Alpinglita mesaĝo",
|
"status.pinned": "Alpinglita afiŝo",
|
||||||
"status.read_more": "Legi pli",
|
"status.read_more": "Legi pli",
|
||||||
"status.reblog": "Diskonigi",
|
"status.reblog": "Diskonigi",
|
||||||
"status.reblog_private": "Diskonigi kun la sama videbleco",
|
"status.reblog_private": "Diskonigi kun la sama videbleco",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Respuesta privada",
|
"notification.label.private_reply": "Respuesta privada",
|
||||||
"notification.label.reply": "Respuesta",
|
"notification.label.reply": "Respuesta",
|
||||||
"notification.mention": "Mención",
|
"notification.mention": "Mención",
|
||||||
|
"notification.mentioned_you": "{name} te mencionó",
|
||||||
"notification.moderation-warning.learn_more": "Aprendé más",
|
"notification.moderation-warning.learn_more": "Aprendé más",
|
||||||
"notification.moderation_warning": "Recibiste una advertencia de moderación",
|
"notification.moderation_warning": "Recibiste una advertencia de moderación",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Se eliminaron algunos de tus mensajes.",
|
"notification.moderation_warning.action_delete_statuses": "Se eliminaron algunos de tus mensajes.",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Respuesta privada",
|
"notification.label.private_reply": "Respuesta privada",
|
||||||
"notification.label.reply": "Respuesta",
|
"notification.label.reply": "Respuesta",
|
||||||
"notification.mention": "Mención",
|
"notification.mention": "Mención",
|
||||||
|
"notification.mentioned_you": "{name} te ha mencionado",
|
||||||
"notification.moderation-warning.learn_more": "Saber más",
|
"notification.moderation-warning.learn_more": "Saber más",
|
||||||
"notification.moderation_warning": "Has recibido una advertencia de moderación",
|
"notification.moderation_warning": "Has recibido una advertencia de moderación",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
|
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
|
||||||
@ -852,11 +853,11 @@
|
|||||||
"upload_error.poll": "Subida de archivos no permitida con encuestas.",
|
"upload_error.poll": "Subida de archivos no permitida con encuestas.",
|
||||||
"upload_form.audio_description": "Describir para personas con problemas auditivos",
|
"upload_form.audio_description": "Describir para personas con problemas auditivos",
|
||||||
"upload_form.description": "Describir para los usuarios con dificultad visual",
|
"upload_form.description": "Describir para los usuarios con dificultad visual",
|
||||||
"upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.",
|
"upload_form.drag_and_drop.instructions": "Para recoger un archivo adjunto, pulsa la barra espaciadora o la tecla Intro. Mientras arrastras, usa las teclas de flecha para mover el archivo adjunto en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Intro para soltar el archivo adjunto en su nueva posición, o pulsa la tecla Escape para cancelar.",
|
||||||
"upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.",
|
"upload_form.drag_and_drop.on_drag_cancel": "Arrastre cancelado. El archivo adjunto {item} fue eliminado.",
|
||||||
"upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.",
|
"upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue eliminado.",
|
||||||
"upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.",
|
"upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.",
|
||||||
"upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.",
|
"upload_form.drag_and_drop.on_drag_start": "Recogidos los archivos adjuntos {item}.",
|
||||||
"upload_form.edit": "Editar",
|
"upload_form.edit": "Editar",
|
||||||
"upload_form.thumbnail": "Cambiar miniatura",
|
"upload_form.thumbnail": "Cambiar miniatura",
|
||||||
"upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
|
"upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Respuesta privada",
|
"notification.label.private_reply": "Respuesta privada",
|
||||||
"notification.label.reply": "Respuesta",
|
"notification.label.reply": "Respuesta",
|
||||||
"notification.mention": "Mención",
|
"notification.mention": "Mención",
|
||||||
|
"notification.mentioned_you": "{name} te ha mencionado",
|
||||||
"notification.moderation-warning.learn_more": "Saber más",
|
"notification.moderation-warning.learn_more": "Saber más",
|
||||||
"notification.moderation_warning": "Has recibido una advertencia de moderación",
|
"notification.moderation_warning": "Has recibido una advertencia de moderación",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
|
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Yksityinen vastaus",
|
"notification.label.private_reply": "Yksityinen vastaus",
|
||||||
"notification.label.reply": "Vastaus",
|
"notification.label.reply": "Vastaus",
|
||||||
"notification.mention": "Maininta",
|
"notification.mention": "Maininta",
|
||||||
|
"notification.mentioned_you": "{name} mainitsi sinut",
|
||||||
"notification.moderation-warning.learn_more": "Lue lisää",
|
"notification.moderation-warning.learn_more": "Lue lisää",
|
||||||
"notification.moderation_warning": "Olet saanut moderointivaroituksen",
|
"notification.moderation_warning": "Olet saanut moderointivaroituksen",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Julkaisujasi on poistettu.",
|
"notification.moderation_warning.action_delete_statuses": "Julkaisujasi on poistettu.",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Privat svar",
|
"notification.label.private_reply": "Privat svar",
|
||||||
"notification.label.reply": "Svara",
|
"notification.label.reply": "Svara",
|
||||||
"notification.mention": "Umrøð",
|
"notification.mention": "Umrøð",
|
||||||
|
"notification.mentioned_you": "{name} nevndi teg",
|
||||||
"notification.moderation-warning.learn_more": "Lær meira",
|
"notification.moderation-warning.learn_more": "Lær meira",
|
||||||
"notification.moderation_warning": "Tú hevur móttikið eina umsjónarávaring",
|
"notification.moderation_warning": "Tú hevur móttikið eina umsjónarávaring",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Onkrir av tínum postum eru strikaðir.",
|
"notification.moderation_warning.action_delete_statuses": "Onkrir av tínum postum eru strikaðir.",
|
||||||
|
@ -852,6 +852,7 @@
|
|||||||
"upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.",
|
"upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.",
|
||||||
"upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition",
|
"upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition",
|
||||||
"upload_form.description": "Décrire pour les malvoyants",
|
"upload_form.description": "Décrire pour les malvoyants",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.",
|
||||||
"upload_form.edit": "Modifier",
|
"upload_form.edit": "Modifier",
|
||||||
"upload_form.thumbnail": "Changer la vignette",
|
"upload_form.thumbnail": "Changer la vignette",
|
||||||
"upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition",
|
"upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition",
|
||||||
|
@ -852,6 +852,7 @@
|
|||||||
"upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.",
|
"upload_error.poll": "L’envoi de fichiers n’est pas autorisé avec les sondages.",
|
||||||
"upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition",
|
"upload_form.audio_description": "Décrire pour les personnes ayant des difficultés d’audition",
|
||||||
"upload_form.description": "Décrire pour les malvoyant·e·s",
|
"upload_form.description": "Décrire pour les malvoyant·e·s",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Pour choisir un média joint, appuyez sur la touche espace ou entrée. Tout en faisant glisser, utilisez les touches fléchées pour déplacer le fichier média dans une direction donnée. Appuyez à nouveau sur la touche espace ou entrée pour déposer le fichier média dans sa nouvelle position, ou appuyez sur la touche Echap pour annuler.",
|
||||||
"upload_form.edit": "Modifier",
|
"upload_form.edit": "Modifier",
|
||||||
"upload_form.thumbnail": "Changer la vignette",
|
"upload_form.thumbnail": "Changer la vignette",
|
||||||
"upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition",
|
"upload_form.video_description": "Décrire pour les personnes ayant des problèmes de vue ou d'audition",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Dataferkear beheind",
|
"alert.rate_limited.title": "Dataferkear beheind",
|
||||||
"alert.unexpected.message": "Der is in ûnferwachte flater bard.",
|
"alert.unexpected.message": "Der is in ûnferwachte flater bard.",
|
||||||
"alert.unexpected.title": "Oepsy!",
|
"alert.unexpected.title": "Oepsy!",
|
||||||
|
"alt_text_badge.title": "Alternative tekst",
|
||||||
"announcement.announcement": "Oankundiging",
|
"announcement.announcement": "Oankundiging",
|
||||||
"attachments_list.unprocessed": "(net ferwurke)",
|
"attachments_list.unprocessed": "(net ferwurke)",
|
||||||
"audio.hide": "Audio ferstopje",
|
"audio.hide": "Audio ferstopje",
|
||||||
@ -221,6 +222,8 @@
|
|||||||
"domain_block_modal.they_cant_follow": "Net ien op dizze server kin jo folgje.",
|
"domain_block_modal.they_cant_follow": "Net ien op dizze server kin jo folgje.",
|
||||||
"domain_block_modal.they_wont_know": "Se krije net te witten dat se blokkearre wurde.",
|
"domain_block_modal.they_wont_know": "Se krije net te witten dat se blokkearre wurde.",
|
||||||
"domain_block_modal.title": "Domein blokkearje?",
|
"domain_block_modal.title": "Domein blokkearje?",
|
||||||
|
"domain_block_modal.you_will_lose_num_followers": "Jo ferlieze {followersCount, plural, one {{followersCountDisplay} folger} other {{followersCountDisplay} folgers}} en {followingCount, plural, one {{followingCountDisplay} persoan dy’t jo folgje} other {{followingCountDisplay} persoanen dy’t jo folgje}}.",
|
||||||
|
"domain_block_modal.you_will_lose_relationships": "Jo ferlieze alle folgers en minsken dy’t jo folgje fan dizze server.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Jo sjogge gjin berjochten of meldingen mear fan brûkers op dizze server.",
|
"domain_block_modal.you_wont_see_posts": "Jo sjogge gjin berjochten of meldingen mear fan brûkers op dizze server.",
|
||||||
"domain_pill.activitypub_lets_connect": "It soarget derfoar dat jo net allinnich mar ferbine en kommunisearje kinne mei minsken op Mastodon, mar ek mei oare sosjale apps.",
|
"domain_pill.activitypub_lets_connect": "It soarget derfoar dat jo net allinnich mar ferbine en kommunisearje kinne mei minsken op Mastodon, mar ek mei oare sosjale apps.",
|
||||||
"domain_pill.activitypub_like_language": "ActivityPub is de taal dy’t Mastodon mei oare sosjale netwurken sprekt.",
|
"domain_pill.activitypub_like_language": "ActivityPub is de taal dy’t Mastodon mei oare sosjale netwurken sprekt.",
|
||||||
@ -433,6 +436,8 @@
|
|||||||
"lightbox.close": "Slute",
|
"lightbox.close": "Slute",
|
||||||
"lightbox.next": "Folgjende",
|
"lightbox.next": "Folgjende",
|
||||||
"lightbox.previous": "Foarige",
|
"lightbox.previous": "Foarige",
|
||||||
|
"lightbox.zoom_in": "Oarspronklike grutte toane",
|
||||||
|
"lightbox.zoom_out": "Passend toane",
|
||||||
"limited_account_hint.action": "Profyl dochs besjen",
|
"limited_account_hint.action": "Profyl dochs besjen",
|
||||||
"limited_account_hint.title": "Dit profyl is troch de behearders fan {domain} ferstoppe.",
|
"limited_account_hint.title": "Dit profyl is troch de behearders fan {domain} ferstoppe.",
|
||||||
"link_preview.author": "Troch {name}",
|
"link_preview.author": "Troch {name}",
|
||||||
@ -454,6 +459,7 @@
|
|||||||
"lists.subheading": "Jo listen",
|
"lists.subheading": "Jo listen",
|
||||||
"load_pending": "{count, plural, one {# nij item} other {# nije items}}",
|
"load_pending": "{count, plural, one {# nij item} other {# nije items}}",
|
||||||
"loading_indicator.label": "Lade…",
|
"loading_indicator.label": "Lade…",
|
||||||
|
"media_gallery.hide": "Ferstopje",
|
||||||
"moved_to_account_banner.text": "Omdat jo nei {movedToAccount} ferhuze binne is jo account {disabledAccount} op dit stuit útskeakele.",
|
"moved_to_account_banner.text": "Omdat jo nei {movedToAccount} ferhuze binne is jo account {disabledAccount} op dit stuit útskeakele.",
|
||||||
"mute_modal.hide_from_notifications": "Meldingen ferstopje",
|
"mute_modal.hide_from_notifications": "Meldingen ferstopje",
|
||||||
"mute_modal.hide_options": "Opsjes ferstopje",
|
"mute_modal.hide_options": "Opsjes ferstopje",
|
||||||
@ -510,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Priveereaksje",
|
"notification.label.private_reply": "Priveereaksje",
|
||||||
"notification.label.reply": "Beäntwurdzje",
|
"notification.label.reply": "Beäntwurdzje",
|
||||||
"notification.mention": "Fermelding",
|
"notification.mention": "Fermelding",
|
||||||
|
"notification.mentioned_you": "{name} hat dy fermeld",
|
||||||
"notification.moderation-warning.learn_more": "Mear ynfo",
|
"notification.moderation-warning.learn_more": "Mear ynfo",
|
||||||
"notification.moderation_warning": "Jo hawwe in moderaasje-warskôging ûntfongen",
|
"notification.moderation_warning": "Jo hawwe in moderaasje-warskôging ûntfongen",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Guon fan jo berjochten binne fuortsmiten.",
|
"notification.moderation_warning.action_delete_statuses": "Guon fan jo berjochten binne fuortsmiten.",
|
||||||
@ -774,6 +781,7 @@
|
|||||||
"status.bookmark": "Blêdwizer tafoegje",
|
"status.bookmark": "Blêdwizer tafoegje",
|
||||||
"status.cancel_reblog_private": "Net langer booste",
|
"status.cancel_reblog_private": "Net langer booste",
|
||||||
"status.cannot_reblog": "Dit berjocht kin net boost wurde",
|
"status.cannot_reblog": "Dit berjocht kin net boost wurde",
|
||||||
|
"status.continued_thread": "Ferfolgje it petear",
|
||||||
"status.copy": "Copy link to status",
|
"status.copy": "Copy link to status",
|
||||||
"status.delete": "Fuortsmite",
|
"status.delete": "Fuortsmite",
|
||||||
"status.detailed_status": "Detaillearre petearoersjoch",
|
"status.detailed_status": "Detaillearre petearoersjoch",
|
||||||
@ -782,6 +790,7 @@
|
|||||||
"status.edit": "Bewurkje",
|
"status.edit": "Bewurkje",
|
||||||
"status.edited": "Lêst bywurke op {date}",
|
"status.edited": "Lêst bywurke op {date}",
|
||||||
"status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke",
|
"status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke",
|
||||||
|
"status.embed": "Koade om op te nimmen",
|
||||||
"status.favourite": "Favoryt",
|
"status.favourite": "Favoryt",
|
||||||
"status.favourites": "{count, plural, one {favoryt} other {favoriten}}",
|
"status.favourites": "{count, plural, one {favoryt} other {favoriten}}",
|
||||||
"status.filter": "Dit berjocht filterje",
|
"status.filter": "Dit berjocht filterje",
|
||||||
@ -806,6 +815,7 @@
|
|||||||
"status.reblogs.empty": "Net ien hat dit berjocht noch boost. Wannear’t ien dit docht, falt dat hjir te sjen.",
|
"status.reblogs.empty": "Net ien hat dit berjocht noch boost. Wannear’t ien dit docht, falt dat hjir te sjen.",
|
||||||
"status.redraft": "Fuortsmite en opnij opstelle",
|
"status.redraft": "Fuortsmite en opnij opstelle",
|
||||||
"status.remove_bookmark": "Blêdwizer fuortsmite",
|
"status.remove_bookmark": "Blêdwizer fuortsmite",
|
||||||
|
"status.replied_in_thread": "Antwurde yn petear",
|
||||||
"status.replied_to": "Antwurde op {name}",
|
"status.replied_to": "Antwurde op {name}",
|
||||||
"status.reply": "Beäntwurdzje",
|
"status.reply": "Beäntwurdzje",
|
||||||
"status.replyAll": "Alle beäntwurdzje",
|
"status.replyAll": "Alle beäntwurdzje",
|
||||||
@ -843,6 +853,11 @@
|
|||||||
"upload_error.poll": "It opladen fan bestannen is yn enkêten net tastien.",
|
"upload_error.poll": "It opladen fan bestannen is yn enkêten net tastien.",
|
||||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||||
"upload_form.description": "Describe for the visually impaired",
|
"upload_form.description": "Describe for the visually impaired",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Druk op spaasje of Enter om in mediabylage op te pakken. Bruk de pylktoetsen om de bylage yn in bepaalde rjochting te ferpleatsen. Druk opnij op de spaasjebalke of Enter om de mediabylage op de nije posysje te pleatsen, of druk op Esc om te annulearjen.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "Slepen is annulearre. Mediabylage {item} is net ferpleatst.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "Mediabylage {item} is net ferpleatst.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "Mediabylage {item} is ferpleatst.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "Mediabylage {item} is oppakt.",
|
||||||
"upload_form.edit": "Bewurkje",
|
"upload_form.edit": "Bewurkje",
|
||||||
"upload_form.thumbnail": "Miniatuerôfbylding wizigje",
|
"upload_form.thumbnail": "Miniatuerôfbylding wizigje",
|
||||||
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
|
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Cuingeachadh ùine",
|
"alert.rate_limited.title": "Cuingeachadh ùine",
|
||||||
"alert.unexpected.message": "Thachair mearachd ris nach robh dùil.",
|
"alert.unexpected.message": "Thachair mearachd ris nach robh dùil.",
|
||||||
"alert.unexpected.title": "Oich!",
|
"alert.unexpected.title": "Oich!",
|
||||||
|
"alt_text_badge.title": "Roghainn teacsa",
|
||||||
"announcement.announcement": "Brath-fios",
|
"announcement.announcement": "Brath-fios",
|
||||||
"attachments_list.unprocessed": "(gun phròiseasadh)",
|
"attachments_list.unprocessed": "(gun phròiseasadh)",
|
||||||
"audio.hide": "Falaich an fhuaim",
|
"audio.hide": "Falaich an fhuaim",
|
||||||
@ -221,6 +222,8 @@
|
|||||||
"domain_block_modal.they_cant_follow": "Chan urrainn do neach sam bith a th’ air an fhrithealaiche seo do leantainn.",
|
"domain_block_modal.they_cant_follow": "Chan urrainn do neach sam bith a th’ air an fhrithealaiche seo do leantainn.",
|
||||||
"domain_block_modal.they_wont_know": "Cha bhi fios aca gun deach am bacadh.",
|
"domain_block_modal.they_wont_know": "Cha bhi fios aca gun deach am bacadh.",
|
||||||
"domain_block_modal.title": "A bheil thu airson an àrainn a bhacadh?",
|
"domain_block_modal.title": "A bheil thu airson an àrainn a bhacadh?",
|
||||||
|
"domain_block_modal.you_will_lose_num_followers": "Caillidh tu {followersCount, plural, one {{followersCountDisplay} neach-leantainn} two {{followersCountDisplay} luchd-leantainn} few {{followersCountDisplay} luchd-leantainn} other {{followersCountDisplay} luchd-leantainn}} ’s {followingCount, plural, one {{followingCountDisplay} neach a tha thu a’ leantainn} two {{followingCountDisplay} daoine a tha thu a’ leantainn} few {{followingCountDisplay} daoine a tha thu a’ leantainn} other {{followingCountDisplay} daoine a tha thu a’ leantainn}}.",
|
||||||
|
"domain_block_modal.you_will_lose_relationships": "Caillidh tu a h-uile luchd-leantainn ’s neach a leanas tu air an fhrithealaiche seo.",
|
||||||
"domain_block_modal.you_wont_see_posts": "Chan fhaic thu postaichean no brathan o chleachdaichean a th’ air an fhrithealaiche seo.",
|
"domain_block_modal.you_wont_see_posts": "Chan fhaic thu postaichean no brathan o chleachdaichean a th’ air an fhrithealaiche seo.",
|
||||||
"domain_pill.activitypub_lets_connect": "Leigidh e leat ceangal a dhèanamh ri daoine chan ann air Mastodon a-mhàin ach air feadh aplacaidean sòisealta eile cuideachd agus conaltradh leotha.",
|
"domain_pill.activitypub_lets_connect": "Leigidh e leat ceangal a dhèanamh ri daoine chan ann air Mastodon a-mhàin ach air feadh aplacaidean sòisealta eile cuideachd agus conaltradh leotha.",
|
||||||
"domain_pill.activitypub_like_language": "Tha ActivityPub coltach ri cànan a bhruidhneas Mastodon ri lìonraidhean sòisealta eile.",
|
"domain_pill.activitypub_like_language": "Tha ActivityPub coltach ri cànan a bhruidhneas Mastodon ri lìonraidhean sòisealta eile.",
|
||||||
@ -330,7 +333,7 @@
|
|||||||
"footer.about": "Mu dhèidhinn",
|
"footer.about": "Mu dhèidhinn",
|
||||||
"footer.directory": "Eòlaire nam pròifil",
|
"footer.directory": "Eòlaire nam pròifil",
|
||||||
"footer.get_app": "Faigh an aplacaid",
|
"footer.get_app": "Faigh an aplacaid",
|
||||||
"footer.invite": "Thoir cuireadh do dhaoine",
|
"footer.invite": "Thoir cuireadh",
|
||||||
"footer.keyboard_shortcuts": "Ath-ghoiridean a’ mheur-chlàir",
|
"footer.keyboard_shortcuts": "Ath-ghoiridean a’ mheur-chlàir",
|
||||||
"footer.privacy_policy": "Poileasaidh prìobhaideachd",
|
"footer.privacy_policy": "Poileasaidh prìobhaideachd",
|
||||||
"footer.source_code": "Seall am bun-tùs",
|
"footer.source_code": "Seall am bun-tùs",
|
||||||
@ -849,6 +852,11 @@
|
|||||||
"upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.",
|
"upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.",
|
||||||
"upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag",
|
"upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag",
|
||||||
"upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne",
|
"upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Airson ceanglachan meadhain a thogail, brùth air space no enter. Fhad ’ a bhios tu ’ga shlaodadh, cleachd na h-iuchraichean-saighde airson an ceanglachan meadhain a ghluasad gu comhair sam bith. Brùth air space no enter a-rithist airson an ceanglachen meadhain a leigeil às air an ionad ùr aige no brùth air escape airson sgur dheth.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "Chaidh sgur dhen t-slaodadh. Chaidh an ceanglachan meadhain {item} a leigeil às.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "Chaidh an ceanglachan meadhain {item} a leigeil às.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "Chaidh an ceanglachan meadhain {item} a ghluasad.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "Chaidh an ceanglachan meadhain {item} a thogail.",
|
||||||
"upload_form.edit": "Deasaich",
|
"upload_form.edit": "Deasaich",
|
||||||
"upload_form.thumbnail": "Atharraich an dealbhag",
|
"upload_form.thumbnail": "Atharraich an dealbhag",
|
||||||
"upload_form.video_description": "Mìnich e dhan fheadhainn le èisteachd bheag no cion-lèirsinne",
|
"upload_form.video_description": "Mìnich e dhan fheadhainn le èisteachd bheag no cion-lèirsinne",
|
||||||
|
@ -193,7 +193,7 @@
|
|||||||
"confirmations.reply.message": "Ao responder sobrescribirás a mensaxe que estás a compor. Tes a certeza de que queres continuar?",
|
"confirmations.reply.message": "Ao responder sobrescribirás a mensaxe que estás a compor. Tes a certeza de que queres continuar?",
|
||||||
"confirmations.reply.title": "Editar a publicación?",
|
"confirmations.reply.title": "Editar a publicación?",
|
||||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||||
"confirmations.unfollow.message": "Desexas deixar de seguir a {name}?",
|
"confirmations.unfollow.message": "Tes certeza de querer deixar de seguir a {name}?",
|
||||||
"confirmations.unfollow.title": "Deixar de seguir á usuaria?",
|
"confirmations.unfollow.title": "Deixar de seguir á usuaria?",
|
||||||
"content_warning.hide": "Agochar publicación",
|
"content_warning.hide": "Agochar publicación",
|
||||||
"content_warning.show": "Mostrar igualmente",
|
"content_warning.show": "Mostrar igualmente",
|
||||||
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Resposta privada",
|
"notification.label.private_reply": "Resposta privada",
|
||||||
"notification.label.reply": "Resposta",
|
"notification.label.reply": "Resposta",
|
||||||
"notification.mention": "Mención",
|
"notification.mention": "Mención",
|
||||||
|
"notification.mentioned_you": "{name} mencionoute",
|
||||||
"notification.moderation-warning.learn_more": "Saber máis",
|
"notification.moderation-warning.learn_more": "Saber máis",
|
||||||
"notification.moderation_warning": "Recibiches unha advertencia da moderación",
|
"notification.moderation_warning": "Recibiches unha advertencia da moderación",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Algunha das túas publicacións foron eliminadas.",
|
"notification.moderation_warning.action_delete_statuses": "Algunha das túas publicacións foron eliminadas.",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"about.blocks": "שרתים שנחסמו על ידי המנהלים",
|
"about.blocks": "שרתים מוגבלים",
|
||||||
"about.contact": "יצירת קשר:",
|
"about.contact": "יצירת קשר:",
|
||||||
"about.disclaimer": "מסטודון היא תוכנת קוד פתוח חינמית וסימן מסחרי של Mastodon gGmbH.",
|
"about.disclaimer": "מסטודון היא תוכנת קוד פתוח חינמית וסימן מסחרי של Mastodon gGmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "הסיבה אינה זמינה",
|
"about.domain_blocks.no_reason_available": "הסיבה אינה זמינה",
|
||||||
@ -34,9 +34,9 @@
|
|||||||
"account.follow_back": "לעקוב בחזרה",
|
"account.follow_back": "לעקוב בחזרה",
|
||||||
"account.followers": "עוקבים",
|
"account.followers": "עוקבים",
|
||||||
"account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.",
|
"account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.",
|
||||||
"account.followers_counter": "{count, plural,one {עוקב אחד} other {{count} עוקבים}}",
|
"account.followers_counter": "{count, plural,one {עוקב אחד} other {{counter} עוקבים}}",
|
||||||
"account.following": "נעקבים",
|
"account.following": "נעקבים",
|
||||||
"account.following_counter": "{count, plural,one {עוקב אחרי {count}}other {עוקב אחרי {count}}}",
|
"account.following_counter": "{count, plural,one {עוקב אחרי {count}}other {עוקב אחרי {counter}}}",
|
||||||
"account.follows.empty": "משתמש זה עדיין לא עוקב אחרי אף אחד.",
|
"account.follows.empty": "משתמש זה עדיין לא עוקב אחרי אף אחד.",
|
||||||
"account.go_to_profile": "מעבר לפרופיל",
|
"account.go_to_profile": "מעבר לפרופיל",
|
||||||
"account.hide_reblogs": "להסתיר הידהודים מאת @{name}",
|
"account.hide_reblogs": "להסתיר הידהודים מאת @{name}",
|
||||||
@ -62,7 +62,7 @@
|
|||||||
"account.requested_follow": "{name} ביקשו לעקוב אחריך",
|
"account.requested_follow": "{name} ביקשו לעקוב אחריך",
|
||||||
"account.share": "שתף את הפרופיל של @{name}",
|
"account.share": "שתף את הפרופיל של @{name}",
|
||||||
"account.show_reblogs": "הצג הדהודים מאת @{name}",
|
"account.show_reblogs": "הצג הדהודים מאת @{name}",
|
||||||
"account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}",
|
"account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}",
|
||||||
"account.unblock": "להסיר חסימה ל- @{name}",
|
"account.unblock": "להסיר חסימה ל- @{name}",
|
||||||
"account.unblock_domain": "הסירי את החסימה של קהילת {domain}",
|
"account.unblock_domain": "הסירי את החסימה של קהילת {domain}",
|
||||||
"account.unblock_short": "הסר חסימה",
|
"account.unblock_short": "הסר חסימה",
|
||||||
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "חלה הגבלה על קצב התעבורה",
|
"alert.rate_limited.title": "חלה הגבלה על קצב התעבורה",
|
||||||
"alert.unexpected.message": "אירעה שגיאה בלתי צפויה.",
|
"alert.unexpected.message": "אירעה שגיאה בלתי צפויה.",
|
||||||
"alert.unexpected.title": "אופס!",
|
"alert.unexpected.title": "אופס!",
|
||||||
|
"alt_text_badge.title": "כיתוב חלופי",
|
||||||
"announcement.announcement": "הכרזה",
|
"announcement.announcement": "הכרזה",
|
||||||
"attachments_list.unprocessed": "(לא מעובד)",
|
"attachments_list.unprocessed": "(לא מעובד)",
|
||||||
"audio.hide": "השתק",
|
"audio.hide": "השתק",
|
||||||
@ -221,6 +222,8 @@
|
|||||||
"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,one {יאבד לך עוקב אחד}other {יאבדו לך {followersCountDisplay} עוקבים}} {followingCount, plural,one {ונעקב אחד}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": "אקטיביטיפאב היא למעשה השפה בה מסטודון מדבר עם רשתות חברתיות אחרות.",
|
"domain_pill.activitypub_like_language": "אקטיביטיפאב היא למעשה השפה בה מסטודון מדבר עם רשתות חברתיות אחרות.",
|
||||||
@ -346,9 +349,9 @@
|
|||||||
"hashtag.column_settings.tag_mode.any": "לפחות אחד מאלה",
|
"hashtag.column_settings.tag_mode.any": "לפחות אחד מאלה",
|
||||||
"hashtag.column_settings.tag_mode.none": "אף אחד מאלה",
|
"hashtag.column_settings.tag_mode.none": "אף אחד מאלה",
|
||||||
"hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה",
|
"hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה",
|
||||||
"hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{count} משתתפיםות}}",
|
"hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{counter} משתתפיםות}}",
|
||||||
"hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}",
|
"hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}",
|
||||||
"hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}} היום",
|
"hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}} היום",
|
||||||
"hashtag.follow": "לעקוב אחרי תגית",
|
"hashtag.follow": "לעקוב אחרי תגית",
|
||||||
"hashtag.unfollow": "להפסיק לעקוב אחרי תגית",
|
"hashtag.unfollow": "להפסיק לעקוב אחרי תגית",
|
||||||
"hashtags.and_other": "…{count, plural,other {ועוד #}}",
|
"hashtags.and_other": "…{count, plural,other {ועוד #}}",
|
||||||
@ -439,7 +442,7 @@
|
|||||||
"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, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}",
|
"link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}",
|
||||||
"lists.account.add": "הוסף לרשימה",
|
"lists.account.add": "הוסף לרשימה",
|
||||||
"lists.account.remove": "הסר מרשימה",
|
"lists.account.remove": "הסר מרשימה",
|
||||||
"lists.delete": "מחיקת רשימה",
|
"lists.delete": "מחיקת רשימה",
|
||||||
@ -513,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "תשובה בפרטי",
|
"notification.label.private_reply": "תשובה בפרטי",
|
||||||
"notification.label.reply": "תשובה",
|
"notification.label.reply": "תשובה",
|
||||||
"notification.mention": "אזכור",
|
"notification.mention": "אזכור",
|
||||||
|
"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": "חלק מהודעותיך הוסרו.",
|
||||||
@ -837,7 +841,7 @@
|
|||||||
"time_remaining.minutes": "נותרו {number, plural, one {# דקה} other {# דקות}}",
|
"time_remaining.minutes": "נותרו {number, plural, one {# דקה} other {# דקות}}",
|
||||||
"time_remaining.moments": "רגעים נותרו",
|
"time_remaining.moments": "רגעים נותרו",
|
||||||
"time_remaining.seconds": "נותרו {number, plural, one {# שניה} other {# שניות}}",
|
"time_remaining.seconds": "נותרו {number, plural, one {# שניה} other {# שניות}}",
|
||||||
"trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{count} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}",
|
"trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{counter} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}",
|
||||||
"trends.trending_now": "נושאים חמים",
|
"trends.trending_now": "נושאים חמים",
|
||||||
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
|
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
|
||||||
"units.short.billion": "{count} מליארד",
|
"units.short.billion": "{count} מליארד",
|
||||||
@ -849,6 +853,11 @@
|
|||||||
"upload_error.poll": "לא ניתן להעלות קובץ עם סקר.",
|
"upload_error.poll": "לא ניתן להעלות קובץ עם סקר.",
|
||||||
"upload_form.audio_description": "תאר/י עבור לקויי שמיעה",
|
"upload_form.audio_description": "תאר/י עבור לקויי שמיעה",
|
||||||
"upload_form.description": "תיאור לכבדי ראיה",
|
"upload_form.description": "תיאור לכבדי ראיה",
|
||||||
|
"upload_form.drag_and_drop.instructions": "כדי לבחור קובץ מוצמד, יש ללחוץ על מקש רווח או אנטר. בעת הגרירה, השתמשו במקשי החיצים כדי להזיז את הקובץ המוצמד בכל כיוון. לחצו רווח או אנטר בשנית כדי לעזוב את הקובץ במקומו החדש, או לחצו אסקייפ לביטול.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "הגרירה בוטלה. קובץ המדיה {item} נעזב.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "קובץ המדיה {item} נעזב.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "קובץ המדיה {item} הוזז.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "קובץ המדיה {item} נבחר.",
|
||||||
"upload_form.edit": "עריכה",
|
"upload_form.edit": "עריכה",
|
||||||
"upload_form.thumbnail": "שנה/י תמונה ממוזערת",
|
"upload_form.thumbnail": "שנה/י תמונה ממוזערת",
|
||||||
"upload_form.video_description": "תאר/י עבור לקויי שמיעה ולקויי ראייה",
|
"upload_form.video_description": "תאר/י עבור לקויי שמיעה ולקויי ראייה",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Adatforgalom korlátozva",
|
"alert.rate_limited.title": "Adatforgalom korlátozva",
|
||||||
"alert.unexpected.message": "Váratlan hiba történt.",
|
"alert.unexpected.message": "Váratlan hiba történt.",
|
||||||
"alert.unexpected.title": "Hoppá!",
|
"alert.unexpected.title": "Hoppá!",
|
||||||
|
"alt_text_badge.title": "Helyettesítő szöveg",
|
||||||
"announcement.announcement": "Közlemény",
|
"announcement.announcement": "Közlemény",
|
||||||
"attachments_list.unprocessed": "(feldolgozatlan)",
|
"attachments_list.unprocessed": "(feldolgozatlan)",
|
||||||
"audio.hide": "Hang elrejtése",
|
"audio.hide": "Hang elrejtése",
|
||||||
@ -515,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Privát válasz",
|
"notification.label.private_reply": "Privát válasz",
|
||||||
"notification.label.reply": "Válasz",
|
"notification.label.reply": "Válasz",
|
||||||
"notification.mention": "Említés",
|
"notification.mention": "Említés",
|
||||||
|
"notification.mentioned_you": "{name} megemlített",
|
||||||
"notification.moderation-warning.learn_more": "További információ",
|
"notification.moderation-warning.learn_more": "További információ",
|
||||||
"notification.moderation_warning": "Moderációs figyelmeztetést kaptál",
|
"notification.moderation_warning": "Moderációs figyelmeztetést kaptál",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Néhány bejegyzésedet eltávolították.",
|
"notification.moderation_warning.action_delete_statuses": "Néhány bejegyzésedet eltávolították.",
|
||||||
@ -851,6 +853,11 @@
|
|||||||
"upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
|
"upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
|
||||||
"upload_form.audio_description": "Leírás siket vagy hallássérült emberek számára",
|
"upload_form.audio_description": "Leírás siket vagy hallássérült emberek számára",
|
||||||
"upload_form.description": "Leírás vak vagy gyengénlátó emberek számára",
|
"upload_form.description": "Leírás vak vagy gyengénlátó emberek számára",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Egy médiamelléklet kiválasztásához nyomj Szóközt vagy Entert. Húzás közben használd a nyílgombokat a médiamelléklet adott irányba történő mozgatásához. A médiamelléklet új pozícióba helyezéséhez nyomd meg a Szóközt vagy az Entert, vagy a megszakításhoz nyomd meg az Esc gombot.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "Az áthúzás megszakítva. A(z) {item} médiamelléklet el lett dobva.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "A(z) {item} médiamelléklet el lett dobva.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "A(z) {item} médiamelléklet át lett helyezve.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "A(z) {item} médiamelléklet fel lett véve.",
|
||||||
"upload_form.edit": "Szerkesztés",
|
"upload_form.edit": "Szerkesztés",
|
||||||
"upload_form.thumbnail": "Bélyegkép megváltoztatása",
|
"upload_form.thumbnail": "Bélyegkép megváltoztatása",
|
||||||
"upload_form.video_description": "Leírás siket, hallássérült, vak vagy gyengénlátó emberek számára",
|
"upload_form.video_description": "Leírás siket, hallássérült, vak vagy gyengénlátó emberek számára",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Með takmörkum",
|
"alert.rate_limited.title": "Með takmörkum",
|
||||||
"alert.unexpected.message": "Upp kom óvænt villa.",
|
"alert.unexpected.message": "Upp kom óvænt villa.",
|
||||||
"alert.unexpected.title": "Úbbs!",
|
"alert.unexpected.title": "Úbbs!",
|
||||||
|
"alt_text_badge.title": "Hjálpartexti mynda",
|
||||||
"announcement.announcement": "Auglýsing",
|
"announcement.announcement": "Auglýsing",
|
||||||
"attachments_list.unprocessed": "(óunnið)",
|
"attachments_list.unprocessed": "(óunnið)",
|
||||||
"audio.hide": "Fela hljóð",
|
"audio.hide": "Fela hljóð",
|
||||||
@ -433,6 +434,8 @@
|
|||||||
"lightbox.close": "Loka",
|
"lightbox.close": "Loka",
|
||||||
"lightbox.next": "Næsta",
|
"lightbox.next": "Næsta",
|
||||||
"lightbox.previous": "Fyrra",
|
"lightbox.previous": "Fyrra",
|
||||||
|
"lightbox.zoom_in": "Renna að raunstærð",
|
||||||
|
"lightbox.zoom_out": "Renna að svo passi",
|
||||||
"limited_account_hint.action": "Birta notandasniðið samt",
|
"limited_account_hint.action": "Birta notandasniðið samt",
|
||||||
"limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.",
|
"limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.",
|
||||||
"link_preview.author": "Frá {name}",
|
"link_preview.author": "Frá {name}",
|
||||||
@ -511,6 +514,7 @@
|
|||||||
"notification.label.private_reply": "Einkasvar",
|
"notification.label.private_reply": "Einkasvar",
|
||||||
"notification.label.reply": "Svara",
|
"notification.label.reply": "Svara",
|
||||||
"notification.mention": "Minnst á",
|
"notification.mention": "Minnst á",
|
||||||
|
"notification.mentioned_you": "{name} minntist á þig",
|
||||||
"notification.moderation-warning.learn_more": "Kanna nánar",
|
"notification.moderation-warning.learn_more": "Kanna nánar",
|
||||||
"notification.moderation_warning": "Þú hefur fengið aðvörun frá umsjónarmanni",
|
"notification.moderation_warning": "Þú hefur fengið aðvörun frá umsjónarmanni",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Sumar færslurnar þínar hafa verið fjarlægðar.",
|
"notification.moderation_warning.action_delete_statuses": "Sumar færslurnar þínar hafa verið fjarlægðar.",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Rispondi in privato",
|
"notification.label.private_reply": "Rispondi in privato",
|
||||||
"notification.label.reply": "Rispondi",
|
"notification.label.reply": "Rispondi",
|
||||||
"notification.mention": "Menziona",
|
"notification.mention": "Menziona",
|
||||||
|
"notification.mentioned_you": "{name} ti ha menzionato",
|
||||||
"notification.moderation-warning.learn_more": "Scopri di più",
|
"notification.moderation-warning.learn_more": "Scopri di più",
|
||||||
"notification.moderation_warning": "Hai ricevuto un avviso di moderazione",
|
"notification.moderation_warning": "Hai ricevuto un avviso di moderazione",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Alcuni dei tuoi post sono stati rimossi.",
|
"notification.moderation_warning.action_delete_statuses": "Alcuni dei tuoi post sono stati rimossi.",
|
||||||
@ -852,6 +853,11 @@
|
|||||||
"upload_error.poll": "Caricamento del file non consentito con i sondaggi.",
|
"upload_error.poll": "Caricamento del file non consentito con i sondaggi.",
|
||||||
"upload_form.audio_description": "Descrizione per persone con deficit uditivi",
|
"upload_form.audio_description": "Descrizione per persone con deficit uditivi",
|
||||||
"upload_form.description": "Descrizione per ipovedenti",
|
"upload_form.description": "Descrizione per ipovedenti",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Per selezionare un allegato multimediale, premi Spazio o Invio. Mentre trascini, usa i tasti con le frecce per spostare l'allegato multimediale in una qualsiasi direzione. Premi di nuovo Spazio o Invio per rilasciare l'allegato multimediale nella sua nuova posizione, oppure premi Esc per annullare.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "Il trascinamento è stato annullato. L'allegato multimediale {item} è stato eliminato.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "L'allegato multimediale {item} è stato eliminato.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "L'allegato multimediale {item} è stato spostato.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "L'allegato multimediale {item} è stato ricevuto.",
|
||||||
"upload_form.edit": "Modifica",
|
"upload_form.edit": "Modifica",
|
||||||
"upload_form.thumbnail": "Cambia la miniatura",
|
"upload_form.thumbnail": "Cambia la miniatura",
|
||||||
"upload_form.video_description": "Descrizione per persone con deficit uditivi o ipovedenti",
|
"upload_form.video_description": "Descrizione per persone con deficit uditivi o ipovedenti",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "制限に達しました",
|
"alert.rate_limited.title": "制限に達しました",
|
||||||
"alert.unexpected.message": "不明なエラーが発生しました。",
|
"alert.unexpected.message": "不明なエラーが発生しました。",
|
||||||
"alert.unexpected.title": "エラー!",
|
"alert.unexpected.title": "エラー!",
|
||||||
|
"alt_text_badge.title": "代替テキスト",
|
||||||
"announcement.announcement": "お知らせ",
|
"announcement.announcement": "お知らせ",
|
||||||
"attachments_list.unprocessed": "(未処理)",
|
"attachments_list.unprocessed": "(未処理)",
|
||||||
"audio.hide": "音声を閉じる",
|
"audio.hide": "音声を閉じる",
|
||||||
@ -513,6 +514,7 @@
|
|||||||
"notification.label.private_reply": "非公開の返信",
|
"notification.label.private_reply": "非公開の返信",
|
||||||
"notification.label.reply": "返信",
|
"notification.label.reply": "返信",
|
||||||
"notification.mention": "メンション",
|
"notification.mention": "メンション",
|
||||||
|
"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": "あなたによるいくつかの投稿が削除されました。",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"about.blocks": "Ulac agbur",
|
"about.blocks": "Iqeddacen yettwaɛassen",
|
||||||
"about.contact": "Anermis:",
|
"about.contact": "Anermis:",
|
||||||
"about.disclaimer": "Mastodon d aseɣẓan ilelli, d aseɣẓan n uɣbalu yeldin, d tnezzut n Mastodon gGmbH.",
|
"about.disclaimer": "Mastodon d aseɣẓan ilelli, d aseɣẓan n uɣbalu yeldin, d tnezzut n Mastodon gGmbH.",
|
||||||
"about.domain_blocks.no_reason_available": "Ulac taɣẓint",
|
"about.domain_blocks.no_reason_available": "Ulac taɣẓint",
|
||||||
@ -278,6 +278,8 @@
|
|||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} assa",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} assa",
|
||||||
"hashtag.follow": "Ḍfeṛ ahacṭag",
|
"hashtag.follow": "Ḍfeṛ ahacṭag",
|
||||||
"hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}",
|
"hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Tiririyin d-yusan deg iqeddacen nniḍen, yezmer ur d-ddant ara.",
|
||||||
|
"hints.threads.see_more": "Wali ugar n tririt deg {domain}",
|
||||||
"home.column_settings.show_reblogs": "Ssken-d beṭṭu",
|
"home.column_settings.show_reblogs": "Ssken-d beṭṭu",
|
||||||
"home.column_settings.show_replies": "Ssken-d tiririyin",
|
"home.column_settings.show_replies": "Ssken-d tiririyin",
|
||||||
"home.hide_announcements": "Ffer ulɣuyen",
|
"home.hide_announcements": "Ffer ulɣuyen",
|
||||||
@ -550,6 +552,7 @@
|
|||||||
"report_notification.attached_statuses": "{count, plural, one {{count} n tsuffeɣt} other {{count} n tsuffiɣin}} ttwaqnent",
|
"report_notification.attached_statuses": "{count, plural, one {{count} n tsuffeɣt} other {{count} n tsuffiɣin}} ttwaqnent",
|
||||||
"report_notification.categories.legal": "Azerfan",
|
"report_notification.categories.legal": "Azerfan",
|
||||||
"report_notification.categories.other": "Ayen nniḍen",
|
"report_notification.categories.other": "Ayen nniḍen",
|
||||||
|
"report_notification.categories.other_sentence": "ayen nniḍen",
|
||||||
"report_notification.categories.spam": "Aspam",
|
"report_notification.categories.spam": "Aspam",
|
||||||
"report_notification.categories.spam_sentence": "aspam",
|
"report_notification.categories.spam_sentence": "aspam",
|
||||||
"report_notification.open": "Ldi aneqqis",
|
"report_notification.open": "Ldi aneqqis",
|
||||||
@ -584,11 +587,13 @@
|
|||||||
"status.bookmark": "Creḍ",
|
"status.bookmark": "Creḍ",
|
||||||
"status.cancel_reblog_private": "Sefsex beṭṭu",
|
"status.cancel_reblog_private": "Sefsex beṭṭu",
|
||||||
"status.cannot_reblog": "Tasuffeɣt-a ur tezmir ara ad tettwabḍu tikelt-nniḍen",
|
"status.cannot_reblog": "Tasuffeɣt-a ur tezmir ara ad tettwabḍu tikelt-nniḍen",
|
||||||
|
"status.continued_thread": "Asqerdec yettkemmil",
|
||||||
"status.copy": "Nɣel assaɣ ɣer tasuffeɣt",
|
"status.copy": "Nɣel assaɣ ɣer tasuffeɣt",
|
||||||
"status.delete": "Kkes",
|
"status.delete": "Kkes",
|
||||||
"status.direct": "Bder-d @{name} weḥd-s",
|
"status.direct": "Bder-d @{name} weḥd-s",
|
||||||
"status.direct_indicator": "Abdar uslig",
|
"status.direct_indicator": "Abdar uslig",
|
||||||
"status.edit": "Ẓreg",
|
"status.edit": "Ẓreg",
|
||||||
|
"status.edited": "Taẓrigt taneggarut {date}",
|
||||||
"status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}",
|
"status.edited_x_times": "Tettwaẓreg {count, plural, one {{count} n tikkelt} other {{count} n tikkal}}",
|
||||||
"status.embed": "Awi-d tangalt n weslaɣ",
|
"status.embed": "Awi-d tangalt n weslaɣ",
|
||||||
"status.favourite": "Amenyaf",
|
"status.favourite": "Amenyaf",
|
||||||
@ -614,9 +619,10 @@
|
|||||||
"status.reblogs.empty": "Ula yiwen ur yebḍi tajewwiqt-agi ar tura. Ticki yebḍa-tt yiwen, ad d-iban da.",
|
"status.reblogs.empty": "Ula yiwen ur yebḍi tajewwiqt-agi ar tura. Ticki yebḍa-tt yiwen, ad d-iban da.",
|
||||||
"status.redraft": "Kkes tɛiwdeḍ tira",
|
"status.redraft": "Kkes tɛiwdeḍ tira",
|
||||||
"status.remove_bookmark": "Kkes tacreḍt",
|
"status.remove_bookmark": "Kkes tacreḍt",
|
||||||
|
"status.replied_in_thread": "Y·t·erra-d deg usqerdec",
|
||||||
"status.replied_to": "Y·terra-yas i {name}",
|
"status.replied_to": "Y·terra-yas i {name}",
|
||||||
"status.reply": "Err",
|
"status.reply": "Err",
|
||||||
"status.replyAll": "Err i lxiḍ",
|
"status.replyAll": "Err i wesqerdec",
|
||||||
"status.report": "Cetki ɣef @{name}",
|
"status.report": "Cetki ɣef @{name}",
|
||||||
"status.sensitive_warning": "Agbur amḥulfu",
|
"status.sensitive_warning": "Agbur amḥulfu",
|
||||||
"status.share": "Bḍu",
|
"status.share": "Bḍu",
|
||||||
|
@ -317,7 +317,7 @@
|
|||||||
"follow_suggestions.curated_suggestion": "스태프의 추천",
|
"follow_suggestions.curated_suggestion": "스태프의 추천",
|
||||||
"follow_suggestions.dismiss": "다시 보지 않기",
|
"follow_suggestions.dismiss": "다시 보지 않기",
|
||||||
"follow_suggestions.featured_longer": "{domain} 팀이 손수 고름",
|
"follow_suggestions.featured_longer": "{domain} 팀이 손수 고름",
|
||||||
"follow_suggestions.friends_of_friends_longer": "내가 팔로우 하는 사람들 사이에서 인기",
|
"follow_suggestions.friends_of_friends_longer": "내가 팔로우한 사람들 사이에서 인기",
|
||||||
"follow_suggestions.hints.featured": "이 프로필은 {domain} 팀이 손수 선택했습니다.",
|
"follow_suggestions.hints.featured": "이 프로필은 {domain} 팀이 손수 선택했습니다.",
|
||||||
"follow_suggestions.hints.friends_of_friends": "이 프로필은 내가 팔로우 하는 사람들에게서 유명합니다.",
|
"follow_suggestions.hints.friends_of_friends": "이 프로필은 내가 팔로우 하는 사람들에게서 유명합니다.",
|
||||||
"follow_suggestions.hints.most_followed": "이 프로필은 {domain}에서 가장 많이 팔로우 된 사람들 중 하나입니다.",
|
"follow_suggestions.hints.most_followed": "이 프로필은 {domain}에서 가장 많이 팔로우 된 사람들 중 하나입니다.",
|
||||||
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "개인 답글",
|
"notification.label.private_reply": "개인 답글",
|
||||||
"notification.label.reply": "답글",
|
"notification.label.reply": "답글",
|
||||||
"notification.mention": "멘션",
|
"notification.mention": "멘션",
|
||||||
|
"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": "게시물 몇 개가 삭제되었습니다.",
|
||||||
@ -766,10 +767,10 @@
|
|||||||
"server_banner.about_active_users": "30일 동안 이 서버를 사용한 사람들 (월간 활성 이용자)",
|
"server_banner.about_active_users": "30일 동안 이 서버를 사용한 사람들 (월간 활성 이용자)",
|
||||||
"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.follow_anyone": "연합우주를 통해 누구든지 팔로우하고 시간순으로 게시물을 받아보세요. 알고리즘도, 광고도, 클릭을 유도하는 것들도 없습니다.",
|
||||||
"sign_in_banner.mastodon_is": "마스토돈은 무엇이 일어나는지 받아보는 가장 좋은 수단입니다.",
|
"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": "로그인 또는 가입하기",
|
||||||
|
@ -504,22 +504,23 @@
|
|||||||
"notification.admin.report_statuses": "{name} rapporteerde {target} voor {category}",
|
"notification.admin.report_statuses": "{name} rapporteerde {target} voor {category}",
|
||||||
"notification.admin.report_statuses_other": "{name} rapporteerde {target}",
|
"notification.admin.report_statuses_other": "{name} rapporteerde {target}",
|
||||||
"notification.admin.sign_up": "{name} heeft zich geregistreerd",
|
"notification.admin.sign_up": "{name} heeft zich geregistreerd",
|
||||||
"notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben zich geregistreerd",
|
"notification.admin.sign_up.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben zich geregistreerd",
|
||||||
"notification.favourite": "{name} markeerde jouw bericht als favoriet",
|
"notification.favourite": "{name} markeerde jouw bericht als favoriet",
|
||||||
"notification.favourite.name_and_others_with_link": "{name} en <a>{count, plural, one {# ander} other {# anderen}}</a> hebben jouw bericht als favoriet gemarkeerd",
|
"notification.favourite.name_and_others_with_link": "{name} en <a>{count, plural, one {# ander persoon} other {# andere personen}}</a> hebben jouw bericht als favoriet gemarkeerd",
|
||||||
"notification.follow": "{name} volgt jou nu",
|
"notification.follow": "{name} volgt jou nu",
|
||||||
"notification.follow.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben je gevolgd",
|
"notification.follow.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben je gevolgd",
|
||||||
"notification.follow_request": "{name} wil jou graag volgen",
|
"notification.follow_request": "{name} wil jou graag volgen",
|
||||||
"notification.follow_request.name_and_others": "{name} en {count, plural, one {# ander} other {# anderen}} hebben gevraagd om je te volgen",
|
"notification.follow_request.name_and_others": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben gevraagd om je te volgen",
|
||||||
"notification.label.mention": "Vermelding",
|
"notification.label.mention": "Vermelding",
|
||||||
"notification.label.private_mention": "Privébericht",
|
"notification.label.private_mention": "Privébericht",
|
||||||
"notification.label.private_reply": "Privéreactie",
|
"notification.label.private_reply": "Privéreactie",
|
||||||
"notification.label.reply": "Reactie",
|
"notification.label.reply": "Reactie",
|
||||||
"notification.mention": "Vermelding",
|
"notification.mention": "Vermelding",
|
||||||
|
"notification.mentioned_you": "Je bent vermeld door {name}",
|
||||||
"notification.moderation-warning.learn_more": "Meer informatie",
|
"notification.moderation-warning.learn_more": "Meer informatie",
|
||||||
"notification.moderation_warning": "Je hebt een moderatie-waarschuwing ontvangen",
|
"notification.moderation_warning": "Je hebt een moderatie-waarschuwing ontvangen",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Sommige van je berichten zijn verwijderd.",
|
"notification.moderation_warning.action_delete_statuses": "Sommige van je berichten zijn verwijderd.",
|
||||||
"notification.moderation_warning.action_disable": "Je account is uitgeschakeld.",
|
"notification.moderation_warning.action_disable": "Jouw account is uitgeschakeld.",
|
||||||
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Sommige van je berichten zijn gemarkeerd als gevoelig.",
|
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Sommige van je berichten zijn gemarkeerd als gevoelig.",
|
||||||
"notification.moderation_warning.action_none": "Jouw account heeft een moderatie-waarschuwing ontvangen.",
|
"notification.moderation_warning.action_none": "Jouw account heeft een moderatie-waarschuwing ontvangen.",
|
||||||
"notification.moderation_warning.action_sensitive": "Je berichten worden vanaf nu als gevoelig gemarkeerd.",
|
"notification.moderation_warning.action_sensitive": "Je berichten worden vanaf nu als gevoelig gemarkeerd.",
|
||||||
@ -528,14 +529,14 @@
|
|||||||
"notification.own_poll": "Jouw peiling is beëindigd",
|
"notification.own_poll": "Jouw peiling is beëindigd",
|
||||||
"notification.poll": "Een peiling waaraan jij hebt meegedaan is beëindigd",
|
"notification.poll": "Een peiling waaraan jij hebt meegedaan is beëindigd",
|
||||||
"notification.reblog": "{name} boostte jouw bericht",
|
"notification.reblog": "{name} boostte jouw bericht",
|
||||||
"notification.reblog.name_and_others_with_link": "{name} en <a>{count, plural, one {# ander} other {# anderen}}</a> hebben jouw bericht geboost",
|
"notification.reblog.name_and_others_with_link": "{name} en <a>{count, plural, one {# ander persoon} other {# andere personen}}</a> hebben jouw bericht geboost",
|
||||||
"notification.relationships_severance_event": "Verloren verbindingen met {name}",
|
"notification.relationships_severance_event": "Verloren verbindingen met {name}",
|
||||||
"notification.relationships_severance_event.account_suspension": "Een beheerder van {from} heeft {target} geschorst, wat betekent dat je geen updates meer van hen kunt ontvangen of met hen kunt communiceren.",
|
"notification.relationships_severance_event.account_suspension": "Een beheerder van {from} heeft {target} geschorst, wat betekent dat je geen updates meer van hen kunt ontvangen of met hen kunt communiceren.",
|
||||||
"notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt.",
|
"notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt.",
|
||||||
"notification.relationships_severance_event.learn_more": "Meer informatie",
|
"notification.relationships_severance_event.learn_more": "Meer informatie",
|
||||||
"notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt, bent verloren.",
|
"notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt, bent verloren.",
|
||||||
"notification.status": "{name} heeft zojuist een bericht geplaatst",
|
"notification.status": "{name} heeft zojuist een bericht geplaatst",
|
||||||
"notification.update": "{name} heeft een bericht bewerkt",
|
"notification.update": "{name} bewerkte een bericht",
|
||||||
"notification_requests.accept": "Accepteren",
|
"notification_requests.accept": "Accepteren",
|
||||||
"notification_requests.accept_multiple": "{count, plural, one {# verzoek accepteren…} other {# verzoeken accepteren…}}",
|
"notification_requests.accept_multiple": "{count, plural, one {# verzoek accepteren…} other {# verzoeken accepteren…}}",
|
||||||
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Verzoek accepteren} other {Verzoeken accepteren}}",
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Verzoek accepteren} other {Verzoeken accepteren}}",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Privat svar",
|
"notification.label.private_reply": "Privat svar",
|
||||||
"notification.label.reply": "Svar",
|
"notification.label.reply": "Svar",
|
||||||
"notification.mention": "Omtale",
|
"notification.mention": "Omtale",
|
||||||
|
"notification.mentioned_you": "{name} nemnde deg",
|
||||||
"notification.moderation-warning.learn_more": "Lær meir",
|
"notification.moderation-warning.learn_more": "Lær meir",
|
||||||
"notification.moderation_warning": "Du har mottatt ei moderasjonsåtvaring",
|
"notification.moderation_warning": "Du har mottatt ei moderasjonsåtvaring",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Nokre av innlegga dine har blitt fjerna.",
|
"notification.moderation_warning.action_delete_statuses": "Nokre av innlegga dine har blitt fjerna.",
|
||||||
|
@ -502,6 +502,8 @@
|
|||||||
"notification.reblog": "{name} fremhevet ditt innlegg",
|
"notification.reblog": "{name} fremhevet ditt innlegg",
|
||||||
"notification.status": "{name} la nettopp ut",
|
"notification.status": "{name} la nettopp ut",
|
||||||
"notification.update": "{name} redigerte et innlegg",
|
"notification.update": "{name} redigerte et innlegg",
|
||||||
|
"notification_requests.minimize_banner": "Minimer banneret for filtrerte varsler",
|
||||||
|
"notification_requests.view": "Vis varsler",
|
||||||
"notifications.clear": "Fjern varsler",
|
"notifications.clear": "Fjern varsler",
|
||||||
"notifications.clear_confirmation": "Er du sikker på at du vil fjerne alle dine varsler permanent?",
|
"notifications.clear_confirmation": "Er du sikker på at du vil fjerne alle dine varsler permanent?",
|
||||||
"notifications.column_settings.admin.report": "Nye rapporter:",
|
"notifications.column_settings.admin.report": "Nye rapporter:",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Odpowiedź prywatna",
|
"notification.label.private_reply": "Odpowiedź prywatna",
|
||||||
"notification.label.reply": "Odpowiedź",
|
"notification.label.reply": "Odpowiedź",
|
||||||
"notification.mention": "Wzmianka",
|
"notification.mention": "Wzmianka",
|
||||||
|
"notification.mentioned_you": "{name} wspomniał(a) o Tobie",
|
||||||
"notification.moderation-warning.learn_more": "Dowiedz się więcej",
|
"notification.moderation-warning.learn_more": "Dowiedz się więcej",
|
||||||
"notification.moderation_warning": "Otrzymałeś/-łaś ostrzeżenie moderacyjne",
|
"notification.moderation_warning": "Otrzymałeś/-łaś ostrzeżenie moderacyjne",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Niektóre twoje wpisy zostały usunięte.",
|
"notification.moderation_warning.action_delete_statuses": "Niektóre twoje wpisy zostały usunięte.",
|
||||||
|
@ -437,6 +437,7 @@
|
|||||||
"lightbox.next": "Próximo",
|
"lightbox.next": "Próximo",
|
||||||
"lightbox.previous": "Anterior",
|
"lightbox.previous": "Anterior",
|
||||||
"lightbox.zoom_in": "Voltar para o tamanho real",
|
"lightbox.zoom_in": "Voltar para o tamanho real",
|
||||||
|
"lightbox.zoom_out": "Zoom para ajustar",
|
||||||
"limited_account_hint.action": "Exibir perfil mesmo assim",
|
"limited_account_hint.action": "Exibir perfil mesmo assim",
|
||||||
"limited_account_hint.title": "Este perfil foi ocultado pelos moderadores do {domain}.",
|
"limited_account_hint.title": "Este perfil foi ocultado pelos moderadores do {domain}.",
|
||||||
"link_preview.author": "Por {name}",
|
"link_preview.author": "Por {name}",
|
||||||
@ -515,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Resposta privada",
|
"notification.label.private_reply": "Resposta privada",
|
||||||
"notification.label.reply": "Resposta",
|
"notification.label.reply": "Resposta",
|
||||||
"notification.mention": "Menção",
|
"notification.mention": "Menção",
|
||||||
|
"notification.mentioned_you": "{name} te mencionou",
|
||||||
"notification.moderation-warning.learn_more": "Aprender mais",
|
"notification.moderation-warning.learn_more": "Aprender mais",
|
||||||
"notification.moderation_warning": "Você recebeu um aviso de moderação",
|
"notification.moderation_warning": "Você recebeu um aviso de moderação",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.",
|
"notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.",
|
||||||
@ -813,7 +815,7 @@
|
|||||||
"status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.",
|
"status.reblogs.empty": "Nada aqui. Quando alguém der boost, o usuário aparecerá aqui.",
|
||||||
"status.redraft": "Excluir e rascunhar",
|
"status.redraft": "Excluir e rascunhar",
|
||||||
"status.remove_bookmark": "Remover do Salvos",
|
"status.remove_bookmark": "Remover do Salvos",
|
||||||
"status.replied_in_thread": "Respondido na discussão",
|
"status.replied_in_thread": "Respondido na conversa",
|
||||||
"status.replied_to": "Em resposta a {name}",
|
"status.replied_to": "Em resposta a {name}",
|
||||||
"status.reply": "Responder",
|
"status.reply": "Responder",
|
||||||
"status.replyAll": "Responder a conversa",
|
"status.replyAll": "Responder a conversa",
|
||||||
@ -851,6 +853,11 @@
|
|||||||
"upload_error.poll": "Mídias não podem ser anexadas em toots com enquetes.",
|
"upload_error.poll": "Mídias não podem ser anexadas em toots com enquetes.",
|
||||||
"upload_form.audio_description": "Descrever para deficientes auditivos",
|
"upload_form.audio_description": "Descrever para deficientes auditivos",
|
||||||
"upload_form.description": "Descrever para deficientes visuais",
|
"upload_form.description": "Descrever para deficientes visuais",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Para pegar um anexo de mídia, pressione espaço ou enter. Enquanto arrastar, use as setas do teclado para mover o anexo de mídia em qualquer direção. Pressione espaço ou insira novamente para soltar o anexo de mídia em sua nova posição, ou pressione escape para cancelar.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "O arrastamento foi cancelado. O anexo da mídia {item} foi descartado.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "O anexo {item} foi removido.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "O anexo de mídia {item} foi movido.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "Foi coletado o anexo de mídia {item}.",
|
||||||
"upload_form.edit": "Editar",
|
"upload_form.edit": "Editar",
|
||||||
"upload_form.thumbnail": "Alterar miniatura",
|
"upload_form.thumbnail": "Alterar miniatura",
|
||||||
"upload_form.video_description": "Descrever para deficientes auditivos ou visuais",
|
"upload_form.video_description": "Descrever para deficientes auditivos ou visuais",
|
||||||
|
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Màssimu de rechestas barigadu",
|
"alert.rate_limited.title": "Màssimu de rechestas barigadu",
|
||||||
"alert.unexpected.message": "Ddoe est istada una faddina.",
|
"alert.unexpected.message": "Ddoe est istada una faddina.",
|
||||||
"alert.unexpected.title": "Oh!",
|
"alert.unexpected.title": "Oh!",
|
||||||
|
"alt_text_badge.title": "Testu alternativu",
|
||||||
"announcement.announcement": "Annùntziu",
|
"announcement.announcement": "Annùntziu",
|
||||||
"attachments_list.unprocessed": "(non protzessadu)",
|
"attachments_list.unprocessed": "(non protzessadu)",
|
||||||
"audio.hide": "Cua s'àudio",
|
"audio.hide": "Cua s'àudio",
|
||||||
@ -97,6 +98,8 @@
|
|||||||
"block_modal.title": "Boles blocare s'utente?",
|
"block_modal.title": "Boles blocare s'utente?",
|
||||||
"block_modal.you_wont_see_mentions": "No as a bìdere is publicatziones chi mèntovent custa persone.",
|
"block_modal.you_wont_see_mentions": "No as a bìdere is publicatziones chi mèntovent custa persone.",
|
||||||
"boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit",
|
"boost_modal.combo": "Podes incarcare {combo} pro brincare custu sa borta chi benit",
|
||||||
|
"boost_modal.reblog": "Boles potentziare sa publicatzione?",
|
||||||
|
"boost_modal.undo_reblog": "Boles tzessare de potentziare sa publicatzione?",
|
||||||
"bundle_column_error.copy_stacktrace": "Còpia s'informe de faddina",
|
"bundle_column_error.copy_stacktrace": "Còpia s'informe de faddina",
|
||||||
"bundle_column_error.error.body": "Sa pàgina pedida non faghiat a dda renderizare. Diat pòdere èssere pro neghe de una faddina in su còdighe nostru, o de unu problema de cumpatibilidade de su navigadore.",
|
"bundle_column_error.error.body": "Sa pàgina pedida non faghiat a dda renderizare. Diat pòdere èssere pro neghe de una faddina in su còdighe nostru, o de unu problema de cumpatibilidade de su navigadore.",
|
||||||
"bundle_column_error.error.title": "Oh, no!",
|
"bundle_column_error.error.title": "Oh, no!",
|
||||||
@ -104,11 +107,15 @@
|
|||||||
"bundle_column_error.network.title": "Faddina de connessione",
|
"bundle_column_error.network.title": "Faddina de connessione",
|
||||||
"bundle_column_error.retry": "Torra·bi a proare",
|
"bundle_column_error.retry": "Torra·bi a proare",
|
||||||
"bundle_column_error.return": "Torra a sa pàgina printzipale",
|
"bundle_column_error.return": "Torra a sa pàgina printzipale",
|
||||||
|
"bundle_column_error.routing.body": "Impossìbile agatare sa pàgina rechesta. Seguru chi s'URL in sa barra de indiritzos est curretu?",
|
||||||
"bundle_column_error.routing.title": "404",
|
"bundle_column_error.routing.title": "404",
|
||||||
"bundle_modal_error.close": "Serra",
|
"bundle_modal_error.close": "Serra",
|
||||||
"bundle_modal_error.message": "Faddina in su carrigamentu de custu cumponente.",
|
"bundle_modal_error.message": "Faddina in su carrigamentu de custu cumponente.",
|
||||||
"bundle_modal_error.retry": "Torra·bi a proare",
|
"bundle_modal_error.retry": "Torra·bi a proare",
|
||||||
|
"closed_registrations.other_server_instructions": "Dae chi Mastodon est detzentralizadu, podes creare unu contu in un'àteru serbidore e interagire cun custu.",
|
||||||
|
"closed_registrations_modal.description": "Sa creatzione de contos in {domain} no est possìbile in custu momentu, però tene in cunsideru chi non tenes bisòngiu de unu contu ispetzìficu in {domain} pro impreare Mastodon.",
|
||||||
"closed_registrations_modal.find_another_server": "Agata un'àteru serbidore",
|
"closed_registrations_modal.find_another_server": "Agata un'àteru serbidore",
|
||||||
|
"closed_registrations_modal.title": "Su registru a Mastodon",
|
||||||
"column.about": "Informatziones",
|
"column.about": "Informatziones",
|
||||||
"column.blocks": "Persones blocadas",
|
"column.blocks": "Persones blocadas",
|
||||||
"column.bookmarks": "Sinnalibros",
|
"column.bookmarks": "Sinnalibros",
|
||||||
@ -142,6 +149,7 @@
|
|||||||
"compose.published.open": "Aberi",
|
"compose.published.open": "Aberi",
|
||||||
"compose.saved.body": "Publicatzione sarvada.",
|
"compose.saved.body": "Publicatzione sarvada.",
|
||||||
"compose_form.direct_message_warning_learn_more": "Àteras informatziones",
|
"compose_form.direct_message_warning_learn_more": "Àteras informatziones",
|
||||||
|
"compose_form.encryption_warning": "Is publicatziones a Mastodon no sunt critografados a nodu terminale. Non cumpartzas informatziones delicadas in Mastodon.",
|
||||||
"compose_form.hashtag_warning": "Custa publicatzione no at a èssere ammustrada in peruna eticheta, dae chi no est pùblica. Isceti is publicatziones pùblicas podent èssere chircadas cun etichetas.",
|
"compose_form.hashtag_warning": "Custa publicatzione no at a èssere ammustrada in peruna eticheta, dae chi no est pùblica. Isceti is publicatziones pùblicas podent èssere chircadas cun etichetas.",
|
||||||
"compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.",
|
"compose_form.lock_disclaimer": "Su contu tuo no est {locked}. Cale si siat persone ti podet sighire pro bìdere is messàgios tuos chi imbies a sa gente chi ti sighit.",
|
||||||
"compose_form.lock_disclaimer.lock": "blocadu",
|
"compose_form.lock_disclaimer.lock": "blocadu",
|
||||||
@ -171,15 +179,23 @@
|
|||||||
"confirmations.discard_edit_media.confirm": "Iscarta",
|
"confirmations.discard_edit_media.confirm": "Iscarta",
|
||||||
"confirmations.discard_edit_media.message": "Tenes modìficas non sarvadas a is descritziones o a is anteprimas de is cuntenutos, ddas boles iscartare su matessi?",
|
"confirmations.discard_edit_media.message": "Tenes modìficas non sarvadas a is descritziones o a is anteprimas de is cuntenutos, ddas boles iscartare su matessi?",
|
||||||
"confirmations.edit.confirm": "Modìfica",
|
"confirmations.edit.confirm": "Modìfica",
|
||||||
|
"confirmations.edit.message": "Modifichende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?",
|
||||||
|
"confirmations.edit.title": "Boles subraiscrìere sa publicatzione?",
|
||||||
"confirmations.logout.confirm": "Essi·nche",
|
"confirmations.logout.confirm": "Essi·nche",
|
||||||
"confirmations.logout.message": "Seguru chi boles essire?",
|
"confirmations.logout.message": "Seguru chi boles essire?",
|
||||||
|
"confirmations.logout.title": "Boles serrare sa sessione?",
|
||||||
"confirmations.mute.confirm": "A sa muda",
|
"confirmations.mute.confirm": "A sa muda",
|
||||||
"confirmations.redraft.confirm": "Cantzella e torra a fàghere",
|
"confirmations.redraft.confirm": "Cantzella e torra a fàghere",
|
||||||
"confirmations.redraft.message": "Seguru chi boles cantzellare e torrare a fàghere custa publicatzione? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.",
|
"confirmations.redraft.message": "Seguru chi boles cantzellare e torrare a fàghere custa publicatzione? As a pèrdere is preferidos e is cumpartziduras, e is rispostas a su messàgiu originale ant a abarrare òrfanas.",
|
||||||
|
"confirmations.redraft.title": "Boles cantzellare e torrare a iscrìere sa publicatzione?",
|
||||||
"confirmations.reply.confirm": "Risponde",
|
"confirmations.reply.confirm": "Risponde",
|
||||||
"confirmations.reply.message": "Rispondende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?",
|
"confirmations.reply.message": "Rispondende immoe as a subrascrìere su messàgiu chi ses iscriende. Seguru chi boles sighire?",
|
||||||
|
"confirmations.reply.title": "Boles subraiscrìere sa publicatzione?",
|
||||||
"confirmations.unfollow.confirm": "Non sigas prus",
|
"confirmations.unfollow.confirm": "Non sigas prus",
|
||||||
"confirmations.unfollow.message": "Seguru chi non boles sighire prus a {name}?",
|
"confirmations.unfollow.message": "Seguru chi non boles sighire prus a {name}?",
|
||||||
|
"confirmations.unfollow.title": "Boles tzessare de sighire s'utente?",
|
||||||
|
"content_warning.hide": "Cua sa publicatzione",
|
||||||
|
"content_warning.show": "Ammustra·dda su pròpiu",
|
||||||
"conversation.delete": "Cantzella arresonada",
|
"conversation.delete": "Cantzella arresonada",
|
||||||
"conversation.mark_as_read": "Signala comente lèghidu",
|
"conversation.mark_as_read": "Signala comente lèghidu",
|
||||||
"conversation.open": "Ammustra arresonada",
|
"conversation.open": "Ammustra arresonada",
|
||||||
@ -193,7 +209,10 @@
|
|||||||
"directory.recently_active": "Cun atividade dae pagu",
|
"directory.recently_active": "Cun atividade dae pagu",
|
||||||
"disabled_account_banner.account_settings": "Cunfiguratziones de su contu",
|
"disabled_account_banner.account_settings": "Cunfiguratziones de su contu",
|
||||||
"disabled_account_banner.text": "Su contu tuo {disabledAccount} no est ativu.",
|
"disabled_account_banner.text": "Su contu tuo {disabledAccount} no est ativu.",
|
||||||
|
"dismissable_banner.community_timeline": "Custas sunt is publicatziones pùblicas prus reghentes dae gente cun contu in {domain}.",
|
||||||
"dismissable_banner.dismiss": "Iscarta",
|
"dismissable_banner.dismiss": "Iscarta",
|
||||||
|
"dismissable_banner.explore_links": "Custas sunt is istòrias de noas prus cumpartzidas in sa rete oe. Is istòrias prus noas publicadas dae gente prus diversa ant a èssere priorizadas.",
|
||||||
|
"dismissable_banner.explore_statuses": "Custas sunt publicatziones dae sa rete detzentralizada chi sunt retzende atentzione oe. Is publicatziones prus noas cun prus cumpartziduras e preferèntzias ant a èssere priorizadas.",
|
||||||
"domain_block_modal.block": "Bloca su serbidore",
|
"domain_block_modal.block": "Bloca su serbidore",
|
||||||
"domain_block_modal.block_account_instead": "Bloca imbetzes a @{name}",
|
"domain_block_modal.block_account_instead": "Bloca imbetzes a @{name}",
|
||||||
"domain_block_modal.they_can_interact_with_old_posts": "Is persones de custu serbidore podent ancora interagire cun is publicatziones betzas tuas.",
|
"domain_block_modal.they_can_interact_with_old_posts": "Is persones de custu serbidore podent ancora interagire cun is publicatziones betzas tuas.",
|
||||||
@ -207,6 +226,7 @@
|
|||||||
"domain_pill.their_handle": "S'identificadore suo:",
|
"domain_pill.their_handle": "S'identificadore suo:",
|
||||||
"domain_pill.their_server": "Sa domo digitale sua, in ue istant totu is publicatziones suas.",
|
"domain_pill.their_server": "Sa domo digitale sua, in ue istant totu is publicatziones suas.",
|
||||||
"domain_pill.username": "Nòmine de utente",
|
"domain_pill.username": "Nòmine de utente",
|
||||||
|
"domain_pill.whats_in_a_handle": "Ite est un'identificadore?",
|
||||||
"domain_pill.your_handle": "S'identificadore tuo:",
|
"domain_pill.your_handle": "S'identificadore tuo:",
|
||||||
"domain_pill.your_server": "Sa domo digitale tua, in ue istant totu is publicatziones tuas. Custa non t'agradat? Tràmuda serbidore in cale si siat momentu e bati·ti fintzas in fatu is sighidores tuos.",
|
"domain_pill.your_server": "Sa domo digitale tua, in ue istant totu is publicatziones tuas. Custa non t'agradat? Tràmuda serbidore in cale si siat momentu e bati·ti fintzas in fatu is sighidores tuos.",
|
||||||
"domain_pill.your_username": "S'identificadore ùnicu tuo in custu serbidore. Si podent agatare utentes cun su matessi nòmine de utente in àteros serbidores.",
|
"domain_pill.your_username": "S'identificadore ùnicu tuo in custu serbidore. Si podent agatare utentes cun su matessi nòmine de utente in àteros serbidores.",
|
||||||
@ -254,6 +274,7 @@
|
|||||||
"explore.trending_links": "Noas",
|
"explore.trending_links": "Noas",
|
||||||
"explore.trending_statuses": "Publicatziones",
|
"explore.trending_statuses": "Publicatziones",
|
||||||
"explore.trending_tags": "Etichetas",
|
"explore.trending_tags": "Etichetas",
|
||||||
|
"filter_modal.added.context_mismatch_title": "Su cuntestu non currispondet.",
|
||||||
"filter_modal.added.expired_title": "Filtru iscadidu.",
|
"filter_modal.added.expired_title": "Filtru iscadidu.",
|
||||||
"filter_modal.added.review_and_configure_title": "Cunfiguratziones de filtru",
|
"filter_modal.added.review_and_configure_title": "Cunfiguratziones de filtru",
|
||||||
"filter_modal.added.settings_link": "pàgina de cunfiguratzione",
|
"filter_modal.added.settings_link": "pàgina de cunfiguratzione",
|
||||||
@ -277,7 +298,13 @@
|
|||||||
"follow_suggestions.featured_longer": "Seberadu a manu dae s'iscuadra de {domain}",
|
"follow_suggestions.featured_longer": "Seberadu a manu dae s'iscuadra de {domain}",
|
||||||
"follow_suggestions.friends_of_friends_longer": "Populare intre persones chi sighis",
|
"follow_suggestions.friends_of_friends_longer": "Populare intre persones chi sighis",
|
||||||
"follow_suggestions.hints.featured": "Custu profilu est istadu seberadu a manu dae s'iscuadra {domain}.",
|
"follow_suggestions.hints.featured": "Custu profilu est istadu seberadu a manu dae s'iscuadra {domain}.",
|
||||||
|
"follow_suggestions.personalized_suggestion": "Cussìgiu personalizadu",
|
||||||
|
"follow_suggestions.popular_suggestion": "Cussìgiu populare",
|
||||||
|
"follow_suggestions.popular_suggestion_longer": "Populare a {domain}",
|
||||||
|
"follow_suggestions.similar_to_recently_followed_longer": "Profilos sìmiles a is chi as sighidu de reghente",
|
||||||
"follow_suggestions.view_all": "Ammustra totu",
|
"follow_suggestions.view_all": "Ammustra totu",
|
||||||
|
"follow_suggestions.who_to_follow": "Chie sighire",
|
||||||
|
"followed_tags": "Etichetas sighidas",
|
||||||
"footer.about": "Informatziones",
|
"footer.about": "Informatziones",
|
||||||
"footer.directory": "Diretòriu de profilos",
|
"footer.directory": "Diretòriu de profilos",
|
||||||
"footer.get_app": "Otene s'aplicatzione",
|
"footer.get_app": "Otene s'aplicatzione",
|
||||||
@ -302,6 +329,11 @@
|
|||||||
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}} oe",
|
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}} oe",
|
||||||
"hashtag.follow": "Sighi su hashtag",
|
"hashtag.follow": "Sighi su hashtag",
|
||||||
"hashtag.unfollow": "Non sigas prus s'eticheta",
|
"hashtag.unfollow": "Non sigas prus s'eticheta",
|
||||||
|
"hashtags.and_other": "… e {count, plural, one {un'àteru} other {àteros #}}",
|
||||||
|
"hints.profiles.posts_may_be_missing": "Podet èssere chi ammanchent tzertas publicatziones de custu profilu.",
|
||||||
|
"hints.profiles.see_more_posts": "Bide prus publicatziones a {domain}",
|
||||||
|
"hints.threads.replies_may_be_missing": "Podet èssere chi ammanchent rispostas dae àteros serbidores.",
|
||||||
|
"hints.threads.see_more": "Bide prus rispostas a {domain}",
|
||||||
"home.column_settings.show_reblogs": "Ammustra is cumpartziduras",
|
"home.column_settings.show_reblogs": "Ammustra is cumpartziduras",
|
||||||
"home.column_settings.show_replies": "Ammustra rispostas",
|
"home.column_settings.show_replies": "Ammustra rispostas",
|
||||||
"home.hide_announcements": "Cua annùntzios",
|
"home.hide_announcements": "Cua annùntzios",
|
||||||
@ -309,7 +341,14 @@
|
|||||||
"home.pending_critical_update.link": "Ammustra is atualizatziones",
|
"home.pending_critical_update.link": "Ammustra is atualizatziones",
|
||||||
"home.pending_critical_update.title": "Atualizatzione de seguresa crìtica a disponimentu.",
|
"home.pending_critical_update.title": "Atualizatzione de seguresa crìtica a disponimentu.",
|
||||||
"home.show_announcements": "Ammustra annùntzios",
|
"home.show_announcements": "Ammustra annùntzios",
|
||||||
|
"ignore_notifications_modal.disclaimer": "Mastodon non podet informare is utentes chi as innioradu is notìficas issoro. Inniorare notìficas no at a evitare chi s'imbient is messàgios.",
|
||||||
|
"ignore_notifications_modal.filter_instead": "Opuru filtra",
|
||||||
|
"ignore_notifications_modal.filter_to_act_users": "As a pòdere ancora atzetare, refudare o sinnalare a utentes",
|
||||||
|
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrare agiudat a evitare possìbiles confusiones",
|
||||||
"interaction_modal.description.reply": "Podes rispòndere a custa publicatzione cun unu contu de Mastodon.",
|
"interaction_modal.description.reply": "Podes rispòndere a custa publicatzione cun unu contu de Mastodon.",
|
||||||
|
"interaction_modal.login.action": "Torra a sa pàgina printzipale",
|
||||||
|
"interaction_modal.login.prompt": "Su domìniu de su serbidore domèsticu tuo, pro esempru mastodon.social",
|
||||||
|
"interaction_modal.no_account_yet": "Non ses in Mastodon?",
|
||||||
"interaction_modal.on_this_server": "In custu serbidore",
|
"interaction_modal.on_this_server": "In custu serbidore",
|
||||||
"interaction_modal.title.follow": "Sighi a {name}",
|
"interaction_modal.title.follow": "Sighi a {name}",
|
||||||
"interaction_modal.title.reply": "Risponde a sa publicatzione de {name}",
|
"interaction_modal.title.reply": "Risponde a sa publicatzione de {name}",
|
||||||
@ -353,11 +392,13 @@
|
|||||||
"lightbox.next": "Imbeniente",
|
"lightbox.next": "Imbeniente",
|
||||||
"lightbox.previous": "Pretzedente",
|
"lightbox.previous": "Pretzedente",
|
||||||
"limited_account_hint.title": "Custu profilu est istadu cuadu dae sa moderatzione de {domain}.",
|
"limited_account_hint.title": "Custu profilu est istadu cuadu dae sa moderatzione de {domain}.",
|
||||||
|
"link_preview.shares": "{count, plural, one {{counter} publicatzione} other {{counter} publicatziones}}",
|
||||||
"lists.account.add": "Agiunghe a sa lista",
|
"lists.account.add": "Agiunghe a sa lista",
|
||||||
"lists.account.remove": "Boga dae sa lista",
|
"lists.account.remove": "Boga dae sa lista",
|
||||||
"lists.delete": "Cantzella sa lista",
|
"lists.delete": "Cantzella sa lista",
|
||||||
"lists.edit": "Modìfica sa lista",
|
"lists.edit": "Modìfica sa lista",
|
||||||
"lists.edit.submit": "Muda su tìtulu",
|
"lists.edit.submit": "Muda su tìtulu",
|
||||||
|
"lists.exclusive": "Cua custas publicatziones dae sa pàgina printzipale",
|
||||||
"lists.new.create": "Agiunghe lista",
|
"lists.new.create": "Agiunghe lista",
|
||||||
"lists.new.title_placeholder": "Tìtulu de sa lista noa",
|
"lists.new.title_placeholder": "Tìtulu de sa lista noa",
|
||||||
"lists.replies_policy.followed": "Cale si siat persone chi sighis",
|
"lists.replies_policy.followed": "Cale si siat persone chi sighis",
|
||||||
@ -368,7 +409,20 @@
|
|||||||
"lists.subheading": "Is listas tuas",
|
"lists.subheading": "Is listas tuas",
|
||||||
"load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}",
|
"load_pending": "{count, plural, one {# elementu nou} other {# elementos noos}}",
|
||||||
"loading_indicator.label": "Carrighende…",
|
"loading_indicator.label": "Carrighende…",
|
||||||
|
"media_gallery.hide": "Cua",
|
||||||
|
"moved_to_account_banner.text": "Su contu tuo {disabledAccount} est disativadu in custu momentu ca est istadu tramudadu a {movedToAccount}.",
|
||||||
|
"mute_modal.hide_from_notifications": "Cua dae is notìficas",
|
||||||
|
"mute_modal.hide_options": "Cua is optziones",
|
||||||
|
"mute_modal.indefinite": "Fintzas a cando no apo a torrare a ativare is notìficas",
|
||||||
|
"mute_modal.show_options": "Ammustra is optziones",
|
||||||
|
"mute_modal.they_can_mention_and_follow": "Ti podent mentovare e sighire, però no ddos as a bìdere.",
|
||||||
|
"mute_modal.they_wont_know": "No ant a ischire chi ddos as postu a sa muda.",
|
||||||
|
"mute_modal.title": "Boles pònnere a custu contu a sa muda?",
|
||||||
|
"mute_modal.you_wont_see_mentions": "No as a bìdere is publicatziones chi mèntovent a custa persone.",
|
||||||
|
"mute_modal.you_wont_see_posts": "At a pòdere bìdere is publicatziones tuas, però tue no as a bìdere cussas suas.",
|
||||||
"navigation_bar.about": "Informatziones",
|
"navigation_bar.about": "Informatziones",
|
||||||
|
"navigation_bar.administration": "Amministratzione",
|
||||||
|
"navigation_bar.advanced_interface": "Aberi s'interfache web avantzada",
|
||||||
"navigation_bar.blocks": "Persones blocadas",
|
"navigation_bar.blocks": "Persones blocadas",
|
||||||
"navigation_bar.bookmarks": "Sinnalibros",
|
"navigation_bar.bookmarks": "Sinnalibros",
|
||||||
"navigation_bar.community_timeline": "Lìnia de tempus locale",
|
"navigation_bar.community_timeline": "Lìnia de tempus locale",
|
||||||
@ -380,10 +434,13 @@
|
|||||||
"navigation_bar.favourites": "Preferidos",
|
"navigation_bar.favourites": "Preferidos",
|
||||||
"navigation_bar.filters": "Faeddos a sa muda",
|
"navigation_bar.filters": "Faeddos a sa muda",
|
||||||
"navigation_bar.follow_requests": "Rechestas de sighidura",
|
"navigation_bar.follow_requests": "Rechestas de sighidura",
|
||||||
|
"navigation_bar.followed_tags": "Etichetas sighidas",
|
||||||
"navigation_bar.follows_and_followers": "Gente chi sighis e sighiduras",
|
"navigation_bar.follows_and_followers": "Gente chi sighis e sighiduras",
|
||||||
"navigation_bar.lists": "Listas",
|
"navigation_bar.lists": "Listas",
|
||||||
"navigation_bar.logout": "Essi",
|
"navigation_bar.logout": "Essi",
|
||||||
|
"navigation_bar.moderation": "Moderatzione",
|
||||||
"navigation_bar.mutes": "Persones a sa muda",
|
"navigation_bar.mutes": "Persones a sa muda",
|
||||||
|
"navigation_bar.opened_in_classic_interface": "Publicatziones, contos e àteras pàginas ispetzìficas sunt abertas in manera predefinida in s'interfache web clàssica.",
|
||||||
"navigation_bar.personal": "Informatziones personales",
|
"navigation_bar.personal": "Informatziones personales",
|
||||||
"navigation_bar.pins": "Publicatziones apicadas",
|
"navigation_bar.pins": "Publicatziones apicadas",
|
||||||
"navigation_bar.preferences": "Preferèntzias",
|
"navigation_bar.preferences": "Preferèntzias",
|
||||||
@ -391,10 +448,24 @@
|
|||||||
"navigation_bar.search": "Chirca",
|
"navigation_bar.search": "Chirca",
|
||||||
"navigation_bar.security": "Seguresa",
|
"navigation_bar.security": "Seguresa",
|
||||||
"not_signed_in_indicator.not_signed_in": "Ti depes identificare pro atzèdere a custa resursa.",
|
"not_signed_in_indicator.not_signed_in": "Ti depes identificare pro atzèdere a custa resursa.",
|
||||||
|
"notification.admin.report": "{name} at sinnaladu a {target}",
|
||||||
|
"notification.admin.report_account": "{name} at sinnaladu {count, plural, one {una publicatzione} other {# publicatziones}} dae {target} pro {category}",
|
||||||
|
"notification.admin.report_account_other": "{name} at sinnaladu {count, plural, one {una publicatzione} other {# publicatziones}} dae {target}",
|
||||||
|
"notification.admin.report_statuses": "{name} at sinnaladu a {target} pro {category}",
|
||||||
|
"notification.admin.report_statuses_other": "{name} at sinnaladu a {target}",
|
||||||
"notification.admin.sign_up": "{name} at aderidu",
|
"notification.admin.sign_up": "{name} at aderidu",
|
||||||
|
"notification.admin.sign_up.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} si sunt registradas",
|
||||||
"notification.favourite": "{name} at marcadu comente a preferidu s'istadu tuo",
|
"notification.favourite": "{name} at marcadu comente a preferidu s'istadu tuo",
|
||||||
|
"notification.favourite.name_and_others_with_link": "{name} e <a>{count, plural, one {un'àtera persone} other {àteras # persones}}</a> ant marcadu sa publicatzione tua comente preferida",
|
||||||
"notification.follow": "{name} ti sighit",
|
"notification.follow": "{name} ti sighit",
|
||||||
|
"notification.follow.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ti sighint",
|
||||||
"notification.follow_request": "{name} at dimandadu de ti sighire",
|
"notification.follow_request": "{name} at dimandadu de ti sighire",
|
||||||
|
"notification.follow_request.name_and_others": "{name} e {count, plural, one {un'àtera persone} other {àteras # persones}} ant pedidu de ti sighire",
|
||||||
|
"notification.label.mention": "Mèntovu",
|
||||||
|
"notification.label.private_mention": "Mèntovu privadu",
|
||||||
|
"notification.label.private_reply": "Risposta privada",
|
||||||
|
"notification.label.reply": "Risposta",
|
||||||
|
"notification.mention": "Mèntovu",
|
||||||
"notification.moderation-warning.learn_more": "Àteras informatziones",
|
"notification.moderation-warning.learn_more": "Àteras informatziones",
|
||||||
"notification.moderation_warning": "T'ant imbiadu un'avisu de moderatzione",
|
"notification.moderation_warning": "T'ant imbiadu un'avisu de moderatzione",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Unas cantas de is publicatziones tuas sunt istadas cantzelladas.",
|
"notification.moderation_warning.action_delete_statuses": "Unas cantas de is publicatziones tuas sunt istadas cantzelladas.",
|
||||||
@ -407,12 +478,30 @@
|
|||||||
"notification.own_poll": "Sondàgiu acabbadu",
|
"notification.own_poll": "Sondàgiu acabbadu",
|
||||||
"notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu",
|
"notification.poll": "Unu sondàgiu in su chi as votadu est acabbadu",
|
||||||
"notification.reblog": "{name} at cumpartzidu sa publicatzione tua",
|
"notification.reblog": "{name} at cumpartzidu sa publicatzione tua",
|
||||||
|
"notification.reblog.name_and_others_with_link": "{name} e <a>{count, plural, one {un'àtera persone} other {àteras # persones}}</a> ant potentziadu sa publicatzione tua",
|
||||||
"notification.relationships_severance_event": "Connessiones pèrdidas cun {name}",
|
"notification.relationships_severance_event": "Connessiones pèrdidas cun {name}",
|
||||||
|
"notification.relationships_severance_event.account_suspension": "S'amministratzione de {from} at suspèndidu a {target}; custu bolet nàrrere chi non podes prus retzire atualizatziones dae in cue o interagire cun cussos contos.",
|
||||||
|
"notification.relationships_severance_event.domain_block": "S'amministratzione de {from} at blocadu a {target}, incluende {followersCount} sighiduras tuas e {followingCount, plural, one {un'àteru contu} other {àteros # contos}} chi sighis.",
|
||||||
"notification.relationships_severance_event.learn_more": "Àteras informatziones",
|
"notification.relationships_severance_event.learn_more": "Àteras informatziones",
|
||||||
|
"notification.relationships_severance_event.user_domain_block": "As blocadu a {target}, bogadu a {followersCount} contos chi ti sighint e {followingCount, plural, one {un'àteru contu} other {àteros # contos}} chi sighis.",
|
||||||
"notification.status": "{name} at publicadu cosa",
|
"notification.status": "{name} at publicadu cosa",
|
||||||
"notification.update": "{name} at modificadu una publicatzione",
|
"notification.update": "{name} at modificadu una publicatzione",
|
||||||
"notification_requests.accept": "Atzeta",
|
"notification_requests.accept": "Atzeta",
|
||||||
|
"notification_requests.accept_multiple": "{count, plural, one {Atzeta una rechesta…} other {Atzeta # rechestas…}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Atzeta sa rechesta} other {Atzeta is rechestas}}",
|
||||||
|
"notification_requests.confirm_accept_multiple.message": "Ses atzetende {count, plural, one {una rechesta de notìfica} other {# rechestas de notìfica}}. Seguru chi boles sighire?",
|
||||||
|
"notification_requests.confirm_accept_multiple.title": "Boles atzetare is rechestas de notìfica?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Iscarta sa rechesta} other {Iscarta is rechestas}}",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.message": "Ses acanta de iscartare {count, plural, one {una rechesta de notìfica} other {# rechestas de notìfica}}. No nche {count, plural, one {} other {}} as a pòdere prus atzèdere in manera sèmplitze. Seguru chi boles sighire?",
|
||||||
|
"notification_requests.confirm_dismiss_multiple.title": "Boles iscartare is rechestas de notìfica?",
|
||||||
"notification_requests.dismiss": "Iscarta",
|
"notification_requests.dismiss": "Iscarta",
|
||||||
|
"notification_requests.dismiss_multiple": "{count, plural, one {Iscarta una rechesta…} other {Iscarta # rechestas…}}",
|
||||||
|
"notification_requests.edit_selection": "Modifica",
|
||||||
|
"notification_requests.exit_selection": "Fatu",
|
||||||
|
"notification_requests.explainer_for_limited_account": "Is notìficas de custu contu sunt istadas filtradas, ca su contu est istadu limitadu dae sa moderatzione.",
|
||||||
|
"notification_requests.explainer_for_limited_remote_account": "Is notìficas de custu contu sunt istadas filtradas, ca su contu o su serbidore suo est istadu limitadu dae sa moderatzione.",
|
||||||
|
"notification_requests.maximize": "Ismànnia",
|
||||||
|
"notification_requests.minimize_banner": "Mìnima su bànner de notìficas filtradas",
|
||||||
"notification_requests.notifications_from": "Notìficas dae {name}",
|
"notification_requests.notifications_from": "Notìficas dae {name}",
|
||||||
"notification_requests.title": "Notìficas filtradas",
|
"notification_requests.title": "Notìficas filtradas",
|
||||||
"notifications.clear": "Lìmpia notìficas",
|
"notifications.clear": "Lìmpia notìficas",
|
||||||
@ -472,6 +561,11 @@
|
|||||||
"poll_button.add_poll": "Agiunghe unu sondàgiu",
|
"poll_button.add_poll": "Agiunghe unu sondàgiu",
|
||||||
"poll_button.remove_poll": "Cantzella su sondàgiu",
|
"poll_button.remove_poll": "Cantzella su sondàgiu",
|
||||||
"privacy.change": "Modìfica s'istadu de riservadesa",
|
"privacy.change": "Modìfica s'istadu de riservadesa",
|
||||||
|
"privacy.direct.long": "Totu is utentes mentovados in sa publicatzione",
|
||||||
|
"privacy.direct.short": "Persones ispetzìficas",
|
||||||
|
"privacy.private.long": "Isceti chie ti sighit",
|
||||||
|
"privacy.private.short": "Sighiduras",
|
||||||
|
"privacy.public.long": "Cale si siat persone a intro o a foras de Mastodon",
|
||||||
"privacy.public.short": "Pùblicu",
|
"privacy.public.short": "Pùblicu",
|
||||||
"privacy_policy.last_updated": "Ùrtima atualizatzione: {date}",
|
"privacy_policy.last_updated": "Ùrtima atualizatzione: {date}",
|
||||||
"privacy_policy.title": "Polìtica de riservadesa",
|
"privacy_policy.title": "Polìtica de riservadesa",
|
||||||
@ -497,34 +591,64 @@
|
|||||||
"report.categories.legal": "Giurìdicu",
|
"report.categories.legal": "Giurìdicu",
|
||||||
"report.categories.other": "Àteru",
|
"report.categories.other": "Àteru",
|
||||||
"report.categories.spam": "Àliga",
|
"report.categories.spam": "Àliga",
|
||||||
|
"report.category.subtitle": "Sèbera sa currispondèntzia prus arta",
|
||||||
|
"report.category.title": "Nara·nos ite sutzedet cun custu {type}",
|
||||||
"report.category.title_account": "profilu",
|
"report.category.title_account": "profilu",
|
||||||
"report.category.title_status": "publicatzione",
|
"report.category.title_status": "publicatzione",
|
||||||
"report.close": "Fatu",
|
"report.close": "Fatu",
|
||||||
|
"report.comment.title": "Nch'at àteru chi depamus ischire?",
|
||||||
"report.forward": "Torra a imbiare a {target}",
|
"report.forward": "Torra a imbiare a {target}",
|
||||||
"report.forward_hint": "Custu contu est de un'àteru serbidore. Ddi boles imbiare puru una còpia anònima de custu informe?",
|
"report.forward_hint": "Custu contu est de un'àteru serbidore. Ddi boles imbiare puru una còpia anònima de custu informe?",
|
||||||
"report.mute": "A sa muda",
|
"report.mute": "A sa muda",
|
||||||
|
"report.mute_explanation": "No as a bìdere is publicatziones suas. Ti podet ancora sighire e bìdere is publicatziones, ma no at a ischire chi dd'as postu a sa muda.",
|
||||||
"report.next": "Imbeniente",
|
"report.next": "Imbeniente",
|
||||||
"report.placeholder": "Cummentos additzionales",
|
"report.placeholder": "Cummentos additzionales",
|
||||||
"report.reasons.dislike": "Non mi praghet",
|
"report.reasons.dislike": "Non mi praghet",
|
||||||
"report.reasons.dislike_description": "Est una cosa chi non boles bìdere",
|
"report.reasons.dislike_description": "Est una cosa chi non boles bìdere",
|
||||||
"report.reasons.legal": "Illegale",
|
"report.reasons.legal": "Illegale",
|
||||||
"report.reasons.other": "Un'àtera cosa",
|
"report.reasons.other": "Un'àtera cosa",
|
||||||
|
"report.reasons.other_description": "Su problema non currispondet a is àteras categorias",
|
||||||
"report.reasons.spam": "Est àliga",
|
"report.reasons.spam": "Est àliga",
|
||||||
|
"report.rules.subtitle": "Seletziona totu is chi àplichent",
|
||||||
|
"report.statuses.subtitle": "Seletziona totu is chi àplichent",
|
||||||
"report.submit": "Imbia",
|
"report.submit": "Imbia",
|
||||||
"report.target": "Informende de {target}",
|
"report.target": "Informende de {target}",
|
||||||
|
"report.thanks.title": "Non boles bìdere custu?",
|
||||||
|
"report.thanks.title_actionable": "Gràtzias de sa sinnalatzione, dd'amus a averiguare.",
|
||||||
"report.unfollow": "Non sigas prus a @{name}",
|
"report.unfollow": "Non sigas prus a @{name}",
|
||||||
|
"report.unfollow_explanation": "Ses sighende custu contu. Si non boles bìdere is publicatziones suas in sa pàgina printzipale tua, no ddu sigas prus.",
|
||||||
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
|
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
|
||||||
"report_notification.categories.legal": "Giurìdicu",
|
"report_notification.categories.legal": "Giurìdicu",
|
||||||
"report_notification.categories.legal_sentence": "cuntenutu illegale",
|
"report_notification.categories.legal_sentence": "cuntenutu illegale",
|
||||||
"report_notification.categories.other": "Àteru",
|
"report_notification.categories.other": "Àteru",
|
||||||
"report_notification.categories.other_sentence": "àteru",
|
"report_notification.categories.other_sentence": "àteru",
|
||||||
"report_notification.categories.spam": "Àliga",
|
"report_notification.categories.spam": "Àliga",
|
||||||
|
"report_notification.categories.spam_sentence": "àliga",
|
||||||
|
"report_notification.open": "Aberi una sinnalatzione",
|
||||||
|
"search.no_recent_searches": "Nissuna chirca reghente",
|
||||||
"search.placeholder": "Chirca",
|
"search.placeholder": "Chirca",
|
||||||
|
"search.quick_action.account_search": "Profilos chi currispondent cun {x}",
|
||||||
|
"search.quick_action.go_to_account": "Bae a su profilu {x}",
|
||||||
|
"search.quick_action.go_to_hashtag": "Bae a s'eticheta {x}",
|
||||||
|
"search.quick_action.open_url": "Aberi s'URL in Mastodon",
|
||||||
|
"search.quick_action.status_search": "Publicatziones chi currispondent cun {x}",
|
||||||
|
"search.search_or_paste": "Chirca o incolla un'URL",
|
||||||
|
"search_popout.full_text_search_disabled_message": "No a disponimentu a {domain}.",
|
||||||
|
"search_popout.full_text_search_logged_out_message": "Isceti a disponimentu cun sa sessione aberta.",
|
||||||
|
"search_popout.language_code": "Còdighe de limba ISO",
|
||||||
|
"search_popout.options": "Optziones de chirca",
|
||||||
|
"search_popout.quick_actions": "Atziones lestras",
|
||||||
|
"search_popout.recent": "Chircas reghentes",
|
||||||
|
"search_popout.specific_date": "data ispetzìfica",
|
||||||
"search_popout.user": "utente",
|
"search_popout.user": "utente",
|
||||||
"search_results.accounts": "Profilos",
|
"search_results.accounts": "Profilos",
|
||||||
"search_results.all": "Totus",
|
"search_results.all": "Totus",
|
||||||
"search_results.hashtags": "Etichetas",
|
"search_results.hashtags": "Etichetas",
|
||||||
|
"search_results.nothing_found": "Impossìbile agatare currispondèntzias pro custos tèrmines de chirca",
|
||||||
|
"search_results.see_all": "Bide totu",
|
||||||
"search_results.statuses": "Publicatziones",
|
"search_results.statuses": "Publicatziones",
|
||||||
|
"search_results.title": "Chirca {q}",
|
||||||
|
"server_banner.about_active_users": "Gente chi at impreadu custu serbidore is ùrtimas 30 dies (Utentes cun Atividade a su Mese)",
|
||||||
"server_banner.active_users": "utentes ativos",
|
"server_banner.active_users": "utentes ativos",
|
||||||
"server_banner.administered_by": "Amministradu dae:",
|
"server_banner.administered_by": "Amministradu dae:",
|
||||||
"server_banner.server_stats": "Istatìsticas de su serbidore:",
|
"server_banner.server_stats": "Istatìsticas de su serbidore:",
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
"account.follow": "Sledovať",
|
"account.follow": "Sledovať",
|
||||||
"account.follow_back": "Sledovať späť",
|
"account.follow_back": "Sledovať späť",
|
||||||
"account.followers": "Sledovatelia",
|
"account.followers": "Sledovatelia",
|
||||||
"account.followers.empty": "Tento účet ešte nikto nesleduje.",
|
"account.followers.empty": "Ešte nikto nesleduje tohto užívateľa.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} sledujúci} other {{counter} sledujúci}}",
|
"account.followers_counter": "{count, plural, one {{counter} sledujúci} other {{counter} sledujúci}}",
|
||||||
"account.following": "Sledovaný účet",
|
"account.following": "Sledovaný účet",
|
||||||
"account.following_counter": "{count, plural, one {{counter} sledovaných} other {{counter} sledovaných}}",
|
"account.following_counter": "{count, plural, one {{counter} sledovaných} other {{counter} sledovaných}}",
|
||||||
@ -85,6 +85,7 @@
|
|||||||
"alert.rate_limited.title": "Priveľa žiadostí",
|
"alert.rate_limited.title": "Priveľa žiadostí",
|
||||||
"alert.unexpected.message": "Vyskytla sa nečakaná chyba.",
|
"alert.unexpected.message": "Vyskytla sa nečakaná chyba.",
|
||||||
"alert.unexpected.title": "Ups!",
|
"alert.unexpected.title": "Ups!",
|
||||||
|
"alt_text_badge.title": "Alternatívny popis",
|
||||||
"announcement.announcement": "Oznámenie",
|
"announcement.announcement": "Oznámenie",
|
||||||
"attachments_list.unprocessed": "(nespracované)",
|
"attachments_list.unprocessed": "(nespracované)",
|
||||||
"audio.hide": "Skryť zvuk",
|
"audio.hide": "Skryť zvuk",
|
||||||
|
@ -516,6 +516,7 @@
|
|||||||
"notification.label.private_reply": "Përgjigje private",
|
"notification.label.private_reply": "Përgjigje private",
|
||||||
"notification.label.reply": "Përgjigje",
|
"notification.label.reply": "Përgjigje",
|
||||||
"notification.mention": "Përmendje",
|
"notification.mention": "Përmendje",
|
||||||
|
"notification.mentioned_you": "{name} ju ka përmendur",
|
||||||
"notification.moderation-warning.learn_more": "Mësoni më tepër",
|
"notification.moderation-warning.learn_more": "Mësoni më tepër",
|
||||||
"notification.moderation_warning": "Ju është dhënë një sinjalizim moderimi",
|
"notification.moderation_warning": "Ju është dhënë një sinjalizim moderimi",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.",
|
"notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.",
|
||||||
@ -852,6 +853,11 @@
|
|||||||
"upload_error.poll": "Me pyetësorët s’lejohet ngarkim kartelash.",
|
"upload_error.poll": "Me pyetësorët s’lejohet ngarkim kartelash.",
|
||||||
"upload_form.audio_description": "Përshkruajeni për persona me dëgjim të kufizuar",
|
"upload_form.audio_description": "Përshkruajeni për persona me dëgjim të kufizuar",
|
||||||
"upload_form.description": "Përshkruajeni për persona me probleme shikimi",
|
"upload_form.description": "Përshkruajeni për persona me probleme shikimi",
|
||||||
|
"upload_form.drag_and_drop.instructions": "Që të merrni një bashkëngjitje media, shtypni tastin Space ose Enter. Teksa bëhet tërheqje, përdorni tastet shigjetë për ta shpënë bashkëngjitjen media në cilëndo drejtori që doni. Shtypni sërish Space ose Enter që të lihet bashkëngjitja media në pozicionin e vet të ri, ose shtypni Esc, që të anulohet veprimi.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_cancel": "Tërheqja u anulua. Bashkëngjitja media {item} u la.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_end": "Bashkëngjitja media {item} u la.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_over": "Bashkëngjitja media {item} u lëviz.",
|
||||||
|
"upload_form.drag_and_drop.on_drag_start": "U mor bashkëngjitja media {item}.",
|
||||||
"upload_form.edit": "Përpunoni",
|
"upload_form.edit": "Përpunoni",
|
||||||
"upload_form.thumbnail": "Ndryshoni miniaturën",
|
"upload_form.thumbnail": "Ndryshoni miniaturën",
|
||||||
"upload_form.video_description": "Përshkruajeni për persona me dëgjim të kufizuar ose probleme shikimi",
|
"upload_form.video_description": "Përshkruajeni për persona me dëgjim të kufizuar ose probleme shikimi",
|
||||||
|
@ -506,6 +506,7 @@
|
|||||||
"notification.label.private_reply": "Privata svar",
|
"notification.label.private_reply": "Privata svar",
|
||||||
"notification.label.reply": "Svar",
|
"notification.label.reply": "Svar",
|
||||||
"notification.mention": "Nämn",
|
"notification.mention": "Nämn",
|
||||||
|
"notification.mentioned_you": "{name} nämnde dig",
|
||||||
"notification.moderation-warning.learn_more": "Läs mer",
|
"notification.moderation-warning.learn_more": "Läs mer",
|
||||||
"notification.moderation_warning": "Du har fått en moderationsvarning",
|
"notification.moderation_warning": "Du har fått en moderationsvarning",
|
||||||
"notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.",
|
"notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.",
|
||||||
|
@ -512,6 +512,7 @@
|
|||||||
"notification.label.private_reply": "การตอบกลับแบบส่วนตัว",
|
"notification.label.private_reply": "การตอบกลับแบบส่วนตัว",
|
||||||
"notification.label.reply": "การตอบกลับ",
|
"notification.label.reply": "การตอบกลับ",
|
||||||
"notification.mention": "การกล่าวถึง",
|
"notification.mention": "การกล่าวถึง",
|
||||||
|
"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": "เอาโพสต์บางส่วนของคุณออกแล้ว",
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user