mirror of
https://github.com/yingziwu/mastodon.git
synced 2026-02-18 16:23:18 +00:00
Merge tag 'v3.3.0rc1'
This commit is contained in:
commit
1c2e3b6e93
484 changed files with 19459 additions and 5709 deletions
|
|
@ -30,7 +30,7 @@ plugins:
|
|||
channel: eslint-7
|
||||
rubocop:
|
||||
enabled: true
|
||||
channel: rubocop-0-88
|
||||
channel: rubocop-0-92
|
||||
sass-lint:
|
||||
enabled: true
|
||||
exclude_patterns:
|
||||
|
|
|
|||
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: Bug Report
|
||||
about: If something isn't working as expected
|
||||
|
||||
labels: bug
|
||||
---
|
||||
|
||||
<!-- Make sure that you are submitting a new bug that was not previously reported or already fixed -->
|
||||
|
|
|
|||
1
.github/ISSUE_TEMPLATE/feature_request.md
vendored
1
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
|
@ -1,7 +1,6 @@
|
|||
---
|
||||
name: Feature Request
|
||||
about: I have a suggestion
|
||||
|
||||
---
|
||||
|
||||
<!-- Please use a concise and distinct title for the issue -->
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
2.6.6
|
||||
2.7.2
|
||||
|
|
|
|||
179
CHANGELOG.md
179
CHANGELOG.md
|
|
@ -3,6 +3,185 @@ Changelog
|
|||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## Unreleased
|
||||
### Added
|
||||
|
||||
- **Add hotkeys for audio/video control in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15158), [Gargron](https://github.com/tootsuite/mastodon/pull/15198))
|
||||
- `Space` and `k` to toggle playback
|
||||
- `m` to toggle mute
|
||||
- `f` to toggle fullscreen
|
||||
- `j` and `l` to go back and forward by 10 seconds
|
||||
- `.` and `,` to go back and forward by a frame (video only)
|
||||
- Add expand/compress button on media modal in web UI ([mashirozx](https://github.com/tootsuite/mastodon/pull/15068), [mashirozx](https://github.com/tootsuite/mastodon/pull/15088), [mashirozx](https://github.com/tootsuite/mastodon/pull/15094))
|
||||
- Add border around 🕺 emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14769))
|
||||
- Add border around 🐞 emoji in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14712))
|
||||
- Add home link to the getting started column when home isn't mounted ([ThibG](https://github.com/tootsuite/mastodon/pull/14707))
|
||||
- Add option to disable swiping motions across the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/13885))
|
||||
- **Add pop-out player for audio/video in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/14870), [Gargron](https://github.com/tootsuite/mastodon/pull/15157), [Gargron](https://github.com/tootsuite/mastodon/pull/14915))
|
||||
- Continue watching/listening when you scroll away
|
||||
- Action bar to interact with/open toot from the pop-out player
|
||||
- Add unread notification markers in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14818), [ThibG](https://github.com/tootsuite/mastodon/pull/14960), [ThibG](https://github.com/tootsuite/mastodon/pull/14954), [noellabo](https://github.com/tootsuite/mastodon/pull/14897), [noellabo](https://github.com/tootsuite/mastodon/pull/14907))
|
||||
- Add paragraph about browser add-ons when encountering errors in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14801))
|
||||
- Add import and export for bookmarks ([ThibG](https://github.com/tootsuite/mastodon/pull/14956))
|
||||
- Add cache buster feature for media files ([Gargron](https://github.com/tootsuite/mastodon/pull/15155))
|
||||
- If you have a proxy cache in front of object storage, deleted files will persist until the cache expires
|
||||
- If enabled, cache buster will make a special request to the proxy to signal a cache reset
|
||||
- Add duration option to the mute function ([aquarla](https://github.com/tootsuite/mastodon/pull/13831))
|
||||
- Add replies policy option to the list function ([ThibG](https://github.com/tootsuite/mastodon/pull/9205))
|
||||
- Add `og:published_time` OpenGraph tags on toots ([nornagon](https://github.com/tootsuite/mastodon/pull/14865))
|
||||
- **Add option to be notified when a followed user posts** ([Gargron](https://github.com/tootsuite/mastodon/pull/13546), [ThibG](https://github.com/tootsuite/mastodon/pull/14896), [Gargron](https://github.com/tootsuite/mastodon/pull/14822))
|
||||
- If you don't want to miss a toot, click the bell button!
|
||||
- Add client-side validation in password change forms ([ThibG](https://github.com/tootsuite/mastodon/pull/14564))
|
||||
- Add client-side validation in the registration form ([ThibG](https://github.com/tootsuite/mastodon/pull/14560), [ThibG](https://github.com/tootsuite/mastodon/pull/14599))
|
||||
- Add support for Gemini URLs ([joshleeb](https://github.com/tootsuite/mastodon/pull/15013))
|
||||
- Add WebAuthn as an alternative 2FA method ([santiagorodriguez96](https://github.com/tootsuite/mastodon/pull/14466), [jiikko](https://github.com/tootsuite/mastodon/pull/14806))
|
||||
- Add icon for mutual relationships in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15149))
|
||||
- Add follow selected followers button in relationship manager ([noellabo](https://github.com/tootsuite/mastodon/pull/15148))
|
||||
- **Add subresource integrity for JS and CSS assets** ([Gargron](https://github.com/tootsuite/mastodon/pull/15096))
|
||||
- If you use a CDN for static assets (JavaScript, CSS, and so on), you have to trust that the CDN does not modify the assets maliciously
|
||||
- Subresource integrity compares server-generated asset digests with what's actually served from the CDN and prevents such attacks
|
||||
- Add `ku`, `sa`, `sc`, `zgh` to available locales ([ykzts](https://github.com/tootsuite/mastodon/pull/15138))
|
||||
- Add ability to force an account to mark media as sensitive ([noellabo](https://github.com/tootsuite/mastodon/pull/14361))
|
||||
- **Add ability to block access or limit sign-ups from chosen IPs** ([Gargron](https://github.com/tootsuite/mastodon/pull/14963))
|
||||
- Add rules for IPs or CIDR ranges that automatically expire after a configurable amount of time
|
||||
- Choose the severity of the rule, either blocking all access or merely limiting sign-ups
|
||||
- **Add support for reversible suspensions through ActivityPub** ([Gargron](https://github.com/tootsuite/mastodon/pull/14989))
|
||||
- Servers can signal that one of their accounts has been suspended
|
||||
- During suspension, the account can only delete its own content
|
||||
- A reversal of the suspension can be signalled the same way
|
||||
- A local suspension always overrides a remote one
|
||||
- Add ActivityPub follower synchronization mechanism ([ThibG](https://github.com/tootsuite/mastodon/pull/14510), [ThibG](https://github.com/tootsuite/mastodon/pull/15026))
|
||||
- Add outbox attribute to instance actor ([ThibG](https://github.com/tootsuite/mastodon/pull/14721))
|
||||
- Add featured hashtags as an ActivityPub collection ([Gargron](https://github.com/tootsuite/mastodon/pull/11595))
|
||||
- Add support for dereferencing objects through bearcaps ([Gargron](https://github.com/tootsuite/mastodon/pull/14683), [noellabo](https://github.com/tootsuite/mastodon/pull/14981))
|
||||
- Add `S3_READ_TIMEOUT` environment variable ([tateisu](https://github.com/tootsuite/mastodon/pull/14952))
|
||||
- Add `ALLOWED_PRIVATE_ADDRESSES` environment variable ([ThibG](https://github.com/tootsuite/mastodon/pull/14722))
|
||||
- Add `--fix-permissions` option to `tootctl media remove-orphans` ([Gargron](https://github.com/tootsuite/mastodon/pull/14383), [uist1idrju3i](https://github.com/tootsuite/mastodon/pull/14715))
|
||||
- Add `tootctl accounts merge` ([Gargron](https://github.com/tootsuite/mastodon/pull/15201))
|
||||
- Has someone changed their domain or subdomain thereby creating two accounts where there should be one?
|
||||
- This command will fix it on your end
|
||||
- Add `tootctl maintenance fix-duplicates` ([ThibG](https://github.com/tootsuite/mastodon/pull/14860), [Gargron](https://github.com/tootsuite/mastodon/pull/15223))
|
||||
- Index corruption in the database?
|
||||
- This command is for you
|
||||
- **Add support for managing multiple stream subscriptions in a single connection** ([Gargron](https://github.com/tootsuite/mastodon/pull/14524), [Gargron](https://github.com/tootsuite/mastodon/pull/14566), [mfmfuyu](https://github.com/tootsuite/mastodon/pull/14859), [zunda](https://github.com/tootsuite/mastodon/pull/14608))
|
||||
- Previously, getting live updates for multiple timelines required opening a HTTP or WebSocket connection for each
|
||||
- More connections means more resource consumption on both ends, not to mention the (ever so slight) delay when establishing a new connection
|
||||
- Now, with just a single WebSocket connection you can subscribe and unsubscribe to and from multiple streams
|
||||
- Add support for limiting results by both `min_id` and `max_id` at the same time in REST API ([tateisu](https://github.com/tootsuite/mastodon/pull/14776))
|
||||
- Add `GET /api/v1/accounts/:id/featured_tags` to REST API ([noellabo](https://github.com/tootsuite/mastodon/pull/11817))
|
||||
- Add optional `tootctl remove media` cronjob in Helm chart ([dunn](https://github.com/tootsuite/mastodon/pull/14396))
|
||||
|
||||
### Changed
|
||||
|
||||
- **Change media modals look in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/15217), [Gargron](https://github.com/tootsuite/mastodon/pull/15221))
|
||||
- Background of the overlay matches the color of the image
|
||||
- Action bar to interact with or open the toot from the modal
|
||||
- Change order of announcements in admin UI to be newest-first ([ThibG](https://github.com/tootsuite/mastodon/pull/15091))
|
||||
- **Change account suspensions to be reversible by default** ([Gargron](https://github.com/tootsuite/mastodon/pull/14726), [ThibG](https://github.com/tootsuite/mastodon/pull/15152), [ThibG](https://github.com/tootsuite/mastodon/pull/15106), [ThibG](https://github.com/tootsuite/mastodon/pull/15100), [ThibG](https://github.com/tootsuite/mastodon/pull/15099), [noellabo](https://github.com/tootsuite/mastodon/pull/14855))
|
||||
- Suspensions no longer equal deletions
|
||||
- A suspended account can be unsuspended with minimal consequences for 30 days
|
||||
- Immediate deletion of data is still available as an explicit option
|
||||
- Suspended accounts can request an archive of their data through the UI
|
||||
- Change REST API to return empty data for suspended accounts (14765)
|
||||
- Change web UI to show empty profile for suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/14766))
|
||||
- Change featured hashtag suggestions to be recently used instead of most used ([abcang](https://github.com/tootsuite/mastodon/pull/14760))
|
||||
- Change direct toots to appear in the home feed again ([Gargron](https://github.com/tootsuite/mastodon/pull/14711), [ThibG](https://github.com/tootsuite/mastodon/pull/15182), [noellabo](https://github.com/tootsuite/mastodon/pull/14727))
|
||||
- Return to treating all toots the same instead of trying to retrofit direct visibility into an instant messaging model
|
||||
- Change email address validation to return more specific errors ([ThibG](https://github.com/tootsuite/mastodon/pull/14565))
|
||||
- Change HTTP signature requirements to include `Digest` header on `POST` requests ([ThibG](https://github.com/tootsuite/mastodon/pull/15069))
|
||||
- Change click area of video/audio player buttons to be bigger in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15049))
|
||||
- Change order of filters by alphabetic by "keyword or phrase" ([ariasuni](https://github.com/tootsuite/mastodon/pull/15050))
|
||||
- Change suspension of remote accounts to also undo outgoing follows ([ThibG](https://github.com/tootsuite/mastodon/pull/15188))
|
||||
- Change string "Home" to "Home and lists" in the filter creation screen ([ariasuni](https://github.com/tootsuite/mastodon/pull/15139))
|
||||
- Change string "Boost to original audience" to "Boost with original visibility" in web UI ([3n-k1](https://github.com/tootsuite/mastodon/pull/14598))
|
||||
- Change string "Show more" to "Show newer" and "Show older" on public pages ([ariasuni](https://github.com/tootsuite/mastodon/pull/15052))
|
||||
- Change order of announcements to be reverse chronological in web UI ([dariusk](https://github.com/tootsuite/mastodon/pull/15065), [dariusk](https://github.com/tootsuite/mastodon/pull/15070))
|
||||
- Change visibility icon next to timestamp to be clickable in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15053), [mayaeh](https://github.com/tootsuite/mastodon/pull/15055))
|
||||
|
||||
### Removed
|
||||
|
||||
- Remove fade-in animation from modals in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15199))
|
||||
- Remove auto-redirect to direct messages in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/15142))
|
||||
- Remove obsolete IndexedDB operations from web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14730))
|
||||
- Remove dependency on unused and unmaintained http_parser.rb gem ([ThibG](https://github.com/tootsuite/mastodon/pull/14574))
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Fix deletes not reaching every server that interacted with toot** ([Gargron](https://github.com/tootsuite/mastodon/pull/15200))
|
||||
- Previously, delete of a toot would be primarily sent to the followers of its author, people mentioned in the toot, and people who reblogged the toot
|
||||
- Now, additionally, it is ensured that it is sent to people who replied to it, favourited it, and to the person it replies to even if that person is not mentioned
|
||||
- Fix resolving an account through its non-canonical form (i.e. alternate domain) ([ThibG](https://github.com/tootsuite/mastodon/pull/15187))
|
||||
- Fix sending redundant ActivityPub events when processing remote account deletion ([ThibG](https://github.com/tootsuite/mastodon/pull/15104))
|
||||
- Fix Move handler not being triggered when failing to fetch target account ([ThibG](https://github.com/tootsuite/mastodon/pull/15107))
|
||||
- Fix downloading remote media files when server returns empty filename ([ThibG](https://github.com/tootsuite/mastodon/pull/14867))
|
||||
- Fix account processing failing because of large collections ([ThibG](https://github.com/tootsuite/mastodon/pull/15027))
|
||||
- Fix not being able to unfavorite toots one has lost access to ([ThibG](https://github.com/tootsuite/mastodon/pull/15192))
|
||||
- Fix not being able to unbookmark toots one has lost access to ([ThibG](https://github.com/tootsuite/mastodon/pull/14604))
|
||||
- Fix possible casing inconsistencies in hashtag search ([ThibG](https://github.com/tootsuite/mastodon/pull/14906))
|
||||
- Fix updating account counters when association is not yet created ([Gargron](https://github.com/tootsuite/mastodon/pull/15108))
|
||||
- Fix cookies not having a SameSite attribute ([Gargron](https://github.com/tootsuite/mastodon/pull/15098))
|
||||
- Fix poll ending notifications being created for each vote ([ThibG](https://github.com/tootsuite/mastodon/pull/15071))
|
||||
- Fix multiple boosts of a same toot erroneously appearing in TL ([ThibG](https://github.com/tootsuite/mastodon/pull/14759))
|
||||
- Fix asset builds not picking up `CDN_HOST` change ([ThibG](https://github.com/tootsuite/mastodon/pull/14381))
|
||||
- Fix desktop notifications permission prompt in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14985), [Gargron](https://github.com/tootsuite/mastodon/pull/15141), [ThibG](https://github.com/tootsuite/mastodon/pull/13543))
|
||||
- Some time ago, browsers added a requirement that desktop notification prompts could only be displayed in response to a user-generated event (such as a click)
|
||||
- This means that for some time, users who haven't already given the permission before were not getting a prompt and as such were not receiving desktop notifications
|
||||
- Fix "Mark media as sensitive" string not supporting pluralizations in other languages in web UI ([ariasuni](https://github.com/tootsuite/mastodon/pull/15051))
|
||||
- Fix glitched image uploads when canvas read access is blocked in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15180))
|
||||
- Fix some account gallery items having empty labels in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/15073))
|
||||
- Fix alt-key hotkeys activating while typing in a text field in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14942))
|
||||
- Fix wrong seek bar width on media player in web UI ([mfmfuyu](https://github.com/tootsuite/mastodon/pull/15060))
|
||||
- Fix logging out on mobile in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14901))
|
||||
- Fix wrong click area for GIFVs in media modal in web UI ([noellabo](https://github.com/tootsuite/mastodon/pull/14615))
|
||||
- Fix unreadable placeholder text color in high contrast theme in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/14803))
|
||||
- Fix scrolling issues when closing some dropdown menus in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14606))
|
||||
- Fix notification filter bar incorrectly filtering gaps in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14808))
|
||||
- Fix disabled boost icon being replaced by private boost icon on hover in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14456))
|
||||
- Fix hashtag detection in compose form being different to server-side in web UI ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/14484), [ThibG](https://github.com/tootsuite/mastodon/pull/14513))
|
||||
- Fix home last read marker mishandling gaps in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14809))
|
||||
- Fix inefficiency when fetching hashtag timeline ([noellabo](https://github.com/tootsuite/mastodon/pull/14861), [akihikodaki](https://github.com/tootsuite/mastodon/pull/14662))
|
||||
- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14674))
|
||||
- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14673))
|
||||
- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/tootsuite/mastodon/pull/14675))
|
||||
- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/tootsuite/mastodon/pull/14534))
|
||||
- Fix PostgreSQL secret name for cronjob in Helm chart ([metal3d](https://github.com/tootsuite/mastodon/pull/15072))
|
||||
- Fix Procfile not being compatible with herokuish ([acuteaura](https://github.com/tootsuite/mastodon/pull/12685))
|
||||
- Fix installation of tini being split into multiple steps in Dockerfile ([ryncsn](https://github.com/tootsuite/mastodon/pull/14686))
|
||||
|
||||
### Security
|
||||
|
||||
- Fix streaming API allowing connections to persist after access token invalidation ([Gargron](https://github.com/tootsuite/mastodon/pull/15111))
|
||||
- Fix 2FA/sign-in token sessions being valid after password change ([Gargron](https://github.com/tootsuite/mastodon/pull/14802))
|
||||
|
||||
## [3.2.1] - 2020-10-19
|
||||
### Added
|
||||
|
||||
- Add support for latest HTTP Signatures spec draft ([ThibG](https://github.com/tootsuite/mastodon/pull/14556))
|
||||
- Add support for inlined objects in ActivityPub `to`/`cc` ([ThibG](https://github.com/tootsuite/mastodon/pull/14514))
|
||||
|
||||
### Changed
|
||||
|
||||
- Change actors to not be served at all without authentication in limited federation mode ([ThibG](https://github.com/tootsuite/mastodon/pull/14800))
|
||||
- Previously, a bare version of an actor was served when not authenticated, i.e. username and public key
|
||||
- Because all actor fetch requests are signed using a separate system actor, that is no longer required
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix `tootctl media` commands not recognizing very large IDs ([ThibG](https://github.com/tootsuite/mastodon/pull/14536))
|
||||
- Fix crash when failing to load emoji picker in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14525))
|
||||
- Fix contrast requirements in thumbnail color extraction ([ThibG](https://github.com/tootsuite/mastodon/pull/14464))
|
||||
- Fix audio/video player not using `CDN_HOST` on public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/14486))
|
||||
- Fix private boost icon not being used on public pages ([OmmyZhang](https://github.com/tootsuite/mastodon/pull/14471))
|
||||
- Fix audio player on Safari in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/14485), [ThibG](https://github.com/tootsuite/mastodon/pull/14465))
|
||||
- Fix dereferencing remote statuses not using the correct account for signature when receiving a targeted inbox delivery ([ThibG](https://github.com/tootsuite/mastodon/pull/14656))
|
||||
- Fix nil error in `tootctl media remove` ([noellabo](https://github.com/tootsuite/mastodon/pull/14657))
|
||||
- Fix videos with near-60 fps being rejected ([Gargron](https://github.com/tootsuite/mastodon/pull/14684))
|
||||
- Fix reported statuses not being included in warning e-mail ([Gargron](https://github.com/tootsuite/mastodon/pull/14778))
|
||||
- Fix `Reject` activities of `Follow` objects not correctly destroying a follow relationship ([ThibG](https://github.com/tootsuite/mastodon/pull/14479))
|
||||
- Fix inefficiencies in fan-out-on-write service ([Gargron](https://github.com/tootsuite/mastodon/pull/14682), [noellabo](https://github.com/tootsuite/mastodon/pull/14709))
|
||||
- Fix timeout errors when trying to webfinger some IPv6 configurations ([Gargron](https://github.com/tootsuite/mastodon/pull/14919))
|
||||
- Fix files served as `application/octet-stream` being rejected without attempting mime type detection ([ThibG](https://github.com/tootsuite/mastodon/pull/14452))
|
||||
|
||||
## [3.2.0] - 2020-07-27
|
||||
### Added
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ FROM ubuntu:20.04 as build-dep
|
|||
SHELL ["bash", "-c"]
|
||||
|
||||
# Install Node v12 (LTS)
|
||||
ENV NODE_VER="12.16.3"
|
||||
ENV NODE_VER="12.20.0"
|
||||
RUN ARCH= && \
|
||||
dpkgArch="$(dpkg --print-architecture)" && \
|
||||
case "${dpkgArch##*-}" in \
|
||||
|
|
@ -40,7 +40,7 @@ RUN apt update && \
|
|||
cd .. && rm -rf jemalloc-$JE_VER $JE_VER.tar.gz
|
||||
|
||||
# Install Ruby
|
||||
ENV RUBY_VER="2.6.6"
|
||||
ENV RUBY_VER="2.7.2"
|
||||
ENV CPPFLAGS="-I/opt/jemalloc/include"
|
||||
ENV LDFLAGS="-L/opt/jemalloc/lib/"
|
||||
RUN apt update && \
|
||||
|
|
|
|||
25
Gemfile
25
Gemfile
|
|
@ -11,16 +11,13 @@ gem 'sprockets', '~> 3.7.2'
|
|||
gem 'thor', '~> 1.0'
|
||||
gem 'rack', '~> 2.2.3'
|
||||
|
||||
gem 'thwait', '~> 0.2.0'
|
||||
gem 'e2mmap', '~> 0.1.0'
|
||||
|
||||
gem 'hamlit-rails', '~> 0.2'
|
||||
gem 'pg', '~> 1.2'
|
||||
gem 'makara', '~> 0.4'
|
||||
gem 'pghero', '~> 2.7'
|
||||
gem 'dotenv-rails', '~> 2.7'
|
||||
|
||||
gem 'aws-sdk-s3', '~> 1.83', require: false
|
||||
gem 'aws-sdk-s3', '~> 1.85', require: false
|
||||
gem 'fog-core', '<= 2.1.0'
|
||||
gem 'fog-openstack', '~> 0.3', require: false
|
||||
gem 'paperclip', '~> 6.0'
|
||||
|
|
@ -30,7 +27,7 @@ gem 'blurhash', '~> 0.1'
|
|||
|
||||
gem 'active_model_serializers', '~> 0.10'
|
||||
gem 'addressable', '~> 2.7'
|
||||
gem 'bootsnap', '~> 1.4', require: false
|
||||
gem 'bootsnap', '~> 1.5', require: false
|
||||
gem 'browser'
|
||||
gem 'charlock_holmes', '~> 0.7.7'
|
||||
gem 'iso-639'
|
||||
|
|
@ -44,9 +41,10 @@ group :pam_authentication, optional: true do
|
|||
end
|
||||
|
||||
gem 'net-ldap', '~> 0.16'
|
||||
gem 'omniauth-cas', '~> 1.1'
|
||||
gem 'omniauth-cas', '~> 2.0'
|
||||
gem 'omniauth-saml', '~> 1.10'
|
||||
gem 'omniauth', '~> 1.9'
|
||||
gem 'omniauth-rails_csrf_protection', '~> 0.1'
|
||||
|
||||
gem 'color_diff', '~> 0.1'
|
||||
gem 'discard', '~> 1.2'
|
||||
|
|
@ -71,7 +69,7 @@ gem 'nsa', '~> 0.2'
|
|||
gem 'oj', '~> 3.10'
|
||||
gem 'ox', '~> 2.13'
|
||||
gem 'parslet'
|
||||
gem 'parallel', '~> 1.19'
|
||||
gem 'parallel', '~> 1.20'
|
||||
gem 'posix-spawn'
|
||||
gem 'pundit', '~> 2.1'
|
||||
gem 'premailer-rails'
|
||||
|
|
@ -125,21 +123,21 @@ group :test do
|
|||
gem 'rails-controller-testing', '~> 1.0'
|
||||
gem 'rspec-sidekiq', '~> 3.1'
|
||||
gem 'simplecov', '~> 0.19', require: false
|
||||
gem 'webmock', '~> 3.9'
|
||||
gem 'parallel_tests', '~> 3.3'
|
||||
gem 'webmock', '~> 3.10'
|
||||
gem 'parallel_tests', '~> 3.4'
|
||||
gem 'rspec_junit_formatter', '~> 0.4'
|
||||
end
|
||||
|
||||
group :development do
|
||||
gem 'active_record_query_trace', '~> 1.7'
|
||||
gem 'active_record_query_trace', '~> 1.8'
|
||||
gem 'annotate', '~> 3.1'
|
||||
gem 'better_errors', '~> 2.8'
|
||||
gem 'better_errors', '~> 2.9'
|
||||
gem 'binding_of_caller', '~> 0.7'
|
||||
gem 'bullet', '~> 6.1'
|
||||
gem 'letter_opener', '~> 1.7'
|
||||
gem 'letter_opener_web', '~> 1.4'
|
||||
gem 'memory_profiler'
|
||||
gem 'rubocop', '~> 0.93', require: false
|
||||
gem 'rubocop', '~> 1.3', require: false
|
||||
gem 'rubocop-rails', '~> 2.8', require: false
|
||||
gem 'brakeman', '~> 4.10', require: false
|
||||
gem 'bundler-audit', '~> 0.7', require: false
|
||||
|
|
@ -159,3 +157,6 @@ end
|
|||
|
||||
gem 'concurrent-ruby', require: false
|
||||
gem 'connection_pool', require: false
|
||||
|
||||
gem 'xorcist', '~> 1.1'
|
||||
gem 'pluck_each', '~> 0.1.3'
|
||||
|
|
|
|||
84
Gemfile.lock
84
Gemfile.lock
|
|
@ -44,7 +44,7 @@ GEM
|
|||
activemodel (>= 4.1, < 6.1)
|
||||
case_transform (>= 0.2)
|
||||
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
||||
active_record_query_trace (1.7)
|
||||
active_record_query_trace (1.8)
|
||||
activejob (5.2.4.4)
|
||||
activesupport (= 5.2.4.4)
|
||||
globalid (>= 0.3.6)
|
||||
|
|
@ -79,8 +79,8 @@ GEM
|
|||
cocaine (~> 0.5.3)
|
||||
awrence (1.1.1)
|
||||
aws-eventstream (1.1.0)
|
||||
aws-partitions (1.380.0)
|
||||
aws-sdk-core (3.109.1)
|
||||
aws-partitions (1.397.0)
|
||||
aws-sdk-core (3.109.3)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.239.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
|
|
@ -88,14 +88,14 @@ GEM
|
|||
aws-sdk-kms (1.39.0)
|
||||
aws-sdk-core (~> 3, >= 3.109.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.83.0)
|
||||
aws-sdk-s3 (1.85.0)
|
||||
aws-sdk-core (~> 3, >= 3.109.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sigv4 (1.2.2)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
bcrypt (3.1.16)
|
||||
better_errors (2.8.3)
|
||||
better_errors (2.9.1)
|
||||
coderay (>= 1.0.0)
|
||||
erubi (>= 1.0.0)
|
||||
rack (>= 0.9.0)
|
||||
|
|
@ -104,7 +104,7 @@ GEM
|
|||
debug_inspector (>= 0.0.1)
|
||||
blurhash (0.1.4)
|
||||
ffi (~> 1.10.0)
|
||||
bootsnap (1.4.8)
|
||||
bootsnap (1.5.1)
|
||||
msgpack (~> 1.0)
|
||||
brakeman (4.10.0)
|
||||
browser (4.2.0)
|
||||
|
|
@ -289,7 +289,7 @@ GEM
|
|||
jmespath (1.4.0)
|
||||
json (2.3.1)
|
||||
json-canonicalization (0.2.0)
|
||||
json-ld (3.1.4)
|
||||
json-ld (3.1.5)
|
||||
htmlentities (~> 4.3)
|
||||
json-canonicalization (~> 0.2)
|
||||
link_header (~> 0.0, >= 0.0.8)
|
||||
|
|
@ -367,15 +367,18 @@ GEM
|
|||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
sidekiq (>= 3.5)
|
||||
statsd-ruby (~> 1.4, >= 1.4.0)
|
||||
oj (3.10.14)
|
||||
oj (3.10.16)
|
||||
omniauth (1.9.1)
|
||||
hashie (>= 3.4.6)
|
||||
rack (>= 1.6.2, < 3)
|
||||
omniauth-cas (1.1.1)
|
||||
omniauth-cas (2.0.0)
|
||||
addressable (~> 2.3)
|
||||
nokogiri (~> 1.5)
|
||||
omniauth (~> 1.2)
|
||||
omniauth-saml (1.10.2)
|
||||
omniauth-rails_csrf_protection (0.1.2)
|
||||
actionpack (>= 4.2)
|
||||
omniauth (>= 1.3.1)
|
||||
omniauth-saml (1.10.3)
|
||||
omniauth (~> 1.3, >= 1.3.2)
|
||||
ruby-saml (~> 1.9)
|
||||
openssl (2.2.0)
|
||||
|
|
@ -391,8 +394,8 @@ GEM
|
|||
paperclip-av-transcoder (0.6.4)
|
||||
av (~> 0.9.0)
|
||||
paperclip (>= 2.5.2)
|
||||
parallel (1.19.2)
|
||||
parallel_tests (3.3.0)
|
||||
parallel (1.20.1)
|
||||
parallel_tests (3.4.0)
|
||||
parallel
|
||||
parser (2.7.2.0)
|
||||
ast (~> 2.4.1)
|
||||
|
|
@ -403,6 +406,9 @@ GEM
|
|||
pghero (2.7.2)
|
||||
activerecord (>= 5)
|
||||
pkg-config (1.4.4)
|
||||
pluck_each (0.1.3)
|
||||
activerecord (> 3.2.0)
|
||||
activesupport (> 3.0.0)
|
||||
posix-spawn (0.3.15)
|
||||
premailer (1.14.2)
|
||||
addressable
|
||||
|
|
@ -421,7 +427,7 @@ GEM
|
|||
pry-rails (0.3.9)
|
||||
pry (>= 0.10.4)
|
||||
public_suffix (4.0.6)
|
||||
puma (5.0.2)
|
||||
puma (5.0.4)
|
||||
nio4r (~> 2.0)
|
||||
pundit (2.1.0)
|
||||
activesupport (>= 3.0.0)
|
||||
|
|
@ -470,12 +476,12 @@ GEM
|
|||
thor (>= 0.19.0, < 2.0)
|
||||
rainbow (3.0.0)
|
||||
rake (13.0.1)
|
||||
rdf (3.1.6)
|
||||
rdf (3.1.7)
|
||||
hamster (~> 3.0)
|
||||
link_header (~> 0.0, >= 0.0.8)
|
||||
rdf-normalize (0.4.0)
|
||||
rdf (~> 3.1)
|
||||
redis (4.2.2)
|
||||
redis (4.2.5)
|
||||
redis-actionpack (5.2.0)
|
||||
actionpack (>= 5, < 7)
|
||||
redis-rack (>= 2.1.0, < 3)
|
||||
|
|
@ -529,16 +535,16 @@ GEM
|
|||
rspec-support (3.9.3)
|
||||
rspec_junit_formatter (0.4.1)
|
||||
rspec-core (>= 2, < 4, != 2.12.0)
|
||||
rubocop (0.93.0)
|
||||
rubocop (1.3.1)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 2.7.1.5)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 1.8)
|
||||
rexml
|
||||
rubocop-ast (>= 0.6.0)
|
||||
rubocop-ast (>= 1.1.1)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 1.4.0, < 2.0)
|
||||
rubocop-ast (0.7.1)
|
||||
rubocop-ast (1.1.1)
|
||||
parser (>= 2.7.1.5)
|
||||
rubocop-rails (2.8.1)
|
||||
activesupport (>= 4.2.0)
|
||||
|
|
@ -570,7 +576,7 @@ GEM
|
|||
sidekiq (>= 3)
|
||||
thwait
|
||||
tilt (>= 1.4.0)
|
||||
sidekiq-unique-jobs (6.0.24)
|
||||
sidekiq-unique-jobs (6.0.25)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.5)
|
||||
sidekiq (>= 4.0, < 7.0)
|
||||
thor (>= 0.20, < 2.0)
|
||||
|
|
@ -579,7 +585,7 @@ GEM
|
|||
simple_form (5.0.3)
|
||||
actionpack (>= 5.0)
|
||||
activemodel (>= 5.0)
|
||||
simplecov (0.19.0)
|
||||
simplecov (0.19.1)
|
||||
docile (~> 1.1)
|
||||
simplecov-html (~> 0.11)
|
||||
simplecov-html (0.12.3)
|
||||
|
|
@ -593,12 +599,12 @@ GEM
|
|||
sshkit (1.21.0)
|
||||
net-scp (>= 1.1.2)
|
||||
net-ssh (>= 2.8.0)
|
||||
stackprof (0.2.15)
|
||||
stackprof (0.2.16)
|
||||
statsd-ruby (1.4.0)
|
||||
stoplight (2.2.1)
|
||||
streamio-ffmpeg (3.0.2)
|
||||
multi_json (~> 1.8)
|
||||
strong_migrations (0.7.1)
|
||||
strong_migrations (0.7.2)
|
||||
activerecord (>= 5)
|
||||
temple (0.8.2)
|
||||
terminal-table (1.8.0)
|
||||
|
|
@ -627,7 +633,7 @@ GEM
|
|||
unf (~> 0.1.0)
|
||||
tzinfo (1.2.7)
|
||||
thread_safe (~> 0.1)
|
||||
tzinfo-data (1.2020.2)
|
||||
tzinfo-data (1.2020.4)
|
||||
tzinfo (>= 1.0.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
|
|
@ -646,7 +652,7 @@ GEM
|
|||
safety_net_attestation (~> 0.4.0)
|
||||
securecompare (~> 1.0)
|
||||
tpm-key_attestation (~> 0.9.0)
|
||||
webmock (3.9.1)
|
||||
webmock (3.10.0)
|
||||
addressable (>= 2.3.6)
|
||||
crack (>= 0.3.2)
|
||||
hashdiff (>= 0.4.0, < 2.0.0)
|
||||
|
|
@ -662,6 +668,7 @@ GEM
|
|||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.5)
|
||||
wisper (2.0.1)
|
||||
xorcist (1.1.2)
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
|
||||
|
|
@ -670,14 +677,14 @@ PLATFORMS
|
|||
|
||||
DEPENDENCIES
|
||||
active_model_serializers (~> 0.10)
|
||||
active_record_query_trace (~> 1.7)
|
||||
active_record_query_trace (~> 1.8)
|
||||
addressable (~> 2.7)
|
||||
annotate (~> 3.1)
|
||||
aws-sdk-s3 (~> 1.83)
|
||||
better_errors (~> 2.8)
|
||||
aws-sdk-s3 (~> 1.85)
|
||||
better_errors (~> 2.9)
|
||||
binding_of_caller (~> 0.7)
|
||||
blurhash (~> 0.1)
|
||||
bootsnap (~> 1.4)
|
||||
bootsnap (~> 1.5)
|
||||
brakeman (~> 4.10)
|
||||
browser
|
||||
bullet (~> 6.1)
|
||||
|
|
@ -700,7 +707,6 @@ DEPENDENCIES
|
|||
discard (~> 1.2)
|
||||
doorkeeper (~> 5.4)
|
||||
dotenv-rails (~> 2.7)
|
||||
e2mmap (~> 0.1.0)
|
||||
ed25519 (~> 1.2)
|
||||
fabrication (~> 2.21)
|
||||
faker (~> 2.14)
|
||||
|
|
@ -737,17 +743,19 @@ DEPENDENCIES
|
|||
nsa (~> 0.2)
|
||||
oj (~> 3.10)
|
||||
omniauth (~> 1.9)
|
||||
omniauth-cas (~> 1.1)
|
||||
omniauth-cas (~> 2.0)
|
||||
omniauth-rails_csrf_protection (~> 0.1)
|
||||
omniauth-saml (~> 1.10)
|
||||
ox (~> 2.13)
|
||||
paperclip (~> 6.0)
|
||||
paperclip-av-transcoder (~> 0.6)
|
||||
parallel (~> 1.19)
|
||||
parallel_tests (~> 3.3)
|
||||
parallel (~> 1.20)
|
||||
parallel_tests (~> 3.4)
|
||||
parslet
|
||||
pg (~> 1.2)
|
||||
pghero (~> 2.7)
|
||||
pkg-config (~> 1.4)
|
||||
pluck_each (~> 0.1.3)
|
||||
posix-spawn
|
||||
premailer-rails
|
||||
private_address_check (~> 0.5)
|
||||
|
|
@ -770,7 +778,7 @@ DEPENDENCIES
|
|||
rspec-rails (~> 4.0)
|
||||
rspec-sidekiq (~> 3.1)
|
||||
rspec_junit_formatter (~> 0.4)
|
||||
rubocop (~> 0.93)
|
||||
rubocop (~> 1.3)
|
||||
rubocop-rails (~> 2.8)
|
||||
ruby-progressbar (~> 1.10)
|
||||
sanitize (~> 5.2)
|
||||
|
|
@ -788,11 +796,17 @@ DEPENDENCIES
|
|||
streamio-ffmpeg (~> 3.0)
|
||||
strong_migrations (~> 0.7)
|
||||
thor (~> 1.0)
|
||||
thwait (~> 0.2.0)
|
||||
tty-prompt (~> 0.22)
|
||||
twitter-text (~> 1.14)
|
||||
tzinfo-data (~> 1.2020)
|
||||
webauthn (~> 3.0.0.alpha1)
|
||||
webmock (~> 3.9)
|
||||
webmock (~> 3.10)
|
||||
webpacker (~> 5.2)
|
||||
webpush
|
||||
xorcist (~> 1.1)
|
||||
|
||||
RUBY VERSION
|
||||
ruby 2.7.2p137
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
|
|
|
|||
|
|
@ -102,6 +102,10 @@ class AccountsController < ApplicationController
|
|||
params[:username]
|
||||
end
|
||||
|
||||
def skip_temporary_suspension_response?
|
||||
request.format == :json
|
||||
end
|
||||
|
||||
def rss_url
|
||||
if tag_requested?
|
||||
short_account_tag_url(@account, params[:tag], format: 'rss')
|
||||
|
|
|
|||
|
|
@ -8,4 +8,8 @@ class ActivityPub::BaseController < Api::BaseController
|
|||
def set_cache_headers
|
||||
response.headers['Vary'] = 'Signature' if authorized_fetch_mode?
|
||||
end
|
||||
|
||||
def skip_temporary_suspension_response?
|
||||
false
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ActivityPub::FollowersSynchronizationsController < ActivityPub::BaseController
|
||||
include SignatureVerification
|
||||
include AccountOwnedConcern
|
||||
|
||||
before_action :require_signature!
|
||||
before_action :set_items
|
||||
before_action :set_cache_headers
|
||||
|
||||
def show
|
||||
expires_in 0, public: false
|
||||
render json: collection_presenter,
|
||||
serializer: ActivityPub::CollectionSerializer,
|
||||
adapter: ActivityPub::Adapter,
|
||||
content_type: 'application/activity+json'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def uri_prefix
|
||||
signed_request_account.uri[/http(s?):\/\/[^\/]+\//]
|
||||
end
|
||||
|
||||
def set_items
|
||||
@items = @account.followers.where(Account.arel_table[:uri].matches(uri_prefix + '%', false, true)).pluck(:uri)
|
||||
end
|
||||
|
||||
def collection_presenter
|
||||
ActivityPub::CollectionPresenter.new(
|
||||
id: account_followers_synchronization_url(@account),
|
||||
type: :ordered,
|
||||
items: @items
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
@ -11,6 +11,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
|
|||
|
||||
def create
|
||||
upgrade_account
|
||||
process_collection_synchronization
|
||||
process_payload
|
||||
head 202
|
||||
end
|
||||
|
|
@ -32,6 +33,10 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
|
|||
params[:account_username].present?
|
||||
end
|
||||
|
||||
def skip_temporary_suspension_response?
|
||||
true
|
||||
end
|
||||
|
||||
def body
|
||||
return @body if defined?(@body)
|
||||
|
||||
|
|
@ -52,6 +57,19 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
|
|||
DeliveryFailureTracker.reset!(signed_request_account.inbox_url)
|
||||
end
|
||||
|
||||
def process_collection_synchronization
|
||||
raw_params = request.headers['Collection-Synchronization']
|
||||
return if raw_params.blank? || ENV['DISABLE_FOLLOWERS_SYNCHRONIZATION'] == 'true'
|
||||
|
||||
# Re-using the syntax for signature parameters
|
||||
tree = SignatureParamsParser.new.parse(raw_params)
|
||||
params = SignatureParamsTransformer.new.apply(tree)
|
||||
|
||||
ActivityPub::PrepareFollowersSynchronizationService.new.call(signed_request_account, params)
|
||||
rescue Parslet::ParseFailed
|
||||
Rails.logger.warn 'Error parsing Collection-Synchronization header'
|
||||
end
|
||||
|
||||
def process_payload
|
||||
ActivityPub::ProcessingWorker.perform_async(signed_request_account.id, body, @account&.id)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
|
|||
end
|
||||
|
||||
def set_replies
|
||||
@replies = only_other_accounts? ? Status.where.not(account_id: @account.id) : @account.statuses
|
||||
@replies = only_other_accounts? ? Status.where.not(account_id: @account.id).joins(:account).merge(Account.without_suspended) : @account.statuses
|
||||
@replies = @replies.where(in_reply_to_id: @status.id, visibility: [:public, :unlisted])
|
||||
@replies = @replies.paginate_by_min_id(DESCENDANTS_LIMIT, params[:min_id])
|
||||
end
|
||||
|
|
|
|||
|
|
@ -53,6 +53,13 @@ module Admin
|
|||
redirect_to admin_account_path(@account.id), notice: I18n.t('admin.accounts.destroyed_msg', username: @account.acct)
|
||||
end
|
||||
|
||||
def unsensitive
|
||||
authorize @account, :unsensitive?
|
||||
@account.unsensitize!
|
||||
log_action :unsensitive, @account
|
||||
redirect_to admin_account_path(@account.id)
|
||||
end
|
||||
|
||||
def unsilence
|
||||
authorize @account, :unsilence?
|
||||
@account.unsilence!
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ class Admin::AnnouncementsController < Admin::BaseController
|
|||
private
|
||||
|
||||
def set_announcements
|
||||
@announcements = AnnouncementFilter.new(filter_params).results.page(params[:page])
|
||||
@announcements = AnnouncementFilter.new(filter_params).results.reverse_chronological.page(params[:page])
|
||||
end
|
||||
|
||||
def set_announcement
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ class Api::BaseController < ApplicationController
|
|||
elsif !current_user.functional?
|
||||
render json: { error: 'Your login is currently disabled' }, status: 403
|
||||
else
|
||||
set_user_activity
|
||||
update_user_sign_in
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ class Api::V1::Admin::AccountsController < Api::BaseController
|
|||
active
|
||||
pending
|
||||
disabled
|
||||
sensitized
|
||||
silenced
|
||||
suspended
|
||||
username
|
||||
|
|
@ -68,6 +69,13 @@ class Api::V1::Admin::AccountsController < Api::BaseController
|
|||
render json: @account, serializer: REST::Admin::AccountSerializer
|
||||
end
|
||||
|
||||
def unsensitive
|
||||
authorize @account, :unsensitive?
|
||||
@account.unsensitize!
|
||||
log_action :unsensitive, @account
|
||||
render json: @account, serializer: REST::Admin::AccountSerializer
|
||||
end
|
||||
|
||||
def unsilence
|
||||
authorize @account, :unsilence?
|
||||
@account.unsilence!
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ class Api::V1::Statuses::FavouritesController < Api::BaseController
|
|||
|
||||
before_action -> { doorkeeper_authorize! :write, :'write:favourites' }
|
||||
before_action :require_user!
|
||||
before_action :set_status
|
||||
before_action :set_status, only: [:create]
|
||||
|
||||
def create
|
||||
FavouriteService.new.call(current_account, @status)
|
||||
|
|
@ -13,8 +13,19 @@ class Api::V1::Statuses::FavouritesController < Api::BaseController
|
|||
end
|
||||
|
||||
def destroy
|
||||
UnfavouriteWorker.perform_async(current_account.id, @status.id)
|
||||
fav = current_account.favourites.find_by(status_id: params[:status_id])
|
||||
|
||||
if fav
|
||||
@status = fav.status
|
||||
UnfavouriteWorker.perform_async(current_account.id, @status.id)
|
||||
else
|
||||
@status = Status.find(params[:status_id])
|
||||
authorize @status, :show?
|
||||
end
|
||||
|
||||
render json: @status, serializer: REST::StatusSerializer, relationships: StatusRelationshipsPresenter.new([@status], current_account.id, favourites_map: { @status.id => false })
|
||||
rescue Mastodon::NotPermittedError
|
||||
not_found
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
|
||||
skip_before_action :require_no_authentication, only: [:create]
|
||||
skip_before_action :require_functional!
|
||||
skip_before_action :update_user_sign_in
|
||||
|
||||
include TwoFactorAuthenticationConcern
|
||||
include SignInTokenAuthenticationConcern
|
||||
|
|
@ -24,6 +25,7 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
|
||||
def create
|
||||
super do |resource|
|
||||
resource.update_sign_in!(request, new_sign_in: true)
|
||||
remember_me(resource)
|
||||
flash.delete(:notice)
|
||||
end
|
||||
|
|
@ -57,7 +59,7 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
|
||||
def find_user
|
||||
if session[:attempt_user_id]
|
||||
User.find(session[:attempt_user_id])
|
||||
User.find_by(id: session[:attempt_user_id])
|
||||
else
|
||||
user = User.authenticate_with_ldap(user_params) if Devise.ldap_authentication
|
||||
user ||= User.authenticate_with_pam(user_params) if Devise.pam_authentication
|
||||
|
|
@ -90,6 +92,7 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
|
||||
def require_no_authentication
|
||||
super
|
||||
|
||||
# Delete flash message that isn't entirely useful and may be confusing in
|
||||
# most cases because /web doesn't display/clear flash messages.
|
||||
flash.delete(:alert) if flash[:alert] == I18n.t('devise.failure.already_authenticated')
|
||||
|
|
@ -107,13 +110,30 @@ class Auth::SessionsController < Devise::SessionsController
|
|||
|
||||
def home_paths(resource)
|
||||
paths = [about_path]
|
||||
|
||||
if single_user_mode? && resource.is_a?(User)
|
||||
paths << short_account_path(username: resource.account)
|
||||
end
|
||||
|
||||
paths
|
||||
end
|
||||
|
||||
def continue_after?
|
||||
truthy_param?(:continue)
|
||||
end
|
||||
|
||||
def restart_session
|
||||
clear_attempt_from_session
|
||||
redirect_to new_user_session_path, alert: I18n.t('devise.failure.timeout')
|
||||
end
|
||||
|
||||
def set_attempt_session(user)
|
||||
session[:attempt_user_id] = user.id
|
||||
session[:attempt_user_updated_at] = user.updated_at.to_s
|
||||
end
|
||||
|
||||
def clear_attempt_from_session
|
||||
session.delete(:attempt_user_id)
|
||||
session.delete(:attempt_user_updated_at)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -29,6 +29,24 @@ module AccountOwnedConcern
|
|||
end
|
||||
|
||||
def check_account_suspension
|
||||
expires_in(3.minutes, public: true) && gone if @account.suspended?
|
||||
if @account.suspended_permanently?
|
||||
permanent_suspension_response
|
||||
elsif @account.suspended? && !skip_temporary_suspension_response?
|
||||
temporary_suspension_response
|
||||
end
|
||||
end
|
||||
|
||||
def skip_temporary_suspension_response?
|
||||
false
|
||||
end
|
||||
|
||||
def permanent_suspension_response
|
||||
expires_in(3.minutes, public: true)
|
||||
gone
|
||||
end
|
||||
|
||||
def temporary_suspension_response
|
||||
expires_in(3.minutes, public: true)
|
||||
forbidden
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@ module SignInTokenAuthenticationConcern
|
|||
def authenticate_with_sign_in_token
|
||||
user = self.resource = find_user
|
||||
|
||||
if user_params[:sign_in_token_attempt].present? && session[:attempt_user_id]
|
||||
if user.present? && session[:attempt_user_id].present? && session[:attempt_user_updated_at] != user.updated_at.to_s
|
||||
restart_session
|
||||
elsif user_params.key?(:sign_in_token_attempt) && session[:attempt_user_id]
|
||||
authenticate_with_sign_in_token_attempt(user)
|
||||
elsif user.present? && user.external_or_valid_password?(user_params[:password])
|
||||
prompt_for_sign_in_token(user)
|
||||
|
|
@ -27,7 +29,7 @@ module SignInTokenAuthenticationConcern
|
|||
|
||||
def authenticate_with_sign_in_token_attempt(user)
|
||||
if valid_sign_in_token_attempt?(user)
|
||||
session.delete(:attempt_user_id)
|
||||
clear_attempt_from_session
|
||||
remember_me(user)
|
||||
sign_in(user)
|
||||
else
|
||||
|
|
@ -42,10 +44,10 @@ module SignInTokenAuthenticationConcern
|
|||
UserMailer.sign_in_token(user, request.remote_ip, request.user_agent, Time.now.utc.to_s).deliver_later!
|
||||
end
|
||||
|
||||
set_locale do
|
||||
session[:attempt_user_id] = user.id
|
||||
@body_classes = 'lighter'
|
||||
render :sign_in_token
|
||||
end
|
||||
set_attempt_session(user)
|
||||
|
||||
@body_classes = 'lighter'
|
||||
|
||||
set_locale { render :sign_in_token }
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ module SignatureVerification
|
|||
raise SignatureVerificationError, 'Signed request date outside acceptable time window' unless matches_time_window?
|
||||
|
||||
verify_signature_strength!
|
||||
verify_body_digest!
|
||||
|
||||
account = account_from_key_id(signature_params['keyId'])
|
||||
|
||||
|
|
@ -126,10 +127,19 @@ module SignatureVerification
|
|||
def verify_signature_strength!
|
||||
raise SignatureVerificationError, 'Mastodon requires the Date header or (created) pseudo-header to be signed' unless signed_headers.include?('date') || signed_headers.include?('(created)')
|
||||
raise SignatureVerificationError, 'Mastodon requires the Digest header or (request-target) pseudo-header to be signed' unless signed_headers.include?(Request::REQUEST_TARGET) || signed_headers.include?('digest')
|
||||
raise SignatureVerificationError, 'Mastodon requires the Host header to be signed' unless signed_headers.include?('host')
|
||||
raise SignatureVerificationError, 'Mastodon requires the Host header to be signed when doing a GET request' if request.get? && !signed_headers.include?('host')
|
||||
raise SignatureVerificationError, 'Mastodon requires the Digest header to be signed when doing a POST request' if request.post? && !signed_headers.include?('digest')
|
||||
end
|
||||
|
||||
def verify_body_digest!
|
||||
return unless signed_headers.include?('digest')
|
||||
|
||||
digests = request.headers['Digest'].split(',').map { |digest| digest.split('=', 2) }.map { |key, value| [key.downcase, value] }
|
||||
sha256 = digests.assoc('sha-256')
|
||||
raise SignatureVerificationError, "Mastodon only supports SHA-256 in Digest header. Offered algorithms: #{digests.map(&:first).join(', ')}" if sha256.nil?
|
||||
raise SignatureVerificationError, "Invalid Digest value. Computed SHA-256 digest: #{body_digest}; given: #{sha256[1]}" if body_digest != sha256[1]
|
||||
end
|
||||
|
||||
def verify_signature(account, signature, compare_signed_string)
|
||||
if account.keypair.public_key.verify(OpenSSL::Digest.new('SHA256'), signature, compare_signed_string)
|
||||
@signed_request_account = account
|
||||
|
|
@ -153,8 +163,6 @@ module SignatureVerification
|
|||
raise SignatureVerificationError, 'Pseudo-header (expires) used but corresponding argument missing' if signature_params['expires'].blank?
|
||||
|
||||
"(expires): #{signature_params['expires']}"
|
||||
elsif signed_header == 'digest'
|
||||
"digest: #{body_digest}"
|
||||
else
|
||||
"#{signed_header}: #{request.headers[to_header_name(signed_header)]}"
|
||||
end
|
||||
|
|
@ -187,7 +195,7 @@ module SignatureVerification
|
|||
end
|
||||
|
||||
def body_digest
|
||||
"SHA-256=#{Digest::SHA256.base64digest(request_body)}"
|
||||
@body_digest ||= Digest::SHA256.base64digest(request_body)
|
||||
end
|
||||
|
||||
def to_header_name(name)
|
||||
|
|
|
|||
|
|
@ -37,9 +37,11 @@ module TwoFactorAuthenticationConcern
|
|||
def authenticate_with_two_factor
|
||||
user = self.resource = find_user
|
||||
|
||||
if user.webauthn_enabled? && user_params[:credential].present? && session[:attempt_user_id]
|
||||
if user.present? && session[:attempt_user_id].present? && session[:attempt_user_updated_at] != user.updated_at.to_s
|
||||
restart_session
|
||||
elsif user.webauthn_enabled? && user_params.key?(:credential) && session[:attempt_user_id]
|
||||
authenticate_with_two_factor_via_webauthn(user)
|
||||
elsif user_params[:otp_attempt].present? && session[:attempt_user_id]
|
||||
elsif user_params.key?(:otp_attempt) && session[:attempt_user_id]
|
||||
authenticate_with_two_factor_via_otp(user)
|
||||
elsif user.present? && user.external_or_valid_password?(user_params[:password])
|
||||
prompt_for_two_factor(user)
|
||||
|
|
@ -50,7 +52,7 @@ module TwoFactorAuthenticationConcern
|
|||
webauthn_credential = WebAuthn::Credential.from_get(user_params[:credential])
|
||||
|
||||
if valid_webauthn_credential?(user, webauthn_credential)
|
||||
session.delete(:attempt_user_id)
|
||||
clear_attempt_from_session
|
||||
remember_me(user)
|
||||
sign_in(user)
|
||||
render json: { redirect_path: root_path }, status: :ok
|
||||
|
|
@ -61,7 +63,7 @@ module TwoFactorAuthenticationConcern
|
|||
|
||||
def authenticate_with_two_factor_via_otp(user)
|
||||
if valid_otp_attempt?(user)
|
||||
session.delete(:attempt_user_id)
|
||||
clear_attempt_from_session
|
||||
remember_me(user)
|
||||
sign_in(user)
|
||||
else
|
||||
|
|
@ -71,16 +73,18 @@ module TwoFactorAuthenticationConcern
|
|||
end
|
||||
|
||||
def prompt_for_two_factor(user)
|
||||
set_locale do
|
||||
session[:attempt_user_id] = user.id
|
||||
@body_classes = 'lighter'
|
||||
@webauthn_enabled = user.webauthn_enabled?
|
||||
@scheme_type = if user.webauthn_enabled? && user_params[:otp_attempt].blank?
|
||||
'webauthn'
|
||||
else
|
||||
'totp'
|
||||
end
|
||||
render :two_factor
|
||||
set_attempt_session(user)
|
||||
|
||||
@body_classes = 'lighter'
|
||||
@webauthn_enabled = user.webauthn_enabled?
|
||||
@scheme_type = begin
|
||||
if user.webauthn_enabled? && user_params[:otp_attempt].blank?
|
||||
'webauthn'
|
||||
else
|
||||
'totp'
|
||||
end
|
||||
end
|
||||
|
||||
set_locale { render :two_factor }
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,14 +6,13 @@ module UserTrackingConcern
|
|||
UPDATE_SIGN_IN_HOURS = 24
|
||||
|
||||
included do
|
||||
before_action :set_user_activity
|
||||
before_action :update_user_sign_in
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_user_activity
|
||||
return unless user_needs_sign_in_update?
|
||||
current_user.update_tracked_fields!(request)
|
||||
def update_user_sign_in
|
||||
current_user.update_sign_in!(request) if user_needs_sign_in_update?
|
||||
end
|
||||
|
||||
def user_needs_sign_in_update?
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class FiltersController < ApplicationController
|
|||
before_action :set_body_classes
|
||||
|
||||
def index
|
||||
@filters = current_account.custom_filters
|
||||
@filters = current_account.custom_filters.order(:phrase)
|
||||
end
|
||||
|
||||
def new
|
||||
|
|
|
|||
|
|
@ -52,6 +52,14 @@ class FollowerAccountsController < ApplicationController
|
|||
account_followers_url(@account, page: page) unless page.nil?
|
||||
end
|
||||
|
||||
def next_page_url
|
||||
page_url(follows.next_page) if follows.respond_to?(:next_page)
|
||||
end
|
||||
|
||||
def prev_page_url
|
||||
page_url(follows.prev_page) if follows.respond_to?(:prev_page)
|
||||
end
|
||||
|
||||
def collection_presenter
|
||||
if page_requested?
|
||||
ActivityPub::CollectionPresenter.new(
|
||||
|
|
@ -60,8 +68,8 @@ class FollowerAccountsController < ApplicationController
|
|||
size: @account.followers_count,
|
||||
items: follows.map { |f| ActivityPub::TagManager.instance.uri_for(f.account) },
|
||||
part_of: account_followers_url(@account),
|
||||
next: page_url(follows.next_page),
|
||||
prev: page_url(follows.prev_page)
|
||||
next: next_page_url,
|
||||
prev: prev_page_url
|
||||
)
|
||||
else
|
||||
ActivityPub::CollectionPresenter.new(
|
||||
|
|
|
|||
|
|
@ -52,6 +52,14 @@ class FollowingAccountsController < ApplicationController
|
|||
account_following_index_url(@account, page: page) unless page.nil?
|
||||
end
|
||||
|
||||
def next_page_url
|
||||
page_url(follows.next_page) if follows.respond_to?(:next_page)
|
||||
end
|
||||
|
||||
def prev_page_url
|
||||
page_url(follows.prev_page) if follows.respond_to?(:prev_page)
|
||||
end
|
||||
|
||||
def collection_presenter
|
||||
if page_requested?
|
||||
ActivityPub::CollectionPresenter.new(
|
||||
|
|
@ -60,8 +68,8 @@ class FollowingAccountsController < ApplicationController
|
|||
size: @account.following_count,
|
||||
items: follows.map { |f| ActivityPub::TagManager.instance.uri_for(f.target_account) },
|
||||
part_of: account_following_index_url(@account),
|
||||
next: page_url(follows.next_page),
|
||||
prev: page_url(follows.prev_page)
|
||||
next: next_page_url,
|
||||
prev: prev_page_url
|
||||
)
|
||||
else
|
||||
ActivityPub::CollectionPresenter.new(
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ class RelationshipsController < ApplicationController
|
|||
|
||||
before_action :authenticate_user!
|
||||
before_action :set_accounts, only: :show
|
||||
before_action :set_relationships, only: :show
|
||||
before_action :set_body_classes
|
||||
|
||||
helper_method :following_relationship?, :followed_by_relationship?, :mutual_relationship?
|
||||
|
|
@ -28,6 +29,10 @@ class RelationshipsController < ApplicationController
|
|||
@accounts = RelationshipFilter.new(current_account, filter_params).results.page(params[:page]).per(40)
|
||||
end
|
||||
|
||||
def set_relationships
|
||||
@relationships = AccountRelationshipsPresenter.new(@accounts.pluck(:id), current_user.account_id)
|
||||
end
|
||||
|
||||
def form_account_batch_params
|
||||
params.require(:form_account_batch).permit(:action, account_ids: [])
|
||||
end
|
||||
|
|
@ -49,7 +54,9 @@ class RelationshipsController < ApplicationController
|
|||
end
|
||||
|
||||
def action_from_button
|
||||
if params[:unfollow]
|
||||
if params[:follow]
|
||||
'follow'
|
||||
elsif params[:unfollow]
|
||||
'unfollow'
|
||||
elsif params[:remove_from_followers]
|
||||
'remove_from_followers'
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class Settings::DeletesController < Settings::BaseController
|
|||
end
|
||||
|
||||
def destroy_account!
|
||||
current_account.suspend!
|
||||
current_account.suspend!(origin: :local)
|
||||
AccountDeletionWorker.perform_async(current_user.account_id)
|
||||
sign_out
|
||||
end
|
||||
|
|
|
|||
19
app/controllers/settings/exports/bookmarks_controller.rb
Normal file
19
app/controllers/settings/exports/bookmarks_controller.rb
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Settings
|
||||
module Exports
|
||||
class BookmarksController < BaseController
|
||||
include ExportControllerConcern
|
||||
|
||||
def index
|
||||
send_export_file
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def export_data
|
||||
@export.to_bookmarks_csv
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -35,7 +35,7 @@ module WellKnown
|
|||
end
|
||||
|
||||
def check_account_suspension
|
||||
expires_in(3.minutes, public: true) && gone if @account.suspended?
|
||||
expires_in(3.minutes, public: true) && gone if @account.suspended_permanently?
|
||||
end
|
||||
|
||||
def bad_request
|
||||
|
|
|
|||
|
|
@ -7,6 +7,13 @@ module ApplicationHelper
|
|||
follow
|
||||
).freeze
|
||||
|
||||
RTL_LOCALES = %i(
|
||||
ar
|
||||
fa
|
||||
he
|
||||
ku
|
||||
).freeze
|
||||
|
||||
def active_nav_class(*paths)
|
||||
paths.any? { |path| current_page?(path) } ? 'active' : ''
|
||||
end
|
||||
|
|
@ -44,7 +51,7 @@ module ApplicationHelper
|
|||
end
|
||||
|
||||
def locale_direction
|
||||
if [:ar, :fa, :he].include?(I18n.locale)
|
||||
if RTL_LOCALES.include?(I18n.locale)
|
||||
'rtl'
|
||||
else
|
||||
'ltr'
|
||||
|
|
@ -89,6 +96,16 @@ module ApplicationHelper
|
|||
end
|
||||
end
|
||||
|
||||
def interrelationships_icon(relationships, account_id)
|
||||
if relationships.following[account_id] && relationships.followed_by[account_id]
|
||||
fa_icon('exchange', title: I18n.t('relationships.mutual'), class: 'fa-fw active passive')
|
||||
elsif relationships.following[account_id]
|
||||
fa_icon(locale_direction == 'ltr' ? 'arrow-right' : 'arrow-left', title: I18n.t('relationships.following'), class: 'fa-fw active')
|
||||
elsif relationships.followed_by[account_id]
|
||||
fa_icon(locale_direction == 'ltr' ? 'arrow-left' : 'arrow-right', title: I18n.t('relationships.followers'), class: 'fa-fw passive')
|
||||
end
|
||||
end
|
||||
|
||||
def custom_emoji_tag(custom_emoji, animate = true)
|
||||
if animate
|
||||
image_tag(custom_emoji.image.url, class: 'emojione', alt: ":#{custom_emoji.shortcode}:")
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ module SettingsHelper
|
|||
kk: 'Қазақша',
|
||||
kn: 'ಕನ್ನಡ',
|
||||
ko: '한국어',
|
||||
ku: 'سۆرانی',
|
||||
lt: 'Lietuvių',
|
||||
lv: 'Latviešu',
|
||||
mk: 'Македонски',
|
||||
|
|
@ -56,6 +57,8 @@ module SettingsHelper
|
|||
pt: 'Português',
|
||||
ro: 'Română',
|
||||
ru: 'Русский',
|
||||
sa: 'संस्कृतम्',
|
||||
sc: 'Sardu',
|
||||
sk: 'Slovenčina',
|
||||
sl: 'Slovenščina',
|
||||
sq: 'Shqip',
|
||||
|
|
@ -69,6 +72,7 @@ module SettingsHelper
|
|||
uk: 'Українська',
|
||||
ur: 'اُردُو',
|
||||
vi: 'Tiếng Việt',
|
||||
zgh: 'ⵜⴰⵎⴰⵣⵉⵖⵜ',
|
||||
'zh-CN': '简体中文',
|
||||
'zh-HK': '繁體中文(香港)',
|
||||
'zh-TW': '繁體中文(臺灣)',
|
||||
|
|
|
|||
|
|
@ -4,8 +4,12 @@ module StatusesHelper
|
|||
EMBEDDED_CONTROLLER = 'statuses'
|
||||
EMBEDDED_ACTION = 'embed'
|
||||
|
||||
def link_to_more(url)
|
||||
link_to t('statuses.show_more'), url, class: 'load-more load-gap'
|
||||
def link_to_newer(url)
|
||||
link_to t('statuses.show_newer'), url, class: 'load-more load-gap'
|
||||
end
|
||||
|
||||
def link_to_older(url)
|
||||
link_to t('statuses.show_older'), url, class: 'load-more load-gap'
|
||||
end
|
||||
|
||||
def nothing_here(extra_classes = '')
|
||||
|
|
@ -117,6 +121,14 @@ module StatusesHelper
|
|||
end
|
||||
end
|
||||
|
||||
def sensitized?(status, account)
|
||||
if !account.nil? && account.id == status.account_id
|
||||
status.sensitive
|
||||
else
|
||||
status.account.sensitized? || status.sensitive
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def simplified_text(text)
|
||||
|
|
|
|||
|
|
@ -8,3 +8,10 @@ export const focusApp = () => ({
|
|||
export const unfocusApp = () => ({
|
||||
type: APP_UNFOCUS,
|
||||
});
|
||||
|
||||
export const APP_LAYOUT_CHANGE = 'APP_LAYOUT_CHANGE';
|
||||
|
||||
export const changeLayout = layout => ({
|
||||
type: APP_LAYOUT_CHANGE,
|
||||
layout,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -152,9 +152,7 @@ export function submitCompose(routerHistory) {
|
|||
'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']),
|
||||
},
|
||||
}).then(function (response) {
|
||||
if (response.data.visibility === 'direct' && getState().getIn(['conversations', 'mounted']) <= 0 && routerHistory) {
|
||||
routerHistory.push('/timelines/direct');
|
||||
} else if (routerHistory && routerHistory.location.pathname === '/statuses/new' && window.history.state) {
|
||||
if (routerHistory && routerHistory.location.pathname === '/statuses/new' && window.history.state) {
|
||||
routerHistory.goBack();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,8 +37,9 @@ export const NOTIFICATIONS_UNMOUNT = 'NOTIFICATIONS_UNMOUNT';
|
|||
|
||||
export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ';
|
||||
|
||||
export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT';
|
||||
export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION';
|
||||
export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT';
|
||||
export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION';
|
||||
export const NOTIFICATIONS_DISMISS_BROWSER_PERMISSION = 'NOTIFICATIONS_DISMISS_BROWSER_PERMISSION';
|
||||
|
||||
defineMessages({
|
||||
mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' },
|
||||
|
|
@ -256,7 +257,7 @@ export function setupBrowserNotifications() {
|
|||
if ('Notification' in window && 'permissions' in navigator) {
|
||||
navigator.permissions.query({ name: 'notifications' }).then((status) => {
|
||||
status.onchange = () => dispatch(setBrowserPermission(Notification.permission));
|
||||
});
|
||||
}).catch(console.warn);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -283,3 +284,7 @@ export function setBrowserPermission (value) {
|
|||
value,
|
||||
};
|
||||
}
|
||||
|
||||
export const dismissBrowserPermission = () => ({
|
||||
type: NOTIFICATIONS_DISMISS_BROWSER_PERMISSION,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import detectPassiveEvents from 'detect-passive-events';
|
||||
import { supportsPassiveEvents } from 'detect-passive-events';
|
||||
import { scrollTop } from '../scroll';
|
||||
|
||||
export default class Column extends React.PureComponent {
|
||||
|
|
@ -35,9 +35,9 @@ export default class Column extends React.PureComponent {
|
|||
|
||||
componentDidMount () {
|
||||
if (this.props.bindToDocument) {
|
||||
document.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false);
|
||||
document.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);
|
||||
} else {
|
||||
this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false);
|
||||
this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ import IconButton from './icon_button';
|
|||
import Overlay from 'react-overlays/lib/Overlay';
|
||||
import Motion from '../features/ui/util/optional_motion';
|
||||
import spring from 'react-motion/lib/spring';
|
||||
import detectPassiveEvents from 'detect-passive-events';
|
||||
import { supportsPassiveEvents } from 'detect-passive-events';
|
||||
|
||||
const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false;
|
||||
const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
|
||||
let id = 0;
|
||||
|
||||
class DropdownMenu extends React.PureComponent {
|
||||
|
|
|
|||
|
|
@ -1,19 +1,21 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import 'wicg-inert';
|
||||
import { normal } from 'color-blend';
|
||||
|
||||
export default class ModalRoot extends React.PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
children: PropTypes.node,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
backgroundColor: PropTypes.shape({
|
||||
r: PropTypes.number,
|
||||
g: PropTypes.number,
|
||||
b: PropTypes.number,
|
||||
}),
|
||||
};
|
||||
|
||||
state = {
|
||||
revealed: !!this.props.children,
|
||||
};
|
||||
|
||||
activeElement = this.state.revealed ? document.activeElement : null;
|
||||
activeElement = this.props.children ? document.activeElement : null;
|
||||
|
||||
handleKeyUp = (e) => {
|
||||
if ((e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27)
|
||||
|
|
@ -53,8 +55,6 @@ export default class ModalRoot extends React.PureComponent {
|
|||
this.activeElement = document.activeElement;
|
||||
|
||||
this.getSiblings().forEach(sibling => sibling.setAttribute('inert', true));
|
||||
} else if (!nextProps.children) {
|
||||
this.setState({ revealed: false });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -68,14 +68,7 @@ export default class ModalRoot extends React.PureComponent {
|
|||
Promise.resolve().then(() => {
|
||||
this.activeElement.focus({ preventScroll: true });
|
||||
this.activeElement = null;
|
||||
}).catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
}
|
||||
if (this.props.children) {
|
||||
requestAnimationFrame(() => {
|
||||
this.setState({ revealed: true });
|
||||
});
|
||||
}).catch(console.error);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -94,7 +87,6 @@ export default class ModalRoot extends React.PureComponent {
|
|||
|
||||
render () {
|
||||
const { children, onClose } = this.props;
|
||||
const { revealed } = this.state;
|
||||
const visible = !!children;
|
||||
|
||||
if (!visible) {
|
||||
|
|
@ -103,10 +95,16 @@ export default class ModalRoot extends React.PureComponent {
|
|||
);
|
||||
}
|
||||
|
||||
let backgroundColor = null;
|
||||
|
||||
if (this.props.backgroundColor) {
|
||||
backgroundColor = normal({ ...this.props.backgroundColor, a: 1 }, { r: 0, g: 0, b: 0, a: 0.3 });
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='modal-root' ref={this.setRef} style={{ opacity: revealed ? 1 : 0 }}>
|
||||
<div className='modal-root' ref={this.setRef}>
|
||||
<div style={{ pointerEvents: visible ? 'auto' : 'none' }}>
|
||||
<div role='presentation' className='modal-root__overlay' onClick={onClose} />
|
||||
<div role='presentation' className='modal-root__overlay' onClick={onClose} style={{ backgroundColor: backgroundColor ? `rgba(${backgroundColor.r}, ${backgroundColor.g}, ${backgroundColor.b}, 0.7)` : null }} />
|
||||
<div role='dialog' className='modal-root__container'>{children}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -97,7 +97,10 @@ class Status extends ImmutablePureComponent {
|
|||
cachedMediaWidth: PropTypes.number,
|
||||
scrollKey: PropTypes.string,
|
||||
deployPictureInPicture: PropTypes.func,
|
||||
usingPiP: PropTypes.bool,
|
||||
pictureInPicture: PropTypes.shape({
|
||||
inUse: PropTypes.bool,
|
||||
available: PropTypes.bool,
|
||||
}),
|
||||
};
|
||||
|
||||
// Avoid checking props that are functions (and whose equality will always
|
||||
|
|
@ -108,7 +111,7 @@ class Status extends ImmutablePureComponent {
|
|||
'muted',
|
||||
'hidden',
|
||||
'unread',
|
||||
'usingPiP',
|
||||
'pictureInPicture',
|
||||
];
|
||||
|
||||
state = {
|
||||
|
|
@ -190,22 +193,24 @@ class Status extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
handleOpenVideo = (media, options) => {
|
||||
this.props.onOpenVideo(media, options);
|
||||
this.props.onOpenVideo(this._properStatus().get('id'), media, options);
|
||||
}
|
||||
|
||||
handleOpenMedia = (media, index) => {
|
||||
this.props.onOpenMedia(this._properStatus().get('id'), media, index);
|
||||
}
|
||||
|
||||
handleHotkeyOpenMedia = e => {
|
||||
const { onOpenMedia, onOpenVideo } = this.props;
|
||||
const status = this._properStatus();
|
||||
const statusId = this._properStatus().get('id');
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if (status.get('media_attachments').size > 0) {
|
||||
if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {
|
||||
// TODO: toggle play/paused?
|
||||
} else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
|
||||
onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });
|
||||
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
|
||||
onOpenVideo(statusId, status.getIn(['media_attachments', 0]), { startTime: 0 });
|
||||
} else {
|
||||
onOpenMedia(status.get('media_attachments'), 0);
|
||||
onOpenMedia(statusId, status.get('media_attachments'), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -277,7 +282,7 @@ class Status extends ImmutablePureComponent {
|
|||
let media = null;
|
||||
let statusAvatar, prepend, rebloggedByText;
|
||||
|
||||
const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, usingPiP } = this.props;
|
||||
const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, pictureInPicture } = this.props;
|
||||
|
||||
let { status, account, ...other } = this.props;
|
||||
|
||||
|
|
@ -348,7 +353,7 @@ class Status extends ImmutablePureComponent {
|
|||
status = status.get('reblog');
|
||||
}
|
||||
|
||||
if (usingPiP) {
|
||||
if (pictureInPicture.inUse) {
|
||||
media = <PictureInPicturePlaceholder width={this.props.cachedMediaWidth} />;
|
||||
} else if (status.get('media_attachments').size > 0) {
|
||||
if (this.props.muted) {
|
||||
|
|
@ -375,7 +380,7 @@ class Status extends ImmutablePureComponent {
|
|||
width={this.props.cachedMediaWidth}
|
||||
height={110}
|
||||
cacheWidth={this.props.cacheMediaWidth}
|
||||
deployPictureInPicture={this.handleDeployPictureInPicture}
|
||||
deployPictureInPicture={pictureInPicture.available ? this.handleDeployPictureInPicture : undefined}
|
||||
/>
|
||||
)}
|
||||
</Bundle>
|
||||
|
|
@ -388,6 +393,7 @@ class Status extends ImmutablePureComponent {
|
|||
{Component => (
|
||||
<Component
|
||||
preview={attachment.get('preview_url')}
|
||||
frameRate={attachment.getIn(['meta', 'original', 'frame_rate'])}
|
||||
blurhash={attachment.get('blurhash')}
|
||||
src={attachment.get('url')}
|
||||
alt={attachment.get('description')}
|
||||
|
|
@ -397,7 +403,7 @@ class Status extends ImmutablePureComponent {
|
|||
sensitive={status.get('sensitive')}
|
||||
onOpenVideo={this.handleOpenVideo}
|
||||
cacheWidth={this.props.cacheMediaWidth}
|
||||
deployPictureInPicture={this.handleDeployPictureInPicture}
|
||||
deployPictureInPicture={pictureInPicture.available ? this.handleDeployPictureInPicture : undefined}
|
||||
visible={this.state.showMedia}
|
||||
onToggleVisibility={this.handleToggleMediaVisibility}
|
||||
/>
|
||||
|
|
@ -412,7 +418,7 @@ class Status extends ImmutablePureComponent {
|
|||
media={status.get('media_attachments')}
|
||||
sensitive={status.get('sensitive')}
|
||||
height={110}
|
||||
onOpenMedia={this.props.onOpenMedia}
|
||||
onOpenMedia={this.handleOpenMedia}
|
||||
cacheWidth={this.props.cacheMediaWidth}
|
||||
defaultWidth={this.props.cachedMediaWidth}
|
||||
visible={this.state.showMedia}
|
||||
|
|
@ -460,8 +466,10 @@ class Status extends ImmutablePureComponent {
|
|||
<div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted })} data-id={status.get('id')}>
|
||||
<div className='status__expand' onClick={this.handleExpandClick} role='presentation' />
|
||||
<div className='status__info'>
|
||||
<a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'><RelativeTimestamp timestamp={status.get('created_at')} /></a>
|
||||
<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>
|
||||
<a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'>
|
||||
<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>
|
||||
<RelativeTimestamp timestamp={status.get('created_at')} />
|
||||
</a>
|
||||
|
||||
<a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>
|
||||
<div className='status__avatar'>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ export default class MediaContainer extends PureComponent {
|
|||
media: null,
|
||||
index: null,
|
||||
time: null,
|
||||
backgroundColor: null,
|
||||
};
|
||||
|
||||
handleOpenMedia = (media, index) => {
|
||||
|
|
@ -52,7 +53,16 @@ export default class MediaContainer extends PureComponent {
|
|||
document.body.classList.remove('with-modals--active');
|
||||
document.documentElement.style.marginRight = 0;
|
||||
|
||||
this.setState({ media: null, index: null, time: null });
|
||||
this.setState({
|
||||
media: null,
|
||||
index: null,
|
||||
time: null,
|
||||
backgroundColor: null,
|
||||
});
|
||||
}
|
||||
|
||||
setBackgroundColor = color => {
|
||||
this.setState({ backgroundColor: color });
|
||||
}
|
||||
|
||||
render () {
|
||||
|
|
@ -85,13 +95,14 @@ export default class MediaContainer extends PureComponent {
|
|||
);
|
||||
})}
|
||||
|
||||
<ModalRoot onClose={this.handleCloseMedia}>
|
||||
<ModalRoot backgroundColor={this.state.backgroundColor} onClose={this.handleCloseMedia}>
|
||||
{this.state.media && (
|
||||
<MediaModal
|
||||
media={this.state.media}
|
||||
index={this.state.index || 0}
|
||||
time={this.state.time}
|
||||
onClose={this.handleCloseMedia}
|
||||
onChangeBackgroundColor={this.setBackgroundColor}
|
||||
/>
|
||||
)}
|
||||
</ModalRoot>
|
||||
|
|
|
|||
|
|
@ -57,7 +57,11 @@ const makeMapStateToProps = () => {
|
|||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
status: getStatus(state, props),
|
||||
usingPiP: state.get('picture_in_picture').statusId === props.id,
|
||||
|
||||
pictureInPicture: {
|
||||
inUse: state.getIn(['meta', 'layout']) !== 'mobile' && state.get('picture_in_picture').statusId === props.id,
|
||||
available: state.getIn(['meta', 'layout']) !== 'mobile',
|
||||
},
|
||||
});
|
||||
|
||||
return mapStateToProps;
|
||||
|
|
@ -148,12 +152,12 @@ const mapDispatchToProps = (dispatch, { intl }) => ({
|
|||
dispatch(mentionCompose(account, router));
|
||||
},
|
||||
|
||||
onOpenMedia (media, index) {
|
||||
dispatch(openModal('MEDIA', { media, index }));
|
||||
onOpenMedia (statusId, media, index) {
|
||||
dispatch(openModal('MEDIA', { statusId, media, index }));
|
||||
},
|
||||
|
||||
onOpenVideo (media, options) {
|
||||
dispatch(openModal('VIDEO', { media, options }));
|
||||
onOpenVideo (statusId, media, options) {
|
||||
dispatch(openModal('VIDEO', { statusId, media, options }));
|
||||
},
|
||||
|
||||
onBlock (status) {
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ export default class MediaItem extends ImmutablePureComponent {
|
|||
<div className='media-gallery__gifv'>
|
||||
{content}
|
||||
|
||||
<span className='media-gallery__gifv__label'>{label}</span>
|
||||
{label && <span className='media-gallery__gifv__label'>{label}</span>}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -105,15 +105,18 @@ class AccountGallery extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
handleOpenMedia = attachment => {
|
||||
const { dispatch } = this.props;
|
||||
const statusId = attachment.getIn(['status', 'id']);
|
||||
|
||||
if (attachment.get('type') === 'video') {
|
||||
this.props.dispatch(openModal('VIDEO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } }));
|
||||
dispatch(openModal('VIDEO', { media: attachment, statusId, options: { autoPlay: true } }));
|
||||
} else if (attachment.get('type') === 'audio') {
|
||||
this.props.dispatch(openModal('AUDIO', { media: attachment, status: attachment.get('status'), options: { autoPlay: true } }));
|
||||
dispatch(openModal('AUDIO', { media: attachment, statusId, options: { autoPlay: true } }));
|
||||
} else {
|
||||
const media = attachment.getIn(['status', 'media_attachments']);
|
||||
const index = media.findIndex(x => x.get('id') === attachment.get('id'));
|
||||
|
||||
this.props.dispatch(openModal('MEDIA', { media, index, status: attachment.get('status') }));
|
||||
dispatch(openModal('MEDIA', { media, index, statusId }));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -246,7 +246,7 @@ class Audio extends React.PureComponent {
|
|||
handleTimeUpdate = () => {
|
||||
this.setState({
|
||||
currentTime: this.audio.currentTime,
|
||||
duration: Math.floor(this.audio.duration),
|
||||
duration: this.audio.duration,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -386,13 +386,59 @@ class Audio extends React.PureComponent {
|
|||
return this.props.foregroundColor || '#ffffff';
|
||||
}
|
||||
|
||||
seekBy (time) {
|
||||
const currentTime = this.audio.currentTime + time;
|
||||
|
||||
if (!isNaN(currentTime)) {
|
||||
this.setState({ currentTime }, () => {
|
||||
this.audio.currentTime = currentTime;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
handleAudioKeyDown = e => {
|
||||
// On the audio element or the seek bar, we can safely use the space bar
|
||||
// for playback control because there are no buttons to press
|
||||
|
||||
if (e.key === ' ') {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.togglePlay();
|
||||
}
|
||||
}
|
||||
|
||||
handleKeyDown = e => {
|
||||
switch(e.key) {
|
||||
case 'k':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.togglePlay();
|
||||
break;
|
||||
case 'm':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.toggleMute();
|
||||
break;
|
||||
case 'j':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.seekBy(-10);
|
||||
break;
|
||||
case 'l':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.seekBy(10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
const { src, intl, alt, editable, autoPlay } = this.props;
|
||||
const { paused, muted, volume, currentTime, duration, buffer, dragging } = this.state;
|
||||
const progress = Math.min((currentTime / duration) * 100, 100);
|
||||
|
||||
return (
|
||||
<div className={classNames('audio-player', { editable })} ref={this.setPlayerRef} style={{ backgroundColor: this._getBackgroundColor(), color: this._getForegroundColor(), width: '100%', height: this.props.fullscreen ? '100%' : (this.state.height || this.props.height) }} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave}>
|
||||
<div className={classNames('audio-player', { editable })} ref={this.setPlayerRef} style={{ backgroundColor: this._getBackgroundColor(), color: this._getForegroundColor(), width: '100%', height: this.props.fullscreen ? '100%' : (this.state.height || this.props.height) }} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} tabIndex='0' onKeyDown={this.handleKeyDown}>
|
||||
<audio
|
||||
src={src}
|
||||
ref={this.setAudioRef}
|
||||
|
|
@ -406,12 +452,14 @@ class Audio extends React.PureComponent {
|
|||
|
||||
<canvas
|
||||
role='button'
|
||||
tabIndex='0'
|
||||
className='audio-player__canvas'
|
||||
width={this.state.width}
|
||||
height={this.state.height}
|
||||
style={{ width: '100%', position: 'absolute', top: 0, left: 0 }}
|
||||
ref={this.setCanvasRef}
|
||||
onClick={this.togglePlay}
|
||||
onKeyDown={this.handleAudioKeyDown}
|
||||
title={alt}
|
||||
aria-label={alt}
|
||||
/>
|
||||
|
|
@ -432,20 +480,21 @@ class Audio extends React.PureComponent {
|
|||
className={classNames('video-player__seek__handle', { active: dragging })}
|
||||
tabIndex='0'
|
||||
style={{ left: `${progress}%`, backgroundColor: this._getAccentColor() }}
|
||||
onKeyDown={this.handleAudioKeyDown}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='video-player__controls active'>
|
||||
<div className='video-player__buttons-bar'>
|
||||
<div className='video-player__buttons left'>
|
||||
<button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button>
|
||||
<button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button>
|
||||
<button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} className='player-button' onClick={this.togglePlay}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button>
|
||||
<button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} className='player-button' onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button>
|
||||
|
||||
<div className={classNames('video-player__volume', { active: this.state.hovered })} ref={this.setVolumeRef} onMouseDown={this.handleVolumeMouseDown}>
|
||||
<div className='video-player__volume__current' style={{ width: `${volume * 100}%`, backgroundColor: this._getAccentColor() }} />
|
||||
|
||||
<span
|
||||
className={classNames('video-player__volume__handle')}
|
||||
className='video-player__volume__handle'
|
||||
tabIndex='0'
|
||||
style={{ left: `${volume * 100}%`, backgroundColor: this._getAccentColor() }}
|
||||
/>
|
||||
|
|
@ -454,12 +503,14 @@ class Audio extends React.PureComponent {
|
|||
<span className='video-player__time'>
|
||||
<span className='video-player__time-current'>{formatTime(Math.floor(currentTime))}</span>
|
||||
<span className='video-player__time-sep'>/</span>
|
||||
<span className='video-player__time-total'>{formatTime(this.state.duration || Math.floor(this.props.duration))}</span>
|
||||
<span className='video-player__time-total'>{formatTime(Math.floor(this.state.duration || this.props.duration))}</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div className='video-player__buttons right'>
|
||||
<button type='button' title={intl.formatMessage(messages.download)} aria-label={intl.formatMessage(messages.download)} onClick={this.handleDownload}><Icon id='download' fixedWidth /></button>
|
||||
<a title={intl.formatMessage(messages.download)} aria-label={intl.formatMessage(messages.download)} className='video-player__download__icon player-button' href={this.props.src} download>
|
||||
<Icon id={'download'} fixedWidth />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -79,6 +79,18 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
}
|
||||
}
|
||||
|
||||
getFulltextForCharacterCounting = () => {
|
||||
return [this.props.spoiler? this.props.spoilerText: '', countableText(this.props.text)].join('');
|
||||
}
|
||||
|
||||
canSubmit = () => {
|
||||
const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;
|
||||
const fulltext = this.getFulltextForCharacterCounting();
|
||||
const isOnlyWhitespace = fulltext.length !== 0 && fulltext.trim().length === 0;
|
||||
|
||||
return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > maxChars || (isOnlyWhitespace && !anyMedia));
|
||||
}
|
||||
|
||||
handleSubmit = () => {
|
||||
if (this.props.text !== this.autosuggestTextarea.textarea.value) {
|
||||
// Something changed the text inside the textarea (e.g. browser extensions like Grammarly)
|
||||
|
|
@ -86,11 +98,7 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
this.props.onChange(this.autosuggestTextarea.textarea.value);
|
||||
}
|
||||
|
||||
// Submit disabled:
|
||||
const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;
|
||||
const fulltext = [this.props.spoilerText, countableText(this.props.text)].join('');
|
||||
|
||||
if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > maxChars || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) {
|
||||
if (!this.canSubmit()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -180,10 +188,8 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { intl, onPaste, showSearch, anyMedia } = this.props;
|
||||
const { intl, onPaste, showSearch } = this.props;
|
||||
const disabled = this.props.isSubmitting;
|
||||
const text = [this.props.spoilerText, countableText(this.props.text)].join('');
|
||||
const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > maxChars || (text.length !== 0 && text.trim().length === 0 && !anyMedia);
|
||||
let publishText = '';
|
||||
|
||||
if (this.props.privacy === 'private' || this.props.privacy === 'direct') {
|
||||
|
|
@ -245,11 +251,11 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
<PrivacyDropdownContainer />
|
||||
<SpoilerButtonContainer />
|
||||
</div>
|
||||
<div className='character-counter__wrapper'><CharacterCounter max={maxChars} text={text} /></div>
|
||||
<div className='character-counter__wrapper'><CharacterCounter max={500} text={this.getFulltextForCharacterCounting()} /></div>
|
||||
</div>
|
||||
|
||||
<div className='compose-form__publish'>
|
||||
<div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={disabledButton} block /></div>
|
||||
<div className='compose-form__publish-button-wrapper'><Button text={publishText} onClick={this.handleSubmit} disabled={!this.canSubmit()} block /></div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components'
|
|||
import Overlay from 'react-overlays/lib/Overlay';
|
||||
import classNames from 'classnames';
|
||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import detectPassiveEvents from 'detect-passive-events';
|
||||
import { supportsPassiveEvents } from 'detect-passive-events';
|
||||
import { buildCustomEmojis, categoriesFromEmojis } from '../../emoji/emoji';
|
||||
import { assetHost } from 'mastodon/utils/config';
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ const messages = defineMessages({
|
|||
let EmojiPicker, Emoji; // load asynchronously
|
||||
|
||||
const backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`;
|
||||
const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false;
|
||||
const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
|
||||
|
||||
class ModifierPickerMenu extends React.PureComponent {
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import IconButton from '../../../components/icon_button';
|
|||
import Overlay from 'react-overlays/lib/Overlay';
|
||||
import Motion from '../../ui/util/optional_motion';
|
||||
import spring from 'react-motion/lib/spring';
|
||||
import detectPassiveEvents from 'detect-passive-events';
|
||||
import { supportsPassiveEvents } from 'detect-passive-events';
|
||||
import classNames from 'classnames';
|
||||
import Icon from 'mastodon/components/icon';
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ const messages = defineMessages({
|
|||
change_privacy: { id: 'privacy.change', defaultMessage: 'Adjust status privacy' },
|
||||
});
|
||||
|
||||
const listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false;
|
||||
const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
|
||||
|
||||
class PrivacyDropdownMenu extends React.PureComponent {
|
||||
|
||||
|
|
|
|||
|
|
@ -6,13 +6,20 @@ import { changeComposeSensitivity } from 'mastodon/actions/compose';
|
|||
import { injectIntl, defineMessages, FormattedMessage } from 'react-intl';
|
||||
|
||||
const messages = defineMessages({
|
||||
marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' },
|
||||
unmarked: { id: 'compose_form.sensitive.unmarked', defaultMessage: 'Media is not marked as sensitive' },
|
||||
marked: {
|
||||
id: 'compose_form.sensitive.marked',
|
||||
defaultMessage: '{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}',
|
||||
},
|
||||
unmarked: {
|
||||
id: 'compose_form.sensitive.unmarked',
|
||||
defaultMessage: '{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}',
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
active: state.getIn(['compose', 'sensitive']),
|
||||
disabled: state.getIn(['compose', 'spoiler']),
|
||||
mediaCount: state.getIn(['compose', 'media_attachments']).size,
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
|
|
@ -28,16 +35,17 @@ class SensitiveButton extends React.PureComponent {
|
|||
static propTypes = {
|
||||
active: PropTypes.bool,
|
||||
disabled: PropTypes.bool,
|
||||
mediaCount: PropTypes.number,
|
||||
onClick: PropTypes.func.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { active, disabled, onClick, intl } = this.props;
|
||||
const { active, disabled, mediaCount, onClick, intl } = this.props;
|
||||
|
||||
return (
|
||||
<div className='compose-form__sensitive-button'>
|
||||
<label className={classNames('icon-button', { active })} title={intl.formatMessage(active ? messages.marked : messages.unmarked)}>
|
||||
<label className={classNames('icon-button', { active })} title={intl.formatMessage(active ? messages.marked : messages.unmarked, { count: mediaCount })}>
|
||||
<input
|
||||
name='mark-sensitive'
|
||||
type='checkbox'
|
||||
|
|
@ -48,7 +56,11 @@ class SensitiveButton extends React.PureComponent {
|
|||
|
||||
<span className={classNames('checkbox', { active })} />
|
||||
|
||||
<FormattedMessage id='compose_form.sensitive.hide' defaultMessage='Mark media as sensitive' />
|
||||
<FormattedMessage
|
||||
id='compose_form.sensitive.hide'
|
||||
defaultMessage='{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}'
|
||||
values={{ count: mediaCount }}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -396,7 +396,7 @@ class Announcements extends ImmutablePureComponent {
|
|||
_markAnnouncementAsRead () {
|
||||
const { dismissAnnouncement, announcements } = this.props;
|
||||
const { index } = this.state;
|
||||
const announcement = announcements.get(index);
|
||||
const announcement = announcements.get(announcements.size - 1 - index);
|
||||
if (!announcement.get('read')) dismissAnnouncement(announcement.get('id'));
|
||||
}
|
||||
|
||||
|
|
@ -437,7 +437,7 @@ class Announcements extends ImmutablePureComponent {
|
|||
selected={index === idx}
|
||||
disabled={disableSwiping}
|
||||
/>
|
||||
))}
|
||||
)).reverse()}
|
||||
</ReactSwipeableViews>
|
||||
|
||||
{announcements.size > 1 && (
|
||||
|
|
|
|||
|
|
@ -1,25 +1,42 @@
|
|||
import React from 'react';
|
||||
import Icon from 'mastodon/components/icon';
|
||||
import Button from 'mastodon/components/button';
|
||||
import { requestBrowserPermission } from 'mastodon/actions/notifications';
|
||||
import IconButton from 'mastodon/components/icon_button';
|
||||
import { requestBrowserPermission, dismissBrowserPermission } from 'mastodon/actions/notifications';
|
||||
import { connect } from 'react-redux';
|
||||
import PropTypes from 'prop-types';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||
|
||||
export default @connect(() => {})
|
||||
const messages = defineMessages({
|
||||
close: { id: 'lightbox.close', defaultMessage: 'Close' },
|
||||
});
|
||||
|
||||
export default @connect()
|
||||
@injectIntl
|
||||
class NotificationsPermissionBanner extends React.PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
handleClick = () => {
|
||||
this.props.dispatch(requestBrowserPermission());
|
||||
}
|
||||
|
||||
handleClose = () => {
|
||||
this.props.dispatch(dismissBrowserPermission());
|
||||
}
|
||||
|
||||
render () {
|
||||
const { intl } = this.props;
|
||||
|
||||
return (
|
||||
<div className='notifications-permission-banner'>
|
||||
<div className='notifications-permission-banner__close'>
|
||||
<IconButton icon='times' onClick={this.handleClose} title={intl.formatMessage(messages.close)} />
|
||||
</div>
|
||||
|
||||
<h2><FormattedMessage id='notifications_permission_banner.title' defaultMessage='Never miss a thing' /></h2>
|
||||
<p><FormattedMessage id='notifications_permission_banner.how_to_control' defaultMessage="To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled." values={{ icon: <Icon id='sliders' /> }} /></p>
|
||||
<Button onClick={this.handleClick}><FormattedMessage id='notifications_permission_banner.enable' defaultMessage='Enable desktop notifications' /></Button>
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ const messages = defineMessages({
|
|||
favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },
|
||||
replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },
|
||||
replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },
|
||||
open: { id: 'status.open', defaultMessage: 'Expand this status' },
|
||||
});
|
||||
|
||||
const makeMapStateToProps = () => {
|
||||
|
|
@ -49,11 +50,19 @@ class Footer extends ImmutablePureComponent {
|
|||
intl: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
askReplyConfirmation: PropTypes.bool,
|
||||
withOpenButton: PropTypes.bool,
|
||||
onClose: PropTypes.func,
|
||||
};
|
||||
|
||||
_performReply = () => {
|
||||
const { dispatch, status } = this.props;
|
||||
dispatch(replyCompose(status, this.context.router.history));
|
||||
const { dispatch, status, onClose } = this.props;
|
||||
const { router } = this.context;
|
||||
|
||||
if (onClose) {
|
||||
onClose();
|
||||
}
|
||||
|
||||
dispatch(replyCompose(status, router.history));
|
||||
};
|
||||
|
||||
handleReplyClick = () => {
|
||||
|
|
@ -97,8 +106,20 @@ class Footer extends ImmutablePureComponent {
|
|||
}
|
||||
};
|
||||
|
||||
handleOpenClick = e => {
|
||||
const { router } = this.context;
|
||||
|
||||
if (e.button !== 0 || !router) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { status } = this.props;
|
||||
|
||||
router.history.push(`/statuses/${status.get('id')}`);
|
||||
}
|
||||
|
||||
render () {
|
||||
const { status, intl } = this.props;
|
||||
const { status, intl, withOpenButton } = this.props;
|
||||
|
||||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
||||
const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';
|
||||
|
|
@ -130,6 +151,7 @@ class Footer extends ImmutablePureComponent {
|
|||
<IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} counter={status.get('replies_count')} obfuscateCount />
|
||||
<IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} counter={status.get('reblogs_count')} />
|
||||
<IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={status.get('favourites_count')} />
|
||||
{withOpenButton && <IconButton className='status__action-bar-button' title={intl.formatMessage(messages.open)} icon='external-link' onClick={this.handleOpenClick} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,12 +7,18 @@ import IconButton from 'mastodon/components/icon_button';
|
|||
import { Link } from 'react-router-dom';
|
||||
import Avatar from 'mastodon/components/avatar';
|
||||
import DisplayName from 'mastodon/components/display_name';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
|
||||
const messages = defineMessages({
|
||||
close: { id: 'lightbox.close', defaultMessage: 'Close' },
|
||||
});
|
||||
|
||||
const mapStateToProps = (state, { accountId }) => ({
|
||||
account: state.getIn(['accounts', accountId]),
|
||||
});
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
@injectIntl
|
||||
class Header extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
|
|
@ -20,10 +26,11 @@ class Header extends ImmutablePureComponent {
|
|||
statusId: PropTypes.string.isRequired,
|
||||
account: ImmutablePropTypes.map.isRequired,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { account, statusId, onClose } = this.props;
|
||||
const { account, statusId, onClose, intl } = this.props;
|
||||
|
||||
return (
|
||||
<div className='picture-in-picture__header'>
|
||||
|
|
@ -32,7 +39,7 @@ class Header extends ImmutablePureComponent {
|
|||
<DisplayName account={account} />
|
||||
</Link>
|
||||
|
||||
<IconButton icon='times' onClick={onClose} title='Close' />
|
||||
<IconButton icon='times' onClick={onClose} title={intl.formatMessage(messages.close)} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
|||
media = (
|
||||
<Video
|
||||
preview={attachment.get('preview_url')}
|
||||
frameRate={attachment.getIn(['meta', 'original', 'frame_rate'])}
|
||||
blurhash={attachment.get('blurhash')}
|
||||
src={attachment.get('url')}
|
||||
alt={attachment.get('description')}
|
||||
|
|
|
|||
|
|
@ -276,22 +276,20 @@ class Status extends ImmutablePureComponent {
|
|||
}
|
||||
|
||||
handleOpenMedia = (media, index) => {
|
||||
this.props.dispatch(openModal('MEDIA', { media, index }));
|
||||
this.props.dispatch(openModal('MEDIA', { statusId: this.props.status.get('id'), media, index }));
|
||||
}
|
||||
|
||||
handleOpenVideo = (media, options) => {
|
||||
this.props.dispatch(openModal('VIDEO', { media, options }));
|
||||
this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.get('id'), media, options }));
|
||||
}
|
||||
|
||||
handleHotkeyOpenMedia = e => {
|
||||
const status = this._properStatus();
|
||||
const { status } = this.props;
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if (status.get('media_attachments').size > 0) {
|
||||
if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {
|
||||
// TODO: toggle play/paused?
|
||||
} else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
|
||||
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
|
||||
this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });
|
||||
} else {
|
||||
this.handleOpenMedia(status.get('media_attachments'), 0);
|
||||
|
|
|
|||
|
|
@ -75,9 +75,10 @@ class BoostModal extends ImmutablePureComponent {
|
|||
<div className={classNames('status', `status-${status.get('visibility')}`, 'light')}>
|
||||
<div className='boost-modal__status-header'>
|
||||
<div className='boost-modal__status-time'>
|
||||
<a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'><RelativeTimestamp timestamp={status.get('created_at')} /></a>
|
||||
<a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'>
|
||||
<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>
|
||||
<RelativeTimestamp timestamp={status.get('created_at')} /></a>
|
||||
</div>
|
||||
<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>
|
||||
|
||||
<a onClick={this.handleAccountClick} href={status.getIn(['account', 'url'])} className='status__display-name'>
|
||||
<div className='status__avatar'>
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ import Icon from 'mastodon/components/icon';
|
|||
import ComposePanel from './compose_panel';
|
||||
import NavigationPanel from './navigation_panel';
|
||||
|
||||
import detectPassiveEvents from 'detect-passive-events';
|
||||
import { supportsPassiveEvents } from 'detect-passive-events';
|
||||
import { scrollRight } from '../../../scroll';
|
||||
|
||||
const componentMap = {
|
||||
|
|
@ -80,7 +80,7 @@ class ColumnsArea extends ImmutablePureComponent {
|
|||
|
||||
componentDidMount() {
|
||||
if (!this.props.singleColumn) {
|
||||
this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false);
|
||||
this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);
|
||||
}
|
||||
|
||||
this.lastIndex = getIndex(this.context.router.history.location.pathname);
|
||||
|
|
@ -97,7 +97,7 @@ class ColumnsArea extends ImmutablePureComponent {
|
|||
|
||||
componentDidUpdate(prevProps) {
|
||||
if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) {
|
||||
this.node.addEventListener('wheel', this.handleWheel, detectPassiveEvents.hasSupport ? { passive: true } : false);
|
||||
this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);
|
||||
}
|
||||
this.lastIndex = getIndex(this.context.router.history.location.pathname);
|
||||
this.setState({ shouldAnimate: true });
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@ import { length } from 'stringz';
|
|||
import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
|
||||
import GIFV from 'mastodon/components/gifv';
|
||||
import { me } from 'mastodon/initial_state';
|
||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||
import tesseractCorePath from 'tesseract.js-core/tesseract-core.wasm.js';
|
||||
// eslint-disable-next-line import/extensions
|
||||
import tesseractWorkerPath from 'tesseract.js/dist/worker.min.js';
|
||||
import { assetHost } from 'mastodon/utils/config';
|
||||
|
||||
|
|
@ -386,6 +388,7 @@ class FocalPointModal extends ImmutablePureComponent {
|
|||
{media.get('type') === 'video' && (
|
||||
<Video
|
||||
preview={media.get('preview_url')}
|
||||
frameRate={media.getIn(['meta', 'original', 'frame_rate'])}
|
||||
blurhash={media.get('blurhash')}
|
||||
src={media.get('url')}
|
||||
detailed
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ export default class ImageLoader extends React.PureComponent {
|
|||
width: PropTypes.number,
|
||||
height: PropTypes.number,
|
||||
onClick: PropTypes.func,
|
||||
zoomButtonHidden: PropTypes.bool,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
|
|
@ -151,6 +152,9 @@ export default class ImageLoader extends React.PureComponent {
|
|||
alt={alt}
|
||||
src={src}
|
||||
onClick={onClick}
|
||||
width={width}
|
||||
height={height}
|
||||
zoomButtonHidden={this.props.zoomButtonHidden}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -4,13 +4,14 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
|||
import PropTypes from 'prop-types';
|
||||
import Video from 'mastodon/features/video';
|
||||
import classNames from 'classnames';
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
import IconButton from 'mastodon/components/icon_button';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import ImageLoader from './image_loader';
|
||||
import Icon from 'mastodon/components/icon';
|
||||
import GIFV from 'mastodon/components/gifv';
|
||||
import { disableSwiping } from 'mastodon/initial_state';
|
||||
import Footer from 'mastodon/features/picture_in_picture/components/footer';
|
||||
|
||||
const messages = defineMessages({
|
||||
close: { id: 'lightbox.close', defaultMessage: 'Close' },
|
||||
|
|
@ -20,15 +21,121 @@ const messages = defineMessages({
|
|||
|
||||
export const previewState = 'previewMediaModal';
|
||||
|
||||
const digitCharacters = [
|
||||
'0',
|
||||
'1',
|
||||
'2',
|
||||
'3',
|
||||
'4',
|
||||
'5',
|
||||
'6',
|
||||
'7',
|
||||
'8',
|
||||
'9',
|
||||
'A',
|
||||
'B',
|
||||
'C',
|
||||
'D',
|
||||
'E',
|
||||
'F',
|
||||
'G',
|
||||
'H',
|
||||
'I',
|
||||
'J',
|
||||
'K',
|
||||
'L',
|
||||
'M',
|
||||
'N',
|
||||
'O',
|
||||
'P',
|
||||
'Q',
|
||||
'R',
|
||||
'S',
|
||||
'T',
|
||||
'U',
|
||||
'V',
|
||||
'W',
|
||||
'X',
|
||||
'Y',
|
||||
'Z',
|
||||
'a',
|
||||
'b',
|
||||
'c',
|
||||
'd',
|
||||
'e',
|
||||
'f',
|
||||
'g',
|
||||
'h',
|
||||
'i',
|
||||
'j',
|
||||
'k',
|
||||
'l',
|
||||
'm',
|
||||
'n',
|
||||
'o',
|
||||
'p',
|
||||
'q',
|
||||
'r',
|
||||
's',
|
||||
't',
|
||||
'u',
|
||||
'v',
|
||||
'w',
|
||||
'x',
|
||||
'y',
|
||||
'z',
|
||||
'#',
|
||||
'$',
|
||||
'%',
|
||||
'*',
|
||||
'+',
|
||||
',',
|
||||
'-',
|
||||
'.',
|
||||
':',
|
||||
';',
|
||||
'=',
|
||||
'?',
|
||||
'@',
|
||||
'[',
|
||||
']',
|
||||
'^',
|
||||
'_',
|
||||
'{',
|
||||
'|',
|
||||
'}',
|
||||
'~',
|
||||
];
|
||||
|
||||
const decode83 = (str) => {
|
||||
let value = 0;
|
||||
let c, digit;
|
||||
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
c = str[i];
|
||||
digit = digitCharacters.indexOf(c);
|
||||
value = value * 83 + digit;
|
||||
}
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
const decodeRGB = int => ({
|
||||
r: Math.max(0, (int >> 16)),
|
||||
g: Math.max(0, (int >> 8) & 255),
|
||||
b: Math.max(0, (int & 255)),
|
||||
});
|
||||
|
||||
export default @injectIntl
|
||||
class MediaModal extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
media: ImmutablePropTypes.list.isRequired,
|
||||
status: ImmutablePropTypes.map,
|
||||
statusId: PropTypes.string,
|
||||
index: PropTypes.number.isRequired,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
intl: PropTypes.object.isRequired,
|
||||
onChangeBackgroundColor: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
static contextTypes = {
|
||||
|
|
@ -38,23 +145,40 @@ class MediaModal extends ImmutablePureComponent {
|
|||
state = {
|
||||
index: null,
|
||||
navigationHidden: false,
|
||||
zoomButtonHidden: false,
|
||||
};
|
||||
|
||||
handleSwipe = (index) => {
|
||||
this.setState({ index: index % this.props.media.size });
|
||||
}
|
||||
|
||||
handleTransitionEnd = () => {
|
||||
this.setState({
|
||||
zoomButtonHidden: false,
|
||||
});
|
||||
}
|
||||
|
||||
handleNextClick = () => {
|
||||
this.setState({ index: (this.getIndex() + 1) % this.props.media.size });
|
||||
this.setState({
|
||||
index: (this.getIndex() + 1) % this.props.media.size,
|
||||
zoomButtonHidden: true,
|
||||
});
|
||||
}
|
||||
|
||||
handlePrevClick = () => {
|
||||
this.setState({ index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size });
|
||||
this.setState({
|
||||
index: (this.props.media.size + this.getIndex() - 1) % this.props.media.size,
|
||||
zoomButtonHidden: true,
|
||||
});
|
||||
}
|
||||
|
||||
handleChangeIndex = (e) => {
|
||||
const index = Number(e.currentTarget.getAttribute('data-index'));
|
||||
this.setState({ index: index % this.props.media.size });
|
||||
|
||||
this.setState({
|
||||
index: index % this.props.media.size,
|
||||
zoomButtonHidden: true,
|
||||
});
|
||||
}
|
||||
|
||||
handleKeyDown = (e) => {
|
||||
|
|
@ -84,6 +208,25 @@ class MediaModal extends ImmutablePureComponent {
|
|||
this.props.onClose();
|
||||
});
|
||||
}
|
||||
|
||||
this._sendBackgroundColor();
|
||||
}
|
||||
|
||||
componentDidUpdate (prevProps, prevState) {
|
||||
if (prevState.index !== this.state.index) {
|
||||
this._sendBackgroundColor();
|
||||
}
|
||||
}
|
||||
|
||||
_sendBackgroundColor () {
|
||||
const { media, onChangeBackgroundColor } = this.props;
|
||||
const index = this.getIndex();
|
||||
const blurhash = media.getIn([index, 'blurhash']);
|
||||
|
||||
if (blurhash) {
|
||||
const backgroundColor = decodeRGB(decode83(blurhash.slice(2, 6)));
|
||||
onChangeBackgroundColor(backgroundColor);
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount () {
|
||||
|
|
@ -96,6 +239,8 @@ class MediaModal extends ImmutablePureComponent {
|
|||
this.context.router.history.goBack();
|
||||
}
|
||||
}
|
||||
|
||||
this.props.onChangeBackgroundColor(null);
|
||||
}
|
||||
|
||||
getIndex () {
|
||||
|
|
@ -111,30 +256,19 @@ class MediaModal extends ImmutablePureComponent {
|
|||
handleStatusClick = e => {
|
||||
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
|
||||
e.preventDefault();
|
||||
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
|
||||
this.context.router.history.push(`/statuses/${this.props.statusId}`);
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
const { media, status, intl, onClose } = this.props;
|
||||
const { media, statusId, intl, onClose } = this.props;
|
||||
const { navigationHidden } = this.state;
|
||||
|
||||
const index = this.getIndex();
|
||||
let pagination = [];
|
||||
|
||||
const leftNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--left' onClick={this.handlePrevClick} aria-label={intl.formatMessage(messages.previous)}><Icon id='chevron-left' fixedWidth /></button>;
|
||||
const rightNav = media.size > 1 && <button tabIndex='0' className='media-modal__nav media-modal__nav--right' onClick={this.handleNextClick} aria-label={intl.formatMessage(messages.next)}><Icon id='chevron-right' fixedWidth /></button>;
|
||||
|
||||
if (media.size > 1) {
|
||||
pagination = media.map((item, i) => {
|
||||
const classes = ['media-modal__button'];
|
||||
if (i === index) {
|
||||
classes.push('media-modal__button--active');
|
||||
}
|
||||
return (<li className='media-modal__page-dot' key={i}><button tabIndex='0' className={classes.join(' ')} onClick={this.handleChangeIndex} data-index={i}>{i + 1}</button></li>);
|
||||
});
|
||||
}
|
||||
|
||||
const content = media.map((image) => {
|
||||
const width = image.getIn(['meta', 'original', 'width']) || null;
|
||||
const height = image.getIn(['meta', 'original', 'height']) || null;
|
||||
|
|
@ -149,6 +283,7 @@ class MediaModal extends ImmutablePureComponent {
|
|||
alt={image.get('description')}
|
||||
key={image.get('url')}
|
||||
onClick={this.toggleNavigation}
|
||||
zoomButtonHidden={this.state.zoomButtonHidden}
|
||||
/>
|
||||
);
|
||||
} else if (image.get('type') === 'video') {
|
||||
|
|
@ -201,17 +336,24 @@ class MediaModal extends ImmutablePureComponent {
|
|||
'media-modal__navigation--hidden': navigationHidden,
|
||||
});
|
||||
|
||||
let pagination;
|
||||
|
||||
if (media.size > 1) {
|
||||
pagination = media.map((item, i) => (
|
||||
<button key={i} className={classNames('media-modal__page-dot', { active: i === index })} data-index={i} onClick={this.handleChangeIndex}>
|
||||
{i + 1}
|
||||
</button>
|
||||
));
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='modal-root__modal media-modal'>
|
||||
<div
|
||||
className='media-modal__closer'
|
||||
role='presentation'
|
||||
onClick={onClose}
|
||||
>
|
||||
<div className='media-modal__closer' role='presentation' onClick={onClose} >
|
||||
<ReactSwipeableViews
|
||||
style={swipeableViewsStyle}
|
||||
containerStyle={containerStyle}
|
||||
onChangeIndex={this.handleSwipe}
|
||||
onTransitionEnd={this.handleTransitionEnd}
|
||||
index={index}
|
||||
disabled={disableSwiping}
|
||||
>
|
||||
|
|
@ -225,15 +367,10 @@ class MediaModal extends ImmutablePureComponent {
|
|||
{leftNav}
|
||||
{rightNav}
|
||||
|
||||
{status && (
|
||||
<div className={classNames('media-modal__meta', { 'media-modal__meta--shifted': media.size > 1 })}>
|
||||
<a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<ul className='media-modal__pagination'>
|
||||
{pagination}
|
||||
</ul>
|
||||
<div className='media-modal__overlay'>
|
||||
{pagination && <ul className='media-modal__pagination'>{pagination}</ul>}
|
||||
{statusId && <Footer statusId={statusId} withOpenButton onClose={onClose} />}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -45,6 +45,10 @@ export default class ModalRoot extends React.PureComponent {
|
|||
onClose: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
state = {
|
||||
backgroundColor: null,
|
||||
};
|
||||
|
||||
getSnapshotBeforeUpdate () {
|
||||
return { visible: !!this.props.type };
|
||||
}
|
||||
|
|
@ -59,6 +63,10 @@ export default class ModalRoot extends React.PureComponent {
|
|||
}
|
||||
}
|
||||
|
||||
setBackgroundColor = color => {
|
||||
this.setState({ backgroundColor: color });
|
||||
}
|
||||
|
||||
renderLoading = modalId => () => {
|
||||
return ['MEDIA', 'VIDEO', 'BOOST', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null;
|
||||
}
|
||||
|
|
@ -71,13 +79,14 @@ export default class ModalRoot extends React.PureComponent {
|
|||
|
||||
render () {
|
||||
const { type, props, onClose } = this.props;
|
||||
const { backgroundColor } = this.state;
|
||||
const visible = !!type;
|
||||
|
||||
return (
|
||||
<Base onClose={onClose}>
|
||||
<Base backgroundColor={backgroundColor} onClose={onClose}>
|
||||
{visible && (
|
||||
<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
|
||||
{(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />}
|
||||
{(SpecificComponent) => <SpecificComponent {...props} onChangeBackgroundColor={this.setBackgroundColor} onClose={onClose} />}
|
||||
</BundleContainer>
|
||||
)}
|
||||
</Base>
|
||||
|
|
|
|||
|
|
@ -3,9 +3,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
|||
import PropTypes from 'prop-types';
|
||||
import Video from 'mastodon/features/video';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
import Icon from 'mastodon/components/icon';
|
||||
|
||||
export const previewState = 'previewVideoModal';
|
||||
|
||||
|
|
@ -13,7 +10,7 @@ export default class VideoModal extends ImmutablePureComponent {
|
|||
|
||||
static propTypes = {
|
||||
media: ImmutablePropTypes.map.isRequired,
|
||||
status: ImmutablePropTypes.map,
|
||||
statusId: PropTypes.string,
|
||||
options: PropTypes.shape({
|
||||
startTime: PropTypes.number,
|
||||
autoPlay: PropTypes.bool,
|
||||
|
|
@ -48,15 +45,8 @@ export default class VideoModal extends ImmutablePureComponent {
|
|||
}
|
||||
}
|
||||
|
||||
handleStatusClick = e => {
|
||||
if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
|
||||
e.preventDefault();
|
||||
this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
const { media, status, onClose } = this.props;
|
||||
const { media, onClose } = this.props;
|
||||
const options = this.props.options || {};
|
||||
|
||||
return (
|
||||
|
|
@ -64,6 +54,7 @@ export default class VideoModal extends ImmutablePureComponent {
|
|||
<div className='video-modal__container'>
|
||||
<Video
|
||||
preview={media.get('preview_url')}
|
||||
frameRate={media.getIn(['meta', 'original', 'frame_rate'])}
|
||||
blurhash={media.get('blurhash')}
|
||||
src={media.get('url')}
|
||||
currentTime={options.startTime}
|
||||
|
|
@ -74,12 +65,6 @@ export default class VideoModal extends ImmutablePureComponent {
|
|||
alt={media.get('description')}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{status && (
|
||||
<div className={classNames('media-modal__meta')}>
|
||||
<a href={status.get('url')} onClick={this.handleStatusClick}><Icon id='comments' /> <FormattedMessage id='lightbox.view_context' defaultMessage='View context' /></a>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,16 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import IconButton from 'mastodon/components/icon_button';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
|
||||
const messages = defineMessages({
|
||||
compress: { id: 'lightbox.compress', defaultMessage: 'Compress image view box' },
|
||||
expand: { id: 'lightbox.expand', defaultMessage: 'Expand image view box' },
|
||||
});
|
||||
|
||||
const MIN_SCALE = 1;
|
||||
const MAX_SCALE = 4;
|
||||
const NAV_BAR_HEIGHT = 66;
|
||||
|
||||
const getMidpoint = (p1, p2) => ({
|
||||
x: (p1.clientX + p2.clientX) / 2,
|
||||
|
|
@ -14,7 +22,77 @@ const getDistance = (p1, p2) =>
|
|||
|
||||
const clamp = (min, max, value) => Math.min(max, Math.max(min, value));
|
||||
|
||||
export default class ZoomableImage extends React.PureComponent {
|
||||
// Normalizing mousewheel speed across browsers
|
||||
// copy from: https://github.com/facebookarchive/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js
|
||||
const normalizeWheel = event => {
|
||||
// Reasonable defaults
|
||||
const PIXEL_STEP = 10;
|
||||
const LINE_HEIGHT = 40;
|
||||
const PAGE_HEIGHT = 800;
|
||||
|
||||
let sX = 0,
|
||||
sY = 0, // spinX, spinY
|
||||
pX = 0,
|
||||
pY = 0; // pixelX, pixelY
|
||||
|
||||
// Legacy
|
||||
if ('detail' in event) {
|
||||
sY = event.detail;
|
||||
}
|
||||
if ('wheelDelta' in event) {
|
||||
sY = -event.wheelDelta / 120;
|
||||
}
|
||||
if ('wheelDeltaY' in event) {
|
||||
sY = -event.wheelDeltaY / 120;
|
||||
}
|
||||
if ('wheelDeltaX' in event) {
|
||||
sX = -event.wheelDeltaX / 120;
|
||||
}
|
||||
|
||||
// side scrolling on FF with DOMMouseScroll
|
||||
if ('axis' in event && event.axis === event.HORIZONTAL_AXIS) {
|
||||
sX = sY;
|
||||
sY = 0;
|
||||
}
|
||||
|
||||
pX = sX * PIXEL_STEP;
|
||||
pY = sY * PIXEL_STEP;
|
||||
|
||||
if ('deltaY' in event) {
|
||||
pY = event.deltaY;
|
||||
}
|
||||
if ('deltaX' in event) {
|
||||
pX = event.deltaX;
|
||||
}
|
||||
|
||||
if ((pX || pY) && event.deltaMode) {
|
||||
if (event.deltaMode === 1) { // delta in LINE units
|
||||
pX *= LINE_HEIGHT;
|
||||
pY *= LINE_HEIGHT;
|
||||
} else { // delta in PAGE units
|
||||
pX *= PAGE_HEIGHT;
|
||||
pY *= PAGE_HEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
// Fall-back if spin cannot be determined
|
||||
if (pX && !sX) {
|
||||
sX = (pX < 1) ? -1 : 1;
|
||||
}
|
||||
if (pY && !sY) {
|
||||
sY = (pY < 1) ? -1 : 1;
|
||||
}
|
||||
|
||||
return {
|
||||
spinX: sX,
|
||||
spinY: sY,
|
||||
pixelX: pX,
|
||||
pixelY: pY,
|
||||
};
|
||||
};
|
||||
|
||||
export default @injectIntl
|
||||
class ZoomableImage extends React.PureComponent {
|
||||
|
||||
static propTypes = {
|
||||
alt: PropTypes.string,
|
||||
|
|
@ -22,6 +100,8 @@ export default class ZoomableImage extends React.PureComponent {
|
|||
width: PropTypes.number,
|
||||
height: PropTypes.number,
|
||||
onClick: PropTypes.func,
|
||||
zoomButtonHidden: PropTypes.bool,
|
||||
intl: PropTypes.object.isRequired,
|
||||
}
|
||||
|
||||
static defaultProps = {
|
||||
|
|
@ -32,6 +112,26 @@ export default class ZoomableImage extends React.PureComponent {
|
|||
|
||||
state = {
|
||||
scale: MIN_SCALE,
|
||||
zoomMatrix: {
|
||||
type: null, // 'width' 'height'
|
||||
fullScreen: null, // bool
|
||||
rate: null, // full screen scale rate
|
||||
clientWidth: null,
|
||||
clientHeight: null,
|
||||
offsetWidth: null,
|
||||
offsetHeight: null,
|
||||
clientHeightFixed: null,
|
||||
scrollTop: null,
|
||||
scrollLeft: null,
|
||||
translateX: null,
|
||||
translateY: null,
|
||||
},
|
||||
zoomState: 'expand', // 'expand' 'compress'
|
||||
navigationHidden: false,
|
||||
dragPosition: { top: 0, left: 0, x: 0, y: 0 },
|
||||
dragged: false,
|
||||
lockScroll: { x: 0, y: 0 },
|
||||
lockTranslate: { x: 0, y: 0 },
|
||||
}
|
||||
|
||||
removers = [];
|
||||
|
|
@ -49,17 +149,105 @@ export default class ZoomableImage extends React.PureComponent {
|
|||
// https://www.chromestatus.com/features/5093566007214080
|
||||
this.container.addEventListener('touchmove', handler, { passive: false });
|
||||
this.removers.push(() => this.container.removeEventListener('touchend', handler));
|
||||
|
||||
handler = this.mouseDownHandler;
|
||||
this.container.addEventListener('mousedown', handler);
|
||||
this.removers.push(() => this.container.removeEventListener('mousedown', handler));
|
||||
|
||||
handler = this.mouseWheelHandler;
|
||||
this.container.addEventListener('wheel', handler);
|
||||
this.removers.push(() => this.container.removeEventListener('wheel', handler));
|
||||
// Old Chrome
|
||||
this.container.addEventListener('mousewheel', handler);
|
||||
this.removers.push(() => this.container.removeEventListener('mousewheel', handler));
|
||||
// Old Firefox
|
||||
this.container.addEventListener('DOMMouseScroll', handler);
|
||||
this.removers.push(() => this.container.removeEventListener('DOMMouseScroll', handler));
|
||||
|
||||
this.initZoomMatrix();
|
||||
}
|
||||
|
||||
componentWillUnmount () {
|
||||
this.removeEventListeners();
|
||||
}
|
||||
|
||||
componentDidUpdate () {
|
||||
this.setState({ zoomState: this.state.scale >= this.state.zoomMatrix.rate ? 'compress' : 'expand' });
|
||||
|
||||
if (this.state.scale === MIN_SCALE) {
|
||||
this.container.style.removeProperty('cursor');
|
||||
}
|
||||
}
|
||||
|
||||
UNSAFE_componentWillReceiveProps () {
|
||||
// reset when slide to next image
|
||||
if (this.props.zoomButtonHidden) {
|
||||
this.setState({
|
||||
scale: MIN_SCALE,
|
||||
lockTranslate: { x: 0, y: 0 },
|
||||
}, () => {
|
||||
this.container.scrollLeft = 0;
|
||||
this.container.scrollTop = 0;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
removeEventListeners () {
|
||||
this.removers.forEach(listeners => listeners());
|
||||
this.removers = [];
|
||||
}
|
||||
|
||||
mouseWheelHandler = e => {
|
||||
e.preventDefault();
|
||||
|
||||
const event = normalizeWheel(e);
|
||||
|
||||
if (this.state.zoomMatrix.type === 'width') {
|
||||
// full width, scroll vertical
|
||||
this.container.scrollTop = Math.max(this.container.scrollTop + event.pixelY, this.state.lockScroll.y);
|
||||
} else {
|
||||
// full height, scroll horizontal
|
||||
this.container.scrollLeft = Math.max(this.container.scrollLeft + event.pixelY, this.state.lockScroll.x);
|
||||
}
|
||||
|
||||
// lock horizontal scroll
|
||||
this.container.scrollLeft = Math.max(this.container.scrollLeft + event.pixelX, this.state.lockScroll.x);
|
||||
}
|
||||
|
||||
mouseDownHandler = e => {
|
||||
this.container.style.cursor = 'grabbing';
|
||||
this.container.style.userSelect = 'none';
|
||||
|
||||
this.setState({ dragPosition: {
|
||||
left: this.container.scrollLeft,
|
||||
top: this.container.scrollTop,
|
||||
// Get the current mouse position
|
||||
x: e.clientX,
|
||||
y: e.clientY,
|
||||
} });
|
||||
|
||||
this.image.addEventListener('mousemove', this.mouseMoveHandler);
|
||||
this.image.addEventListener('mouseup', this.mouseUpHandler);
|
||||
}
|
||||
|
||||
mouseMoveHandler = e => {
|
||||
const dx = e.clientX - this.state.dragPosition.x;
|
||||
const dy = e.clientY - this.state.dragPosition.y;
|
||||
|
||||
this.container.scrollLeft = Math.max(this.state.dragPosition.left - dx, this.state.lockScroll.x);
|
||||
this.container.scrollTop = Math.max(this.state.dragPosition.top - dy, this.state.lockScroll.y);
|
||||
|
||||
this.setState({ dragged: true });
|
||||
}
|
||||
|
||||
mouseUpHandler = () => {
|
||||
this.container.style.cursor = 'grab';
|
||||
this.container.style.removeProperty('user-select');
|
||||
|
||||
this.image.removeEventListener('mousemove', this.mouseMoveHandler);
|
||||
this.image.removeEventListener('mouseup', this.mouseUpHandler);
|
||||
}
|
||||
|
||||
handleTouchStart = e => {
|
||||
if (e.touches.length !== 2) return;
|
||||
|
||||
|
|
@ -80,7 +268,8 @@ export default class ZoomableImage extends React.PureComponent {
|
|||
|
||||
const distance = getDistance(...e.touches);
|
||||
const midpoint = getMidpoint(...e.touches);
|
||||
const scale = clamp(MIN_SCALE, MAX_SCALE, this.state.scale * distance / this.lastDistance);
|
||||
const _MAX_SCALE = Math.max(MAX_SCALE, this.state.zoomMatrix.rate);
|
||||
const scale = clamp(MIN_SCALE, _MAX_SCALE, this.state.scale * distance / this.lastDistance);
|
||||
|
||||
this.zoom(scale, midpoint);
|
||||
|
||||
|
|
@ -89,7 +278,7 @@ export default class ZoomableImage extends React.PureComponent {
|
|||
}
|
||||
|
||||
zoom(nextScale, midpoint) {
|
||||
const { scale } = this.state;
|
||||
const { scale, zoomMatrix } = this.state;
|
||||
const { scrollLeft, scrollTop } = this.container;
|
||||
|
||||
// math memo:
|
||||
|
|
@ -104,14 +293,105 @@ export default class ZoomableImage extends React.PureComponent {
|
|||
this.setState({ scale: nextScale }, () => {
|
||||
this.container.scrollLeft = nextScrollLeft;
|
||||
this.container.scrollTop = nextScrollTop;
|
||||
// reset the translateX/Y constantly
|
||||
if (nextScale < zoomMatrix.rate) {
|
||||
this.setState({
|
||||
lockTranslate: {
|
||||
x: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateX * ((nextScale - MIN_SCALE) / (zoomMatrix.rate - MIN_SCALE)),
|
||||
y: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateY * ((nextScale - MIN_SCALE) / (zoomMatrix.rate - MIN_SCALE)),
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
handleClick = e => {
|
||||
// don't propagate event to MediaModal
|
||||
e.stopPropagation();
|
||||
const dragged = this.state.dragged;
|
||||
this.setState({ dragged: false });
|
||||
if (dragged) return;
|
||||
const handler = this.props.onClick;
|
||||
if (handler) handler();
|
||||
this.setState({ navigationHidden: !this.state.navigationHidden });
|
||||
}
|
||||
|
||||
handleMouseDown = e => {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
initZoomMatrix = () => {
|
||||
const { width, height } = this.props;
|
||||
const { clientWidth, clientHeight } = this.container;
|
||||
const { offsetWidth, offsetHeight } = this.image;
|
||||
const clientHeightFixed = clientHeight - NAV_BAR_HEIGHT;
|
||||
|
||||
const type = width / height < clientWidth / clientHeightFixed ? 'width' : 'height';
|
||||
const fullScreen = type === 'width' ? width > clientWidth : height > clientHeightFixed;
|
||||
const rate = type === 'width' ? Math.min(clientWidth, width) / offsetWidth : Math.min(clientHeightFixed, height) / offsetHeight;
|
||||
const scrollTop = type === 'width' ? (clientHeight - offsetHeight) / 2 - NAV_BAR_HEIGHT : (clientHeightFixed - offsetHeight) / 2;
|
||||
const scrollLeft = (clientWidth - offsetWidth) / 2;
|
||||
const translateX = type === 'width' ? (width - offsetWidth) / (2 * rate) : 0;
|
||||
const translateY = type === 'height' ? (height - offsetHeight) / (2 * rate) : 0;
|
||||
|
||||
this.setState({
|
||||
zoomMatrix: {
|
||||
type: type,
|
||||
fullScreen: fullScreen,
|
||||
rate: rate,
|
||||
clientWidth: clientWidth,
|
||||
clientHeight: clientHeight,
|
||||
offsetWidth: offsetWidth,
|
||||
offsetHeight: offsetHeight,
|
||||
clientHeightFixed: clientHeightFixed,
|
||||
scrollTop: scrollTop,
|
||||
scrollLeft: scrollLeft,
|
||||
translateX: translateX,
|
||||
translateY: translateY,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
handleZoomClick = e => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
const { scale, zoomMatrix } = this.state;
|
||||
|
||||
if ( scale >= zoomMatrix.rate ) {
|
||||
this.setState({
|
||||
scale: MIN_SCALE,
|
||||
lockScroll: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
},
|
||||
lockTranslate: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
},
|
||||
}, () => {
|
||||
this.container.scrollLeft = 0;
|
||||
this.container.scrollTop = 0;
|
||||
});
|
||||
} else {
|
||||
this.setState({
|
||||
scale: zoomMatrix.rate,
|
||||
lockScroll: {
|
||||
x: zoomMatrix.scrollLeft,
|
||||
y: zoomMatrix.scrollTop,
|
||||
},
|
||||
lockTranslate: {
|
||||
x: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateX,
|
||||
y: zoomMatrix.fullScreen ? 0 : zoomMatrix.translateY,
|
||||
},
|
||||
}, () => {
|
||||
this.container.scrollLeft = zoomMatrix.scrollLeft;
|
||||
this.container.scrollTop = zoomMatrix.scrollTop;
|
||||
});
|
||||
}
|
||||
|
||||
this.container.style.cursor = 'grab';
|
||||
this.container.style.removeProperty('user-select');
|
||||
}
|
||||
|
||||
setContainerRef = c => {
|
||||
|
|
@ -123,29 +403,47 @@ export default class ZoomableImage extends React.PureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { alt, src } = this.props;
|
||||
const { scale } = this.state;
|
||||
const overflow = scale === 1 ? 'hidden' : 'scroll';
|
||||
const { alt, src, width, height, intl } = this.props;
|
||||
const { scale, lockTranslate } = this.state;
|
||||
const overflow = scale === MIN_SCALE ? 'hidden' : 'scroll';
|
||||
const zoomButtonShouldHide = this.state.navigationHidden || this.props.zoomButtonHidden || this.state.zoomMatrix.rate <= MIN_SCALE ? 'media-modal__zoom-button--hidden' : '';
|
||||
const zoomButtonTitle = this.state.zoomState === 'compress' ? intl.formatMessage(messages.compress) : intl.formatMessage(messages.expand);
|
||||
|
||||
return (
|
||||
<div
|
||||
className='zoomable-image'
|
||||
ref={this.setContainerRef}
|
||||
style={{ overflow }}
|
||||
>
|
||||
<img
|
||||
role='presentation'
|
||||
ref={this.setImageRef}
|
||||
alt={alt}
|
||||
title={alt}
|
||||
src={src}
|
||||
<React.Fragment>
|
||||
<IconButton
|
||||
className={`media-modal__zoom-button ${zoomButtonShouldHide}`}
|
||||
title={zoomButtonTitle}
|
||||
icon={this.state.zoomState}
|
||||
onClick={this.handleZoomClick}
|
||||
size={40}
|
||||
style={{
|
||||
transform: `scale(${scale})`,
|
||||
transformOrigin: '0 0',
|
||||
fontSize: '30px', /* Fontawesome's fa-compress fa-expand is larger than fa-close */
|
||||
}}
|
||||
onClick={this.handleClick}
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
className='zoomable-image'
|
||||
ref={this.setContainerRef}
|
||||
style={{ overflow }}
|
||||
>
|
||||
<img
|
||||
role='presentation'
|
||||
ref={this.setImageRef}
|
||||
alt={alt}
|
||||
title={alt}
|
||||
src={src}
|
||||
width={width}
|
||||
height={height}
|
||||
style={{
|
||||
transform: `scale(${scale}) translate(-${lockTranslate.x}px, -${lockTranslate.y}px)`,
|
||||
transformOrigin: '0 0',
|
||||
}}
|
||||
draggable={false}
|
||||
onClick={this.handleClick}
|
||||
onMouseDown={this.handleMouseDown}
|
||||
/>
|
||||
</div>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,14 +8,14 @@ import PropTypes from 'prop-types';
|
|||
import NotificationsContainer from './containers/notifications_container';
|
||||
import LoadingBarContainer from './containers/loading_bar_container';
|
||||
import ModalContainer from './containers/modal_container';
|
||||
import { isMobile } from '../../is_mobile';
|
||||
import { layoutFromWindow } from 'mastodon/is_mobile';
|
||||
import { debounce } from 'lodash';
|
||||
import { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose';
|
||||
import { expandHomeTimeline } from '../../actions/timelines';
|
||||
import { expandNotifications } from '../../actions/notifications';
|
||||
import { fetchFilters } from '../../actions/filters';
|
||||
import { clearHeight } from '../../actions/height_cache';
|
||||
import { focusApp, unfocusApp } from 'mastodon/actions/app';
|
||||
import { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app';
|
||||
import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers';
|
||||
import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';
|
||||
import UploadArea from './components/upload_area';
|
||||
|
|
@ -52,7 +52,7 @@ import {
|
|||
Search,
|
||||
Directory,
|
||||
} from './util/async-components';
|
||||
import { me, forceSingleColumn } from '../../initial_state';
|
||||
import { me } from '../../initial_state';
|
||||
import { previewState as previewMediaState } from './components/media_modal';
|
||||
import { previewState as previewVideoState } from './components/video_modal';
|
||||
|
||||
|
|
@ -65,6 +65,7 @@ const messages = defineMessages({
|
|||
});
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
layout: state.getIn(['meta', 'layout']),
|
||||
isComposing: state.getIn(['compose', 'is_composing']),
|
||||
hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0,
|
||||
hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,
|
||||
|
|
@ -110,17 +111,11 @@ class SwitchingColumnsArea extends React.PureComponent {
|
|||
static propTypes = {
|
||||
children: PropTypes.node,
|
||||
location: PropTypes.object,
|
||||
onLayoutChange: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
state = {
|
||||
mobile: isMobile(window.innerWidth),
|
||||
mobile: PropTypes.bool,
|
||||
};
|
||||
|
||||
componentWillMount () {
|
||||
window.addEventListener('resize', this.handleResize, { passive: true });
|
||||
|
||||
if (this.state.mobile || forceSingleColumn) {
|
||||
if (this.props.mobile) {
|
||||
document.body.classList.toggle('layout-single-column', true);
|
||||
document.body.classList.toggle('layout-multiple-columns', false);
|
||||
} else {
|
||||
|
|
@ -129,44 +124,21 @@ class SwitchingColumnsArea extends React.PureComponent {
|
|||
}
|
||||
}
|
||||
|
||||
componentDidUpdate (prevProps, prevState) {
|
||||
componentDidUpdate (prevProps) {
|
||||
if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) {
|
||||
this.node.handleChildrenContentChange();
|
||||
}
|
||||
|
||||
if (prevState.mobile !== this.state.mobile && !forceSingleColumn) {
|
||||
document.body.classList.toggle('layout-single-column', this.state.mobile);
|
||||
document.body.classList.toggle('layout-multiple-columns', !this.state.mobile);
|
||||
if (prevProps.mobile !== this.props.mobile) {
|
||||
document.body.classList.toggle('layout-single-column', this.props.mobile);
|
||||
document.body.classList.toggle('layout-multiple-columns', !this.props.mobile);
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount () {
|
||||
window.removeEventListener('resize', this.handleResize);
|
||||
}
|
||||
|
||||
shouldUpdateScroll (_, { location }) {
|
||||
return location.state !== previewMediaState && location.state !== previewVideoState;
|
||||
}
|
||||
|
||||
handleLayoutChange = debounce(() => {
|
||||
// The cached heights are no longer accurate, invalidate
|
||||
this.props.onLayoutChange();
|
||||
}, 500, {
|
||||
trailing: true,
|
||||
})
|
||||
|
||||
handleResize = () => {
|
||||
const mobile = isMobile(window.innerWidth);
|
||||
|
||||
if (mobile !== this.state.mobile) {
|
||||
this.handleLayoutChange.cancel();
|
||||
this.props.onLayoutChange();
|
||||
this.setState({ mobile });
|
||||
} else {
|
||||
this.handleLayoutChange();
|
||||
}
|
||||
}
|
||||
|
||||
setRef = c => {
|
||||
if (c) {
|
||||
this.node = c.getWrappedInstance();
|
||||
|
|
@ -174,13 +146,11 @@ class SwitchingColumnsArea extends React.PureComponent {
|
|||
}
|
||||
|
||||
render () {
|
||||
const { children } = this.props;
|
||||
const { mobile } = this.state;
|
||||
const singleColumn = forceSingleColumn || mobile;
|
||||
const redirect = singleColumn ? <Redirect from='/' to='/timelines/home' exact /> : <Redirect from='/' to='/getting-started' exact />;
|
||||
const { children, mobile } = this.props;
|
||||
const redirect = mobile ? <Redirect from='/' to='/timelines/home' exact /> : <Redirect from='/' to='/getting-started' exact />;
|
||||
|
||||
return (
|
||||
<ColumnsAreaContainer ref={this.setRef} singleColumn={singleColumn}>
|
||||
<ColumnsAreaContainer ref={this.setRef} singleColumn={mobile}>
|
||||
<WrappedSwitch>
|
||||
{redirect}
|
||||
<WrappedRoute path='/getting-started' component={GettingStarted} content={children} />
|
||||
|
|
@ -244,6 +214,7 @@ class UI extends React.PureComponent {
|
|||
location: PropTypes.object,
|
||||
intl: PropTypes.object.isRequired,
|
||||
dropdownMenuIsOpen: PropTypes.bool,
|
||||
layout: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
state = {
|
||||
|
|
@ -273,11 +244,6 @@ class UI extends React.PureComponent {
|
|||
this.props.dispatch(unfocusApp());
|
||||
}
|
||||
|
||||
handleLayoutChange = () => {
|
||||
// The cached heights are no longer accurate, invalidate
|
||||
this.props.dispatch(clearHeight());
|
||||
}
|
||||
|
||||
handleDragEnter = (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
|
|
@ -351,10 +317,28 @@ class UI extends React.PureComponent {
|
|||
}
|
||||
}
|
||||
|
||||
componentWillMount () {
|
||||
handleLayoutChange = debounce(() => {
|
||||
this.props.dispatch(clearHeight()); // The cached heights are no longer accurate, invalidate
|
||||
}, 500, {
|
||||
trailing: true,
|
||||
});
|
||||
|
||||
handleResize = () => {
|
||||
const layout = layoutFromWindow();
|
||||
|
||||
if (layout !== this.props.layout) {
|
||||
this.handleLayoutChange.cancel();
|
||||
this.props.dispatch(changeLayout(layout));
|
||||
} else {
|
||||
this.handleLayoutChange();
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount () {
|
||||
window.addEventListener('focus', this.handleWindowFocus, false);
|
||||
window.addEventListener('blur', this.handleWindowBlur, false);
|
||||
window.addEventListener('beforeunload', this.handleBeforeUnload, false);
|
||||
window.addEventListener('resize', this.handleResize, { passive: true });
|
||||
|
||||
document.addEventListener('dragenter', this.handleDragEnter, false);
|
||||
document.addEventListener('dragover', this.handleDragOver, false);
|
||||
|
|
@ -371,9 +355,7 @@ class UI extends React.PureComponent {
|
|||
this.props.dispatch(expandNotifications());
|
||||
|
||||
setTimeout(() => this.props.dispatch(fetchFilters()), 500);
|
||||
}
|
||||
|
||||
componentDidMount () {
|
||||
this.hotkeys.__mousetrap__.stopCallback = (e, element) => {
|
||||
return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);
|
||||
};
|
||||
|
|
@ -383,6 +365,7 @@ class UI extends React.PureComponent {
|
|||
window.removeEventListener('focus', this.handleWindowFocus);
|
||||
window.removeEventListener('blur', this.handleWindowBlur);
|
||||
window.removeEventListener('beforeunload', this.handleBeforeUnload);
|
||||
window.removeEventListener('resize', this.handleResize);
|
||||
|
||||
document.removeEventListener('dragenter', this.handleDragEnter);
|
||||
document.removeEventListener('dragover', this.handleDragOver);
|
||||
|
|
@ -513,7 +496,7 @@ class UI extends React.PureComponent {
|
|||
|
||||
render () {
|
||||
const { draggingOver } = this.state;
|
||||
const { children, isComposing, location, dropdownMenuIsOpen } = this.props;
|
||||
const { children, isComposing, location, dropdownMenuIsOpen, layout } = this.props;
|
||||
|
||||
const handlers = {
|
||||
help: this.handleHotkeyToggleHelp,
|
||||
|
|
@ -540,11 +523,11 @@ class UI extends React.PureComponent {
|
|||
return (
|
||||
<HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused>
|
||||
<div className={classNames('ui', { 'is-composing': isComposing })} ref={this.setRef} style={{ pointerEvents: dropdownMenuIsOpen ? 'none' : null }}>
|
||||
<SwitchingColumnsArea location={location} onLayoutChange={this.handleLayoutChange}>
|
||||
<SwitchingColumnsArea location={location} mobile={layout === 'mobile' || layout === 'single-column'}>
|
||||
{children}
|
||||
</SwitchingColumnsArea>
|
||||
|
||||
<PictureInPicture />
|
||||
{layout !== 'mobile' && <PictureInPicture />}
|
||||
<NotificationsContainer />
|
||||
<LoadingBarContainer className='loading-bar' />
|
||||
<ModalContainer />
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ class Video extends React.PureComponent {
|
|||
|
||||
static propTypes = {
|
||||
preview: PropTypes.string,
|
||||
frameRate: PropTypes.string,
|
||||
src: PropTypes.string.isRequired,
|
||||
alt: PropTypes.string,
|
||||
width: PropTypes.number,
|
||||
|
|
@ -117,12 +118,15 @@ class Video extends React.PureComponent {
|
|||
deployPictureInPicture: PropTypes.func,
|
||||
intl: PropTypes.object.isRequired,
|
||||
blurhash: PropTypes.string,
|
||||
link: PropTypes.node,
|
||||
autoPlay: PropTypes.bool,
|
||||
volume: PropTypes.number,
|
||||
muted: PropTypes.bool,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
frameRate: 25,
|
||||
};
|
||||
|
||||
state = {
|
||||
currentTime: 0,
|
||||
duration: 0,
|
||||
|
|
@ -198,7 +202,7 @@ class Video extends React.PureComponent {
|
|||
handleTimeUpdate = () => {
|
||||
this.setState({
|
||||
currentTime: this.video.currentTime,
|
||||
duration: Math.floor(this.video.duration),
|
||||
duration:this.video.duration,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -266,6 +270,81 @@ class Video extends React.PureComponent {
|
|||
}
|
||||
}, 15);
|
||||
|
||||
seekBy (time) {
|
||||
const currentTime = this.video.currentTime + time;
|
||||
|
||||
if (!isNaN(currentTime)) {
|
||||
this.setState({ currentTime }, () => {
|
||||
this.video.currentTime = currentTime;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
handleVideoKeyDown = e => {
|
||||
// On the video element or the seek bar, we can safely use the space bar
|
||||
// for playback control because there are no buttons to press
|
||||
|
||||
if (e.key === ' ') {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.togglePlay();
|
||||
}
|
||||
}
|
||||
|
||||
handleKeyDown = e => {
|
||||
const frameTime = 1 / this.getFrameRate();
|
||||
|
||||
switch(e.key) {
|
||||
case 'k':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.togglePlay();
|
||||
break;
|
||||
case 'm':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.toggleMute();
|
||||
break;
|
||||
case 'f':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.toggleFullscreen();
|
||||
break;
|
||||
case 'j':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.seekBy(-10);
|
||||
break;
|
||||
case 'l':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.seekBy(10);
|
||||
break;
|
||||
case ',':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.seekBy(-frameTime);
|
||||
break;
|
||||
case '.':
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.seekBy(frameTime);
|
||||
break;
|
||||
}
|
||||
|
||||
// If we are in fullscreen mode, we don't want any hotkeys
|
||||
// interacting with the UI that's not visible
|
||||
|
||||
if (this.state.fullscreen) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
if (e.key === 'Escape') {
|
||||
exitFullscreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
togglePlay = () => {
|
||||
if (this.state.paused) {
|
||||
this.setState({ paused: false }, () => this.video.play());
|
||||
|
|
@ -442,8 +521,19 @@ class Video extends React.PureComponent {
|
|||
this.props.onCloseVideo();
|
||||
}
|
||||
|
||||
getFrameRate () {
|
||||
if (this.props.frameRate && isNaN(this.props.frameRate)) {
|
||||
// The frame rate is returned as a fraction string so we
|
||||
// need to convert it to a number
|
||||
|
||||
return this.props.frameRate.split('/').reduce((p, c) => p / c);
|
||||
}
|
||||
|
||||
return this.props.frameRate;
|
||||
}
|
||||
|
||||
render () {
|
||||
const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, link, editable, blurhash } = this.props;
|
||||
const { preview, src, inline, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive, editable, blurhash } = this.props;
|
||||
const { containerWidth, currentTime, duration, volume, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state;
|
||||
const progress = Math.min((currentTime / duration) * 100, 100);
|
||||
const playerStyle = {};
|
||||
|
|
@ -484,6 +574,7 @@ class Video extends React.PureComponent {
|
|||
onMouseEnter={this.handleMouseEnter}
|
||||
onMouseLeave={this.handleMouseLeave}
|
||||
onClick={this.handleClickRoot}
|
||||
onKeyDown={this.handleKeyDown}
|
||||
tabIndex={0}
|
||||
>
|
||||
<Blurhash
|
||||
|
|
@ -507,6 +598,7 @@ class Video extends React.PureComponent {
|
|||
height={height}
|
||||
volume={volume}
|
||||
onClick={this.togglePlay}
|
||||
onKeyDown={this.handleVideoKeyDown}
|
||||
onPlay={this.handlePlay}
|
||||
onPause={this.handlePause}
|
||||
onLoadedData={this.handleLoadedData}
|
||||
|
|
@ -529,13 +621,14 @@ class Video extends React.PureComponent {
|
|||
className={classNames('video-player__seek__handle', { active: dragging })}
|
||||
tabIndex='0'
|
||||
style={{ left: `${progress}%` }}
|
||||
onKeyDown={this.handleVideoKeyDown}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className='video-player__buttons-bar'>
|
||||
<div className='video-player__buttons left'>
|
||||
<button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay} autoFocus={detailed}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button>
|
||||
<button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button>
|
||||
<button type='button' title={intl.formatMessage(paused ? messages.play : messages.pause)} aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} className='player-button' onClick={this.togglePlay} autoFocus={detailed}><Icon id={paused ? 'play' : 'pause'} fixedWidth /></button>
|
||||
<button type='button' title={intl.formatMessage(muted ? messages.unmute : messages.mute)} aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} className='player-button' onClick={this.toggleMute}><Icon id={muted ? 'volume-off' : 'volume-up'} fixedWidth /></button>
|
||||
|
||||
<div className={classNames('video-player__volume', { active: this.state.hovered })} onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}>
|
||||
<div className='video-player__volume__current' style={{ width: `${volume * 100}%` }} />
|
||||
|
|
@ -551,18 +644,16 @@ class Video extends React.PureComponent {
|
|||
<span className='video-player__time'>
|
||||
<span className='video-player__time-current'>{formatTime(Math.floor(currentTime))}</span>
|
||||
<span className='video-player__time-sep'>/</span>
|
||||
<span className='video-player__time-total'>{formatTime(duration)}</span>
|
||||
<span className='video-player__time-total'>{formatTime(Math.floor(duration))}</span>
|
||||
</span>
|
||||
)}
|
||||
|
||||
{link && <span className='video-player__link'>{link}</span>}
|
||||
</div>
|
||||
|
||||
<div className='video-player__buttons right'>
|
||||
{(!onCloseVideo && !editable && !fullscreen && !this.props.alwaysVisible) && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>}
|
||||
{(!fullscreen && onOpenVideo) && <button type='button' title={intl.formatMessage(messages.expand)} aria-label={intl.formatMessage(messages.expand)} onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>}
|
||||
{onCloseVideo && <button type='button' title={intl.formatMessage(messages.close)} aria-label={intl.formatMessage(messages.close)} onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>}
|
||||
<button type='button' title={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button>
|
||||
{(!onCloseVideo && !editable && !fullscreen && !this.props.alwaysVisible) && <button type='button' title={intl.formatMessage(messages.hide)} aria-label={intl.formatMessage(messages.hide)} className='player-button' onClick={this.toggleReveal}><Icon id='eye-slash' fixedWidth /></button>}
|
||||
{(!fullscreen && onOpenVideo) && <button type='button' title={intl.formatMessage(messages.expand)} aria-label={intl.formatMessage(messages.expand)} className='player-button' onClick={this.handleOpenVideo}><Icon id='expand' fixedWidth /></button>}
|
||||
{onCloseVideo && <button type='button' title={intl.formatMessage(messages.close)} aria-label={intl.formatMessage(messages.close)} className='player-button' onClick={this.handleCloseVideo}><Icon id='compress' fixedWidth /></button>}
|
||||
<button type='button' title={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} aria-label={intl.formatMessage(fullscreen ? messages.exit_fullscreen : messages.fullscreen)} className='player-button' onClick={this.toggleFullscreen}><Icon id={fullscreen ? 'compress' : 'arrows-alt'} fixedWidth /></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,27 +1,32 @@
|
|||
import detectPassiveEvents from 'detect-passive-events';
|
||||
import { supportsPassiveEvents } from 'detect-passive-events';
|
||||
import { forceSingleColumn } from 'mastodon/initial_state';
|
||||
|
||||
const LAYOUT_BREAKPOINT = 630;
|
||||
|
||||
export function isMobile(width) {
|
||||
return width <= LAYOUT_BREAKPOINT;
|
||||
export const isMobile = width => width <= LAYOUT_BREAKPOINT;
|
||||
|
||||
export const layoutFromWindow = () => {
|
||||
if (isMobile(window.innerWidth)) {
|
||||
return 'mobile';
|
||||
} else if (forceSingleColumn) {
|
||||
return 'single-column';
|
||||
} else {
|
||||
return 'multi-column';
|
||||
}
|
||||
};
|
||||
|
||||
const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
||||
|
||||
let userTouching = false;
|
||||
let listenerOptions = detectPassiveEvents.hasSupport ? { passive: true } : false;
|
||||
let listenerOptions = supportsPassiveEvents ? { passive: true } : false;
|
||||
|
||||
function touchListener() {
|
||||
const touchListener = () => {
|
||||
userTouching = true;
|
||||
window.removeEventListener('touchstart', touchListener, listenerOptions);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('touchstart', touchListener, listenerOptions);
|
||||
|
||||
export function isUserTouching() {
|
||||
return userTouching;
|
||||
}
|
||||
export const isUserTouching = () => userTouching;
|
||||
|
||||
export function isIOS() {
|
||||
return iOS;
|
||||
};
|
||||
export const isIOS = () => iOS;
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "تصفح المزيد على الملف التعريفي الأصلي",
|
||||
"account.cancel_follow_request": "إلغاء طلب المتابَعة",
|
||||
"account.direct": "رسالة خاصة إلى @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "النطاق مخفي",
|
||||
"account.edit_profile": "تعديل الملف الشخصي",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "أوصِ به على صفحتك",
|
||||
"account.follow": "تابِع",
|
||||
"account.followers": "مُتابِعون",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "لم تتلق أي إشعار بعدُ. تفاعل مع المستخدمين الآخرين لإنشاء محادثة.",
|
||||
"empty_column.public": "لا يوجد أي شيء هنا! قم بنشر شيء ما للعامة، أو اتبع المستخدمين الآخرين المتواجدين على الخوادم الأخرى لملء خيط المحادثات",
|
||||
"error.unexpected_crash.explanation": "نظرا لوجود خطأ في التعليمات البرمجية أو مشكلة توافق مع المتصفّح، تعذر عرض هذه الصفحة بشكل صحيح.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "حاول إعادة إنعاش الصفحة. إن لم تُحلّ المشكلة ، يمكنك دائمًا استخدام ماستدون عبر متصفّح آخر أو تطبيق أصلي.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "انسخ تتبع الارتباطات إلى الحافظة",
|
||||
"errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
|
||||
"follow_request.authorize": "ترخيص",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "لإلغاء التركيز على حقل النص أو نافذة البحث",
|
||||
"keyboard_shortcuts.up": "للانتقال إلى أعلى القائمة",
|
||||
"lightbox.close": "إغلاق",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "التالي",
|
||||
"lightbox.previous": "العودة",
|
||||
"lightbox.view_context": "اعرض السياق",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "تعديل العنوان",
|
||||
"lists.new.create": "إنشاء قائمة",
|
||||
"lists.new.title_placeholder": "عنوان القائمة الجديدة",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "إبحث في قائمة الحسابات التي تُتابِعها",
|
||||
"lists.subheading": "قوائمك",
|
||||
"load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "عرض / إخفاء",
|
||||
"missing_indicator.label": "غير موجود",
|
||||
"missing_indicator.sublabel": "تعذر العثور على هذا المورد",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "هل تود إخفاء الإخطارات القادمة من هذا المستخدم ؟",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "تطبيقات الأجهزة المحمولة",
|
||||
"navigation_bar.blocks": "الحسابات المحجوبة",
|
||||
"navigation_bar.bookmarks": "الفواصل المرجعية",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "انتهى استطلاعك للرأي",
|
||||
"notification.poll": "لقد إنتها تصويت شاركت فيه",
|
||||
"notification.reblog": "{name} قام بترقية تبويقك",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "امسح الإخطارات",
|
||||
"notifications.clear_confirmation": "أمتأكد من أنك تود مسح جل الإخطارات الخاصة بك و المتلقاة إلى حد الآن ؟",
|
||||
"notifications.column_settings.alert": "إشعارات سطح المكتب",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "الترقيّات:",
|
||||
"notifications.column_settings.show": "اعرِضها في عمود",
|
||||
"notifications.column_settings.sound": "أصدر صوتا",
|
||||
"notifications.column_settings.status": "تبويقات جديدة:",
|
||||
"notifications.filter.all": "الكل",
|
||||
"notifications.filter.boosts": "الترقيات",
|
||||
"notifications.filter.favourites": "المفضلة",
|
||||
"notifications.filter.follows": "يتابِع",
|
||||
"notifications.filter.mentions": "الإشارات",
|
||||
"notifications.filter.polls": "نتائج استطلاع الرأي",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} إشعارات",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "انتهى",
|
||||
"poll.refresh": "تحديث",
|
||||
"poll.total_people": "{count, plural, one {# شخص} two {# شخصين} few {# أشخاص} many {# أشخاص} other {# أشخاص}}",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count} مليون",
|
||||
"units.short.thousand": "{count} ألف",
|
||||
"upload_area.title": "اسحب ثم أفلت للرفع",
|
||||
"upload_button.label": "إضافة وسائط ({formats})",
|
||||
"upload_button.label": "إضافة وسائط",
|
||||
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
|
||||
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
|
||||
"upload_form.audio_description": "وصف للأشخاص ذي قِصر السمع",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "اكتشف النص مِن الصورة",
|
||||
"upload_modal.edit_media": "تعديل الوسائط",
|
||||
"upload_modal.hint": "اضغط أو اسحب الدائرة على خانة المعاينة لاختيار نقطة التركيز التي ستُعرَض دائمًا على كل المصغرات.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "معاينة ({ratio})",
|
||||
"upload_progress.label": "يرفع...",
|
||||
"video.close": "إغلاق الفيديو",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Encaboxar la solicitú de siguimientu",
|
||||
"account.direct": "Unviar un mensaxe direutu a @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Dominiu anubríu",
|
||||
"account.edit_profile": "Editar el perfil",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Destacar nel perfil",
|
||||
"account.follow": "Siguir",
|
||||
"account.followers": "Siguidores",
|
||||
|
|
@ -96,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.publish": "Barritar",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Mark media as sensitive",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
|
||||
"compose_form.spoiler.marked": "El testu nun va anubrise darrera d'una alvertencia",
|
||||
"compose_form.spoiler.unmarked": "El testu nun va anubrise",
|
||||
"compose_form.spoiler_placeholder": "Escribi equí l'alvertencia",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Entá nun tienes nunengún avisu. Interactúa con otros p'aniciar la conversación.",
|
||||
"empty_column.public": "¡Equí nun hai nada! Escribi daqué público o sigui a usuarios d'otros sirvidores pa rellenar esto",
|
||||
"error.unexpected_crash.explanation": "Pola mor d'un fallu nel códigu o un problema de compatibilidá del restolador, esta páxina nun pudo amosase correutamente.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
||||
"errors.unexpected_crash.report_issue": "Report issue",
|
||||
"follow_request.authorize": "Autorizar",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "pa desenfocar l'área de composición/gueta",
|
||||
"keyboard_shortcuts.up": "pa xubir na llista",
|
||||
"lightbox.close": "Close",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Siguiente",
|
||||
"lightbox.previous": "Previous",
|
||||
"lightbox.view_context": "View context",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Change title",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "Títulu nuevu de la llista",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Guetar ente la xente que sigues",
|
||||
"lists.subheading": "Les tos llistes",
|
||||
"load_pending": "{count, plural, one {# elementu nuevu} other {# elementos nuevos}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Alternar la visibilidá",
|
||||
"missing_indicator.label": "Nun s'alcontró",
|
||||
"missing_indicator.sublabel": "Esti recursu nun pudo alcontrase",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "¿Anubrir los avisos d'esti usuariu?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Aplicaciones pa móviles",
|
||||
"navigation_bar.blocks": "Usuarios bloquiaos",
|
||||
"navigation_bar.bookmarks": "Marcadores",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "Finó una encuesta na que votesti",
|
||||
"notification.reblog": "{name} compartió'l to estáu",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Llimpiar avisos",
|
||||
"notifications.clear_confirmation": "¿De xuru que quies llimpiar dafechu tolos avisos?",
|
||||
"notifications.column_settings.alert": "Avisos d'escritoriu",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Barritos compartíos:",
|
||||
"notifications.column_settings.show": "Amosar en columna",
|
||||
"notifications.column_settings.sound": "Reproducir un soníu",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "Too",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favourites",
|
||||
"notifications.filter.follows": "Follows",
|
||||
"notifications.filter.mentions": "Menciones",
|
||||
"notifications.filter.polls": "Poll results",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} avisos",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Acabó",
|
||||
"poll.refresh": "Refresh",
|
||||
"poll.total_people": "{count, plural, one {# persona} other {# persones}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Deteutar el testu de la semeya",
|
||||
"upload_modal.edit_media": "Edición",
|
||||
"upload_modal.hint": "Calca o arrastra'l círculu de la previsualización pa escoyer el puntu d'enfoque que va amosase siempres en toles miniatures.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Previsualización ({ratio})",
|
||||
"upload_progress.label": "Xubiendo…",
|
||||
"video.close": "Zarrar el videu",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Откажи искането за следване",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Скрит домейн",
|
||||
"account.edit_profile": "Редактирай профила си",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Характеристика на профила",
|
||||
"account.follow": "Последвай",
|
||||
"account.followers": "Последователи",
|
||||
|
|
@ -96,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.publish": "Раздумай",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Mark media as sensitive",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Content warning",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
|
||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up",
|
||||
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
||||
"errors.unexpected_crash.report_issue": "Report issue",
|
||||
"follow_request.authorize": "Authorize",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Затвори",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lightbox.view_context": "View context",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Change title",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
|
||||
"missing_indicator.label": "Not found",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mobile apps",
|
||||
"navigation_bar.blocks": "Blocked users",
|
||||
"navigation_bar.bookmarks": "Bookmarks",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.reblog": "{name} сподели твоята публикация",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Clear notifications",
|
||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||
"notifications.column_settings.alert": "Десктоп известия",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Споделяния:",
|
||||
"notifications.column_settings.show": "Покажи в колона",
|
||||
"notifications.column_settings.sound": "Play sound",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "All",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favourites",
|
||||
"notifications.filter.follows": "Follows",
|
||||
"notifications.filter.mentions": "Mentions",
|
||||
"notifications.filter.polls": "Poll results",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} notifications",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Closed",
|
||||
"poll.refresh": "Refresh",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# people}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Detect text from picture",
|
||||
"upload_modal.edit_media": "Edit media",
|
||||
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Preview ({ratio})",
|
||||
"upload_progress.label": "Uploading…",
|
||||
"video.close": "Close video",
|
||||
|
|
|
|||
|
|
@ -1,22 +1,24 @@
|
|||
{
|
||||
"account.account_note_header": "Note",
|
||||
"account.account_note_header": "নোট",
|
||||
"account.add_or_remove_from_list": "তালিকাতে যুক্ত বা অপসারণ করুন",
|
||||
"account.badges.bot": "বট",
|
||||
"account.badges.group": "Group",
|
||||
"account.badges.group": "গ্রুপ",
|
||||
"account.block": "@{name} কে ব্লক করুন",
|
||||
"account.block_domain": "{domain} থেকে সব আড়াল করুন",
|
||||
"account.blocked": "অবরুদ্ধ",
|
||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.browse_more_on_origin_server": "মূল প্রোফাইলটিতে আরও ব্রাউজ করুন",
|
||||
"account.cancel_follow_request": "অনুসরণ অনুরোধ বাতিল করুন",
|
||||
"account.direct": "@{name} কে সরাসরি বার্তা",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "ডোমেন গোপন করুন",
|
||||
"account.edit_profile": "প্রোফাইল পরিবর্তন করুন",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "নিজের পাতায় দেখান",
|
||||
"account.follow": "অনুসরণ করুন",
|
||||
"account.followers": "অনুসরণকারী",
|
||||
"account.followers.empty": "এই সদস্যকে এখনো কেউ অনুসরণ করে না।.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
|
||||
"account.followers_counter": "{count, plural,one {{counter} জন অনুসরণকারী } other {{counter} জন অনুসরণকারী}}",
|
||||
"account.following_counter": "{count, plural,one {{counter} জনকে অনুসরণ} other {{counter} জনকে অনুসরণ}}",
|
||||
"account.follows.empty": "এই সদস্য কাওকে এখনো অনুসরণ করেন না.",
|
||||
"account.follows_you": "আপনাকে অনুসরণ করে",
|
||||
"account.hide_reblogs": "@{name}'র সমর্থনগুলি লুকিয়ে ফেলুন",
|
||||
|
|
@ -36,19 +38,19 @@
|
|||
"account.requested": "অনুমতির অপেক্ষা। অনুসরণ করার অনুরোধ বাতিল করতে এখানে ক্লিক করুন",
|
||||
"account.share": "@{name} র প্রোফাইল অন্যদের দেখান",
|
||||
"account.show_reblogs": "@{name} র সমর্থনগুলো দেখান",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
|
||||
"account.statuses_counter": "{count, plural,one {{counter} টুট} other {{counter} টুট}}",
|
||||
"account.unblock": "@{name} র কার্যকলাপ দেখুন",
|
||||
"account.unblock_domain": "{domain} কে আবার দেখুন",
|
||||
"account.unendorse": "আপনার নিজের পাতায় এটা দেখবেন না",
|
||||
"account.unfollow": "অনুসরণ না করতে",
|
||||
"account.unmute": "@{name} র কার্যকলাপ আবার দেখুন",
|
||||
"account.unmute_notifications": "@{name} র প্রজ্ঞাপন দেখুন",
|
||||
"account_note.placeholder": "Click to add a note",
|
||||
"account_note.placeholder": "নোট যোগ করতে ক্লিক করুন",
|
||||
"alert.rate_limited.message": "{retry_time, time, medium} -এর পরে আবার প্রচেষ্টা করুন।",
|
||||
"alert.rate_limited.title": "হার সীমিত",
|
||||
"alert.unexpected.message": "সমস্যা অপ্রত্যাশিত.",
|
||||
"alert.unexpected.title": "ওহো!",
|
||||
"announcement.announcement": "Announcement",
|
||||
"announcement.announcement": "ঘোষণা",
|
||||
"autosuggest_hashtag.per_week": "প্রতি সপ্তাহে {count}",
|
||||
"boost_modal.combo": "পরেরবার আপনি {combo} টিপলে এটি আর আসবে না",
|
||||
"bundle_column_error.body": "এই অংশটি দেখতে যেয়ে কোনো সমস্যা হয়েছে।.",
|
||||
|
|
@ -58,7 +60,7 @@
|
|||
"bundle_modal_error.message": "এই অংশটি দেখাতে যেয়ে কোনো সমস্যা হয়েছে।.",
|
||||
"bundle_modal_error.retry": "আবার চেষ্টা করুন",
|
||||
"column.blocks": "যাদের ব্লক করা হয়েছে",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.bookmarks": "বুকমার্ক",
|
||||
"column.community": "স্থানীয় সময়সারি",
|
||||
"column.direct": "সরাসরি লেখা",
|
||||
"column.directory": "প্রোফাইল ব্রাউজ করুন",
|
||||
|
|
@ -79,9 +81,9 @@
|
|||
"column_header.show_settings": "সেটিং দেখান",
|
||||
"column_header.unpin": "পিন খুলুন",
|
||||
"column_subheading.settings": "সেটিং",
|
||||
"community.column_settings.local_only": "Local only",
|
||||
"community.column_settings.local_only": "শুধুমাত্র স্থানীয়",
|
||||
"community.column_settings.media_only": "শুধুমাত্র ছবি বা ভিডিও",
|
||||
"community.column_settings.remote_only": "Remote only",
|
||||
"community.column_settings.remote_only": "শুধুমাত্র দূরবর্তী",
|
||||
"compose_form.direct_message_warning": "শুধুমাত্র যাদেরকে উল্লেখ করা হয়েছে তাদেরকেই এই টুটটি পাঠানো হবে ।",
|
||||
"compose_form.direct_message_warning_learn_more": "আরো জানুন",
|
||||
"compose_form.hashtag_warning": "কোনো হ্যাশট্যাগের ভেতরে এই টুটটি থাকবেনা কারণ এটি তালিকাবহির্ভূত। শুধুমাত্র প্রকাশ্য ঠোটগুলো হ্যাশট্যাগের ভেতরে খুঁজে পাওয়া যাবে।",
|
||||
|
|
@ -92,8 +94,8 @@
|
|||
"compose_form.poll.duration": "ভোটগ্রহনের সময়",
|
||||
"compose_form.poll.option_placeholder": "বিকল্প {number}",
|
||||
"compose_form.poll.remove_option": "এই বিকল্পটি মুছে ফেলুন",
|
||||
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
|
||||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.poll.switch_to_multiple": "একাধিক পছন্দ অনুমতি দেওয়ার জন্য পোল পরিবর্তন করুন",
|
||||
"compose_form.poll.switch_to_single": "একটি একক পছন্দের অনুমতি দেওয়ার জন্য পোল পরিবর্তন করুন",
|
||||
"compose_form.publish": "টুট",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "এই ছবি বা ভিডিওটি সংবেদনশীল হিসেবে চিহ্নিত করতে",
|
||||
|
|
@ -150,7 +152,7 @@
|
|||
"empty_column.account_timeline": "এখানে কোনো টুট নেই!",
|
||||
"empty_column.account_unavailable": "নিজস্ব পাতা নেই",
|
||||
"empty_column.blocks": "আপনি কোনো ব্যবহারকারীদের ব্লক করেন নি।",
|
||||
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
|
||||
"empty_column.bookmarked_statuses": "আপনার কাছে এখনও কোনও বুকমার্কড টুট নেই। আপনি যখন একটি বুকমার্ক করেন, এটি এখানে প্রদর্শিত হবে।",
|
||||
"empty_column.community": "স্থানীয় সময়রেখাতে কিছু নেই। প্রকাশ্যভাবে কিছু লিখে লেখালেখির উদ্বোধন করে ফেলুন!",
|
||||
"empty_column.direct": "আপনার কাছে সরাসরি পাঠানো কোনো লেখা নেই। যদি কেও পাঠায়, সেটা এখানে দেখা যাবে।",
|
||||
"empty_column.domain_blocks": "এখনও কোনও লুকানো ডোমেন নেই।",
|
||||
|
|
@ -166,13 +168,15 @@
|
|||
"empty_column.notifications": "আপনার এখনো কোনো প্রজ্ঞাপন নেই। কথোপকথন শুরু করতে, অন্যদের সাথে মেলামেশা করতে পারেন।",
|
||||
"empty_column.public": "এখানে এখনো কিছু নেই! প্রকাশ্য ভাবে কিছু লিখুন বা অন্য সার্ভার থেকে কাওকে অনুসরণ করে এই জায়গা ভরে ফেলুন",
|
||||
"error.unexpected_crash.explanation": "আমাদের কোড বা ব্রাউজারের সামঞ্জস্য ইস্যুতে একটি বাগের কারণে এই পৃষ্ঠাটি সঠিকভাবে প্রদর্শিত করা যায় নি।",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "পাতাটি রিফ্রেশ করে চেষ্টা করুন। তবুও যদি না হয়, তবে আপনি অন্য একটি ব্রাউজার অথবা আপনার ডিভাইসের জন্যে এপের মাধ্যমে মাস্টডন ব্যাবহার করতে পারবেন।.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "স্টেকট্রেস ক্লিপবোর্ডে কপি করুন",
|
||||
"errors.unexpected_crash.report_issue": "সমস্যার প্রতিবেদন করুন",
|
||||
"follow_request.authorize": "অনুমতি দিন",
|
||||
"follow_request.reject": "প্রত্যাখ্যান করুন",
|
||||
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
|
||||
"generic.saved": "Saved",
|
||||
"follow_requests.unlocked_explanation": "আপনার অ্যাকাউন্টটি লক না থাকলেও, {domain} কর্মীরা ভেবেছিলেন যে আপনি এই অ্যাকাউন্টগুলি থেকে ম্যানুয়ালি অনুসরণের অনুরোধগুলি পর্যালোচনা করতে চাইতে পারেন।",
|
||||
"generic.saved": "সংরক্ষণ হয়েছে",
|
||||
"getting_started.developers": "তৈরিকারকদের জন্য",
|
||||
"getting_started.directory": "নিজস্ব-পাতাগুলির তালিকা",
|
||||
"getting_started.documentation": "নথিপত্র",
|
||||
|
|
@ -193,8 +197,8 @@
|
|||
"home.column_settings.basic": "সাধারণ",
|
||||
"home.column_settings.show_reblogs": "সমর্থনগুলো দেখান",
|
||||
"home.column_settings.show_replies": "মতামত দেখান",
|
||||
"home.hide_announcements": "Hide announcements",
|
||||
"home.show_announcements": "Show announcements",
|
||||
"home.hide_announcements": "ঘোষণা লুকান",
|
||||
"home.show_announcements": "ঘোষণা দেখান",
|
||||
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
|
||||
"intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}}",
|
||||
|
|
@ -236,13 +240,13 @@
|
|||
"keyboard_shortcuts.muted": "বন্ধ করা ব্যবহারকারীদের তালিকা খুলতে",
|
||||
"keyboard_shortcuts.my_profile": "আপনার নিজের পাতা দেখতে",
|
||||
"keyboard_shortcuts.notifications": "প্রজ্ঞাপনের কলাম খুলতে",
|
||||
"keyboard_shortcuts.open_media": "to open media",
|
||||
"keyboard_shortcuts.open_media": "মিডিয়া খলার জন্য",
|
||||
"keyboard_shortcuts.pinned": "পিন দেওয়া টুটের তালিকা খুলতে",
|
||||
"keyboard_shortcuts.profile": "লেখকের পাতা দেখতে",
|
||||
"keyboard_shortcuts.reply": "মতামত দিতে",
|
||||
"keyboard_shortcuts.requests": "অনুসরণ অনুরোধের তালিকা দেখতে",
|
||||
"keyboard_shortcuts.search": "খোঁজার অংশে ফোকাস করতে",
|
||||
"keyboard_shortcuts.spoilers": "to show/hide CW field",
|
||||
"keyboard_shortcuts.spoilers": "CW ক্ষেত্র দেখাবার/লুকবার জন্য",
|
||||
"keyboard_shortcuts.start": "\"প্রথম শুরুর\" কলাম বের করতে",
|
||||
"keyboard_shortcuts.toggle_hidden": "CW লেখা দেখতে বা লুকাতে",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "ভিডিও/ছবি দেখতে বা বন্ধ করতে",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "লেখা বা খোঁজার জায়গায় ফোকাস না করতে",
|
||||
"keyboard_shortcuts.up": "তালিকার উপরের দিকে যেতে",
|
||||
"lightbox.close": "বন্ধ",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "পরবর্তী",
|
||||
"lightbox.previous": "পূর্ববর্তী",
|
||||
"lightbox.view_context": "প্রসঙ্গটি দেখতে",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "শিরোনাম সম্পাদনা করতে",
|
||||
"lists.new.create": "তালিকাতে যুক্ত করতে",
|
||||
"lists.new.title_placeholder": "তালিকার নতুন শিরোনাম দিতে",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "যাদের অনুসরণ করেন তাদের ভেতরে খুঁজুন",
|
||||
"lists.subheading": "আপনার তালিকা",
|
||||
"load_pending": "{count, plural, one {# নতুন জিনিস} other {# নতুন জিনিস}}",
|
||||
|
|
@ -267,10 +277,12 @@
|
|||
"media_gallery.toggle_visible": "দৃশ্যতার অবস্থা বদলান",
|
||||
"missing_indicator.label": "খুঁজে পাওয়া যায়নি",
|
||||
"missing_indicator.sublabel": "জিনিসটা খুঁজে পাওয়া যায়নি",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "এই ব্যবহারকারীর প্রজ্ঞাপন বন্ধ করবেন ?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "মোবাইলের আপ্প",
|
||||
"navigation_bar.blocks": "বন্ধ করা ব্যবহারকারী",
|
||||
"navigation_bar.bookmarks": "Bookmarks",
|
||||
"navigation_bar.bookmarks": "বুকমার্ক",
|
||||
"navigation_bar.community_timeline": "স্থানীয় সময়রেখা",
|
||||
"navigation_bar.compose": "নতুন টুট লিখুন",
|
||||
"navigation_bar.direct": "সরাসরি লেখাগুলি",
|
||||
|
|
@ -293,11 +305,12 @@
|
|||
"navigation_bar.security": "নিরাপত্তা",
|
||||
"notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন",
|
||||
"notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
|
||||
"notification.follow_request": "{name} has requested to follow you",
|
||||
"notification.follow_request": "{name} আপনাকে অনুসরণ করার জন্য অনুরধ করেছে",
|
||||
"notification.mention": "{name} আপনাকে উল্লেখ করেছেন",
|
||||
"notification.own_poll": "আপনার পোল শেষ হয়েছে",
|
||||
"notification.poll": "আপনি ভোট দিয়েছিলেন এমন এক নির্বাচনের ভোটের সময় শেষ হয়েছে",
|
||||
"notification.reblog": "{name} আপনার কার্যক্রমে সমর্থন দেখিয়েছেন",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "প্রজ্ঞাপনগুলো মুছে ফেলতে",
|
||||
"notifications.clear_confirmation": "আপনি কি নির্চিত প্রজ্ঞাপনগুলো মুছে ফেলতে চান ?",
|
||||
"notifications.column_settings.alert": "কম্পিউটারে প্রজ্ঞাপনগুলি",
|
||||
|
|
@ -306,20 +319,29 @@
|
|||
"notifications.column_settings.filter_bar.category": "সংক্ষিপ্ত ছাঁকনি অংশ",
|
||||
"notifications.column_settings.filter_bar.show": "দেখানো",
|
||||
"notifications.column_settings.follow": "নতুন অনুসরণকারীরা:",
|
||||
"notifications.column_settings.follow_request": "New follow requests:",
|
||||
"notifications.column_settings.follow_request": "অনুসরণের অনুরোধগুলি:",
|
||||
"notifications.column_settings.mention": "প্রজ্ঞাপনগুলো:",
|
||||
"notifications.column_settings.poll": "নির্বাচনের ফলাফল:",
|
||||
"notifications.column_settings.push": "পুশ প্রজ্ঞাপনগুলি",
|
||||
"notifications.column_settings.reblog": "সমর্থনগুলো:",
|
||||
"notifications.column_settings.show": "কলামে দেখানো",
|
||||
"notifications.column_settings.sound": "শব্দ বাজানো",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "সব",
|
||||
"notifications.filter.boosts": "সমর্থনগুলো",
|
||||
"notifications.filter.favourites": "পছন্দের গুলো",
|
||||
"notifications.filter.follows": "অনুসরণের",
|
||||
"notifications.filter.mentions": "উল্লেখিত",
|
||||
"notifications.filter.polls": "নির্বাচনের ফলাফল",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} প্রজ্ঞাপন",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "বন্ধ",
|
||||
"poll.refresh": "বদলেছে কিনা দেখতে",
|
||||
"poll.total_people": "{count, plural, one {# ব্যক্তি} other {# ব্যক্তি}}",
|
||||
|
|
@ -345,7 +367,7 @@
|
|||
"relative_time.just_now": "এখন",
|
||||
"relative_time.minutes": "{number}মিঃ",
|
||||
"relative_time.seconds": "{number} সেকেন্ড",
|
||||
"relative_time.today": "today",
|
||||
"relative_time.today": "আজ",
|
||||
"reply_indicator.cancel": "বাতিল করতে",
|
||||
"report.forward": "এটা আরো পাঠান {target} তে",
|
||||
"report.forward_hint": "এই নিবন্ধনটি অন্য একটি সার্ভারে। অপ্রকাশিতনামাভাবে রিপোর্টের কপি সেখানেও কি পাঠাতে চান ?",
|
||||
|
|
@ -368,7 +390,7 @@
|
|||
"status.admin_account": "@{name} র জন্য পরিচালনার ইন্টারফেসে ঢুকুন",
|
||||
"status.admin_status": "যায় লেখাটি পরিচালনার ইন্টারফেসে খুলুন",
|
||||
"status.block": "@{name} কে ব্লক করুন",
|
||||
"status.bookmark": "Bookmark",
|
||||
"status.bookmark": "বুকমার্ক",
|
||||
"status.cancel_reblog_private": "সমর্থন বাতিল করতে",
|
||||
"status.cannot_reblog": "এটিতে সমর্থন দেওয়া যাবেনা",
|
||||
"status.copy": "লেখাটির লিংক কপি করতে",
|
||||
|
|
@ -393,7 +415,7 @@
|
|||
"status.reblogged_by": "{name} সমর্থন দিয়েছে",
|
||||
"status.reblogs.empty": "এখনো কেও এটাতে সমর্থন দেয়নি। যখন কেও দেয়, সেটা তখন এখানে দেখা যাবে।",
|
||||
"status.redraft": "মুছে আবার নতুন করে লিখতে",
|
||||
"status.remove_bookmark": "Remove bookmark",
|
||||
"status.remove_bookmark": "বুকমার্ক সরান",
|
||||
"status.reply": "মতামত জানাতে",
|
||||
"status.replyAll": "লেখাযুক্ত সবার কাছে মতামত জানাতে",
|
||||
"status.report": "@{name} কে রিপোর্ট করতে",
|
||||
|
|
@ -419,33 +441,34 @@
|
|||
"time_remaining.minutes": "{number, plural, one {# মিনিট} other {# মিনিট}} বাকি আছে",
|
||||
"time_remaining.moments": "সময় বাকি আছে",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} বাকি আছে",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
|
||||
"timeline_hint.resources.followers": "Followers",
|
||||
"timeline_hint.resources.follows": "Follows",
|
||||
"timeline_hint.resources.statuses": "Older toots",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
|
||||
"timeline_hint.remote_resource_not_displayed": "অন্য সার্ভারগুলি থেকে {resource} দেখাচ্ছে না। ",
|
||||
"timeline_hint.resources.followers": "অনুসরকারীরা",
|
||||
"timeline_hint.resources.follows": "অনুসরণ করে",
|
||||
"timeline_hint.resources.statuses": "পুরনো টুটগুলি",
|
||||
"trends.counter_by_accounts": "{count, plural,one {{counter} জন ব্যক্তি} other {{counter} জন লোক}} কথা বলছে",
|
||||
"trends.trending_now": "বর্তমানে জনপ্রিয়",
|
||||
"ui.beforeunload": "যে পর্যন্ত এটা লেখা হয়েছে, মাস্টাডন থেকে চলে গেলে এটা মুছে যাবে।",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"units.short.billion": "{count}বিলিয়ন",
|
||||
"units.short.million": "{count}মিলিওন",
|
||||
"units.short.thousand": "{count}হাজার",
|
||||
"upload_area.title": "টেনে এখানে ছেড়ে দিলে এখানে যুক্ত করা যাবে",
|
||||
"upload_button.label": "ছবি বা ভিডিও যুক্ত করতে (এসব ধরণের: JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "যা যুক্ত করতে চাচ্ছেন সেটি বেশি বড়, এখানকার সর্বাধিকের মেমোরির উপরে চলে গেছে।",
|
||||
"upload_error.poll": "নির্বাচনক্ষেত্রে কোনো ফাইল যুক্ত করা যাবেনা।",
|
||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||
"upload_form.audio_description": "শ্রবণশক্তি লোকদের জন্য বর্ণনা করুন",
|
||||
"upload_form.description": "যারা দেখতে পায়না তাদের জন্য এটা বর্ণনা করতে",
|
||||
"upload_form.edit": "সম্পাদন",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.thumbnail": "থাম্বনেল পরিবর্তন করুন",
|
||||
"upload_form.undo": "মুছে ফেলতে",
|
||||
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
|
||||
"upload_form.video_description": "শ্রবণশক্তি হ্রাস বা চাক্ষুষ প্রতিবন্ধী ব্যক্তিদের জন্য বর্ণনা করুন",
|
||||
"upload_modal.analyzing_picture": "চিত্র বিশ্লেষণ করা হচ্ছে…",
|
||||
"upload_modal.apply": "প্রয়োগ করুন",
|
||||
"upload_modal.choose_image": "Choose image",
|
||||
"upload_modal.choose_image": "ছবি নির্বাচন করুন",
|
||||
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
|
||||
"upload_modal.detect_text": "ছবি থেকে পাঠ্য সনাক্ত করুন",
|
||||
"upload_modal.edit_media": "মিডিয়া সম্পাদনা করুন",
|
||||
"upload_modal.hint": "একটি দৃশ্যমান পয়েন্ট নির্বাচন করুন ক্লিক অথবা টানার মাধ্যমে যেটি সবময় সব থাম্বনেলে দেখা যাবে।",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "পূর্বরূপ({ratio})",
|
||||
"upload_progress.label": "যুক্ত করতে পাঠানো হচ্ছে...",
|
||||
"video.close": "ভিডিওটি বন্ধ করতে",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Nullañ ar bedadenn heuliañ",
|
||||
"account.direct": "Kas ur gemennadenn da @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Domani berzet",
|
||||
"account.edit_profile": "Aozañ ar profil",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Lakaat war-wel war ar profil",
|
||||
"account.follow": "Heuliañ",
|
||||
"account.followers": "Heulier·ezed·ien",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "N'ho peus kemenn ebet c'hoazh. Grit gant implijer·ezed·ien all evit loc'hañ ar gomz.",
|
||||
"empty_column.public": "N'eus netra amañ! Skrivit un dra bennak foran pe heuilhit implijer·ien·ezed eus dafariadoù all evit leuniañ",
|
||||
"error.unexpected_crash.explanation": "Abalamour d'ur beug en hor c'hod pe d'ur gudenn geverlec'hded n'hallomp ket skrammañ ar bajenn-mañ en un doare dereat.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Klaskit azbevaat ar bajenn. Ma n'a ket en-dro e c'hallit klask ober gant Mastodon dre ur merdeer disheñvel pe dre an arload genidik.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Eilañ ar roudoù diveugañ er golver",
|
||||
"errors.unexpected_crash.report_issue": "Danevellañ ur fazi",
|
||||
"follow_request.authorize": "Aotren",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Serriñ",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Da-heul",
|
||||
"lightbox.previous": "A-raok",
|
||||
"lightbox.view_context": "Diskouez ar c'hemperzh",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Cheñch an titl",
|
||||
"lists.new.create": "Ouzhpennañ ul listenn",
|
||||
"lists.new.title_placeholder": "Titl nevez al listenn",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Ho listennoù",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Toggle visibility",
|
||||
"missing_indicator.label": "Digavet",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Arloadoù pellgomz",
|
||||
"navigation_bar.blocks": "Implijer·ezed·ien berzet",
|
||||
"navigation_bar.bookmarks": "Sinedoù",
|
||||
|
|
@ -292,12 +304,13 @@
|
|||
"navigation_bar.public_timeline": "Red-amzer kevreet",
|
||||
"navigation_bar.security": "Diogelroez",
|
||||
"notification.favourite": "{name} favourited your status",
|
||||
"notification.follow": "{name} followed you",
|
||||
"notification.follow": "heuliañ a ra {name} ac'hanoc'h",
|
||||
"notification.follow_request": "{name} has requested to follow you",
|
||||
"notification.mention": "{name} mentioned you",
|
||||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.reblog": "{name} boosted your status",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Skarzhañ ar c'hemennoù",
|
||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||
"notifications.column_settings.alert": "Kemennoù war ar burev",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Skignadennoù:",
|
||||
"notifications.column_settings.show": "Diskouez er bann",
|
||||
"notifications.column_settings.sound": "Seniñ",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "Pep tra",
|
||||
"notifications.filter.boosts": "Skignadennoù",
|
||||
"notifications.filter.favourites": "Muiañ-karet",
|
||||
"notifications.filter.follows": "Heuliañ",
|
||||
"notifications.filter.mentions": "Menegoù",
|
||||
"notifications.filter.polls": "Disoc'hoù ar sontadegoù",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} a gemennoù",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Serret",
|
||||
"poll.refresh": "Azbevaat",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# people}}",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Drag & drop to upload",
|
||||
"upload_button.label": "Ouzhpennañ ur media ({formats})",
|
||||
"upload_button.label": "Ouzhpennañ ur media",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Dinoiñ testenn diouzh ar skeudenn",
|
||||
"upload_modal.edit_media": "Embann ar media",
|
||||
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Rakwel ({ratio})",
|
||||
"upload_progress.label": "O pellgargañ...",
|
||||
"video.close": "Serriñ ar video",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"account.account_note_header": "La teva nota per a @{name}",
|
||||
"account.account_note_header": "Nota",
|
||||
"account.add_or_remove_from_list": "Afegir o Treure de les llistes",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Grup",
|
||||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Navega més en el perfil original",
|
||||
"account.cancel_follow_request": "Anul·la la sol·licitud de seguiment",
|
||||
"account.direct": "Missatge directe @{name}",
|
||||
"account.disable_notifications": "Deixa de notificar-me els tuts de @{name}",
|
||||
"account.domain_blocked": "Domini ocult",
|
||||
"account.edit_profile": "Edita el perfil",
|
||||
"account.enable_notifications": "Notifica’m els tuts de @{name}",
|
||||
"account.endorse": "Recomana en el teu perfil",
|
||||
"account.follow": "Segueix",
|
||||
"account.followers": "Seguidors",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Encara no tens notificacions. Interactua amb altres per iniciar la conversa.",
|
||||
"empty_column.public": "No hi ha res aquí! Escriu públicament alguna cosa o manualment segueix usuaris d'altres servidors per omplir-ho",
|
||||
"error.unexpected_crash.explanation": "A causa d'un bug en el nostre codi o un problema de compatibilitat del navegador, aquesta pàgina podria no ser mostrada correctament.",
|
||||
"error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda, encara podries ser capaç d'utilitzar Mastodon a través d'un navegador diferent o amb una app nativa.",
|
||||
"error.unexpected_crash.explanation_addons": "Aquesta pàgina podria no mostrar-se correctament. Aquest error és possiblement causat per una extensió del navegador o per eienes automàtiques de traducció.",
|
||||
"error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda, encara podries ser capaç d'utilitzar Mastodon a través d'un navegador diferent o amb una aplicació nativa.",
|
||||
"error.unexpected_crash.next_steps_addons": "Prova de desactivar-les i refrescant la pàgina. Si això no ajuda, encara pots ser capaç d’utilitzar Mastodon amb un altre navegador o aplicació nativa.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls",
|
||||
"errors.unexpected_crash.report_issue": "Informa d'un problema",
|
||||
"follow_request.authorize": "Autoritzar",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "descentrar l'àrea de composició de text/cerca",
|
||||
"keyboard_shortcuts.up": "moure amunt en la llista",
|
||||
"lightbox.close": "Tancar",
|
||||
"lightbox.compress": "Quadre de visualització d’imatge comprimida",
|
||||
"lightbox.expand": "Amplia el quadre de visualització de l’imatge",
|
||||
"lightbox.next": "Següent",
|
||||
"lightbox.previous": "Anterior",
|
||||
"lightbox.view_context": "Veure el context",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Canvi de títol",
|
||||
"lists.new.create": "Afegir llista",
|
||||
"lists.new.title_placeholder": "Nova llista",
|
||||
"lists.replies_policy.all_replies": "Qualsevol usuari seguit",
|
||||
"lists.replies_policy.list_replies": "Membres de la llista",
|
||||
"lists.replies_policy.no_replies": "Ningú",
|
||||
"lists.replies_policy.title": "Mostra respostes a:",
|
||||
"lists.search": "Cercar entre les persones que segueixes",
|
||||
"lists.subheading": "Les teves llistes",
|
||||
"load_pending": "{count, plural, one {# element nou} other {# elements nous}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Alternar visibilitat",
|
||||
"missing_indicator.label": "No trobat",
|
||||
"missing_indicator.sublabel": "Aquest recurs no pot ser trobat",
|
||||
"mute_modal.duration": "Durada",
|
||||
"mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?",
|
||||
"mute_modal.indefinite": "Indefinit",
|
||||
"navigation_bar.apps": "Apps mòbils",
|
||||
"navigation_bar.blocks": "Usuaris bloquejats",
|
||||
"navigation_bar.bookmarks": "Marcadors",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "La teva enquesta ha finalitzat",
|
||||
"notification.poll": "Ha finalitzat una enquesta en la que has votat",
|
||||
"notification.reblog": "{name} ha impulsat el teu estat",
|
||||
"notification.status": "ha publicat {name}",
|
||||
"notifications.clear": "Netejar notificacions",
|
||||
"notifications.clear_confirmation": "Estàs segur que vols esborrar permanentment totes les teves notificacions?",
|
||||
"notifications.column_settings.alert": "Notificacions d'escriptori",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Impulsos:",
|
||||
"notifications.column_settings.show": "Mostra en la columna",
|
||||
"notifications.column_settings.sound": "Reproduir so",
|
||||
"notifications.column_settings.status": "Nous tuts:",
|
||||
"notifications.filter.all": "Tots",
|
||||
"notifications.filter.boosts": "Impulsos",
|
||||
"notifications.filter.favourites": "Favorits",
|
||||
"notifications.filter.follows": "Seguiments",
|
||||
"notifications.filter.mentions": "Mencions",
|
||||
"notifications.filter.polls": "Resultats de l'enquesta",
|
||||
"notifications.filter.statuses": "Actualitzacions de gent que segueixes",
|
||||
"notifications.group": "{count} notificacions",
|
||||
"notifications.mark_as_read": "Marca cada notificació com a llegida",
|
||||
"notifications.permission_denied": "No s’ha pogut activar les notificacions d’escriptori perquè s’ha denegat el permís.",
|
||||
"notifications.permission_denied_alert": "No es poden activar les notificacions del escriptori perquè el permís del navegador ha estat denegat abans",
|
||||
"notifications_permission_banner.enable": "Activar les notificacions d’escriptori",
|
||||
"notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no està obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.",
|
||||
"notifications_permission_banner.title": "Mai et perdis res",
|
||||
"picture_in_picture.restore": "Retorna’l",
|
||||
"poll.closed": "Finalitzada",
|
||||
"poll.refresh": "Actualitza",
|
||||
"poll.total_people": "{count, plural, one {# persona} other {# persones}}",
|
||||
|
|
@ -442,10 +464,11 @@
|
|||
"upload_modal.analyzing_picture": "Analitzant imatge…",
|
||||
"upload_modal.apply": "Aplica",
|
||||
"upload_modal.choose_image": "Tria imatge",
|
||||
"upload_modal.description_placeholder": "Uns salts ràpids de guineu marró sobre el gos gandul",
|
||||
"upload_modal.description_placeholder": "Jove xef, porti whisky amb quinze glaçons d’hidrogen, coi!",
|
||||
"upload_modal.detect_text": "Detecta el text de l'imatge",
|
||||
"upload_modal.edit_media": "Editar multimèdia",
|
||||
"upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per escollir el punt focal que sempre serà visible de totes les miniatures.",
|
||||
"upload_modal.preparing_ocr": "Preparant OCR…",
|
||||
"upload_modal.preview_label": "Previsualitza ({ratio})",
|
||||
"upload_progress.label": "Pujant...",
|
||||
"video.close": "Tancar el vídeo",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"account.account_note_header": "A vostra nota per @{name}",
|
||||
"account.account_note_header": "Nota",
|
||||
"account.add_or_remove_from_list": "Aghjunghje o toglie da e liste",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Gruppu",
|
||||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Vede di più nant'à u prufile uriginale",
|
||||
"account.cancel_follow_request": "Annullà a dumanda d'abbunamentu",
|
||||
"account.direct": "Missaghju direttu @{name}",
|
||||
"account.disable_notifications": "Ùn mi nutificate più quandu @{name} pubblica qualcosa",
|
||||
"account.domain_blocked": "Duminiu piattatu",
|
||||
"account.edit_profile": "Mudificà u prufile",
|
||||
"account.enable_notifications": "Nutificate mi quandu @{name} pubblica qualcosa",
|
||||
"account.endorse": "Fà figurà nant'à u prufilu",
|
||||
"account.follow": "Siguità",
|
||||
"account.followers": "Abbunati",
|
||||
|
|
@ -96,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Cambià u scandagliu per ùn accittà ch'una scelta",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Indicà u media cum'è sensibile",
|
||||
"compose_form.sensitive.marked": "Media indicatu cum'è sensibile",
|
||||
"compose_form.sensitive.unmarked": "Media micca indicatu cum'è sensibile",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Indicà u media cum'è sensibile} other {Indicà i media cum'è sensibili}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Media indicatu cum'è sensibile} other {Media indicati cum'è sensibili}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Media micca indicatu cum'è sensibile} other {Media micca indicati cum'è sensibili}}",
|
||||
"compose_form.spoiler.marked": "Testu piattatu daret'à un'avertimentu",
|
||||
"compose_form.spoiler.unmarked": "Testu micca piattatu",
|
||||
"compose_form.spoiler_placeholder": "Scrive u vostr'avertimentu quì",
|
||||
|
|
@ -132,7 +134,7 @@
|
|||
"directory.new_arrivals": "Ultimi arrivi",
|
||||
"directory.recently_active": "Attività ricente",
|
||||
"embed.instructions": "Integrà stu statutu à u vostru situ cù u codice quì sottu.",
|
||||
"embed.preview": "Assumiglierà à qualcosa cusì:",
|
||||
"embed.preview": "Hà da parè à quessa:",
|
||||
"emoji_button.activity": "Attività",
|
||||
"emoji_button.custom": "Persunalizati",
|
||||
"emoji_button.flags": "Bandere",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Ùn avete ancu nisuna nutificazione. Interact with others to start the conversation.",
|
||||
"empty_column.public": "Ùn c'hè nunda quì! Scrivete qualcosa in pubblicu o seguitate utilizatori d'altri servori per empie a linea pubblica",
|
||||
"error.unexpected_crash.explanation": "In ragione d'un bug indè u nostru codice o un prublemu di cumpatibilità cù quessu navigatore, sta pagina ùn hè micca pussuta esse affissata currettamente.",
|
||||
"error.unexpected_crash.explanation_addons": "Sta pagina ùn hè micca pussuta esse affissata currettamente, prubabilmente per via d'un'estenzione di navigatore o d'un lugiziale di traduzione.",
|
||||
"error.unexpected_crash.next_steps": "Pruvate d'attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.",
|
||||
"error.unexpected_crash.next_steps_addons": "Pruvate di disattivà quelli è poi attualizà sta pagina. S'ellu persiste u prublemu, pudete forse sempre accede à Mastodon dapoi un'alltru navigatore o applicazione.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Cupià stacktrace nant'à u fermacarta",
|
||||
"errors.unexpected_crash.report_issue": "Palisà prublemu",
|
||||
"follow_request.authorize": "Auturizà",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "ùn fucalizà più l'area di testu",
|
||||
"keyboard_shortcuts.up": "cullà indè a lista",
|
||||
"lightbox.close": "Chjudà",
|
||||
"lightbox.compress": "Cumprime a finestra d'affissera di i ritratti",
|
||||
"lightbox.expand": "Ingrandà a finestra d'affissera di i ritratti",
|
||||
"lightbox.next": "Siguente",
|
||||
"lightbox.previous": "Pricidente",
|
||||
"lightbox.view_context": "Vede u cuntestu",
|
||||
|
|
@ -260,14 +266,20 @@
|
|||
"lists.edit.submit": "Cambià u titulu",
|
||||
"lists.new.create": "Aghjunghje",
|
||||
"lists.new.title_placeholder": "Titulu di a lista",
|
||||
"lists.replies_policy.all_replies": "Tutti i vostri abbunamenti",
|
||||
"lists.replies_policy.list_replies": "Membri di a lista",
|
||||
"lists.replies_policy.no_replies": "Nisunu",
|
||||
"lists.replies_policy.title": "Vede e risposte à:",
|
||||
"lists.search": "Circà indè i vostr'abbunamenti",
|
||||
"lists.subheading": "E vo liste",
|
||||
"load_pending": "{count, plural, one {# entrata nova} other {# entrate nove}}",
|
||||
"loading_indicator.label": "Caricamentu...",
|
||||
"media_gallery.toggle_visible": "Cambià a visibilità",
|
||||
"media_gallery.toggle_visible": "Piattà {number, plural, one {ritrattu} other {ritratti}}",
|
||||
"missing_indicator.label": "Micca trovu",
|
||||
"missing_indicator.sublabel": "Ùn era micca pussivule di truvà sta risorsa",
|
||||
"mute_modal.duration": "Durata",
|
||||
"mute_modal.hide_notifications": "Piattà nutificazione da st'utilizatore?",
|
||||
"mute_modal.indefinite": "Indifinita",
|
||||
"navigation_bar.apps": "Applicazione per u telefuninu",
|
||||
"navigation_bar.blocks": "Utilizatori bluccati",
|
||||
"navigation_bar.bookmarks": "Segnalibri",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "U vostru scandagliu hè compiu",
|
||||
"notification.poll": "Un scandagliu induve avete vutatu hè finitu",
|
||||
"notification.reblog": "{name} hà spartutu u vostru statutu",
|
||||
"notification.status": "{name} hà appena pubblicatu",
|
||||
"notifications.clear": "Purgà e nutificazione",
|
||||
"notifications.clear_confirmation": "Site sicuru·a che vulete toglie tutte ste nutificazione?",
|
||||
"notifications.column_settings.alert": "Nutificazione nant'à l'urdinatore",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Spartere:",
|
||||
"notifications.column_settings.show": "Mustrà indè a colonna",
|
||||
"notifications.column_settings.sound": "Sunà",
|
||||
"notifications.column_settings.status": "Statuti novi:",
|
||||
"notifications.filter.all": "Tuttu",
|
||||
"notifications.filter.boosts": "Spartere",
|
||||
"notifications.filter.favourites": "Favuriti",
|
||||
"notifications.filter.follows": "Abbunamenti",
|
||||
"notifications.filter.mentions": "Minzione",
|
||||
"notifications.filter.polls": "Risultati di u scandagliu",
|
||||
"notifications.filter.statuses": "Messe à ghjornu di e persone chì siguitate",
|
||||
"notifications.group": "{count} nutificazione",
|
||||
"notifications.mark_as_read": "Marcà tutte e nutificazione cum'è lette",
|
||||
"notifications.permission_denied": "Ùn si po micca attivà e nutificazione desktop perchè a dumanda d'auturizazione hè stata ricusata",
|
||||
"notifications.permission_denied_alert": "Ùn pudete micca attivà e nutificazione nant'à l'urdinatore, perchè avete digià ricusatu a dumanda d'auturizazione di u navigatore",
|
||||
"notifications_permission_banner.enable": "Attivà e nutificazione nant'à l'urdinatore",
|
||||
"notifications_permission_banner.how_to_control": "Per riceve nutificazione quandu Mastodon ùn hè micca aperta, attivate e nutificazione nant'à l'urdinatore. Pudete decide quali tippi d'interazione anu da mandà ste nutificazione cù u buttone {icon} quì sopra quandu saranu attivate.",
|
||||
"notifications_permission_banner.title": "Ùn mancate mai nunda",
|
||||
"picture_in_picture.restore": "Rimette in piazza",
|
||||
"poll.closed": "Chjosu",
|
||||
"poll.refresh": "Attualizà",
|
||||
"poll.total_people": "{count, plural, one {# persona} other {# persone}}",
|
||||
|
|
@ -352,7 +374,7 @@
|
|||
"report.hint": "U signalamentu sarà mandatu à i muderatori di u servore. Pudete spiegà perchè avete palisatu stu contu quì sottu:",
|
||||
"report.placeholder": "Altri cummenti",
|
||||
"report.submit": "Mandà",
|
||||
"report.target": "Signalamentu",
|
||||
"report.target": "Signalamentu di {target}",
|
||||
"search.placeholder": "Circà",
|
||||
"search_popout.search_format": "Ricerca avanzata",
|
||||
"search_popout.tips.full_text": "I testi simplici rimandanu i statuti ch'avete scritti, aghjunti à i vostri favuriti, spartuti o induve quelli site mintuvatu·a, è ancu i cugnomi, nomi pubblichi è hashtag chì currispondenu.",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Drag & drop per caricà un fugliale",
|
||||
"upload_button.label": "Aghjunghje un media ({formats})",
|
||||
"upload_button.label": "Aghjunghje un media",
|
||||
"upload_error.limit": "Limita di caricamentu di fugliali trapassata.",
|
||||
"upload_error.poll": "Ùn si pò micca caricà fugliali cù i scandagli.",
|
||||
"upload_form.audio_description": "Discrizzione per i ciochi",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Ditettà testu da u ritrattu",
|
||||
"upload_modal.edit_media": "Cambià media",
|
||||
"upload_modal.hint": "Cliccate o sguillate u chjerchju nant'à a vista per sceglie u puntu fucale chì sarà sempre in vista indè tutte e miniature.",
|
||||
"upload_modal.preparing_ocr": "Priparazione di l'OCR…",
|
||||
"upload_modal.preview_label": "Vista ({ratio})",
|
||||
"upload_progress.label": "Caricamentu...",
|
||||
"video.close": "Chjudà a video",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"account.account_note_header": "Note",
|
||||
"account.account_note_header": "Poznámka",
|
||||
"account.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů",
|
||||
"account.badges.bot": "Robot",
|
||||
"account.badges.group": "Skupina",
|
||||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Více na původním profilu",
|
||||
"account.cancel_follow_request": "Zrušit žádost o sledování",
|
||||
"account.direct": "Poslat uživateli @{name} přímou zprávu",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Doména skryta",
|
||||
"account.edit_profile": "Upravit profil",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Zvýraznit na profilu",
|
||||
"account.follow": "Sledovat",
|
||||
"account.followers": "Sledující",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Ještě nemáte žádná oznámení. Začněte s někým konverzaci.",
|
||||
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
|
||||
"error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka načtena správně.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Zkuste stránku načíst znovu. Pokud to nepomůže, zkuste Mastodon používat pomocí jiného prohlížeče nebo nativní aplikace.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Zkopírovat stacktrace do schránky",
|
||||
"errors.unexpected_crash.report_issue": "Nahlásit problém",
|
||||
"follow_request.authorize": "Autorizovat",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "zrušení zaměření na psací prostor/hledání",
|
||||
"keyboard_shortcuts.up": "posunutí nahoru v seznamu",
|
||||
"lightbox.close": "Zavřít",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Další",
|
||||
"lightbox.previous": "Předchozí",
|
||||
"lightbox.view_context": "Zobrazit kontext",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Změnit název",
|
||||
"lists.new.create": "Přidat seznam",
|
||||
"lists.new.title_placeholder": "Název nového seznamu",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Hledejte mezi lidmi, které sledujete",
|
||||
"lists.subheading": "Vaše seznamy",
|
||||
"load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položek} other {# nových položek}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Přepnout viditelnost",
|
||||
"missing_indicator.label": "Nenalezeno",
|
||||
"missing_indicator.sublabel": "Tento zdroj se nepodařilo najít",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Skrýt oznámení od tohoto uživatele?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mobilní aplikace",
|
||||
"navigation_bar.blocks": "Blokovaní uživatelé",
|
||||
"navigation_bar.bookmarks": "Záložky",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Vaše anketa skončila",
|
||||
"notification.poll": "Anketa, ve které jste hlasovali, skončila",
|
||||
"notification.reblog": "Uživatel {name} boostnul váš toot",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Smazat oznámení",
|
||||
"notifications.clear_confirmation": "Opravdu chcete trvale smazat všechna vaše oznámení?",
|
||||
"notifications.column_settings.alert": "Oznámení na počítači",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Boosty:",
|
||||
"notifications.column_settings.show": "Zobrazit ve sloupci",
|
||||
"notifications.column_settings.sound": "Přehrát zvuk",
|
||||
"notifications.column_settings.status": "Nové tooty:",
|
||||
"notifications.filter.all": "Vše",
|
||||
"notifications.filter.boosts": "Boosty",
|
||||
"notifications.filter.favourites": "Oblíbení",
|
||||
"notifications.filter.follows": "Sledování",
|
||||
"notifications.filter.mentions": "Zmínky",
|
||||
"notifications.filter.polls": "Výsledky anket",
|
||||
"notifications.filter.statuses": "Aktuality od lidí, které sledujete",
|
||||
"notifications.group": "{count} oznámení",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Uzavřeno",
|
||||
"poll.refresh": "Obnovit",
|
||||
"poll.total_people": "{count, plural, one {# člověk} few {# lidé} many {# lidí} other {# lidí}}",
|
||||
|
|
@ -430,13 +452,13 @@
|
|||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Nahrajte přetažením",
|
||||
"upload_button.label": "Přidat média ({formats})",
|
||||
"upload_button.label": "Přidat média",
|
||||
"upload_error.limit": "Byl překročen limit nahraných souborů.",
|
||||
"upload_error.poll": "U anket není nahrávání souborů povoleno.",
|
||||
"upload_form.audio_description": "Popis pro sluchově postižené",
|
||||
"upload_form.description": "Popis pro zrakově postižené",
|
||||
"upload_form.edit": "Upravit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.thumbnail": "Změnit miniaturu",
|
||||
"upload_form.undo": "Smazat",
|
||||
"upload_form.video_description": "Popis pro sluchově či zrakově postižené",
|
||||
"upload_modal.analyzing_picture": "Analyzuji obrázek…",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Detekovat text z obrázku",
|
||||
"upload_modal.edit_media": "Upravit média",
|
||||
"upload_modal.hint": "Kliknutím na nebo přetáhnutím kruhu na náhledu vyberte oblast, která bude na všech náhledech vždy zobrazen.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Náhled ({ratio})",
|
||||
"upload_progress.label": "Nahrávání…",
|
||||
"video.close": "Zavřít video",
|
||||
|
|
|
|||
|
|
@ -1,22 +1,24 @@
|
|||
{
|
||||
"account.account_note_header": "Note",
|
||||
"account.account_note_header": "Nodyn",
|
||||
"account.add_or_remove_from_list": "Ychwanegu neu Dileu o'r rhestrau",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Grŵp",
|
||||
"account.block": "Blocio @{name}",
|
||||
"account.block_domain": "Cuddio popeth rhag {domain}",
|
||||
"account.blocked": "Blociwyd",
|
||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.browse_more_on_origin_server": "Pori mwy ar y proffil gwreiddiol",
|
||||
"account.cancel_follow_request": "Canslo cais dilyn",
|
||||
"account.direct": "Neges breifat @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Parth wedi ei guddio",
|
||||
"account.edit_profile": "Golygu proffil",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Arddangos ar fy mhroffil",
|
||||
"account.follow": "Dilyn",
|
||||
"account.followers": "Dilynwyr",
|
||||
"account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Ddilynwr} other {{counter} o Ddilynwyr}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} yn Dilyn} other {{counter} yn Dilyn}}",
|
||||
"account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.",
|
||||
"account.follows_you": "Yn eich dilyn chi",
|
||||
"account.hide_reblogs": "Cuddio bwstiau o @{name}",
|
||||
|
|
@ -36,14 +38,14 @@
|
|||
"account.requested": "Aros am gymeradwyaeth. Cliciwch er mwyn canslo cais dilyn",
|
||||
"account.share": "Rhannwch broffil @{name}",
|
||||
"account.show_reblogs": "Dangos bwstiau o @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Dŵt} other {{counter} o Dŵtiau}}",
|
||||
"account.unblock": "Dadflocio @{name}",
|
||||
"account.unblock_domain": "Dadguddio {domain}",
|
||||
"account.unendorse": "Peidio a'i arddangos ar fy mhroffil",
|
||||
"account.unfollow": "Dad-ddilyn",
|
||||
"account.unmute": "Dad-dawelu @{name}",
|
||||
"account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}",
|
||||
"account_note.placeholder": "Click to add a note",
|
||||
"account_note.placeholder": "Clicio i ychwanegu nodyn",
|
||||
"alert.rate_limited.message": "Ceisiwch eto ar ôl {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Cyfradd gyfyngedig",
|
||||
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
|
||||
|
|
@ -166,13 +168,15 @@
|
|||
"empty_column.notifications": "Nid oes gennych unrhyw hysbysiadau eto. Rhyngweithiwch ac eraill i ddechrau'r sgwrs.",
|
||||
"empty_column.public": "Does dim byd yma! Ysgrifennwch rhywbeth yn gyhoeddus, neu dilynwch ddefnyddwyr o achosion eraill i'w lenwi",
|
||||
"error.unexpected_crash.explanation": "Oherwydd gwall yn ein cod neu oherwydd problem cysondeb porwr, nid oedd y dudalen hon gallu cael ei dangos yn gywir.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Ceisiwch ail-lwytho y dudalen. Os nad yw hyn yn eich helpu, efallai gallech defnyddio Mastodon trwy borwr neu ap brodorol gwahanol.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd",
|
||||
"errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem",
|
||||
"follow_request.authorize": "Caniatau",
|
||||
"follow_request.reject": "Gwrthod",
|
||||
"follow_requests.unlocked_explanation": "Er nid yw eich cyfrif wedi'i gloi, oedd y staff {domain} yn meddwl efallai hoffech adolygu ceisiadau dilyn o'r cyfrifau rhain wrth law.",
|
||||
"generic.saved": "Saved",
|
||||
"generic.saved": "Wedi'i Gadw",
|
||||
"getting_started.developers": "Datblygwyr",
|
||||
"getting_started.directory": "Cyfeiriadur proffil",
|
||||
"getting_started.documentation": "Dogfennaeth",
|
||||
|
|
@ -242,7 +246,7 @@
|
|||
"keyboard_shortcuts.reply": "i ateb",
|
||||
"keyboard_shortcuts.requests": "i agor rhestr ceisiadau dilyn",
|
||||
"keyboard_shortcuts.search": "i ffocysu chwilio",
|
||||
"keyboard_shortcuts.spoilers": "to show/hide CW field",
|
||||
"keyboard_shortcuts.spoilers": "i ddangos/cuddio'r maes CW",
|
||||
"keyboard_shortcuts.start": "i agor colofn \"dechrau arni\"",
|
||||
"keyboard_shortcuts.toggle_hidden": "i ddangos/cuddio testun tu ôl i CW",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "i ddangos/gyddio cyfryngau",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "i ddad-ffocysu ardal cyfansoddi testun/chwilio",
|
||||
"keyboard_shortcuts.up": "i symud yn uwch yn y rhestr",
|
||||
"lightbox.close": "Cau",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Nesaf",
|
||||
"lightbox.previous": "Blaenorol",
|
||||
"lightbox.view_context": "Gweld cyd-destyn",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Newid teitl",
|
||||
"lists.new.create": "Ychwanegu rhestr",
|
||||
"lists.new.title_placeholder": "Teitl rhestr newydd",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Chwilio ymysg pobl yr ydych yn ei ddilyn",
|
||||
"lists.subheading": "Eich rhestrau",
|
||||
"load_pending": "{count, plural, one {# eitem newydd} other {# eitemau newydd}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Toglo gwelededd",
|
||||
"missing_indicator.label": "Heb ei ganfod",
|
||||
"missing_indicator.sublabel": "Ni ellid canfod yr adnodd hwn",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Cuddio hysbysiadau rhag y defnyddiwr hwn?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Apiau symudol",
|
||||
"navigation_bar.blocks": "Defnyddwyr wedi eu blocio",
|
||||
"navigation_bar.bookmarks": "Tudalnodau",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Mae eich pôl wedi diweddu",
|
||||
"notification.poll": "Mae pleidlais rydych wedi pleidleisio ynddi wedi dod i ben",
|
||||
"notification.reblog": "Hysbysebodd {name} eich tŵt",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Clirio hysbysiadau",
|
||||
"notifications.clear_confirmation": "Ydych chi'n sicr eich bod am glirio'ch holl hysbysiadau am byth?",
|
||||
"notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Hybiadau:",
|
||||
"notifications.column_settings.show": "Dangos yn y golofn",
|
||||
"notifications.column_settings.sound": "Chwarae sain",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "Pob",
|
||||
"notifications.filter.boosts": "Hybiadau",
|
||||
"notifications.filter.favourites": "Ffefrynnau",
|
||||
"notifications.filter.follows": "Yn dilyn",
|
||||
"notifications.filter.mentions": "Crybwylliadau",
|
||||
"notifications.filter.polls": "Canlyniadau pleidlais",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} o hysbysiadau",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Ar gau",
|
||||
"poll.refresh": "Adnewyddu",
|
||||
"poll.total_people": "{count, plural, one {# berson} other {# o bobl}}",
|
||||
|
|
@ -419,16 +441,16 @@
|
|||
"time_remaining.minutes": "{number, plural, one {# funud} other {# o funudau}} ar ôl",
|
||||
"time_remaining.moments": "Munudau ar ôl",
|
||||
"time_remaining.seconds": "{number, plural, one {# eiliad} other {# o eiliadau}} ar ôl",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
|
||||
"timeline_hint.resources.followers": "Followers",
|
||||
"timeline_hint.resources.follows": "Follows",
|
||||
"timeline_hint.resources.statuses": "Older toots",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
|
||||
"timeline_hint.remote_resource_not_displayed": "ni chaiff {resource} o gweinyddion eraill ei ddangos.",
|
||||
"timeline_hint.resources.followers": "Dilynwyr",
|
||||
"timeline_hint.resources.follows": "Yn dilyn",
|
||||
"timeline_hint.resources.statuses": "Tŵtiau henach",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} berson} other {{counter} o bobl}}",
|
||||
"trends.trending_now": "Yn tueddu nawr",
|
||||
"ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"units.short.billion": "{count}biliwn",
|
||||
"units.short.million": "{count}miliwn",
|
||||
"units.short.thousand": "{count}mil",
|
||||
"upload_area.title": "Llusgwch & gollwing i uwchlwytho",
|
||||
"upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Wedi mynd heibio'r uchafswm terfyn uwchlwytho.",
|
||||
|
|
@ -436,16 +458,17 @@
|
|||
"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.edit": "Golygu",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.thumbnail": "Newid mân-lun",
|
||||
"upload_form.undo": "Dileu",
|
||||
"upload_form.video_description": "Disgrifio ar gyfer pobl sydd â cholled clyw neu amhariad golwg",
|
||||
"upload_modal.analyzing_picture": "Dadansoddi llun…",
|
||||
"upload_modal.apply": "Gweithredu",
|
||||
"upload_modal.choose_image": "Choose image",
|
||||
"upload_modal.choose_image": "Dewis delwedd",
|
||||
"upload_modal.description_placeholder": "Mae ei phen bach llawn jocs, 'run peth a fy nghot golff, rhai dyddiau",
|
||||
"upload_modal.detect_text": "Canfod testun o'r llun",
|
||||
"upload_modal.edit_media": "Golygu cyfryngau",
|
||||
"upload_modal.hint": "Cliciwch neu llusgwch y cylch ar y rhagolwg i ddewis y canolbwynt a fydd bob amser i'w weld ar bob mân-lunau.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Rhagolwg ({ratio})",
|
||||
"upload_progress.label": "Uwchlwytho...",
|
||||
"video.close": "Cau fideo",
|
||||
|
|
|
|||
|
|
@ -6,16 +6,18 @@
|
|||
"account.block": "Bloker @{name}",
|
||||
"account.block_domain": "Skjul alt fra {domain}",
|
||||
"account.blocked": "Blokeret",
|
||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.browse_more_on_origin_server": "Gennemse mere på den oprindelige profil",
|
||||
"account.cancel_follow_request": "Annullér følgeranmodning",
|
||||
"account.direct": "Send en direkte besked til @{name}",
|
||||
"account.disable_notifications": "Stop med at give mig besked når @{name} lægger noget op",
|
||||
"account.domain_blocked": "Domænet er blevet skjult",
|
||||
"account.edit_profile": "Rediger profil",
|
||||
"account.enable_notifications": "Giv mig besked når @{name} lægger noget op",
|
||||
"account.endorse": "Fremhæv på profil",
|
||||
"account.follow": "Følg",
|
||||
"account.followers": "Følgere",
|
||||
"account.followers.empty": "Der er endnu ingen der følger denne bruger.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Følger} other {{counter} Følgere}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
|
||||
"account.follows.empty": "Denne bruger følger endnu ikke nogen.",
|
||||
"account.follows_you": "Følger dig",
|
||||
|
|
@ -48,7 +50,7 @@
|
|||
"alert.rate_limited.title": "Gradsbegrænset",
|
||||
"alert.unexpected.message": "Der opstod en uventet fejl.",
|
||||
"alert.unexpected.title": "Ups!",
|
||||
"announcement.announcement": "Announcement",
|
||||
"announcement.announcement": "Bekendtgørelse",
|
||||
"autosuggest_hashtag.per_week": "{count} per uge",
|
||||
"boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang",
|
||||
"bundle_column_error.body": "Noget gik galt under indlæsningen af dette komponent.",
|
||||
|
|
@ -79,9 +81,9 @@
|
|||
"column_header.show_settings": "Vis indstillinger",
|
||||
"column_header.unpin": "Fastgør ikke længere",
|
||||
"column_subheading.settings": "Indstillinger",
|
||||
"community.column_settings.local_only": "Local only",
|
||||
"community.column_settings.local_only": "Kun lokalt",
|
||||
"community.column_settings.media_only": "Kun medie",
|
||||
"community.column_settings.remote_only": "Remote only",
|
||||
"community.column_settings.remote_only": "Kun fjernt",
|
||||
"compose_form.direct_message_warning": "Dette trut vil kun blive sendt til de nævnte brugere.",
|
||||
"compose_form.direct_message_warning_learn_more": "Lær mere",
|
||||
"compose_form.hashtag_warning": "Dette trut vil ikke blive vist under noget hashtag da det ikke er listet. Kun offentlige trut kan blive vist under søgninger med hashtags.",
|
||||
|
|
@ -92,8 +94,8 @@
|
|||
"compose_form.poll.duration": "Afstemningens varighed",
|
||||
"compose_form.poll.option_placeholder": "Valgmulighed {number}",
|
||||
"compose_form.poll.remove_option": "Fjern denne valgmulighed",
|
||||
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
|
||||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.poll.switch_to_multiple": "Ændre afstemning for at tillade flere valg",
|
||||
"compose_form.poll.switch_to_single": "Ændre afstemning for at tillade et enkelt valg",
|
||||
"compose_form.publish": "Trut",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Markér medie som følsomt",
|
||||
|
|
@ -166,13 +168,15 @@
|
|||
"empty_column.notifications": "Du har endnu ingen notifikationer. Tag ud og bland dig med folkemængden for at starte samtalen.",
|
||||
"empty_column.public": "Der er ikke noget at se her! Skriv noget offentligt eller start ud med manuelt at følge brugere fra andre server for at udfylde tomrummet",
|
||||
"error.unexpected_crash.explanation": "På grund af en fejl i vores kode, eller en browser kompatibilitetsfejl, så kunne siden ikke vises korrekt.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Prøv at genindlæs siden. Hvis dette ikke hjælper, så forsøg venligst, at tilgå Mastodon via en anden browser eller app.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Kopiér stack trace til udklipsholderen",
|
||||
"errors.unexpected_crash.report_issue": "Rapportér problem",
|
||||
"follow_request.authorize": "Godkend",
|
||||
"follow_request.reject": "Afvis",
|
||||
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
|
||||
"generic.saved": "Saved",
|
||||
"follow_requests.unlocked_explanation": "Selvom din konto ikke er låst, troede {domain} -personalet, at du måske vil gennemgå dine anmodninger manuelt.",
|
||||
"generic.saved": "Gemt",
|
||||
"getting_started.developers": "Udviklere",
|
||||
"getting_started.directory": "Profilliste",
|
||||
"getting_started.documentation": "Dokumentation",
|
||||
|
|
@ -193,8 +197,8 @@
|
|||
"home.column_settings.basic": "Grundlæggende",
|
||||
"home.column_settings.show_reblogs": "Vis fremhævelser",
|
||||
"home.column_settings.show_replies": "Vis svar",
|
||||
"home.hide_announcements": "Hide announcements",
|
||||
"home.show_announcements": "Show announcements",
|
||||
"home.hide_announcements": "Skjul bekendtgørelser",
|
||||
"home.show_announcements": "Vis bekendtgørelser",
|
||||
"intervals.full.days": "{number, plural, one {# dag} other {# dage}}",
|
||||
"intervals.full.hours": "{number, plural, one {# time} other {# timer}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}",
|
||||
|
|
@ -236,13 +240,13 @@
|
|||
"keyboard_shortcuts.muted": "for at åbne listen over dæmpede brugere",
|
||||
"keyboard_shortcuts.my_profile": "for at åbne din profil",
|
||||
"keyboard_shortcuts.notifications": "for at åbne notifikations kolonnen",
|
||||
"keyboard_shortcuts.open_media": "to open media",
|
||||
"keyboard_shortcuts.open_media": "for at åbne medier",
|
||||
"keyboard_shortcuts.pinned": "for at åbne listen over fastgjorte trut",
|
||||
"keyboard_shortcuts.profile": "til profil af åben forfatter",
|
||||
"keyboard_shortcuts.reply": "for at svare",
|
||||
"keyboard_shortcuts.requests": "for at åbne listen over følgeranmodninger",
|
||||
"keyboard_shortcuts.search": "for at fokusere søgningen",
|
||||
"keyboard_shortcuts.spoilers": "to show/hide CW field",
|
||||
"keyboard_shortcuts.spoilers": "for at vise/skjule CW-felt",
|
||||
"keyboard_shortcuts.start": "for at åbne \"kom igen\" kolonnen",
|
||||
"keyboard_shortcuts.toggle_hidden": "for at vise/skjule tekst bag CW",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "for at vise/skjule medier",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "for at fjerne fokus fra skriveområde/søgning",
|
||||
"keyboard_shortcuts.up": "for at bevæge dig op ad listen",
|
||||
"lightbox.close": "Luk",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Næste",
|
||||
"lightbox.previous": "Forrige",
|
||||
"lightbox.view_context": "Vis kontekst",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Skift titel",
|
||||
"lists.new.create": "Tilføj liste",
|
||||
"lists.new.title_placeholder": "Ny liste titel",
|
||||
"lists.replies_policy.all_replies": "Enhver fulgt bruger",
|
||||
"lists.replies_policy.list_replies": "Medlemmer af listen",
|
||||
"lists.replies_policy.no_replies": "Ingen",
|
||||
"lists.replies_policy.title": "Vis svar til:",
|
||||
"lists.search": "Søg iblandt folk du følger",
|
||||
"lists.subheading": "Dine lister",
|
||||
"load_pending": "{count, plural, one {# nyt punkt} other {# nye punkter}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Ændre synlighed",
|
||||
"missing_indicator.label": "Ikke fundet",
|
||||
"missing_indicator.sublabel": "Denne ressource kunne ikke blive fundet",
|
||||
"mute_modal.duration": "Varighed",
|
||||
"mute_modal.hide_notifications": "Skjul notifikationer fra denne bruger?",
|
||||
"mute_modal.indefinite": "Uendeligt",
|
||||
"navigation_bar.apps": "Mobil apps",
|
||||
"navigation_bar.blocks": "Blokerede brugere",
|
||||
"navigation_bar.bookmarks": "Bogmærker",
|
||||
|
|
@ -293,11 +305,12 @@
|
|||
"navigation_bar.security": "Sikkerhed",
|
||||
"notification.favourite": "{name} favoriserede din status",
|
||||
"notification.follow": "{name} fulgte dig",
|
||||
"notification.follow_request": "{name} has requested to follow you",
|
||||
"notification.follow_request": "{name} har anmodet om at følge dig",
|
||||
"notification.mention": "{name} nævnte dig",
|
||||
"notification.own_poll": "Din afstemning er afsluttet",
|
||||
"notification.poll": "En afstemning, du stemte i, er slut",
|
||||
"notification.reblog": "{name} boostede din status",
|
||||
"notification.status": "{name} har lige lagt noget op",
|
||||
"notifications.clear": "Ryd notifikationer",
|
||||
"notifications.clear_confirmation": "Er du sikker på, du vil rydde alle dine notifikationer permanent?",
|
||||
"notifications.column_settings.alert": "Skrivebordsnotifikationer",
|
||||
|
|
@ -306,20 +319,29 @@
|
|||
"notifications.column_settings.filter_bar.category": "Hurtigfilter",
|
||||
"notifications.column_settings.filter_bar.show": "Vis",
|
||||
"notifications.column_settings.follow": "Nye følgere:",
|
||||
"notifications.column_settings.follow_request": "New follow requests:",
|
||||
"notifications.column_settings.follow_request": "Nye følgeranmodninger:",
|
||||
"notifications.column_settings.mention": "Statusser der nævner dig:",
|
||||
"notifications.column_settings.poll": "Afstemningsresultat:",
|
||||
"notifications.column_settings.push": "Pushnotifikationer",
|
||||
"notifications.column_settings.reblog": "Boosts:",
|
||||
"notifications.column_settings.show": "Vis i kolonne",
|
||||
"notifications.column_settings.sound": "Afspil lyd",
|
||||
"notifications.column_settings.status": "Nye toots:",
|
||||
"notifications.filter.all": "Alle",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favoritter",
|
||||
"notifications.filter.follows": "Følger",
|
||||
"notifications.filter.mentions": "Statusser der nævner dig",
|
||||
"notifications.filter.polls": "Afstemningsresultat",
|
||||
"notifications.filter.statuses": "Opdateringer fra personer, du følger",
|
||||
"notifications.group": "{count} notifikationer",
|
||||
"notifications.mark_as_read": "Markér alle notifikationer som læst",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Aktivér skrivebordsmeddelelser",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Gå aldrig glip af noget",
|
||||
"picture_in_picture.restore": "Sæt den tilbage",
|
||||
"poll.closed": "Lukket",
|
||||
"poll.refresh": "Opdatér",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# personer}}",
|
||||
|
|
@ -419,10 +441,10 @@
|
|||
"time_remaining.minutes": "{number, plural, one {# minut} other {# minutter}} tilbage",
|
||||
"time_remaining.moments": "Få øjeblikke tilbage",
|
||||
"time_remaining.seconds": "{number, plural, one {# sekund} other {# sekunder}} tilbage",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
|
||||
"timeline_hint.resources.followers": "Followers",
|
||||
"timeline_hint.resources.follows": "Follows",
|
||||
"timeline_hint.resources.statuses": "Older toots",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} fra andre servere vises ikke.",
|
||||
"timeline_hint.resources.followers": "Følgere",
|
||||
"timeline_hint.resources.follows": "Følger",
|
||||
"timeline_hint.resources.statuses": "Ældre toots",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
|
||||
"trends.trending_now": "Hot lige nu",
|
||||
"ui.beforeunload": "Din kladde vil gå tabt hvis du forlader Mastodon.",
|
||||
|
|
@ -433,19 +455,20 @@
|
|||
"upload_button.label": "Tilføj medie (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Uploadgrænse overskredet.",
|
||||
"upload_error.poll": "Filupload ikke tilladt sammen med afstemninger.",
|
||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||
"upload_form.audio_description": "Beskriv for personer med høretab",
|
||||
"upload_form.description": "Beskriv for svagtseende",
|
||||
"upload_form.edit": "Redigér",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Slet",
|
||||
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
|
||||
"upload_form.video_description": "Beskriv for personer med høretab eller nedsat syn",
|
||||
"upload_modal.analyzing_picture": "Analyserer billede…",
|
||||
"upload_modal.apply": "Anvend",
|
||||
"upload_modal.choose_image": "Choose image",
|
||||
"upload_modal.choose_image": "Vælg billede",
|
||||
"upload_modal.description_placeholder": "En hurtig brun ræv hopper over den dovne hund",
|
||||
"upload_modal.detect_text": "Find tekst i billede på automatisk vis",
|
||||
"upload_modal.edit_media": "Redigér medie",
|
||||
"upload_modal.hint": "Klik eller træk cirklen på billedet for at vælge et fokuspunkt.",
|
||||
"upload_modal.preparing_ocr": "Forbereder OCR…",
|
||||
"upload_modal.preview_label": "Forhåndsvisning ({ratio})",
|
||||
"upload_progress.label": "Uploader...",
|
||||
"video.close": "Luk video",
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
{
|
||||
"account.account_note_header": "Deine Notiz für @{name}",
|
||||
"account.account_note_header": "Notiz",
|
||||
"account.add_or_remove_from_list": "Hinzufügen oder Entfernen von Listen",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Gruppe",
|
||||
"account.block": "@{name} blockieren",
|
||||
"account.block_domain": "Alles von {domain} blockieren",
|
||||
"account.block_domain": "Alles von {domain} verstecken",
|
||||
"account.blocked": "Blockiert",
|
||||
"account.browse_more_on_origin_server": "Mehr auf dem Originalprofil durchsuchen",
|
||||
"account.cancel_follow_request": "Folgeanfrage abbrechen",
|
||||
"account.direct": "Direktnachricht an @{name}",
|
||||
"account.disable_notifications": "Höre auf mich zu benachrichtigen wenn @{name} etwas postet",
|
||||
"account.domain_blocked": "Domain versteckt",
|
||||
"account.edit_profile": "Profil bearbeiten",
|
||||
"account.enable_notifications": "Benachrichtige mich wenn @{name} etwas postet",
|
||||
"account.endorse": "Auf Profil hervorheben",
|
||||
"account.follow": "Folgen",
|
||||
"account.followers": "Folgende",
|
||||
|
|
@ -38,12 +40,12 @@
|
|||
"account.show_reblogs": "Von @{name} geteilte Beiträge anzeigen",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}",
|
||||
"account.unblock": "@{name} entblocken",
|
||||
"account.unblock_domain": "Blockieren von {domain} beenden",
|
||||
"account.unblock_domain": "{domain} wieder anzeigen",
|
||||
"account.unendorse": "Nicht auf Profil hervorheben",
|
||||
"account.unfollow": "Entfolgen",
|
||||
"account.unmute": "@{name} nicht mehr stummschalten",
|
||||
"account.unmute_notifications": "Benachrichtigungen von @{name} einschalten",
|
||||
"account_note.placeholder": "Kein Kommentar angegeben",
|
||||
"account_note.placeholder": "Notiz durch Klicken hinzufügen",
|
||||
"alert.rate_limited.message": "Bitte versuche es nach {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Anfragelimit überschritten",
|
||||
"alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.",
|
||||
|
|
@ -62,7 +64,7 @@
|
|||
"column.community": "Lokale Zeitleiste",
|
||||
"column.direct": "Direktnachrichten",
|
||||
"column.directory": "Profile durchsuchen",
|
||||
"column.domain_blocks": "Versteckte Domains",
|
||||
"column.domain_blocks": "Blockierte Domains",
|
||||
"column.favourites": "Favoriten",
|
||||
"column.follow_requests": "Folgeanfragen",
|
||||
"column.home": "Startseite",
|
||||
|
|
@ -94,11 +96,11 @@
|
|||
"compose_form.poll.remove_option": "Wahl entfernen",
|
||||
"compose_form.poll.switch_to_multiple": "Umfrage ändern, um mehrere Optionen zu erlauben",
|
||||
"compose_form.poll.switch_to_single": "Umfrage ändern, um eine einzige Wahl zu erlauben",
|
||||
"compose_form.publish": "Beitrag",
|
||||
"compose_form.publish": "Tröt",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Medien als heikel markieren",
|
||||
"compose_form.sensitive.marked": "Medien sind als heikel markiert",
|
||||
"compose_form.sensitive.unmarked": "Medien sind nicht als heikel markiert",
|
||||
"compose_form.sensitive.hide": "Medien als NSFW markieren",
|
||||
"compose_form.sensitive.marked": "Medien sind als NSFW markiert",
|
||||
"compose_form.sensitive.unmarked": "Medien sind nicht als NSFW markiert",
|
||||
"compose_form.spoiler.marked": "Text ist hinter einer Warnung versteckt",
|
||||
"compose_form.spoiler.unmarked": "Text ist nicht versteckt",
|
||||
"compose_form.spoiler_placeholder": "Inhaltswarnung",
|
||||
|
|
@ -165,8 +167,10 @@
|
|||
"empty_column.mutes": "Du hast keine Profile stummgeschaltet.",
|
||||
"empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.",
|
||||
"empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Zeitleiste aufzufüllen",
|
||||
"error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browser-Inkompatibilität konnte diese Seite nicht korrekt angezeigt werden.",
|
||||
"error.unexpected_crash.explanation": "Aufgrund eines Fehlers in unserem Code oder einer Browsereinkompatibilität konnte diese Seite nicht korrekt angezeigt werden.",
|
||||
"error.unexpected_crash.explanation_addons": "Diese Seite konnte nicht korrekt angezeigt werden. Dieser Fehler wird wahrscheinlich durch ein Browser-Add-on oder automatische Übersetzungswerkzeuge verursacht.",
|
||||
"error.unexpected_crash.next_steps": "Versuche die Seite zu aktualisieren. Wenn das nicht hilft, kannst du Mastodon über einen anderen Browser oder eine native App verwenden.",
|
||||
"error.unexpected_crash.next_steps_addons": "Versuche sie zu deaktivieren und lade dann die Seite neu. Wenn das Problem weiterhin besteht, solltest du Mastodon über einen anderen Browser oder eine native App nutzen.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Fehlerlog in die Zwischenablage kopieren",
|
||||
"errors.unexpected_crash.report_issue": "Problem melden",
|
||||
"follow_request.authorize": "Erlauben",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "Textfeld/die Suche nicht mehr fokussieren",
|
||||
"keyboard_shortcuts.up": "sich in der Liste hinauf bewegen",
|
||||
"lightbox.close": "Schließen",
|
||||
"lightbox.compress": "Bildansicht komprimieren",
|
||||
"lightbox.expand": "Bildansicht erweitern",
|
||||
"lightbox.next": "Weiter",
|
||||
"lightbox.previous": "Zurück",
|
||||
"lightbox.view_context": "Beitrag sehen",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Titel ändern",
|
||||
"lists.new.create": "Liste hinzufügen",
|
||||
"lists.new.title_placeholder": "Neuer Titel der Liste",
|
||||
"lists.replies_policy.all_replies": "Jeder gefolgte Benutzer",
|
||||
"lists.replies_policy.list_replies": "Mitglieder der Liste",
|
||||
"lists.replies_policy.no_replies": "Niemand",
|
||||
"lists.replies_policy.title": "Antworten anzeigen für:",
|
||||
"lists.search": "Suche nach Leuten denen du folgst",
|
||||
"lists.subheading": "Deine Listen",
|
||||
"load_pending": "{count, plural, one {# neuer Beitrag} other {# neue Beiträge}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Sichtbarkeit umschalten",
|
||||
"missing_indicator.label": "Nicht gefunden",
|
||||
"missing_indicator.sublabel": "Die Ressource konnte nicht gefunden werden",
|
||||
"mute_modal.duration": "Dauer",
|
||||
"mute_modal.hide_notifications": "Benachrichtigungen von diesem Account verbergen?",
|
||||
"mute_modal.indefinite": "Unbestimmt",
|
||||
"navigation_bar.apps": "Mobile Apps",
|
||||
"navigation_bar.blocks": "Blockierte Profile",
|
||||
"navigation_bar.bookmarks": "Lesezeichen",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Deine Umfrage ist beendet",
|
||||
"notification.poll": "Eine Umfrage in der du abgestimmt hast ist vorbei",
|
||||
"notification.reblog": "{name} hat deinen Beitrag geteilt",
|
||||
"notification.status": "{name} hat gerade etwas gepostet",
|
||||
"notifications.clear": "Mitteilungen löschen",
|
||||
"notifications.clear_confirmation": "Bist du dir sicher, dass du alle Mitteilungen löschen möchtest?",
|
||||
"notifications.column_settings.alert": "Desktop-Benachrichtigungen",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Geteilte Beiträge:",
|
||||
"notifications.column_settings.show": "In der Spalte anzeigen",
|
||||
"notifications.column_settings.sound": "Ton abspielen",
|
||||
"notifications.column_settings.status": "Neue Beiträge:",
|
||||
"notifications.filter.all": "Alle",
|
||||
"notifications.filter.boosts": "Geteilte Beiträge",
|
||||
"notifications.filter.favourites": "Favorisierungen",
|
||||
"notifications.filter.follows": "Folgt",
|
||||
"notifications.filter.mentions": "Erwähnungen",
|
||||
"notifications.filter.polls": "Ergebnisse der Umfrage",
|
||||
"notifications.filter.statuses": "Updates von Personen, denen du folgst",
|
||||
"notifications.group": "{count} Benachrichtigungen",
|
||||
"notifications.mark_as_read": "Alle Benachrichtigungen als gelesen markieren",
|
||||
"notifications.permission_denied": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Berechtigung verweigert wurde.",
|
||||
"notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde",
|
||||
"notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen",
|
||||
"notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.",
|
||||
"notifications_permission_banner.title": "Verpasse nie etwas",
|
||||
"picture_in_picture.restore": "Zurücksetzen",
|
||||
"poll.closed": "Geschlossen",
|
||||
"poll.refresh": "Aktualisieren",
|
||||
"poll.total_people": "{count, plural, one {# Person} other {# Personen}}",
|
||||
|
|
@ -397,7 +419,7 @@
|
|||
"status.reply": "Antworten",
|
||||
"status.replyAll": "Allen antworten",
|
||||
"status.report": "@{name} melden",
|
||||
"status.sensitive_warning": "Heikle Inhalte",
|
||||
"status.sensitive_warning": "NSFW",
|
||||
"status.share": "Teilen",
|
||||
"status.show_less": "Weniger anzeigen",
|
||||
"status.show_less_all": "Alle Inhaltswarnungen zuklappen",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Zum Hochladen hereinziehen",
|
||||
"upload_button.label": "Mediendatei hinzufügen ({formats})",
|
||||
"upload_button.label": "Mediendatei hinzufügen",
|
||||
"upload_error.limit": "Dateiupload-Limit erreicht.",
|
||||
"upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.",
|
||||
"upload_form.audio_description": "Beschreibe die Audiodatei für Menschen mit Hörschädigungen",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Text aus Bild erkennen",
|
||||
"upload_modal.edit_media": "Medien bearbeiten",
|
||||
"upload_modal.hint": "Klicke oder ziehe den Kreis auf die Vorschau, um den Brennpunkt auszuwählen, der immer auf allen Vorschaubilder angezeigt wird.",
|
||||
"upload_modal.preparing_ocr": "Vorbereitung von OCR…",
|
||||
"upload_modal.preview_label": "Vorschau ({ratio})",
|
||||
"upload_progress.label": "Wird hochgeladen …",
|
||||
"video.close": "Video schließen",
|
||||
|
|
|
|||
|
|
@ -1339,15 +1339,15 @@
|
|||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Media is marked as sensitive",
|
||||
"defaultMessage": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
|
||||
"id": "compose_form.sensitive.marked"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Media is not marked as sensitive",
|
||||
"defaultMessage": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
|
||||
"id": "compose_form.sensitive.unmarked"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Mark media as sensitive",
|
||||
"defaultMessage": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
|
||||
"id": "compose_form.sensitive.hide"
|
||||
}
|
||||
],
|
||||
|
|
@ -2388,6 +2388,10 @@
|
|||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Close",
|
||||
"id": "lightbox.close"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Never miss a thing",
|
||||
"id": "notifications_permission_banner.title"
|
||||
|
|
@ -2478,6 +2482,15 @@
|
|||
],
|
||||
"path": "app/javascript/mastodon/features/picture_in_picture/components/footer.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Close",
|
||||
"id": "lightbox.close"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/picture_in_picture/components/header.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
|
|
@ -3201,6 +3214,19 @@
|
|||
],
|
||||
"path": "app/javascript/mastodon/features/ui/components/video_modal.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
"defaultMessage": "Compress image view box",
|
||||
"id": "lightbox.compress"
|
||||
},
|
||||
{
|
||||
"defaultMessage": "Expand image view box",
|
||||
"id": "lightbox.expand"
|
||||
}
|
||||
],
|
||||
"path": "app/javascript/mastodon/features/ui/components/zoomable_image.json"
|
||||
},
|
||||
{
|
||||
"descriptors": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Δες περισσότερα στο αρχικό προφίλ",
|
||||
"account.cancel_follow_request": "Ακύρωση αιτήματος παρακολούθησης",
|
||||
"account.direct": "Προσωπικό μήνυμα προς @{name}",
|
||||
"account.disable_notifications": "Διακοπή ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}",
|
||||
"account.domain_blocked": "Κρυμμένος τομέας",
|
||||
"account.edit_profile": "Επεξεργασία προφίλ",
|
||||
"account.enable_notifications": "Έναρξη ειδοποιήσεων για τις δημοσιεύσεις του/της @{name}",
|
||||
"account.endorse": "Προβολή στο προφίλ",
|
||||
"account.follow": "Ακολούθησε",
|
||||
"account.followers": "Ακόλουθοι",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Δεν έχεις ειδοποιήσεις ακόμα. Αλληλεπίδρασε με άλλους χρήστες για να ξεκινήσεις την κουβέντα.",
|
||||
"empty_column.public": "Δεν υπάρχει τίποτα εδώ! Γράψε κάτι δημόσιο, ή ακολούθησε χειροκίνητα χρήστες από άλλους κόμβους για να τη γεμίσεις",
|
||||
"error.unexpected_crash.explanation": "Είτε λόγω λάθους στον κώδικά μας ή λόγω ασυμβατότητας με τον browser, η σελίδα δε μπόρεσε να εμφανιστεί σωστά.",
|
||||
"error.unexpected_crash.explanation_addons": "Η σελίδα δεν μπόρεσε να εμφανιστεί σωστά. Το πρόβλημα οφείλεται πιθανόν σε κάποια επέκταση του φυλλομετρητή (browser extension) ή σε κάποιο αυτόματο εργαλείο μετάφρασης.",
|
||||
"error.unexpected_crash.next_steps": "Δοκίμασε να ανανεώσεις τη σελίδα. Αν αυτό δε βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού browser ή κάποιας εφαρμογής.",
|
||||
"error.unexpected_crash.next_steps_addons": "Δοκίμασε να τα απενεργοποιήσεις και ανανέωσε τη σελίδα. Αν αυτό δεν βοηθήσει, ίσως να μπορέσεις να χρησιμοποιήσεις το Mastodon μέσω διαφορετικού φυλλομετρητή ή κάποιας εφαρμογής.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Αντιγραφή μηνυμάτων κώδικα στο πρόχειρο",
|
||||
"errors.unexpected_crash.report_issue": "Αναφορά προβλήματος",
|
||||
"follow_request.authorize": "Ενέκρινε",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "απο-εστίαση του πεδίου σύνθεσης/αναζήτησης",
|
||||
"keyboard_shortcuts.up": "κίνηση προς την κορυφή της λίστας",
|
||||
"lightbox.close": "Κλείσιμο",
|
||||
"lightbox.compress": "Συμπίεση πλαισίου εμφάνισης εικόνας",
|
||||
"lightbox.expand": "Ανάπτυξη πλαισίου εμφάνισης εικόνας",
|
||||
"lightbox.next": "Επόμενο",
|
||||
"lightbox.previous": "Προηγούμενο",
|
||||
"lightbox.view_context": "Εμφάνιση πλαισίου",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Αλλαγή τίτλου",
|
||||
"lists.new.create": "Προσθήκη λίστας",
|
||||
"lists.new.title_placeholder": "Τίτλος νέας λίστα",
|
||||
"lists.replies_policy.all_replies": "Οποιοσδήποτε χρήστης που ακολουθείς",
|
||||
"lists.replies_policy.list_replies": "Μέλη της λίστας",
|
||||
"lists.replies_policy.no_replies": "Κανείς",
|
||||
"lists.replies_policy.title": "Εμφάνιση απαντήσεων σε:",
|
||||
"lists.search": "Αναζήτησε μεταξύ των ανθρώπων που ακουλουθείς",
|
||||
"lists.subheading": "Οι λίστες σου",
|
||||
"load_pending": "{count, plural, one {# νέο} other {# νέα}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Εναλλαγή ορατότητας",
|
||||
"missing_indicator.label": "Δε βρέθηκε",
|
||||
"missing_indicator.sublabel": "Αδύνατη η εύρεση αυτού του πόρου",
|
||||
"mute_modal.duration": "Διάρκεια",
|
||||
"mute_modal.hide_notifications": "Απόκρυψη ειδοποιήσεων αυτού του χρήστη;",
|
||||
"mute_modal.indefinite": "Αόριστη",
|
||||
"navigation_bar.apps": "Εφαρμογές φορητών συσκευών",
|
||||
"navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
|
||||
"navigation_bar.bookmarks": "Σελιδοδείκτες",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Η ψηφοφορία σου έληξε",
|
||||
"notification.poll": "Τελείωσε μια από τις ψηφοφορίες που συμμετείχες",
|
||||
"notification.reblog": "Ο/Η {name} προώθησε την κατάστασή σου",
|
||||
"notification.status": "Ο/Η {name} μόλις έγραψε κάτι",
|
||||
"notifications.clear": "Καθαρισμός ειδοποιήσεων",
|
||||
"notifications.clear_confirmation": "Σίγουρα θέλεις να καθαρίσεις όλες τις ειδοποιήσεις σου;",
|
||||
"notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Προωθήσεις:",
|
||||
"notifications.column_settings.show": "Εμφάνισε σε στήλη",
|
||||
"notifications.column_settings.sound": "Ηχητική ειδοποίηση",
|
||||
"notifications.column_settings.status": "Νέα τουτ:",
|
||||
"notifications.filter.all": "Όλες",
|
||||
"notifications.filter.boosts": "Προωθήσεις",
|
||||
"notifications.filter.favourites": "Αγαπημένα",
|
||||
"notifications.filter.follows": "Ακόλουθοι",
|
||||
"notifications.filter.mentions": "Αναφορές",
|
||||
"notifications.filter.polls": "Αποτελέσματα ψηφοφορίας",
|
||||
"notifications.filter.statuses": "Ενημερώσεις από όσους ακολουθείς",
|
||||
"notifications.group": "{count} ειδοποιήσεις",
|
||||
"notifications.mark_as_read": "Σημείωσε όλες τις ειδοποιήσεις ως αναγνωσμένες",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Μη χάσετε τίποτα",
|
||||
"picture_in_picture.restore": "Επαναφορά",
|
||||
"poll.closed": "Κλειστή",
|
||||
"poll.refresh": "Ανανέωση",
|
||||
"poll.total_people": "{count, plural, one {# άτομο} other {# άτομα}}",
|
||||
|
|
@ -388,7 +410,7 @@
|
|||
"status.pin": "Καρφίτσωσε στο προφίλ",
|
||||
"status.pinned": "Καρφιτσωμένο τουτ",
|
||||
"status.read_more": "Περισσότερα",
|
||||
"status.reblog": "Προώθησε",
|
||||
"status.reblog": "Προώθηση",
|
||||
"status.reblog_private": "Προώθησε στους αρχικούς παραλήπτες",
|
||||
"status.reblogged_by": "{name} προώθησε",
|
||||
"status.reblogs.empty": "Κανείς δεν προώθησε αυτό το τουτ ακόμα. Μόλις το κάνει κάποια, θα εμφανιστούν εδώ.",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count}Ε",
|
||||
"units.short.thousand": "{count}Χ",
|
||||
"upload_area.title": "Drag & drop για να ανεβάσεις",
|
||||
"upload_button.label": "Πρόσθεσε πολυμέσα ({formats})",
|
||||
"upload_button.label": "Πρόσθεσε πολυμέσα",
|
||||
"upload_error.limit": "Υπέρβαση ορίου μεγέθους ανεβασμένων αρχείων.",
|
||||
"upload_error.poll": "Στις δημοσκοπήσεις δεν επιτρέπεται η μεταφόρτωση αρχείου.",
|
||||
"upload_form.audio_description": "Περιγραφή για άτομα με προβλήματα ακοής",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Αναγνώριση κειμένου από την εικόνα",
|
||||
"upload_modal.edit_media": "Επεξεργασία Πολυμέσων",
|
||||
"upload_modal.hint": "Κάνε κλικ ή σείρε τον κύκλο στην προεπισκόπηση για να επιλέξεις το σημείο εστίασης που θα είναι πάντα εμφανές σε όλες τις μικρογραφίες.",
|
||||
"upload_modal.preparing_ocr": "Προετοιμασία αναγνώρισης κειμένου…",
|
||||
"upload_modal.preview_label": "Προεπισκόπηση ({ratio})",
|
||||
"upload_progress.label": "Ανεβαίνει...",
|
||||
"video.close": "Κλείσε το βίντεο",
|
||||
|
|
|
|||
|
|
@ -98,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Mark media as sensitive",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Write your warning here",
|
||||
|
|
@ -254,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Close",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lightbox.view_context": "View context",
|
||||
|
|
|
|||
|
|
@ -4,19 +4,21 @@
|
|||
"account.badges.bot": "Roboto",
|
||||
"account.badges.group": "Grupo",
|
||||
"account.block": "Bloki @{name}",
|
||||
"account.block_domain": "Kaŝi ĉion de {domain}",
|
||||
"account.block_domain": "Bloki {domain}",
|
||||
"account.blocked": "Blokita",
|
||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Nuligi peton de sekvado",
|
||||
"account.direct": "Rekte mesaĝi @{name}",
|
||||
"account.domain_blocked": "Domajno kaŝita",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Domajno blokita",
|
||||
"account.edit_profile": "Redakti profilon",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Montri en profilo",
|
||||
"account.follow": "Sekvi",
|
||||
"account.followers": "Sekvantoj",
|
||||
"account.followers.empty": "Ankoraŭ neniu sekvas tiun uzanton.",
|
||||
"account.followers_counter": "{count, plural, one{{counter} Sekvanto} other {{counter} Sekvantoj}}",
|
||||
"account.following_counter": "{count, plural, other{{counter} Sekvi}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Sekvato} other {{counter} Sekvatoj}}",
|
||||
"account.follows.empty": "Tiu uzanto ankoraŭ ne sekvas iun.",
|
||||
"account.follows_you": "Sekvas vin",
|
||||
"account.hide_reblogs": "Kaŝi diskonigojn de @{name}",
|
||||
|
|
@ -36,14 +38,14 @@
|
|||
"account.requested": "Atendo de aprobo. Alklaku por nuligi peton de sekvado",
|
||||
"account.share": "Diskonigi la profilon de @{name}",
|
||||
"account.show_reblogs": "Montri diskonigojn de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Tooto} other {{counter} Tootoj}}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Mesaĝo} other {{counter} Mesaĝoj}}",
|
||||
"account.unblock": "Malbloki @{name}",
|
||||
"account.unblock_domain": "Malkaŝi {domain}",
|
||||
"account.unblock_domain": "Malbloki {domain}",
|
||||
"account.unendorse": "Ne montri en profilo",
|
||||
"account.unfollow": "Ne plu sekvi",
|
||||
"account.unmute": "Malsilentigi @{name}",
|
||||
"account.unmute_notifications": "Malsilentigi sciigojn de @{name}",
|
||||
"account_note.placeholder": "Click to add a note",
|
||||
"account_note.placeholder": "Alklaku por aldoni noton",
|
||||
"alert.rate_limited.message": "Bonvolu reprovi post {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Mesaĝkvante limigita",
|
||||
"alert.unexpected.message": "Neatendita eraro okazis.",
|
||||
|
|
@ -62,7 +64,7 @@
|
|||
"column.community": "Loka tempolinio",
|
||||
"column.direct": "Rektaj mesaĝoj",
|
||||
"column.directory": "Trarigardi profilojn",
|
||||
"column.domain_blocks": "Kaŝitaj domajnoj",
|
||||
"column.domain_blocks": "Blokitaj domajnoj",
|
||||
"column.favourites": "Stelumoj",
|
||||
"column.follow_requests": "Petoj de sekvado",
|
||||
"column.home": "Hejmo",
|
||||
|
|
@ -110,7 +112,7 @@
|
|||
"confirmations.delete.message": "Ĉu vi certas, ke vi volas forigi ĉi tiun mesaĝon?",
|
||||
"confirmations.delete_list.confirm": "Forigi",
|
||||
"confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?",
|
||||
"confirmations.domain_block.confirm": "Kaŝi la tutan domajnon",
|
||||
"confirmations.domain_block.confirm": "Bloki la tutan domajnon",
|
||||
"confirmations.domain_block.message": "Ĉu vi vere, vere certas, ke vi volas tute bloki {domain}? Plej ofte, trafa blokado kaj silentigado sufiĉas kaj preferindas. Vi ne vidos enhavon de tiu domajno en publika tempolinio aŭ en viaj sciigoj. Viaj sekvantoj de tiu domajno estos forigitaj.",
|
||||
"confirmations.logout.confirm": "Elsaluti",
|
||||
"confirmations.logout.message": "Ĉu vi certas ke vi volas elsaluti?",
|
||||
|
|
@ -166,12 +168,14 @@
|
|||
"empty_column.notifications": "Vi ankoraŭ ne havas sciigojn. Interagu kun aliaj por komenci konversacion.",
|
||||
"empty_column.public": "Estas nenio ĉi tie! Publike skribu ion, aŭ mane sekvu uzantojn de aliaj serviloj por plenigi la publikan tempolinion",
|
||||
"error.unexpected_crash.explanation": "Pro eraro en nia kodo, aŭ problemo de kongruo en via retumilo, ĉi tiu paĝo ne povis esti montrata ĝuste.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Provu refreŝigi la paĝon. Se tio ne helpas, vi ankoraŭ povus uzi Mastodon per malsama retumilo aŭ operaciuma aplikajo.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Kopii stakspuron en tondujo",
|
||||
"errors.unexpected_crash.report_issue": "Raporti problemon",
|
||||
"follow_request.authorize": "Rajtigi",
|
||||
"follow_request.reject": "Rifuzi",
|
||||
"follow_requests.unlocked_explanation": "137/5000\nKvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.",
|
||||
"follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opiniis, ke vi eble volus revizii petojn de sekvadon el ĉi tiuj kontoj permane.",
|
||||
"generic.saved": "Konservita",
|
||||
"getting_started.developers": "Programistoj",
|
||||
"getting_started.directory": "Profilujo",
|
||||
|
|
@ -232,7 +236,7 @@
|
|||
"keyboard_shortcuts.hotkey": "Rapidklavo",
|
||||
"keyboard_shortcuts.legend": "montri ĉi tiun noton",
|
||||
"keyboard_shortcuts.local": "malfermi la lokan tempolinion",
|
||||
"keyboard_shortcuts.mention": "por mencii la aŭtoron",
|
||||
"keyboard_shortcuts.mention": "mencii la aŭtoron",
|
||||
"keyboard_shortcuts.muted": "malfermi la liston de silentigitaj uzantoj",
|
||||
"keyboard_shortcuts.my_profile": "malfermi vian profilon",
|
||||
"keyboard_shortcuts.notifications": "malfermi la kolumnon de sciigoj",
|
||||
|
|
@ -242,7 +246,7 @@
|
|||
"keyboard_shortcuts.reply": "respondi",
|
||||
"keyboard_shortcuts.requests": "malfermi la liston de petoj de sekvado",
|
||||
"keyboard_shortcuts.search": "enfokusigi la serĉilon",
|
||||
"keyboard_shortcuts.spoilers": "to show/hide CW field",
|
||||
"keyboard_shortcuts.spoilers": "montri/kaŝi la kampon de enhava averto",
|
||||
"keyboard_shortcuts.start": "malfermi la kolumnon «por komenci»",
|
||||
"keyboard_shortcuts.toggle_hidden": "montri/kaŝi tekston malantaŭ enhava averto",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "montri/kaŝi aŭdovidaĵojn",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "malenfokusigi la tekstujon aŭ la serĉilon",
|
||||
"keyboard_shortcuts.up": "iri supren en la listo",
|
||||
"lightbox.close": "Fermi",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Sekva",
|
||||
"lightbox.previous": "Antaŭa",
|
||||
"lightbox.view_context": "Vidi kuntekston",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Ŝanĝi titolon",
|
||||
"lists.new.create": "Aldoni liston",
|
||||
"lists.new.title_placeholder": "Titolo de la nova listo",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Serĉi inter la homoj, kiujn vi sekvas",
|
||||
"lists.subheading": "Viaj listoj",
|
||||
"load_pending": "{count,plural, one {# nova elemento} other {# novaj elementoj}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Baskuligi videblecon",
|
||||
"missing_indicator.label": "Ne trovita",
|
||||
"missing_indicator.sublabel": "Ĉi tiu elemento ne estis trovita",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Ĉu vi volas kaŝi la sciigojn de ĉi tiu uzanto?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Telefonaj aplikaĵoj",
|
||||
"navigation_bar.blocks": "Blokitaj uzantoj",
|
||||
"navigation_bar.bookmarks": "Legosignoj",
|
||||
|
|
@ -275,7 +287,7 @@
|
|||
"navigation_bar.compose": "Skribi novan mesaĝon",
|
||||
"navigation_bar.direct": "Rektaj mesaĝoj",
|
||||
"navigation_bar.discover": "Esplori",
|
||||
"navigation_bar.domain_blocks": "Kaŝitaj domajnoj",
|
||||
"navigation_bar.domain_blocks": "Blokitaj domajnoj",
|
||||
"navigation_bar.edit_profile": "Redakti profilon",
|
||||
"navigation_bar.favourites": "Stelumoj",
|
||||
"navigation_bar.filters": "Silentigitaj vortoj",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Via balotenketo finiĝitis",
|
||||
"notification.poll": "Partoprenita balotenketo finiĝis",
|
||||
"notification.reblog": "{name} diskonigis vian mesaĝon",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Forviŝi sciigojn",
|
||||
"notifications.clear_confirmation": "Ĉu vi certas, ke vi volas porĉiame forviŝi ĉiujn viajn sciigojn?",
|
||||
"notifications.column_settings.alert": "Retumilaj sciigoj",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Diskonigoj:",
|
||||
"notifications.column_settings.show": "Montri en kolumno",
|
||||
"notifications.column_settings.sound": "Eligi sonon",
|
||||
"notifications.column_settings.status": "Novaj mesaĝoj:",
|
||||
"notifications.filter.all": "Ĉiuj",
|
||||
"notifications.filter.boosts": "Diskonigoj",
|
||||
"notifications.filter.favourites": "Stelumoj",
|
||||
"notifications.filter.follows": "Sekvoj",
|
||||
"notifications.filter.mentions": "Mencioj",
|
||||
"notifications.filter.polls": "Balotenketaj rezultoj",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} sciigoj",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Finita",
|
||||
"poll.refresh": "Aktualigi",
|
||||
"poll.total_people": "{count, plural, one {# homo} other {# homoj}}",
|
||||
|
|
@ -422,7 +444,7 @@
|
|||
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
|
||||
"timeline_hint.resources.followers": "Sekvantoj",
|
||||
"timeline_hint.resources.follows": "Sekvatoj",
|
||||
"timeline_hint.resources.statuses": "Pli malnovaj tootoj",
|
||||
"timeline_hint.resources.statuses": "Pli malnovaj mesaĝoj",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persono} other {{counter} personoj}} parolante",
|
||||
"trends.trending_now": "Nunaj furoraĵoj",
|
||||
"ui.beforeunload": "Via malneto perdiĝos se vi eliras de Mastodon.",
|
||||
|
|
@ -441,11 +463,12 @@
|
|||
"upload_form.video_description": "Priskribi por homoj kiuj malfacile aŭdi aŭ vidi",
|
||||
"upload_modal.analyzing_picture": "Bilda analizado…",
|
||||
"upload_modal.apply": "Apliki",
|
||||
"upload_modal.choose_image": "Choose image",
|
||||
"upload_modal.choose_image": "Elekti bildon",
|
||||
"upload_modal.description_placeholder": "Laŭ Ludoviko Zamenhof bongustas freŝa ĉeĥa manĝaĵo kun spicoj",
|
||||
"upload_modal.detect_text": "Detekti tekston de la bildo",
|
||||
"upload_modal.edit_media": "Redakti aŭdovidaĵon",
|
||||
"upload_modal.hint": "Klaku aŭ trenu la cirklon en la antaŭvidilo por elekti la fokuspunkton kiu ĉiam videblos en ĉiuj etigitaj bildoj.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Antaŭvido ({ratio})",
|
||||
"upload_progress.label": "Alŝutado…",
|
||||
"video.close": "Fermi la videon",
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
{
|
||||
"account.account_note_header": "Tu nota para @{name}",
|
||||
"account.account_note_header": "Nota",
|
||||
"account.add_or_remove_from_list": "Agregar o quitar de las listas",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Grupo",
|
||||
"account.block": "Bloquear a @{name}",
|
||||
"account.block_domain": "Ocultar todo de {domain}",
|
||||
"account.block_domain": "Bloquear dominio {domain}",
|
||||
"account.blocked": "Bloqueado",
|
||||
"account.browse_more_on_origin_server": "Explorar más en el perfil original",
|
||||
"account.cancel_follow_request": "Cancelar la solicitud de seguimiento",
|
||||
"account.direct": "Mensaje directo a @{name}",
|
||||
"account.domain_blocked": "Dominio oculto",
|
||||
"account.disable_notifications": "Dejar de notificarme cuando @{name} tootee",
|
||||
"account.domain_blocked": "Dominio bloqueado",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.enable_notifications": "Notificarme cuando @{name} tootee",
|
||||
"account.endorse": "Destacar en el perfil",
|
||||
"account.follow": "Seguir",
|
||||
"account.followers": "Seguidores",
|
||||
|
|
@ -25,27 +27,27 @@
|
|||
"account.locked_info": "El estado de privacidad de esta cuenta está establecido como bloqueado. El propietario manualmente revisa quién puede seguirle.",
|
||||
"account.media": "Medios",
|
||||
"account.mention": "Mencionar a @{name}",
|
||||
"account.moved_to": "{name} se ha muó a:",
|
||||
"account.moved_to": "{name} se ha mudó a:",
|
||||
"account.mute": "Silenciar a @{name}",
|
||||
"account.mute_notifications": "Silenciar notificaciones de @{name}",
|
||||
"account.muted": "Silenciado",
|
||||
"account.never_active": "Nunca",
|
||||
"account.posts": "Toots",
|
||||
"account.posts_with_replies": "Toots con respuestas",
|
||||
"account.posts_with_replies": "Toots y respuestas",
|
||||
"account.report": "Denunciar a @{name}",
|
||||
"account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento.",
|
||||
"account.requested": "Esperando aprobación. Hacé clic para cancelar la solicitud de seguimiento",
|
||||
"account.share": "Compartir el perfil de @{name}",
|
||||
"account.show_reblogs": "Mostrar retoots de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
|
||||
"account.unblock": "Desbloquear a @{name}",
|
||||
"account.unblock_domain": "Mostrar {domain}",
|
||||
"account.unblock_domain": "Desbloquear dominio {domain}",
|
||||
"account.unendorse": "No destacar en el perfil",
|
||||
"account.unfollow": "Dejar de seguir",
|
||||
"account.unmute": "Dejar de silenciar a @{name}",
|
||||
"account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
|
||||
"account_note.placeholder": "No se ofreció ningún comentario",
|
||||
"account_note.placeholder": "Hacé clic par agregar una nota",
|
||||
"alert.rate_limited.message": "Por favor, reintentá después de las {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Tarifa limitada",
|
||||
"alert.rate_limited.title": "Acción limitada",
|
||||
"alert.unexpected.message": "Ocurrió un error.",
|
||||
"alert.unexpected.title": "¡Epa!",
|
||||
"announcement.announcement": "Anuncio",
|
||||
|
|
@ -62,7 +64,7 @@
|
|||
"column.community": "Línea temporal local",
|
||||
"column.direct": "Mensajes directos",
|
||||
"column.directory": "Explorar perfiles",
|
||||
"column.domain_blocks": "Dominios ocultos",
|
||||
"column.domain_blocks": "Dominios bloqueados",
|
||||
"column.favourites": "Favoritos",
|
||||
"column.follow_requests": "Solicitudes de seguimiento",
|
||||
"column.home": "Principal",
|
||||
|
|
@ -85,19 +87,19 @@
|
|||
"compose_form.direct_message_warning": "Este toot sólo será enviado a los usuarios mencionados.",
|
||||
"compose_form.direct_message_warning_learn_more": "Aprendé más",
|
||||
"compose_form.hashtag_warning": "Este toot no se mostrará bajo hashtags porque no es público. Sólo los toots públicos se pueden buscar por hashtag.",
|
||||
"compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"sólo para seguidores\".",
|
||||
"compose_form.lock_disclaimer": "Tu cuenta no está {locked}. Todos pueden seguirte para ver tus toots marcados como \"Sólo para seguidores\".",
|
||||
"compose_form.lock_disclaimer.lock": "bloqueada",
|
||||
"compose_form.placeholder": "¿Qué onda?",
|
||||
"compose_form.poll.add_option": "Agregá una opción",
|
||||
"compose_form.poll.duration": "Duración de la encuesta",
|
||||
"compose_form.poll.option_placeholder": "Opción {number}",
|
||||
"compose_form.poll.remove_option": "Quitá esta opción",
|
||||
"compose_form.poll.remove_option": "Quitar esta opción",
|
||||
"compose_form.poll.switch_to_multiple": "Cambiar encuesta para permitir opciones múltiples",
|
||||
"compose_form.poll.switch_to_single": "Cambiar encuesta para permitir una sola opción",
|
||||
"compose_form.publish": "Tootear",
|
||||
"compose_form.publish_loud": "¡{publish}!",
|
||||
"compose_form.sensitive.hide": "Marcar medio como sensible",
|
||||
"compose_form.sensitive.marked": "El medio se marcó como sensible",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {El medio está marcado como sensible} other {Los medios están marcados como sensibles}}",
|
||||
"compose_form.sensitive.unmarked": "El medio no está marcado como sensible",
|
||||
"compose_form.spoiler.marked": "El texto está oculto detrás de la advertencia",
|
||||
"compose_form.spoiler.unmarked": "El texto no está oculto",
|
||||
|
|
@ -107,10 +109,10 @@
|
|||
"confirmations.block.confirm": "Bloquear",
|
||||
"confirmations.block.message": "¿Estás seguro que querés bloquear a {name}?",
|
||||
"confirmations.delete.confirm": "Eliminar",
|
||||
"confirmations.delete.message": "¿Estás seguro que querés eliminar este estado?",
|
||||
"confirmations.delete.message": "¿Estás seguro que querés eliminar este toot?",
|
||||
"confirmations.delete_list.confirm": "Eliminar",
|
||||
"confirmations.delete_list.message": "¿Estás seguro que querés eliminar permanentemente esta lista?",
|
||||
"confirmations.domain_block.confirm": "Ocultar dominio entero",
|
||||
"confirmations.domain_block.confirm": "Bloquear dominio entero",
|
||||
"confirmations.domain_block.message": "¿Estás completamente seguro que querés bloquear el {domain} entero? En la mayoría de los casos, unos cuantos bloqueos y silenciados puntuales son suficientes y preferibles. No vas a ver contenido de ese dominio en ninguna de tus líneas temporales o en tus notificaciones. Tus seguidores de ese dominio serán quitados.",
|
||||
"confirmations.logout.confirm": "Cerrar sesión",
|
||||
"confirmations.logout.message": "¿Estás seguro que querés cerrar la sesión?",
|
||||
|
|
@ -118,19 +120,19 @@
|
|||
"confirmations.mute.explanation": "Se ocultarán los mensajes de esta cuenta y los mensajes de otras cuentas que mencionen a ésta, pero todavía esta cuenta podrá ver tus mensajes o seguirte.",
|
||||
"confirmations.mute.message": "¿Estás seguro que querés silenciar a {name}?",
|
||||
"confirmations.redraft.confirm": "Eliminar toot original y editarlo",
|
||||
"confirmations.redraft.message": "¿Estás seguro que querés eliminar este estado y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.",
|
||||
"confirmations.redraft.message": "¿Estás seguro que querés eliminar este toot y volver a editarlo? Se perderán las veces marcadas como favoritos y los retoots, y las respuestas a la publicación original quedarán huérfanas.",
|
||||
"confirmations.reply.confirm": "Responder",
|
||||
"confirmations.reply.message": "Responder ahora sobreescribirá el mensaje que estás redactando actualmente. ¿Estás seguro que querés seguir?",
|
||||
"confirmations.unfollow.confirm": "Dejar de seguir",
|
||||
"confirmations.unfollow.message": "¿Estás seguro que querés dejar de seguir a {name}?",
|
||||
"conversation.delete": "Eliminar conversación",
|
||||
"conversation.mark_as_read": "Marcar como leído",
|
||||
"conversation.mark_as_read": "Marcar como leída",
|
||||
"conversation.open": "Ver conversación",
|
||||
"conversation.with": "Con {names}",
|
||||
"directory.federated": "Desde fediverso conocido",
|
||||
"directory.local": "Sólo de {domain}",
|
||||
"directory.new_arrivals": "Recién llegados",
|
||||
"directory.recently_active": "Recientemente activo",
|
||||
"directory.recently_active": "Recientemente activos",
|
||||
"embed.instructions": "Insertá este toot a tu sitio web copiando el código de abajo.",
|
||||
"embed.preview": "Así es cómo se verá:",
|
||||
"emoji_button.activity": "Actividad",
|
||||
|
|
@ -143,17 +145,17 @@
|
|||
"emoji_button.objects": "Objetos",
|
||||
"emoji_button.people": "Gente",
|
||||
"emoji_button.recent": "Usados frecuentemente",
|
||||
"emoji_button.search": "Buscar…",
|
||||
"emoji_button.search": "Buscar...",
|
||||
"emoji_button.search_results": "Resultados de búsqueda",
|
||||
"emoji_button.symbols": "Símbolos",
|
||||
"emoji_button.travel": "Viajes y lugares",
|
||||
"empty_column.account_timeline": "¡No hay toots aquí!",
|
||||
"empty_column.account_timeline": "¡No hay toots acá!",
|
||||
"empty_column.account_unavailable": "Perfil no disponible",
|
||||
"empty_column.blocks": "Todavía no bloqueaste a ningún usuario.",
|
||||
"empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en marcadores. Cuando guardés uno en marcadores, se mostrará acá.",
|
||||
"empty_column.bookmarked_statuses": "Todavía no tenés toots guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.",
|
||||
"empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!",
|
||||
"empty_column.direct": "Todavía no tenés ningún mensaje directo. Cuando enviés o recibás uno, se mostrará acá.",
|
||||
"empty_column.domain_blocks": "Todavía no hay dominios ocultos.",
|
||||
"empty_column.domain_blocks": "Todavía no hay dominios bloqueados.",
|
||||
"empty_column.favourited_statuses": "Todavía no tenés toots favoritos. Cuando marqués uno como favorito, se mostrará acá.",
|
||||
"empty_column.favourites": "Todavía nadie marcó este toot como favorito. Cuando alguien lo haga, se mostrará acá.",
|
||||
"empty_column.follow_requests": "Todavía no tenés ninguna solicitud de seguimiento. Cuando recibás una, se mostrará acá.",
|
||||
|
|
@ -161,12 +163,14 @@
|
|||
"empty_column.home": "¡Tu línea temporal principal está vacía! Visitá {public} o usá la búsqueda para comenzar y encontrar a otros usuarios.",
|
||||
"empty_column.home.public_timeline": "la línea temporal pública",
|
||||
"empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos toots, se mostrarán acá.",
|
||||
"empty_column.lists": "Todavía no tienes ninguna lista. Cuando creés una, se mostrará acá.",
|
||||
"empty_column.lists": "Todavía no tenés ninguna lista. Cuando creés una, se mostrará acá.",
|
||||
"empty_column.mutes": "Todavía no silenciaste a ningún usuario.",
|
||||
"empty_column.notifications": "Todavía no tenés ninguna notificación. Interactuá con otros para iniciar la conversación.",
|
||||
"empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal.",
|
||||
"empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal",
|
||||
"error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.",
|
||||
"error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente es causado por un complemento del navegador web o por herramientas de traducción automática.",
|
||||
"error.unexpected_crash.next_steps": "Intentá recargar la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.",
|
||||
"error.unexpected_crash.next_steps_addons": "Intentá deshabilitarlos y recargá la página. Si eso no ayuda, podés usar Mastodon a través de un navegador web diferente o aplicación nativa.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copiar stacktrace al portapapeles",
|
||||
"errors.unexpected_crash.report_issue": "Informar problema",
|
||||
"follow_request.authorize": "Autorizar",
|
||||
|
|
@ -177,9 +181,9 @@
|
|||
"getting_started.directory": "Directorio de perfiles",
|
||||
"getting_started.documentation": "Documentación",
|
||||
"getting_started.heading": "Introducción",
|
||||
"getting_started.invite": "Invitar usuarios",
|
||||
"getting_started.invite": "Invitar gente",
|
||||
"getting_started.open_source_notice": "Mastodon es software libre. Podés contribuir o informar errores en {github}.",
|
||||
"getting_started.security": "Seguridad",
|
||||
"getting_started.security": "Configuración de la cuenta",
|
||||
"getting_started.terms": "Términos del servicio",
|
||||
"hashtag.column_header.tag_mode.all": "y {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "o {additional}",
|
||||
|
|
@ -199,31 +203,31 @@
|
|||
"intervals.full.hours": "{number, plural, one {# hora} other {# horas}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuto} other {# minutos}}",
|
||||
"introduction.federation.action": "Siguiente",
|
||||
"introduction.federation.federated.headline": "Federado",
|
||||
"introduction.federation.federated.headline": "Federada",
|
||||
"introduction.federation.federated.text": "Los toots públicos de otros servidores del fediverso aparecerán en la línea temporal federada.",
|
||||
"introduction.federation.home.headline": "Principal",
|
||||
"introduction.federation.home.text": "Los toots de las personas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!",
|
||||
"introduction.federation.home.text": "Los toots de las cuentas que seguís aparecerán en tu línea temporal principal. ¡Podés seguir a cualquiera en cualquier servidor!",
|
||||
"introduction.federation.local.headline": "Local",
|
||||
"introduction.federation.local.text": "Los toots públicos de las personas en el mismo servidor aparecerán en la línea temporal local.",
|
||||
"introduction.federation.local.text": "Los toots públicos de las cuentas en el mismo servidor aparecerán en la línea temporal local.",
|
||||
"introduction.interactions.action": "¡Terminar tutorial!",
|
||||
"introduction.interactions.favourite.headline": "Favorito",
|
||||
"introduction.interactions.favourite.headline": "Favoritos",
|
||||
"introduction.interactions.favourite.text": "Podés guardar un toot para más tarde, y hacerle saber al autor que te gustó, marcándolo como favorito.",
|
||||
"introduction.interactions.reblog.headline": "Retootear",
|
||||
"introduction.interactions.reblog.text": "Podés compartir los toots de otras personas con tus seguidores retooteando los mismos.",
|
||||
"introduction.interactions.reblog.text": "Podés compartir los toots de otras cuentas con tus seguidores retooteando los mismos.",
|
||||
"introduction.interactions.reply.headline": "Responder",
|
||||
"introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras personas, que se encadenarán juntos en una conversación.",
|
||||
"introduction.interactions.reply.text": "Podés responder a tus propios toots y los de otras cuentas, que se encadenarán juntos en una conversación.",
|
||||
"introduction.welcome.action": "¡Dale!",
|
||||
"introduction.welcome.headline": "Primeros pasos",
|
||||
"introduction.welcome.text": "¡Bienvenido al fediverso! En unos pocos minutos, vas a poder transmitir mensajes y hablar con tus amigos a través de una amplia variedad de servidores. Pero este servidor, {domain}, es especial: aloja tu perfil, así que acordate de su nombre.",
|
||||
"keyboard_shortcuts.back": "para volver",
|
||||
"keyboard_shortcuts.blocked": "para abrir la lista de usuarios bloqueados",
|
||||
"keyboard_shortcuts.boost": "para retootear",
|
||||
"keyboard_shortcuts.column": "para enfocar un estado en una de las columnas",
|
||||
"keyboard_shortcuts.column": "para enfocar un toot en una de las columnas",
|
||||
"keyboard_shortcuts.compose": "para enfocar el área de texto de redacción",
|
||||
"keyboard_shortcuts.description": "Descripción",
|
||||
"keyboard_shortcuts.direct": "para abrir columna de mensajes directos",
|
||||
"keyboard_shortcuts.down": "para bajar en la lista",
|
||||
"keyboard_shortcuts.enter": "para abrir el estado",
|
||||
"keyboard_shortcuts.enter": "para abrir el toot",
|
||||
"keyboard_shortcuts.favourite": "para marcar como favorito",
|
||||
"keyboard_shortcuts.favourites": "para abrir la lista de favoritos",
|
||||
"keyboard_shortcuts.federated": "para abrir la línea temporal federada",
|
||||
|
|
@ -233,11 +237,11 @@
|
|||
"keyboard_shortcuts.legend": "para mostrar este texto",
|
||||
"keyboard_shortcuts.local": "para abrir la línea temporal local",
|
||||
"keyboard_shortcuts.mention": "para mencionar al autor",
|
||||
"keyboard_shortcuts.muted": "abrir la lista de usuarios silenciados",
|
||||
"keyboard_shortcuts.muted": "para abrir la lista de usuarios silenciados",
|
||||
"keyboard_shortcuts.my_profile": "para abrir tu perfil",
|
||||
"keyboard_shortcuts.notifications": "para abrir la columna de notificaciones",
|
||||
"keyboard_shortcuts.open_media": "para abrir archivos de medios",
|
||||
"keyboard_shortcuts.pinned": "para abrir lista de toots fijados",
|
||||
"keyboard_shortcuts.open_media": "para abrir los archivos de medios",
|
||||
"keyboard_shortcuts.pinned": "para abrir la lista de toots fijados",
|
||||
"keyboard_shortcuts.profile": "para abrir el perfil del autor",
|
||||
"keyboard_shortcuts.reply": "para responder",
|
||||
"keyboard_shortcuts.requests": "para abrir la lista de solicitudes de seguimiento",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "para quitar el enfoque del área de texto de redacción o de búsqueda",
|
||||
"keyboard_shortcuts.up": "para subir en la lista",
|
||||
"lightbox.close": "Cerrar",
|
||||
"lightbox.compress": "Comprimir cuadro de vista de imagen",
|
||||
"lightbox.expand": "Expandir cuadro de vista de imagen",
|
||||
"lightbox.next": "Siguiente",
|
||||
"lightbox.previous": "Anterior",
|
||||
"lightbox.view_context": "Ver contexto",
|
||||
|
|
@ -260,14 +266,20 @@
|
|||
"lists.edit.submit": "Cambiar título",
|
||||
"lists.new.create": "Agregar lista",
|
||||
"lists.new.title_placeholder": "Nuevo título de lista",
|
||||
"lists.replies_policy.all_replies": "Cualquier cuenta seguida",
|
||||
"lists.replies_policy.list_replies": "Miembros de la lista",
|
||||
"lists.replies_policy.no_replies": "Nadie",
|
||||
"lists.replies_policy.title": "Mostrar respuestas a:",
|
||||
"lists.search": "Buscar entre la gente que seguís",
|
||||
"lists.subheading": "Tus listas",
|
||||
"load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}",
|
||||
"loading_indicator.label": "Cargando…",
|
||||
"media_gallery.toggle_visible": "Cambiar visibilidad",
|
||||
"loading_indicator.label": "Cargando...",
|
||||
"media_gallery.toggle_visible": "Ocultar {number, plural, one {imagen} other {imágenes}}",
|
||||
"missing_indicator.label": "No se encontró",
|
||||
"missing_indicator.sublabel": "No se encontró este recurso",
|
||||
"mute_modal.duration": "Duración",
|
||||
"mute_modal.hide_notifications": "¿Querés ocultar las notificaciones de este usuario?",
|
||||
"mute_modal.indefinite": "Indefinida",
|
||||
"navigation_bar.apps": "Aplicaciones móviles",
|
||||
"navigation_bar.blocks": "Usuarios bloqueados",
|
||||
"navigation_bar.bookmarks": "Marcadores",
|
||||
|
|
@ -275,12 +287,12 @@
|
|||
"navigation_bar.compose": "Redactar un nuevo toot",
|
||||
"navigation_bar.direct": "Mensajes directos",
|
||||
"navigation_bar.discover": "Descubrir",
|
||||
"navigation_bar.domain_blocks": "Dominios ocultos",
|
||||
"navigation_bar.domain_blocks": "Dominios bloqueados",
|
||||
"navigation_bar.edit_profile": "Editar perfil",
|
||||
"navigation_bar.favourites": "Favoritos",
|
||||
"navigation_bar.filters": "Palabras silenciadas",
|
||||
"navigation_bar.follow_requests": "Solicitudes de seguimiento",
|
||||
"navigation_bar.follows_and_followers": "Personas seguidas y seguidores",
|
||||
"navigation_bar.follows_and_followers": "Cuentas seguidas y seguidores",
|
||||
"navigation_bar.info": "Acerca de este servidor",
|
||||
"navigation_bar.keyboard_shortcuts": "Atajos",
|
||||
"navigation_bar.lists": "Listas",
|
||||
|
|
@ -291,13 +303,14 @@
|
|||
"navigation_bar.preferences": "Configuración",
|
||||
"navigation_bar.public_timeline": "Línea temporal federada",
|
||||
"navigation_bar.security": "Seguridad",
|
||||
"notification.favourite": "{name} marcó tu estado como favorito",
|
||||
"notification.favourite": "{name} marcó tu toot como favorito",
|
||||
"notification.follow": "{name} te empezó a seguir",
|
||||
"notification.follow_request": "{name} solicitó seguirte",
|
||||
"notification.mention": "{name} te mencionó",
|
||||
"notification.own_poll": "Tu encuesta finalizó",
|
||||
"notification.poll": "Finalizó una encuesta en la que votaste",
|
||||
"notification.reblog": "{name} retooteó tu estado",
|
||||
"notification.status": "{name} acaba de tootear",
|
||||
"notifications.clear": "Limpiar notificaciones",
|
||||
"notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?",
|
||||
"notifications.column_settings.alert": "Notificaciones de escritorio",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Retoots:",
|
||||
"notifications.column_settings.show": "Mostrar en columna",
|
||||
"notifications.column_settings.sound": "Reproducir sonido",
|
||||
"notifications.column_settings.status": "Nuevos toots:",
|
||||
"notifications.filter.all": "Todas",
|
||||
"notifications.filter.boosts": "Retoots",
|
||||
"notifications.filter.favourites": "Favoritos",
|
||||
"notifications.filter.follows": "Seguidores",
|
||||
"notifications.filter.mentions": "Menciones",
|
||||
"notifications.filter.polls": "Resultados de la encuesta",
|
||||
"notifications.filter.polls": "Resultados de encuesta",
|
||||
"notifications.filter.statuses": "Actualizaciones de cuentas que seguís",
|
||||
"notifications.group": "{count} notificaciones",
|
||||
"notifications.mark_as_read": "Marcar cada notificación como leída",
|
||||
"notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada",
|
||||
"notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes",
|
||||
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
|
||||
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.",
|
||||
"notifications_permission_banner.title": "No te pierdas nada",
|
||||
"picture_in_picture.restore": "Restaurar",
|
||||
"poll.closed": "Cerrada",
|
||||
"poll.refresh": "Refrescar",
|
||||
"poll.total_people": "{count, plural, one {# persona} other {# personas}}",
|
||||
|
|
@ -328,14 +350,14 @@
|
|||
"poll.voted": "Votaste esta opción",
|
||||
"poll_button.add_poll": "Agregar una encuesta",
|
||||
"poll_button.remove_poll": "Quitar encuesta",
|
||||
"privacy.change": "Configurar privacidad de estado",
|
||||
"privacy.direct.long": "Enviar toot sólo a los usuarios mencionados",
|
||||
"privacy.change": "Configurar privacidad de toot",
|
||||
"privacy.direct.long": "Visible sólo a los usuarios mencionados",
|
||||
"privacy.direct.short": "Directo",
|
||||
"privacy.private.long": "Enviar toot sólo a los seguidores",
|
||||
"privacy.private.long": "Visible sólo a los seguidores",
|
||||
"privacy.private.short": "Sólo a seguidores",
|
||||
"privacy.public.long": "Enviar toot a las líneas temporales públicas",
|
||||
"privacy.public.long": "Visible para todos, mostrado en las líneas temporales públicas",
|
||||
"privacy.public.short": "Público",
|
||||
"privacy.unlisted.long": "No enviar toot a las líneas temporales públicas",
|
||||
"privacy.unlisted.long": "Visible para todos, pero no en las líneas temporales públicas",
|
||||
"privacy.unlisted.short": "No listado",
|
||||
"refresh": "Refrescar",
|
||||
"regeneration_indicator.label": "Cargando…",
|
||||
|
|
@ -355,28 +377,28 @@
|
|||
"report.target": "Denunciando a {target}",
|
||||
"search.placeholder": "Buscar",
|
||||
"search_popout.search_format": "Formato de búsqueda avanzada",
|
||||
"search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los estados que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres usuarios, nombres mostrados y etiquetas.",
|
||||
"search_popout.tips.full_text": "Las búsquedas de texto simple devuelven los toots que escribiste, los marcados como favoritos, los retooteados o en los que te mencionaron, así como nombres de usuarios, nombres mostrados y etiquetas.",
|
||||
"search_popout.tips.hashtag": "etiqueta",
|
||||
"search_popout.tips.status": "estado",
|
||||
"search_popout.tips.status": "toot",
|
||||
"search_popout.tips.text": "Las búsquedas de texto simple devuelven nombres de usuarios, nombres mostrados y etiquetas que coincidan",
|
||||
"search_popout.tips.user": "usuario",
|
||||
"search_results.accounts": "Gente",
|
||||
"search_results.hashtags": "Etiquetas",
|
||||
"search_results.statuses": "Toots",
|
||||
"search_results.statuses_fts_disabled": "No se puede buscar toots por contenido en este servidor de Mastodon.",
|
||||
"search_results.statuses_fts_disabled": "No se pueden buscar toots por contenido en este servidor de Mastodon.",
|
||||
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
|
||||
"status.admin_account": "Abrir interface de moderación para @{name}",
|
||||
"status.admin_status": "Abrir este estado en la interface de moderación",
|
||||
"status.admin_status": "Abrir este toot en la interface de moderación",
|
||||
"status.block": "Bloquear a @{name}",
|
||||
"status.bookmark": "Marcador",
|
||||
"status.bookmark": "Marcar",
|
||||
"status.cancel_reblog_private": "Quitar retoot",
|
||||
"status.cannot_reblog": "No se puede retootear este toot",
|
||||
"status.copy": "Copiar enlace al estado",
|
||||
"status.copy": "Copiar enlace al toot",
|
||||
"status.delete": "Eliminar",
|
||||
"status.detailed_status": "Vista de conversación detallada",
|
||||
"status.direct": "Mensaje directo a @{name}",
|
||||
"status.embed": "Insertar",
|
||||
"status.favourite": "Favorito",
|
||||
"status.favourite": "Marcar como favorito",
|
||||
"status.filtered": "Filtrado",
|
||||
"status.load_more": "Cargar más",
|
||||
"status.media_hidden": "Medios ocultos",
|
||||
|
|
@ -384,10 +406,10 @@
|
|||
"status.more": "Más",
|
||||
"status.mute": "Silenciar a @{name}",
|
||||
"status.mute_conversation": "Silenciar conversación",
|
||||
"status.open": "Expandir este estado",
|
||||
"status.open": "Expandir este toot",
|
||||
"status.pin": "Fijar en el perfil",
|
||||
"status.pinned": "Toot fijado",
|
||||
"status.read_more": "Leer más",
|
||||
"status.read_more": "Leé más",
|
||||
"status.reblog": "Retootear",
|
||||
"status.reblog_private": "Retootear a la audiencia original",
|
||||
"status.reblogged_by": "{name} retooteó",
|
||||
|
|
@ -409,7 +431,7 @@
|
|||
"status.unpin": "Dejar de fijar",
|
||||
"suggestions.dismiss": "Descartar sugerencia",
|
||||
"suggestions.header": "Es posible que te interese…",
|
||||
"tabs_bar.federated_timeline": "Federado",
|
||||
"tabs_bar.federated_timeline": "Federada",
|
||||
"tabs_bar.home": "Principal",
|
||||
"tabs_bar.local_timeline": "Local",
|
||||
"tabs_bar.notifications": "Notificaciones",
|
||||
|
|
@ -430,15 +452,15 @@
|
|||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}mil",
|
||||
"upload_area.title": "Para subir, arrastrá y soltá",
|
||||
"upload_button.label": "Agregar medios ({formats})",
|
||||
"upload_button.label": "Agregá imágenes o un archivo de audio o video",
|
||||
"upload_error.limit": "Se excedió el límite de subida de archivos.",
|
||||
"upload_error.poll": "No se permite la subida de archivos en encuestas.",
|
||||
"upload_form.audio_description": "Describir para personas con problemas auditivos",
|
||||
"upload_form.description": "Agregar descripción para los usuarios con dificultades visuales",
|
||||
"upload_form.audio_description": "Agregá una descripción para personas con dificultades auditivas",
|
||||
"upload_form.description": "Agregá una descripción para personas con dificultades visuales",
|
||||
"upload_form.edit": "Editar",
|
||||
"upload_form.thumbnail": "Cambiar miniatura",
|
||||
"upload_form.undo": "Eliminar",
|
||||
"upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
|
||||
"upload_form.video_description": "Agregá una descripción para personas con dificultades auditivas o visuales",
|
||||
"upload_modal.analyzing_picture": "Analizando imagen…",
|
||||
"upload_modal.apply": "Aplicar",
|
||||
"upload_modal.choose_image": "Elegir imagen",
|
||||
|
|
@ -446,12 +468,13 @@
|
|||
"upload_modal.detect_text": "Detectar texto de la imagen",
|
||||
"upload_modal.edit_media": "Editar medio",
|
||||
"upload_modal.hint": "Hacé clic o arrastrá el círculo en la previsualización para elegir el punto focal que siempre estará a la vista en todas las miniaturas.",
|
||||
"upload_modal.preparing_ocr": "Preparando OCR…",
|
||||
"upload_modal.preview_label": "Previsualización ({ratio})",
|
||||
"upload_progress.label": "Subiendo…",
|
||||
"upload_progress.label": "Subiendo...",
|
||||
"video.close": "Cerrar video",
|
||||
"video.download": "Descargar archivo",
|
||||
"video.exit_fullscreen": "Salir de pantalla completa",
|
||||
"video.expand": "Expandir vídeo",
|
||||
"video.expand": "Expandir video",
|
||||
"video.fullscreen": "Pantalla completa",
|
||||
"video.hide": "Ocultar video",
|
||||
"video.mute": "Silenciar sonido",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Ver más en el perfil original",
|
||||
"account.cancel_follow_request": "Cancelar la solicitud de seguimiento",
|
||||
"account.direct": "Mensaje directo a @{name}",
|
||||
"account.disable_notifications": "Dejar de notificarme cuando @{name} publique algo",
|
||||
"account.domain_blocked": "Dominio oculto",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.enable_notifications": "Notificarme cuando @{name} publique algo",
|
||||
"account.endorse": "Mostrar en perfil",
|
||||
"account.follow": "Seguir",
|
||||
"account.followers": "Seguidores",
|
||||
|
|
@ -118,7 +120,7 @@
|
|||
"confirmations.mute.explanation": "Esto esconderá las publicaciones de ellos y en las que los has mencionado, pero les permitirá ver tus mensajes y seguirte.",
|
||||
"confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
|
||||
"confirmations.redraft.confirm": "Borrar y volver a borrador",
|
||||
"confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.",
|
||||
"confirmations.redraft.message": "¿Estás seguro de que quieres eliminar este toot y convertirlo en borrador? Perderás todas las respuestas, retoots y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanas.",
|
||||
"confirmations.reply.confirm": "Responder",
|
||||
"confirmations.reply.message": "Responder sobrescribirá el mensaje que estás escribiendo. ¿Estás seguro de que deseas continuar?",
|
||||
"confirmations.unfollow.confirm": "Dejar de seguir",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.",
|
||||
"empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo",
|
||||
"error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.",
|
||||
"error.unexpected_crash.explanation_addons": "No se pudo mostrar correctamente esta página. Este error probablemente fue causado por un complemento del navegador web o por herramientas de traducción automática.",
|
||||
"error.unexpected_crash.next_steps": "Intenta actualizar la página. Si eso no ayuda, es posible que puedas usar Mastodon a través de otro navegador o aplicación nativa.",
|
||||
"error.unexpected_crash.next_steps_addons": "Intenta deshabilitarlos y recarga la página. Si eso no ayuda, podrías usar Mastodon a través de un navegador web diferente o aplicación nativa.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copiar el seguimiento de pila en el portapapeles",
|
||||
"errors.unexpected_crash.report_issue": "Informar de un problema/error",
|
||||
"follow_request.authorize": "Autorizar",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "para retirar el foco de la caja de redacción/búsqueda",
|
||||
"keyboard_shortcuts.up": "para ir hacia arriba en la lista",
|
||||
"lightbox.close": "Cerrar",
|
||||
"lightbox.compress": "Comprimir cuadro de visualización de imagen",
|
||||
"lightbox.expand": "Expandir cuadro de visualización de imagen",
|
||||
"lightbox.next": "Siguiente",
|
||||
"lightbox.previous": "Anterior",
|
||||
"lightbox.view_context": "Ver contexto",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Cambiar título",
|
||||
"lists.new.create": "Añadir lista",
|
||||
"lists.new.title_placeholder": "Título de la nueva lista",
|
||||
"lists.replies_policy.all_replies": "Cualquier usuario al que sigas",
|
||||
"lists.replies_policy.list_replies": "Miembros de la lista",
|
||||
"lists.replies_policy.no_replies": "Nadie",
|
||||
"lists.replies_policy.title": "Mostrar respuestas a:",
|
||||
"lists.search": "Buscar entre la gente a la que sigues",
|
||||
"lists.subheading": "Tus listas",
|
||||
"load_pending": "{count, plural, one {# nuevo elemento} other {# nuevos elementos}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Cambiar visibilidad",
|
||||
"missing_indicator.label": "No encontrado",
|
||||
"missing_indicator.sublabel": "No se encontró este recurso",
|
||||
"mute_modal.duration": "Duración",
|
||||
"mute_modal.hide_notifications": "Ocultar notificaciones de este usuario?",
|
||||
"mute_modal.indefinite": "Indefinida",
|
||||
"navigation_bar.apps": "Aplicaciones móviles",
|
||||
"navigation_bar.blocks": "Usuarios bloqueados",
|
||||
"navigation_bar.bookmarks": "Marcadores",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Tu encuesta ha terminado",
|
||||
"notification.poll": "Una encuesta en la que has votado ha terminado",
|
||||
"notification.reblog": "{name} ha retooteado tu estado",
|
||||
"notification.status": "{name} acaba de publicar",
|
||||
"notifications.clear": "Limpiar notificaciones",
|
||||
"notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?",
|
||||
"notifications.column_settings.alert": "Notificaciones de escritorio",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Retoots:",
|
||||
"notifications.column_settings.show": "Mostrar en columna",
|
||||
"notifications.column_settings.sound": "Reproducir sonido",
|
||||
"notifications.column_settings.status": "Nuevos toots:",
|
||||
"notifications.filter.all": "Todos",
|
||||
"notifications.filter.boosts": "Retoots",
|
||||
"notifications.filter.favourites": "Favoritos",
|
||||
"notifications.filter.follows": "Seguidores",
|
||||
"notifications.filter.mentions": "Menciones",
|
||||
"notifications.filter.polls": "Resultados de la votación",
|
||||
"notifications.filter.statuses": "Actualizaciones de gente a la que sigues",
|
||||
"notifications.group": "{count} notificaciones",
|
||||
"notifications.mark_as_read": "Marcar todas las notificaciones como leídas",
|
||||
"notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.",
|
||||
"notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente",
|
||||
"notifications_permission_banner.enable": "Habilitar notificaciones de escritorio",
|
||||
"notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.",
|
||||
"notifications_permission_banner.title": "Nunca te pierdas nada",
|
||||
"picture_in_picture.restore": "Restaurar",
|
||||
"poll.closed": "Cerrada",
|
||||
"poll.refresh": "Actualizar",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# people}}",
|
||||
|
|
@ -357,7 +379,7 @@
|
|||
"search_popout.search_format": "Formato de búsqueda avanzada",
|
||||
"search_popout.tips.full_text": "Búsquedas de texto recuperan posts que has escrito, marcado como favoritos, retooteado o en los que has sido mencionado, así como usuarios, nombres y hashtags.",
|
||||
"search_popout.tips.hashtag": "etiqueta",
|
||||
"search_popout.tips.status": "estado",
|
||||
"search_popout.tips.status": "toot",
|
||||
"search_popout.tips.text": "El texto simple devuelve correspondencias de nombre, usuario y hashtag",
|
||||
"search_popout.tips.user": "usuario",
|
||||
"search_results.accounts": "Gente",
|
||||
|
|
@ -369,7 +391,7 @@
|
|||
"status.admin_status": "Abrir este estado en la interfaz de moderación",
|
||||
"status.block": "Bloquear a @{name}",
|
||||
"status.bookmark": "Marcador",
|
||||
"status.cancel_reblog_private": "Des-impulsar",
|
||||
"status.cancel_reblog_private": "Eliminar retoot",
|
||||
"status.cannot_reblog": "Este toot no puede retootearse",
|
||||
"status.copy": "Copiar enlace al estado",
|
||||
"status.delete": "Borrar",
|
||||
|
|
@ -391,11 +413,11 @@
|
|||
"status.reblog": "Retootear",
|
||||
"status.reblog_private": "Implusar a la audiencia original",
|
||||
"status.reblogged_by": "Retooteado por {name}",
|
||||
"status.reblogs.empty": "Nadie impulsó este toot todavía. Cuando alguien lo haga, aparecerá aqui.",
|
||||
"status.reblogs.empty": "Nadie retooteó este toot todavía. Cuando alguien lo haga, aparecerá aquí.",
|
||||
"status.redraft": "Borrar y volver a borrador",
|
||||
"status.remove_bookmark": "Eliminar marcador",
|
||||
"status.reply": "Responder",
|
||||
"status.replyAll": "Responder al hilván",
|
||||
"status.replyAll": "Responder al hilo",
|
||||
"status.report": "Reportar",
|
||||
"status.sensitive_warning": "Contenido sensible",
|
||||
"status.share": "Compartir",
|
||||
|
|
@ -403,7 +425,7 @@
|
|||
"status.show_less_all": "Mostrar menos para todo",
|
||||
"status.show_more": "Mostrar más",
|
||||
"status.show_more_all": "Mostrar más para todo",
|
||||
"status.show_thread": "Mostrar hilván",
|
||||
"status.show_thread": "Mostrar hilo",
|
||||
"status.uncached_media_warning": "No disponible",
|
||||
"status.unmute_conversation": "Dejar de silenciar conversación",
|
||||
"status.unpin": "Dejar de fijar",
|
||||
|
|
@ -426,9 +448,9 @@
|
|||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} personas}} hablando",
|
||||
"trends.trending_now": "Tendencia ahora",
|
||||
"ui.beforeunload": "Tu borrador se perderá si sales de Mastodon.",
|
||||
"units.short.billion": "{count}MM",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}mil",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Arrastra y suelta para subir",
|
||||
"upload_button.label": "Subir multimedia (JPEG, PNG, GIF, WebM, MP4, MOV)",
|
||||
"upload_error.limit": "Límite de subida de archivos excedido.",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Detectar texto de la imagen",
|
||||
"upload_modal.edit_media": "Editar multimedia",
|
||||
"upload_modal.hint": "Haga clic o arrastre el círculo en la vista previa para elegir el punto focal que siempre estará a la vista en todas las miniaturas.",
|
||||
"upload_modal.preparing_ocr": "Preparando OCR…",
|
||||
"upload_modal.preview_label": "Vista previa ({ratio})",
|
||||
"upload_progress.label": "Subiendo…",
|
||||
"video.close": "Cerrar video",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Tühista jälgimistaotlus",
|
||||
"account.direct": "Otsesõnum @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Domeen peidetud",
|
||||
"account.edit_profile": "Muuda profiili",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Too profiilil esile",
|
||||
"account.follow": "Jälgi",
|
||||
"account.followers": "Jälgijad",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Teil ei ole veel teateid. Suhelge teistega alustamaks vestlust.",
|
||||
"empty_column.public": "Siin pole midagi! Kirjuta midagi avalikut või jälgi ise kasutajaid täitmaks seda ruumi",
|
||||
"error.unexpected_crash.explanation": "Meie poolse probleemi või veebilehitseja ühilduvus probleemi tõttu ei suutnud me Teile seda lehekülge korrektselt näidata.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Proovige lehekülge uuesti avada. Kui see ei aita, võite proovida kasutada Mastodoni mõne muu veebilehitseja või äppi kaudu.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Kopeeri stacktrace lõikelauale",
|
||||
"errors.unexpected_crash.report_issue": "Teavita veast",
|
||||
"follow_request.authorize": "Autoriseeri",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "tekstiala/otsingu koostamise mittefokuseerimiseks",
|
||||
"keyboard_shortcuts.up": "liikumaks nimistus üles",
|
||||
"lightbox.close": "Sulge",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Järgmine",
|
||||
"lightbox.previous": "Eelmine",
|
||||
"lightbox.view_context": "Vaata konteksti",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Muuda pealkiri",
|
||||
"lists.new.create": "Lisa nimistu",
|
||||
"lists.new.title_placeholder": "Uus nimistu pealkiri",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Otsi Teie poolt jälgitavate inimese hulgast",
|
||||
"lists.subheading": "Teie nimistud",
|
||||
"load_pending": "{count, plural, one {# uus kirje} other {# uut kirjet}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Lülita nähtavus",
|
||||
"missing_indicator.label": "Ei leitud",
|
||||
"missing_indicator.sublabel": "Seda ressurssi ei leitud",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Kas peita teated sellelt kasutajalt?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mobiilrakendused",
|
||||
"navigation_bar.blocks": "Blokeeritud kasutajad",
|
||||
"navigation_bar.bookmarks": "Järjehoidjad",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Teie küsitlus on lõppenud",
|
||||
"notification.poll": "Küsitlus, milles osalesite, on lõppenud",
|
||||
"notification.reblog": "{name} upitas Teie staatust",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Puhasta teated",
|
||||
"notifications.clear_confirmation": "Olete kindel, et soovite püsivalt kõik oma teated eemaldada?",
|
||||
"notifications.column_settings.alert": "Töölauateated",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Upitused:",
|
||||
"notifications.column_settings.show": "Kuva tulbas",
|
||||
"notifications.column_settings.sound": "Mängi heli",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "Kõik",
|
||||
"notifications.filter.boosts": "Upitused",
|
||||
"notifications.filter.favourites": "Lemmikud",
|
||||
"notifications.filter.follows": "Jälgib",
|
||||
"notifications.filter.mentions": "Mainimised",
|
||||
"notifications.filter.polls": "Küsitluse tulemused",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} teated",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Suletud",
|
||||
"poll.refresh": "Värskenda",
|
||||
"poll.total_people": "{count, plural,one {# inimene} other {# inimest}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Tuvasta teksti pildilt",
|
||||
"upload_modal.edit_media": "Muuda meediat",
|
||||
"upload_modal.hint": "Vajuta või tõmba ringi eelvaatel, et valida fookuspunkti, mis on alati nähtaval kõikidel eelvaadetel.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Eelvaade ({ratio})",
|
||||
"upload_progress.label": "Laeb üles....",
|
||||
"video.close": "Sulge video",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Ezeztatu jarraitzeko eskaria",
|
||||
"account.direct": "Mezu zuzena @{name}(r)i",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Ezkutatutako domeinua",
|
||||
"account.edit_profile": "Aldatu profila",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Nabarmendu profilean",
|
||||
"account.follow": "Jarraitu",
|
||||
"account.followers": "Jarraitzaileak",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.",
|
||||
"empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileak hau betetzen joateko",
|
||||
"error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Saiatu orria berritzen. Horrek ez badu laguntzen, agian Mastodon erabiltzeko aukera duzu oraindik ere beste nabigatzaile bat edo aplikazio natibo bat erabilita.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Kopiatu irteera arbelera",
|
||||
"errors.unexpected_crash.report_issue": "Eman arazoaren berri",
|
||||
"follow_request.authorize": "Baimendu",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "testua konposatzeko area / bilaketatik fokua kentzea",
|
||||
"keyboard_shortcuts.up": "zerrendan gora mugitzea",
|
||||
"lightbox.close": "Itxi",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Hurrengoa",
|
||||
"lightbox.previous": "Aurrekoa",
|
||||
"lightbox.view_context": "Ikusi testuingurua",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Aldatu izenburua",
|
||||
"lists.new.create": "Gehitu zerrenda",
|
||||
"lists.new.title_placeholder": "Zerrenda berriaren izena",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Bilatu jarraitzen dituzun pertsonen artean",
|
||||
"lists.subheading": "Zure zerrendak",
|
||||
"load_pending": "{count, plural, one {eleentuberri #} other {# elementu berri}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Txandakatu ikusgaitasuna",
|
||||
"missing_indicator.label": "Ez aurkitua",
|
||||
"missing_indicator.sublabel": "Baliabide hau ezin izan da aurkitu",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Ezkutatu erabiltzaile honen jakinarazpenak?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mugikorrerako aplikazioak",
|
||||
"navigation_bar.blocks": "Blokeatutako erabiltzaileak",
|
||||
"navigation_bar.bookmarks": "Laster-markak",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Zure inkesta amaitu da",
|
||||
"notification.poll": "Zuk erantzun duzun inkesta bat bukatu da",
|
||||
"notification.reblog": "{name}(e)k bultzada eman dio zure mezuari",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Garbitu jakinarazpenak",
|
||||
"notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?",
|
||||
"notifications.column_settings.alert": "Mahaigaineko jakinarazpenak",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Bultzadak:",
|
||||
"notifications.column_settings.show": "Erakutsi zutabean",
|
||||
"notifications.column_settings.sound": "Jo soinua",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "Denak",
|
||||
"notifications.filter.boosts": "Bultzadak",
|
||||
"notifications.filter.favourites": "Gogokoak",
|
||||
"notifications.filter.follows": "Jarraipenak",
|
||||
"notifications.filter.mentions": "Aipamenak",
|
||||
"notifications.filter.polls": "Inkestaren emaitza",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} jakinarazpen",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Itxita",
|
||||
"poll.refresh": "Berritu",
|
||||
"poll.total_people": "{count, plural, one {pertsona #} other {# pertsona}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Antzeman testua iruditik",
|
||||
"upload_modal.edit_media": "Editatu media",
|
||||
"upload_modal.hint": "Sakatu eta jaregin aurrebistako zirkulua iruditxoetan beti ikusgai egongo den puntu fokala hautatzeko.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Aurreikusi ({ratio})",
|
||||
"upload_progress.label": "Igotzen...",
|
||||
"video.close": "Itxi bideoa",
|
||||
|
|
|
|||
|
|
@ -4,13 +4,15 @@
|
|||
"account.badges.bot": "ربات",
|
||||
"account.badges.group": "گروه",
|
||||
"account.block": "مسدودسازی @{name}",
|
||||
"account.block_domain": "نهفتن همه چیز از {domain}",
|
||||
"account.block_domain": "بستن دامنه {domain}",
|
||||
"account.blocked": "مسدود",
|
||||
"account.browse_more_on_origin_server": "مرور بیشتر روی نمایهٔ اصلی",
|
||||
"account.cancel_follow_request": "لغو درخواست پیگیری",
|
||||
"account.direct": "پیام خصوصی به @{name}",
|
||||
"account.domain_blocked": "دامنهٔ نهفته",
|
||||
"account.disable_notifications": "آگاهی به من هنگام فرستادنهای @{name} پایان یابد",
|
||||
"account.domain_blocked": "دامنه بسته شد",
|
||||
"account.edit_profile": "ویرایش نمایه",
|
||||
"account.enable_notifications": "آگاهی هنگام ارسالهای @{name}",
|
||||
"account.endorse": "معرّفی در نمایه",
|
||||
"account.follow": "پی بگیرید",
|
||||
"account.followers": "پیگیران",
|
||||
|
|
@ -38,7 +40,7 @@
|
|||
"account.show_reblogs": "نمایش بازبوقهای @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} بوق} other {{counter} بوق}}",
|
||||
"account.unblock": "رفع انسداد @{name}",
|
||||
"account.unblock_domain": "رفع نهفتن {domain}",
|
||||
"account.unblock_domain": "گشودن دامنه {domain}",
|
||||
"account.unendorse": "معرّفی نکردن در نمایه",
|
||||
"account.unfollow": "پایان پیگیری",
|
||||
"account.unmute": "رفع خموشی @{name}",
|
||||
|
|
@ -62,7 +64,7 @@
|
|||
"column.community": "نوشتههای محلی",
|
||||
"column.direct": "پیامهای خصوصی",
|
||||
"column.directory": "مرور نمایهها",
|
||||
"column.domain_blocks": "دامنههای نهفته",
|
||||
"column.domain_blocks": "دامنههای بسته",
|
||||
"column.favourites": "پسندیدهها",
|
||||
"column.follow_requests": "درخواستهای پیگیری",
|
||||
"column.home": "خانه",
|
||||
|
|
@ -78,7 +80,7 @@
|
|||
"column_header.pin": "ثابتکردن",
|
||||
"column_header.show_settings": "نمایش تنظیمات",
|
||||
"column_header.unpin": "رهاکردن",
|
||||
"column_subheading.settings": "تنظیمات",
|
||||
"column_subheading.settings": "ساماندهی",
|
||||
"community.column_settings.local_only": "تنها بومی",
|
||||
"community.column_settings.media_only": "فقط رسانه",
|
||||
"community.column_settings.remote_only": "تنها دوردست",
|
||||
|
|
@ -96,7 +98,7 @@
|
|||
"compose_form.poll.switch_to_single": "تبدیل به نظرسنجی تکگزینهای",
|
||||
"compose_form.publish": "بوق",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "علامتگذاری به عنوان حساس",
|
||||
"compose_form.sensitive.hide": "علامتگذاری رسانه به عنوان حساس",
|
||||
"compose_form.sensitive.marked": "رسانه به عنوان حساس علامتگذاری شده",
|
||||
"compose_form.sensitive.unmarked": "رسانه به عنوان حساس علامتگذاری نشده",
|
||||
"compose_form.spoiler.marked": "نوشته پشت هشدار پنهان است",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "هنوز هیچ اعلانی ندارید. به دیگران واکنش نشان دهید تا گفتگو آغاز شود.",
|
||||
"empty_column.public": "اینجا هنوز چیزی نیست! خودتان چیزی بنویسید یا کاربران کارسازهای دیگر را پی بگیرید تا اینجا پر شود",
|
||||
"error.unexpected_crash.explanation": "به خاطر اشکالی در کدهای ما یا ناسازگاری با مرورگر شما، این صفحه به درستی نمایش نیافت.",
|
||||
"error.unexpected_crash.explanation_addons": "این صفحه نمیتواند درست نشان داده شود. احتمالاً این خطا ناشی از یک افزونهٔ مرورگر یا ابزار ترجمهٔ خودکار است.",
|
||||
"error.unexpected_crash.next_steps": "لطفاً صفحه را دوباره باز کنید. اگر کمکی نکرد، شاید همچنان بتوانید با ماستودون از راه یک مرورگر دیگر یا با یکی از اپهای آن کار کنید.",
|
||||
"error.unexpected_crash.next_steps_addons": "لطفاً از کارشان انداخته و صفحه را نوسازی کنید. اگر کمکی نکرد، شاید همچنان بتوانید با مرورگری دیگر یا با کارهای بومی از ماستودون استفاده کنید.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "رونوشت از جزئیات اشکال",
|
||||
"errors.unexpected_crash.report_issue": "گزارش مشکل",
|
||||
"follow_request.authorize": "اجازه دهید",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "برای برداشتن تمرکز از نوشتن/جستجو",
|
||||
"keyboard_shortcuts.up": "برای بالا رفتن در فهرست",
|
||||
"lightbox.close": "بستن",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "بعدی",
|
||||
"lightbox.previous": "قبلی",
|
||||
"lightbox.view_context": "نمایش گفتگو",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "تغییر عنوان",
|
||||
"lists.new.create": "افزودن فهرست",
|
||||
"lists.new.title_placeholder": "عنوان فهرست تازه",
|
||||
"lists.replies_policy.all_replies": "هر کاربر پیگیریشده",
|
||||
"lists.replies_policy.list_replies": "اعضای فهرست",
|
||||
"lists.replies_policy.no_replies": "هیچکس",
|
||||
"lists.replies_policy.title": "نمایش پاسخها به:",
|
||||
"lists.search": "بین کسانی که پی میگیرید بگردید",
|
||||
"lists.subheading": "فهرستهای شما",
|
||||
"load_pending": "{count, plural, one {# مورد تازه} other {# مورد تازه}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "تغییر وضعیت نمایانی",
|
||||
"missing_indicator.label": "پیدا نشد",
|
||||
"missing_indicator.sublabel": "این منبع پیدا نشد",
|
||||
"mute_modal.duration": "مدت زمان",
|
||||
"mute_modal.hide_notifications": "اعلانهای این کاربر پنهان شود؟",
|
||||
"mute_modal.indefinite": "نامعلوم",
|
||||
"navigation_bar.apps": "اپهای موبایل",
|
||||
"navigation_bar.blocks": "کاربران مسدودشده",
|
||||
"navigation_bar.bookmarks": "نشانکها",
|
||||
|
|
@ -275,7 +287,7 @@
|
|||
"navigation_bar.compose": "نوشتن بوق تازه",
|
||||
"navigation_bar.direct": "پیامهای مستقیم",
|
||||
"navigation_bar.discover": "گشت و گذار",
|
||||
"navigation_bar.domain_blocks": "دامنههای نهفته",
|
||||
"navigation_bar.domain_blocks": "دامنههای بسته",
|
||||
"navigation_bar.edit_profile": "ویرایش نمایه",
|
||||
"navigation_bar.favourites": "پسندیدهها",
|
||||
"navigation_bar.filters": "واژگان خموش",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "نظرسنجی شما به پایان رسید",
|
||||
"notification.poll": "نظرسنجیای که در آن رأی دادید به پایان رسیده است",
|
||||
"notification.reblog": "{name} وضعیتتان را تقویت کرد",
|
||||
"notification.status": "{name} چیزی فرستاد",
|
||||
"notifications.clear": "پاککردن اعلانها",
|
||||
"notifications.clear_confirmation": "مطمئنید میخواهید همهٔ اعلانهایتان را برای همیشه پاک کنید؟",
|
||||
"notifications.column_settings.alert": "اعلانهای میزکار",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "بازبوقها:",
|
||||
"notifications.column_settings.show": "نمایش در ستون",
|
||||
"notifications.column_settings.sound": "پخش صدا",
|
||||
"notifications.column_settings.status": "بوقهای جدید:",
|
||||
"notifications.filter.all": "همه",
|
||||
"notifications.filter.boosts": "بازبوقها",
|
||||
"notifications.filter.favourites": "پسندها",
|
||||
"notifications.filter.follows": "پیگیریها",
|
||||
"notifications.filter.mentions": "نامبردنها",
|
||||
"notifications.filter.polls": "نتایج نظرسنجی",
|
||||
"notifications.filter.statuses": "بهروز رسانیها از کسانی که پیگیرشانید",
|
||||
"notifications.group": "{count} اعلان",
|
||||
"notifications.mark_as_read": "نشانهگذاری همهٔ آگاهیها به عنوان خواندهشده",
|
||||
"notifications.permission_denied": "آگاهیهای میزکار به دلیل رد کردن درخواست اجازهٔ پیشین مرورگر، در دسترس نیستند",
|
||||
"notifications.permission_denied_alert": "از آنجا که پیش از این اجازهٔ مرورگر رد شده است، آگاهیهای میزکار نمیتوانند به کار بیفتند",
|
||||
"notifications_permission_banner.enable": "به کار انداختن آگاهیهای میزکار",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "هرگز چیزی را از دست ندهید",
|
||||
"picture_in_picture.restore": "برگرداندن",
|
||||
"poll.closed": "پایانیافته",
|
||||
"poll.refresh": "بهروزرسانی",
|
||||
"poll.total_people": "{count, plural, one {# نفر} other {# نفر}}",
|
||||
|
|
@ -389,7 +411,7 @@
|
|||
"status.pinned": "بوق ثابت",
|
||||
"status.read_more": "بیشتر بخوانید",
|
||||
"status.reblog": "بازبوقیدن",
|
||||
"status.reblog_private": "بازبوق به مخاطبان اولیه",
|
||||
"status.reblog_private": "تقویت برای مخاطبان نخستین",
|
||||
"status.reblogged_by": "{name} بازبوقید",
|
||||
"status.reblogs.empty": "هنوز هیچ کسی این بوق را بازنبوقیده است. وقتی کسی چنین کاری کند، اینجا نمایش خواهد یافت.",
|
||||
"status.redraft": "پاککردن و بازنویسی",
|
||||
|
|
@ -398,7 +420,7 @@
|
|||
"status.replyAll": "پاسخ به رشته",
|
||||
"status.report": "گزارش @{name}",
|
||||
"status.sensitive_warning": "محتوای حساس",
|
||||
"status.share": "همرسانی",
|
||||
"status.share": "همرسانی",
|
||||
"status.show_less": "نمایش کمتر",
|
||||
"status.show_less_all": "نمایش کمتر همه",
|
||||
"status.show_more": "نمایش بیشتر",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count}میلیون",
|
||||
"units.short.thousand": "{count}هزار",
|
||||
"upload_area.title": "برای بارگذاری به اینجا بکشید",
|
||||
"upload_button.label": "افزودن رسانه ({formats})",
|
||||
"upload_button.label": "افزودن رسانه",
|
||||
"upload_error.limit": "از حد مجاز باگذاری پرونده فراتر رفتید.",
|
||||
"upload_error.poll": "بارگذاری پرونده در نظرسنجیها مجاز نیست.",
|
||||
"upload_form.audio_description": "برای ناشنوایان توصیفش کنید",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "تشخیص متن درون عکس",
|
||||
"upload_modal.edit_media": "ویرایش رسانه",
|
||||
"upload_modal.hint": "حتی اگر تصویر بریده یا کوچک شود، نقطهٔ کانونی آن همیشه دیده خواهد شد. نقطهٔ کانونی را با کلیک یا جابهجا کردن آن تنظیم کنید.",
|
||||
"upload_modal.preparing_ocr": "در حال آماده سازی OCR…",
|
||||
"upload_modal.preview_label": "پیشنمایش ({ratio})",
|
||||
"upload_progress.label": "در حال بارگذاری…",
|
||||
"video.close": "بستن ویدیو",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Selaile lisää alkuperäisellä palvelimella",
|
||||
"account.cancel_follow_request": "Peruuta seurauspyyntö",
|
||||
"account.direct": "Viesti käyttäjälle @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Verkko-osoite piilotettu",
|
||||
"account.edit_profile": "Muokkaa profiilia",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Suosittele profiilissasi",
|
||||
"account.follow": "Seuraa",
|
||||
"account.followers": "Seuraajaa",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Sinulle ei ole vielä ilmoituksia. Aloita keskustelu juttelemalla muille.",
|
||||
"empty_column.public": "Täällä ei ole mitään! Saat sisältöä, kun kirjoitat jotain julkisesti tai käyt seuraamassa muiden instanssien käyttäjiä",
|
||||
"error.unexpected_crash.explanation": "Sivua ei voi näyttää oikein, johtuen bugista tai ongelmasta selaimen yhteensopivuudessa.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Kokeile päivittää sivu. Jos tämä ei auta, saatat yhä pystyä käyttämään Mastodonia toisen selaimen tai sovelluksen kautta.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Kopioi stacktrace leikepöydälle",
|
||||
"errors.unexpected_crash.report_issue": "Ilmoita ongelmasta",
|
||||
"follow_request.authorize": "Valtuuta",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "siirry pois tekstikentästä tai hakukentästä",
|
||||
"keyboard_shortcuts.up": "siirry listassa ylöspäin",
|
||||
"lightbox.close": "Sulje",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Seuraava",
|
||||
"lightbox.previous": "Edellinen",
|
||||
"lightbox.view_context": "Näytä kontekstissa",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Vaihda otsikko",
|
||||
"lists.new.create": "Lisää lista",
|
||||
"lists.new.title_placeholder": "Uuden listan nimi",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Etsi seuraamistasi henkilöistä",
|
||||
"lists.subheading": "Omat listat",
|
||||
"load_pending": "{count, plural, one {# uusi kappale} other {# uutta kappaletta}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Säädä näkyvyyttä",
|
||||
"missing_indicator.label": "Ei löytynyt",
|
||||
"missing_indicator.sublabel": "Tätä resurssia ei löytynyt",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Piilota tältä käyttäjältä tulevat ilmoitukset?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mobiilisovellukset",
|
||||
"navigation_bar.blocks": "Estetyt käyttäjät",
|
||||
"navigation_bar.bookmarks": "Kirjanmerkit",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Kyselysi on päättynyt",
|
||||
"notification.poll": "Kysely, johon osallistuit, on päättynyt",
|
||||
"notification.reblog": "{name} buustasi tilaasi",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Tyhjennä ilmoitukset",
|
||||
"notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?",
|
||||
"notifications.column_settings.alert": "Työpöytäilmoitukset",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Buustit:",
|
||||
"notifications.column_settings.show": "Näytä sarakkeessa",
|
||||
"notifications.column_settings.sound": "Äänimerkki",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "Kaikki",
|
||||
"notifications.filter.boosts": "Buustit",
|
||||
"notifications.filter.favourites": "Suosikit",
|
||||
"notifications.filter.follows": "Seuraa",
|
||||
"notifications.filter.mentions": "Maininnat",
|
||||
"notifications.filter.polls": "Kyselyn tulokset",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} ilmoitusta",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Suljettu",
|
||||
"poll.refresh": "Päivitä",
|
||||
"poll.total_people": "{count, plural, one {# henkilö} other {# henkilöä}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Tunnista teksti kuvasta",
|
||||
"upload_modal.edit_media": "Muokkaa mediaa",
|
||||
"upload_modal.hint": "Klikkaa tai vedä ympyrä esikatselussa valitaksesi keskipiste, joka näkyy aina pienoiskuvissa.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Esikatselu ({ratio})",
|
||||
"upload_progress.label": "Ladataan...",
|
||||
"video.close": "Sulje video",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Parcourir davantage sur le profil original",
|
||||
"account.cancel_follow_request": "Annuler la demande de suivi",
|
||||
"account.direct": "Envoyer un message direct à @{name}",
|
||||
"account.disable_notifications": "Arrêter de me notifier quand @{name} publie",
|
||||
"account.domain_blocked": "Domaine bloqué",
|
||||
"account.edit_profile": "Modifier le profil",
|
||||
"account.enable_notifications": "Me notifier quand @{name} publie",
|
||||
"account.endorse": "Recommander sur le profil",
|
||||
"account.follow": "Suivre",
|
||||
"account.followers": "Abonné·e·s",
|
||||
|
|
@ -97,7 +99,7 @@
|
|||
"compose_form.publish": "Pouet",
|
||||
"compose_form.publish_loud": "{publish} !",
|
||||
"compose_form.sensitive.hide": "Marquer le média comme sensible",
|
||||
"compose_form.sensitive.marked": "Média marqué comme sensible",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Le média est marqué comme sensible} other {Les médias sont marqués comme sensibles}}",
|
||||
"compose_form.sensitive.unmarked": "Le média n’est pas marqué comme sensible",
|
||||
"compose_form.spoiler.marked": "Le texte est caché derrière un avertissement",
|
||||
"compose_form.spoiler.unmarked": "Le texte n’est pas caché",
|
||||
|
|
@ -153,7 +155,7 @@
|
|||
"empty_column.bookmarked_statuses": "Vous n'avez pas de pouets enregistrés comme marque-pages pour le moment. Lorsque vous en ajouterez un, il apparaîtra ici.",
|
||||
"empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !",
|
||||
"empty_column.direct": "Vous n’avez pas encore de messages directs. Lorsque vous en enverrez ou recevrez un, il s’affichera ici.",
|
||||
"empty_column.domain_blocks": "Il n’y a aucun domaine caché pour le moment.",
|
||||
"empty_column.domain_blocks": "Il n’y a aucun domaine bloqué pour le moment.",
|
||||
"empty_column.favourited_statuses": "Vous n’avez aucun pouet favoris pour le moment. Lorsque vous en mettrez un en favori, il apparaîtra ici.",
|
||||
"empty_column.favourites": "Personne n’a encore mis ce pouet en favori. Lorsque quelqu’un le fera, il apparaîtra ici.",
|
||||
"empty_column.follow_requests": "Vous n’avez pas encore de demande de suivi. Lorsque vous en recevrez une, elle apparaîtra ici.",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Vous n’avez pas encore de notification. Interagissez avec d’autres personnes pour débuter la conversation.",
|
||||
"empty_column.public": "Il n’y a rien ici ! Écrivez quelque chose publiquement, ou bien suivez manuellement des personnes d’autres serveurs pour remplir le fil public",
|
||||
"error.unexpected_crash.explanation": "En raison d’un bug dans notre code ou d’un problème de compatibilité avec votre navigateur, cette page n’a pas pu être affichée correctement.",
|
||||
"error.unexpected_crash.explanation_addons": "Cette page n’a pas pu être affichée correctement. Cette erreur est probablement causée par une extension de navigateur ou des outils de traduction automatique.",
|
||||
"error.unexpected_crash.next_steps": "Essayez de rafraîchir la page. Si cela n’aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.",
|
||||
"error.unexpected_crash.next_steps_addons": "Essayez de les désactiver et de rafraîchir la page. Si cela ne vous aide pas, vous pouvez toujours utiliser Mastodon via un autre navigateur ou une application native.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copier la trace d'appels dans le presse-papier",
|
||||
"errors.unexpected_crash.report_issue": "Signaler le problème",
|
||||
"follow_request.authorize": "Accepter",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "quitter la zone de rédaction/recherche",
|
||||
"keyboard_shortcuts.up": "remonter dans la liste",
|
||||
"lightbox.close": "Fermer",
|
||||
"lightbox.compress": "Compresser la fenêtre de visualisation des images",
|
||||
"lightbox.expand": "Agrandir la fenêtre de visualisation des images",
|
||||
"lightbox.next": "Suivant",
|
||||
"lightbox.previous": "Précédent",
|
||||
"lightbox.view_context": "Voir le contexte",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Modifier le titre",
|
||||
"lists.new.create": "Ajouter une liste",
|
||||
"lists.new.title_placeholder": "Titre de la nouvelle liste",
|
||||
"lists.replies_policy.all_replies": "N’importe quel·le utilisateur·rice suivi·e",
|
||||
"lists.replies_policy.list_replies": "Membres de la liste",
|
||||
"lists.replies_policy.no_replies": "Personne",
|
||||
"lists.replies_policy.title": "Afficher les réponses à :",
|
||||
"lists.search": "Rechercher parmi les gens que vous suivez",
|
||||
"lists.subheading": "Vos listes",
|
||||
"load_pending": "{count, plural, one {# nouvel élément} other {# nouveaux éléments}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Intervertir la visibilité",
|
||||
"missing_indicator.label": "Non trouvé",
|
||||
"missing_indicator.sublabel": "Ressource introuvable",
|
||||
"mute_modal.duration": "Durée",
|
||||
"mute_modal.hide_notifications": "Masquer les notifications de cette personne ?",
|
||||
"mute_modal.indefinite": "Indéfinie",
|
||||
"navigation_bar.apps": "Applications mobiles",
|
||||
"navigation_bar.blocks": "Comptes bloqués",
|
||||
"navigation_bar.bookmarks": "Marque-pages",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Votre sondage est terminé",
|
||||
"notification.poll": "Un sondage auquel vous avez participé vient de se terminer",
|
||||
"notification.reblog": "{name} a partagé votre statut",
|
||||
"notification.status": "{name} vient de publier",
|
||||
"notifications.clear": "Effacer les notifications",
|
||||
"notifications.clear_confirmation": "Voulez-vous vraiment effacer toutes vos notifications ?",
|
||||
"notifications.column_settings.alert": "Notifications du navigateur",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Partages :",
|
||||
"notifications.column_settings.show": "Afficher dans la colonne",
|
||||
"notifications.column_settings.sound": "Émettre un son",
|
||||
"notifications.column_settings.status": "Nouveaux pouets :",
|
||||
"notifications.filter.all": "Tout",
|
||||
"notifications.filter.boosts": "Partages",
|
||||
"notifications.filter.favourites": "Favoris",
|
||||
"notifications.filter.follows": "Abonnés",
|
||||
"notifications.filter.mentions": "Mentions",
|
||||
"notifications.filter.polls": "Résultats des sondages",
|
||||
"notifications.filter.statuses": "Mises à jour des personnes que vous suivez",
|
||||
"notifications.group": "{count} notifications",
|
||||
"notifications.mark_as_read": "Marquer toutes les notifications comme lues",
|
||||
"notifications.permission_denied": "Impossible d’activer les notifications de bureau car l’autorisation a été refusée.",
|
||||
"notifications.permission_denied_alert": "Les notifications de bureau ne peuvent pas être activées, car l’autorisation du navigateur a été refusée avant",
|
||||
"notifications_permission_banner.enable": "Activer les notifications de bureau",
|
||||
"notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.",
|
||||
"notifications_permission_banner.title": "Toujours au courant",
|
||||
"picture_in_picture.restore": "Remettre en place",
|
||||
"poll.closed": "Fermé",
|
||||
"poll.refresh": "Actualiser",
|
||||
"poll.total_people": "{count, plural, one {# personne} other {# personnes}}",
|
||||
|
|
@ -415,7 +437,7 @@
|
|||
"tabs_bar.notifications": "Notifications",
|
||||
"tabs_bar.search": "Chercher",
|
||||
"time_remaining.days": "{number, plural, one {# day} other {# days}} restants",
|
||||
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} restantes",
|
||||
"time_remaining.hours": "{number, plural, one {# heure} other {# heures}} restantes",
|
||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} restantes",
|
||||
"time_remaining.moments": "Encore quelques instants",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} restantes",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Glissez et déposez pour envoyer",
|
||||
"upload_button.label": "Joindre un média ({formats})",
|
||||
"upload_button.label": "Ajouter des images, une vidéo ou un fichier audio",
|
||||
"upload_error.limit": "Taille maximale d'envoi de fichier dépassée.",
|
||||
"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",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Détecter le texte de l’image",
|
||||
"upload_modal.edit_media": "Modifier le média",
|
||||
"upload_modal.hint": "Cliquez ou faites glisser le cercle sur l’aperçu pour choisir le point focal qui sera toujours visible sur toutes les miniatures.",
|
||||
"upload_modal.preparing_ocr": "Préparation de OCR…",
|
||||
"upload_modal.preview_label": "Aperçu ({ratio})",
|
||||
"upload_progress.label": "Envoi en cours…",
|
||||
"video.close": "Fermer la vidéo",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct message @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Edit profile",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Feature on profile",
|
||||
"account.follow": "Follow",
|
||||
"account.followers": "Followers",
|
||||
|
|
@ -96,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Mark media as sensitive",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Write your warning here",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
|
||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
|
||||
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
||||
"errors.unexpected_crash.report_issue": "Report issue",
|
||||
"follow_request.authorize": "Authorize",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Close",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lightbox.view_context": "View context",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Change title",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Hide media",
|
||||
"missing_indicator.label": "Not found",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mobile apps",
|
||||
"navigation_bar.blocks": "Blocked users",
|
||||
"navigation_bar.bookmarks": "Bookmarks",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.reblog": "{name} boosted your status",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Clear notifications",
|
||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||
"notifications.column_settings.alert": "Desktop notifications",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Boosts:",
|
||||
"notifications.column_settings.show": "Show in column",
|
||||
"notifications.column_settings.sound": "Play sound",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "All",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favourites",
|
||||
"notifications.filter.follows": "Follows",
|
||||
"notifications.filter.mentions": "Mentions",
|
||||
"notifications.filter.polls": "Poll results",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} notifications",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Closed",
|
||||
"poll.refresh": "Refresh",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# people}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Detect text from picture",
|
||||
"upload_modal.edit_media": "Edit media",
|
||||
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Preview ({ratio})",
|
||||
"upload_progress.label": "Uploading...",
|
||||
"video.close": "Close video",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"account.account_note_header": "A túa nota para @{name}",
|
||||
"account.account_note_header": "Nota",
|
||||
"account.add_or_remove_from_list": "Engadir ou eliminar das listaxes",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Grupo",
|
||||
|
|
@ -9,14 +9,16 @@
|
|||
"account.browse_more_on_origin_server": "Busca máis no perfil orixinal",
|
||||
"account.cancel_follow_request": "Desbotar solicitude de seguimento",
|
||||
"account.direct": "Mensaxe directa @{name}",
|
||||
"account.disable_notifications": "Deixar de notificarme cando @{name} publica",
|
||||
"account.domain_blocked": "Dominio agochado",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.enable_notifications": "Noficarme cando @{name} publique",
|
||||
"account.endorse": "Amosar no perfil",
|
||||
"account.follow": "Seguir",
|
||||
"account.followers": "Seguidoras",
|
||||
"account.followers.empty": "Aínda ninguén segue esta usuaria.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Seguidora} other {{counter} Seguidoras}}",
|
||||
"account.following_counter": "{count, plural, other {{counter} Seguindo}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Seguindo} other {{counter} Seguindo}}",
|
||||
"account.follows.empty": "Esta usuaria aínda non segue a ninguén.",
|
||||
"account.follows_you": "Séguete",
|
||||
"account.hide_reblogs": "Agochar repeticións de @{name}",
|
||||
|
|
@ -43,10 +45,10 @@
|
|||
"account.unfollow": "Deixar de seguir",
|
||||
"account.unmute": "Deixar de silenciar a @{name}",
|
||||
"account.unmute_notifications": "Deixar de silenciar as notificacións de @{name}",
|
||||
"account_note.placeholder": "Sen comentarios",
|
||||
"account_note.placeholder": "Preme para engadir nota",
|
||||
"alert.rate_limited.message": "Téntao novamente após {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Límite de intentos",
|
||||
"alert.unexpected.message": "Ocorreu un erro non agardado.",
|
||||
"alert.unexpected.message": "Aconteceu un fallo non agardado.",
|
||||
"alert.unexpected.title": "Vaites!",
|
||||
"announcement.announcement": "Anuncio",
|
||||
"autosuggest_hashtag.per_week": "{count} por semana",
|
||||
|
|
@ -71,7 +73,7 @@
|
|||
"column.notifications": "Notificacións",
|
||||
"column.pins": "Toots fixados",
|
||||
"column.public": "Cronoloxía federada",
|
||||
"column_back_button.label": "Voltar",
|
||||
"column_back_button.label": "Volver",
|
||||
"column_header.hide_settings": "Agochar axustes",
|
||||
"column_header.moveLeft_settings": "Mover columna cara a esquerda",
|
||||
"column_header.moveRight_settings": "Mover columna cara a dereita",
|
||||
|
|
@ -96,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Mudar a enquisa para permitir unha soa escolla",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Marcar coma contido multimedia sensíbel",
|
||||
"compose_form.sensitive.marked": "Contido multimedia marcado coma sensíbel",
|
||||
"compose_form.sensitive.unmarked": "Contido multimedia non marcado coma sensíbel",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Marca multimedia como sensible} other {Marca multimedia como sensibles}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Multimedia marcado como sensible} other {Multimedia marcados como sensibles}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
|
||||
"compose_form.spoiler.marked": "O texto está agochado tras un aviso",
|
||||
"compose_form.spoiler.unmarked": "O texto non está agochado",
|
||||
"compose_form.spoiler_placeholder": "Escribe o teu aviso aquí",
|
||||
|
|
@ -107,7 +109,7 @@
|
|||
"confirmations.block.confirm": "Bloquear",
|
||||
"confirmations.block.message": "Tes a certeza de querer bloquear a {name}?",
|
||||
"confirmations.delete.confirm": "Eliminar",
|
||||
"confirmations.delete.message": "Tes a certeza de querer eliminar este estado?",
|
||||
"confirmations.delete.message": "Tes a certeza de querer eliminar este toot?",
|
||||
"confirmations.delete_list.confirm": "Eliminar",
|
||||
"confirmations.delete_list.message": "Tes a certeza de querer eliminar de xeito permanente esta listaxe?",
|
||||
"confirmations.domain_block.confirm": "Agochar dominio enteiro",
|
||||
|
|
@ -118,7 +120,7 @@
|
|||
"confirmations.mute.explanation": "Isto agochará as publicacións delas ou nas que as mencionen, mais permitirá que vexan as túas publicacións e sexan seguidoras túas.",
|
||||
"confirmations.mute.message": "Tes a certeza de querer acalar a {name}?",
|
||||
"confirmations.redraft.confirm": "Eliminar e reescribir",
|
||||
"confirmations.redraft.message": "Tes a certeza de querer eliminar este estado e reescribilo? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.",
|
||||
"confirmations.redraft.message": "Tes a certeza de querer eliminar este toot e reescribilo? Perderás os compartidos e favoritos, e as respostas á publicación orixinal ficarán orfas.",
|
||||
"confirmations.reply.confirm": "Responder",
|
||||
"confirmations.reply.message": "Responder agora sobrescribirá a mensaxe que estás a compor. Tes a certeza de que queres continuar?",
|
||||
"confirmations.unfollow.confirm": "Deixar de seguir",
|
||||
|
|
@ -131,7 +133,7 @@
|
|||
"directory.local": "Só de {domain}",
|
||||
"directory.new_arrivals": "Recén chegadas",
|
||||
"directory.recently_active": "Activas recentemente",
|
||||
"embed.instructions": "Engade este estado ó teu sitio web copiando o seguinte código.",
|
||||
"embed.instructions": "Engade este toot ó teu sitio web copiando o seguinte código.",
|
||||
"embed.preview": "Así será mostrado:",
|
||||
"emoji_button.activity": "Actividade",
|
||||
"emoji_button.custom": "Personalizado",
|
||||
|
|
@ -160,13 +162,15 @@
|
|||
"empty_column.hashtag": "Aínda non hai nada con este cancelo.",
|
||||
"empty_column.home": "A túa cronoloxía inicial está baleira! Visita {public} ou emprega a procura para atopar outras usuarias.",
|
||||
"empty_column.home.public_timeline": "a cronoloxía pública",
|
||||
"empty_column.list": "Aínda non hai nada nesta listaxe. Cando os usuarios incluídas na listaxe publiquen mensaxes, amosaranse aquí.",
|
||||
"empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.",
|
||||
"empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.",
|
||||
"empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.",
|
||||
"empty_column.notifications": "Aínda non tes notificacións. Interactúa con outras para comezar unha conversa.",
|
||||
"empty_column.public": "Nada por aquí! Escribe algo de xeito público, ou segue de xeito manual usuarias doutros servidores para ir enchéndoo",
|
||||
"error.unexpected_crash.explanation": "Debido a un erro no noso código ou a unha compatilidade co teu navegador, esta páxina non pode ser amosada correctamente.",
|
||||
"error.unexpected_crash.explanation_addons": "Non se puido mostrar correctamente a páxina. Habitualmente este erro está causado por algún engadido do navegador ou ferramentas de tradución automática.",
|
||||
"error.unexpected_crash.next_steps": "Tenta actualizar a páxina. Se esto non axuda podes tamén empregar Mastodon noutro navegador ou aplicación nativa.",
|
||||
"error.unexpected_crash.next_steps_addons": "Intenta desactivalas e actualiza a páxina. Se isto non funciona, podes seguir usando Mastodon nun navegador diferente ou aplicación nativa.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copiar trazas (stacktrace) ó portapapeis",
|
||||
"errors.unexpected_crash.report_issue": "Informar sobre un problema",
|
||||
"follow_request.authorize": "Autorizar",
|
||||
|
|
@ -215,15 +219,15 @@
|
|||
"introduction.welcome.action": "Imos!",
|
||||
"introduction.welcome.headline": "Primeiros pasos",
|
||||
"introduction.welcome.text": "Benvida ó fediverso! Nun intre poderás difundir mensaxes e falar coas túas amizades nun grande número de servidores. Mais este servidor, {domain}, é especial—hospeda o teu perfil, por iso lémbra o seu nome.",
|
||||
"keyboard_shortcuts.back": "para voltar atrás",
|
||||
"keyboard_shortcuts.back": "para volver atrás",
|
||||
"keyboard_shortcuts.blocked": "abrir lista de usuarias bloqueadas",
|
||||
"keyboard_shortcuts.boost": "promover",
|
||||
"keyboard_shortcuts.column": "para destacar un estado nunha das columnas",
|
||||
"keyboard_shortcuts.column": "para destacar un toot nunha das columnas",
|
||||
"keyboard_shortcuts.compose": "para destacar a área de escritura",
|
||||
"keyboard_shortcuts.description": "Descrición",
|
||||
"keyboard_shortcuts.direct": "para abrir a columna de mensaxes directas",
|
||||
"keyboard_shortcuts.down": "para mover cara abaixo na listaxe",
|
||||
"keyboard_shortcuts.enter": "para abrir estado",
|
||||
"keyboard_shortcuts.enter": "para abrir toot",
|
||||
"keyboard_shortcuts.favourite": "para engadir a favoritos",
|
||||
"keyboard_shortcuts.favourites": "para abrir a listaxe dos favoritos",
|
||||
"keyboard_shortcuts.federated": "para abrir a cronoloxía federada",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "para deixar de destacar a área de escritura/procura",
|
||||
"keyboard_shortcuts.up": "para mover cara arriba na listaxe",
|
||||
"lightbox.close": "Fechar",
|
||||
"lightbox.compress": "Comprimir a caixa de vista da imaxe",
|
||||
"lightbox.expand": "Expandir a caixa de vista da imaxe",
|
||||
"lightbox.next": "Seguinte",
|
||||
"lightbox.previous": "Anterior",
|
||||
"lightbox.view_context": "Ollar contexto",
|
||||
|
|
@ -260,14 +266,20 @@
|
|||
"lists.edit.submit": "Mudar o título",
|
||||
"lists.new.create": "Engadir listaxe",
|
||||
"lists.new.title_placeholder": "Título da nova listaxe",
|
||||
"lists.replies_policy.all_replies": "Calquera usuaria á que segues",
|
||||
"lists.replies_policy.list_replies": "Membros da lista",
|
||||
"lists.replies_policy.no_replies": "Ninguén",
|
||||
"lists.replies_policy.title": "Mostrar respostas a:",
|
||||
"lists.search": "Procurar entre as persoas que segues",
|
||||
"lists.subheading": "As túas listaxes",
|
||||
"load_pending": "{count, plural, one {# novo elemento} other {# novos elementos}}",
|
||||
"loading_indicator.label": "Estase a cargar...",
|
||||
"media_gallery.toggle_visible": "Trocar visibilidade",
|
||||
"media_gallery.toggle_visible": "Agochar {number, plural, one {imaxe} other {imaxes}}",
|
||||
"missing_indicator.label": "Non atopado",
|
||||
"missing_indicator.sublabel": "Este recurso non foi atopado",
|
||||
"mute_modal.duration": "Duración",
|
||||
"mute_modal.hide_notifications": "Agochar notificacións desta usuaria?",
|
||||
"mute_modal.indefinite": "Indefinida",
|
||||
"navigation_bar.apps": "Aplicacións móbiles",
|
||||
"navigation_bar.blocks": "Usuarias bloqueadas",
|
||||
"navigation_bar.bookmarks": "Marcadores",
|
||||
|
|
@ -291,13 +303,14 @@
|
|||
"navigation_bar.preferences": "Preferencias",
|
||||
"navigation_bar.public_timeline": "Cronoloxía federada",
|
||||
"navigation_bar.security": "Seguranza",
|
||||
"notification.favourite": "{name} marcou o teu estado coma favorito",
|
||||
"notification.favourite": "{name} marcou o teu toot coma favorito",
|
||||
"notification.follow": "{name} comezou a seguirte",
|
||||
"notification.follow_request": "{name} solicitou seguirte",
|
||||
"notification.mention": "{name} mencionoute",
|
||||
"notification.own_poll": "A túa enquisa rematou",
|
||||
"notification.poll": "Unha enquisa na que votaches rematou",
|
||||
"notification.reblog": "{name} compartiu o teu estado",
|
||||
"notification.reblog": "{name} compartiu o teu toot",
|
||||
"notification.status": "{name} publicou",
|
||||
"notifications.clear": "Limpar notificacións",
|
||||
"notifications.clear_confirmation": "Tes a certeza de querer limpar de xeito permanente todas as túas notificacións?",
|
||||
"notifications.column_settings.alert": "Notificacións de escritorio",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Promocións:",
|
||||
"notifications.column_settings.show": "Amosar en columna",
|
||||
"notifications.column_settings.sound": "Reproducir son",
|
||||
"notifications.column_settings.status": "Novos toots:",
|
||||
"notifications.filter.all": "Todo",
|
||||
"notifications.filter.boosts": "Compartidos",
|
||||
"notifications.filter.favourites": "Favoritos",
|
||||
"notifications.filter.follows": "Seguimentos",
|
||||
"notifications.filter.mentions": "Mencións",
|
||||
"notifications.filter.polls": "Resultados da enquisa",
|
||||
"notifications.filter.statuses": "Actualizacións de xente á que segues",
|
||||
"notifications.group": "{count} notificacións",
|
||||
"notifications.mark_as_read": "Marcar todas as notificacións como lidas",
|
||||
"notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso",
|
||||
"notifications.permission_denied_alert": "Non se poden activar as notificacións de escritorio, xa que o permiso para o navegador foi denegado previamente",
|
||||
"notifications_permission_banner.enable": "Activar notificacións de escritorio",
|
||||
"notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.",
|
||||
"notifications_permission_banner.title": "Non perder nada",
|
||||
"picture_in_picture.restore": "Devolver",
|
||||
"poll.closed": "Pechado",
|
||||
"poll.refresh": "Actualizar",
|
||||
"poll.total_people": "{count, plural,one {# persoa} other {# persoas}}",
|
||||
|
|
@ -355,9 +377,9 @@
|
|||
"report.target": "Denunciar a {target}",
|
||||
"search.placeholder": "Procurar",
|
||||
"search_popout.search_format": "Formato de procura avanzada",
|
||||
"search_popout.tips.full_text": "Texto simple devolve estados que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.",
|
||||
"search_popout.tips.full_text": "Texto simple devolve toots que ti escribiches, promoviches, marcaches favoritos, ou foches mencionada, así como nomes de usuaria coincidentes, nomes públicos e cancelos.",
|
||||
"search_popout.tips.hashtag": "cancelo",
|
||||
"search_popout.tips.status": "estado",
|
||||
"search_popout.tips.status": "toot",
|
||||
"search_popout.tips.text": "Texto simple devolve coincidencias con nomes públicos, nomes de usuaria e cancelos",
|
||||
"search_popout.tips.user": "usuaria",
|
||||
"search_results.accounts": "Persoas",
|
||||
|
|
@ -366,12 +388,12 @@
|
|||
"search_results.statuses_fts_disabled": "Procurar toots polo seu contido non está activado neste servidor do Mastodon.",
|
||||
"search_results.total": "{count, number} {count, plural, one {resultado} other {resultados}}",
|
||||
"status.admin_account": "Abrir interface de moderación para @{name}",
|
||||
"status.admin_status": "Abrir este estado na interface de moderación",
|
||||
"status.admin_status": "Abrir este toot na interface de moderación",
|
||||
"status.block": "Bloquear a @{name}",
|
||||
"status.bookmark": "Marcar",
|
||||
"status.cancel_reblog_private": "Desfacer compartido",
|
||||
"status.cannot_reblog": "Esta publicación non pode ser promovida",
|
||||
"status.copy": "Copiar ligazón ó estado",
|
||||
"status.copy": "Copiar ligazón ó toot",
|
||||
"status.delete": "Eliminar",
|
||||
"status.detailed_status": "Vista detallada da conversa",
|
||||
"status.direct": "Mensaxe directa a @{name}",
|
||||
|
|
@ -384,12 +406,12 @@
|
|||
"status.more": "Máis",
|
||||
"status.mute": "Silenciar @{name}",
|
||||
"status.mute_conversation": "Silenciar conversa",
|
||||
"status.open": "Expandir este estado",
|
||||
"status.open": "Expandir este toot",
|
||||
"status.pin": "Fixar no perfil",
|
||||
"status.pinned": "Toot fixado",
|
||||
"status.read_more": "Ler máis",
|
||||
"status.reblog": "Promover",
|
||||
"status.reblog_private": "Compartir á audiencia orixinal",
|
||||
"status.reblog_private": "Compartir coa audiencia orixinal",
|
||||
"status.reblogged_by": "{name} promoveu",
|
||||
"status.reblogs.empty": "Aínda ninguén promoveu este toot. Cando alguén o faga, amosarase aquí.",
|
||||
"status.redraft": "Eliminar e reescribir",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Arrastra e solta para subir",
|
||||
"upload_button.label": "Engadir multimedia ({formats})",
|
||||
"upload_button.label": "Engadir imaxes, un vídeo ou ficheiro de audio",
|
||||
"upload_error.limit": "Límite máximo do ficheiro a subir excedido.",
|
||||
"upload_error.poll": "Non se poden subir ficheiros nas enquisas.",
|
||||
"upload_form.audio_description": "Describir para persoas con problemas auditivos",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Detectar texto na imaxe",
|
||||
"upload_modal.edit_media": "Editar multimedia",
|
||||
"upload_modal.hint": "Preme ou arrastra o círculo na vista previa para escoller o punto focal que sempre estará á vista en todas as miniaturas.",
|
||||
"upload_modal.preparing_ocr": "Preparando OCR…",
|
||||
"upload_modal.preview_label": "Vista previa ({ratio})",
|
||||
"upload_progress.label": "Estase a subir...",
|
||||
"video.close": "Pechar vídeo",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "המשך לגלוש בפרופיל המקורי",
|
||||
"account.cancel_follow_request": "בטל בקשת מעקב",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "הדומיין חסוי",
|
||||
"account.edit_profile": "עריכת פרופיל",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "הצג בפרופיל",
|
||||
"account.follow": "מעקב",
|
||||
"account.followers": "עוקבים",
|
||||
|
|
@ -96,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.publish": "ללחוש",
|
||||
"compose_form.publish_loud": "לחצרץ!",
|
||||
"compose_form.sensitive.hide": "Mark media as sensitive",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "אזהרת תוכן",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב.",
|
||||
"empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות",
|
||||
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
||||
"errors.unexpected_crash.report_issue": "Report issue",
|
||||
"follow_request.authorize": "קבלה",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "לצאת מתיבת חיבור/חיפוש",
|
||||
"keyboard_shortcuts.up": "לנוע במעלה הרשימה",
|
||||
"lightbox.close": "סגירה",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "הלאה",
|
||||
"lightbox.previous": "הקודם",
|
||||
"lightbox.view_context": "View context",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Change title",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "נראה\\בלתי נראה",
|
||||
"missing_indicator.label": "לא נמצא",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "להסתיר הודעות מחשבון זה?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mobile apps",
|
||||
"navigation_bar.blocks": "חסימות",
|
||||
"navigation_bar.bookmarks": "Bookmarks",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.reblog": "חצרוצך הודהד על ידי {name}",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "הסרת התראות",
|
||||
"notifications.clear_confirmation": "להסיר את כל ההתראות? בטוח?",
|
||||
"notifications.column_settings.alert": "התראות לשולחן העבודה",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "הדהודים:",
|
||||
"notifications.column_settings.show": "הצגה בטור",
|
||||
"notifications.column_settings.sound": "שמע מופעל",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "All",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favourites",
|
||||
"notifications.filter.follows": "Follows",
|
||||
"notifications.filter.mentions": "Mentions",
|
||||
"notifications.filter.polls": "Poll results",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} notifications",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Closed",
|
||||
"poll.refresh": "Refresh",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# people}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Detect text from picture",
|
||||
"upload_modal.edit_media": "Edit media",
|
||||
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Preview ({ratio})",
|
||||
"upload_progress.label": "עולה...",
|
||||
"video.close": "סגירת וידאו",
|
||||
|
|
|
|||
|
|
@ -1,22 +1,24 @@
|
|||
{
|
||||
"account.account_note_header": "Note",
|
||||
"account.account_note_header": "टिप्पणियाँ",
|
||||
"account.add_or_remove_from_list": "सूची में जोड़ें या हटाए",
|
||||
"account.badges.bot": "बॉट",
|
||||
"account.badges.group": "Group",
|
||||
"account.badges.group": "समूह",
|
||||
"account.block": "@{name} को ब्लॉक करें",
|
||||
"account.block_domain": "{domain} के सारी चीज़े छुपाएं",
|
||||
"account.blocked": "ब्लॉक",
|
||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.browse_more_on_origin_server": "मूल प्रोफ़ाइल पर अधिक ब्राउज़ करें",
|
||||
"account.cancel_follow_request": "फ़ॉलो रिक्वेस्ट रद्द करें",
|
||||
"account.direct": "प्रत्यक्ष संदेश @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "छिपा हुआ डोमेन",
|
||||
"account.edit_profile": "प्रोफ़ाइल संपादित करें",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "प्रोफ़ाइल पर दिखाए",
|
||||
"account.follow": "फॉलो करें",
|
||||
"account.followers": "फॉलोवर",
|
||||
"account.followers.empty": "कोई भी इस यूज़र् को फ़ॉलो नहीं करता है",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
|
||||
"account.followers_counter": "{count, plural, one {{counter} अनुगामी} other {{counter} समर्थक}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} निम्नलिखित} other {{counter} निम्नलिखित}}",
|
||||
"account.follows.empty": "यह यूज़र् अभी तक किसी को फॉलो नहीं करता है।",
|
||||
"account.follows_you": "आपको फॉलो करता है",
|
||||
"account.hide_reblogs": "@{name} के बूस्ट छुपाएं",
|
||||
|
|
@ -36,19 +38,19 @@
|
|||
"account.requested": "मंजूरी का इंतजार। फॉलो रिक्वेस्ट को रद्द करने के लिए क्लिक करें",
|
||||
"account.share": "@{name} की प्रोफाइल शेयर करे",
|
||||
"account.show_reblogs": "@{name} के बूस्ट दिखाए",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} भोंपू} other {{counter} भोंपू}}",
|
||||
"account.unblock": "@{name} को अनब्लॉक करें",
|
||||
"account.unblock_domain": "{domain} दिखाए",
|
||||
"account.unendorse": "प्रोफ़ाइल पर न दिखाए",
|
||||
"account.unfollow": "अनफॉलो करें",
|
||||
"account.unmute": "अनम्यूट @{name}",
|
||||
"account.unmute_notifications": "@{name} के नोटिफिकेशन अनम्यूट करे",
|
||||
"account_note.placeholder": "Click to add a note",
|
||||
"account_note.placeholder": "नोट्स जोड़ने के लिए क्लिक करें",
|
||||
"alert.rate_limited.message": "कृप्या {retry_time, time, medium} के बाद दुबारा कोशिश करें",
|
||||
"alert.rate_limited.title": "सीमित दर",
|
||||
"alert.unexpected.message": "एक अप्रत्याशित त्रुटि हुई है!",
|
||||
"alert.unexpected.title": "उफ़!",
|
||||
"announcement.announcement": "Announcement",
|
||||
"announcement.announcement": "घोषणा",
|
||||
"autosuggest_hashtag.per_week": "{count} हर सप्ताह",
|
||||
"boost_modal.combo": "अगली बार स्किप करने के लिए आप {combo} दबा सकते है",
|
||||
"bundle_column_error.body": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया",
|
||||
|
|
@ -58,7 +60,7 @@
|
|||
"bundle_modal_error.message": "इस कॉम्पोनेन्ट को लोड करते वक्त कुछ गलत हो गया",
|
||||
"bundle_modal_error.retry": "दुबारा कोशिश करें",
|
||||
"column.blocks": "ब्लॉक्ड यूज़र्स",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.bookmarks": "पुस्तकचिह्न:",
|
||||
"column.community": "लोकल टाइम्लाइन",
|
||||
"column.direct": "सीधा संदेश",
|
||||
"column.directory": "प्रोफाइल्स खोजें",
|
||||
|
|
@ -79,9 +81,9 @@
|
|||
"column_header.show_settings": "सेटिंग्स दिखाएँ",
|
||||
"column_header.unpin": "अनपिन",
|
||||
"column_subheading.settings": "सेटिंग्स",
|
||||
"community.column_settings.local_only": "Local only",
|
||||
"community.column_settings.local_only": "स्थानीय ही",
|
||||
"community.column_settings.media_only": "सिर्फ़ मीडिया",
|
||||
"community.column_settings.remote_only": "Remote only",
|
||||
"community.column_settings.remote_only": "केवल सुदूर",
|
||||
"compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.",
|
||||
"compose_form.direct_message_warning_learn_more": "और जानें",
|
||||
"compose_form.hashtag_warning": "यह टूट् किसी भी हैशटैग के तहत सूचीबद्ध नहीं होगा क्योंकि यह अनलिस्टेड है। हैशटैग द्वारा केवल सार्वजनिक टूट्स खोजे जा सकते हैं।",
|
||||
|
|
@ -92,8 +94,8 @@
|
|||
"compose_form.poll.duration": "चुनाव की अवधि",
|
||||
"compose_form.poll.option_placeholder": "कुल विकल्प {number}",
|
||||
"compose_form.poll.remove_option": "इस विकल्प को हटाएँ",
|
||||
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
|
||||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.poll.switch_to_multiple": "कई विकल्पों की अनुमति देने के लिए पोल बदलें",
|
||||
"compose_form.poll.switch_to_single": "एक ही विकल्प के लिए अनुमति देने के लिए पोल बदलें",
|
||||
"compose_form.publish": "टूट्",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "मीडिया को संवेदनशील के रूप में चिह्नित करें",
|
||||
|
|
@ -150,7 +152,7 @@
|
|||
"empty_column.account_timeline": "सन्नाटा! यहां कोई टूट्स नहीं!",
|
||||
"empty_column.account_unavailable": "प्रोफाइल उपलब्ध नहीं",
|
||||
"empty_column.blocks": "आप अभी तक किसी भी यूजर के द्वारा ब्लॉक्ड नहीं हो।",
|
||||
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
|
||||
"empty_column.bookmarked_statuses": "आपके पास अभी तक कोई बुकमार्क नहीं है। जब आप एक बुकमार्क करते हैं, तो यह यहां दिखाई देगा।",
|
||||
"empty_column.community": "लोकल टाइम्लाइन खाली है, कुछ देखने के लिये सार्वजनिक रूप से कुछ लिखें!",
|
||||
"empty_column.direct": "आपके पास कोई सीधा सन्देश नहीं है, जब आप कोई भेजेंगे प्राप्त करेंगे तो यहाँ दिखेगा।",
|
||||
"empty_column.domain_blocks": "अभी तक कोई छुपा हुआ डोमेन नहीं है।",
|
||||
|
|
@ -161,17 +163,19 @@
|
|||
"empty_column.home": "आपकी मुख्य कालक्रम अभी खली है. अन्य उपयोगकर्ताओं से मिलने के लिए और अपनी गतिविधियां शुरू करने के लिए या तो {public} पर जाएं या खोज का उपयोग करें।",
|
||||
"empty_column.home.public_timeline": "सार्वजनिक कालक्रम",
|
||||
"empty_column.list": "यह सूची अभी खाली है. जब इसके सदस्य कोई अभिव्यक्ति देंगे, तो वो यहां दिखाई देंगी.",
|
||||
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
|
||||
"empty_column.mutes": "You haven't muted any users yet.",
|
||||
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.",
|
||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
|
||||
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
||||
"empty_column.lists": "आपके पास अभी तक कोई सूची नहीं है। जब आप एक बनाते हैं, तो यह यहां दिखाई देगा।",
|
||||
"empty_column.mutes": "आपने अभी तक किसी भी उपयोगकर्ता को म्यूट नहीं किया है।",
|
||||
"empty_column.notifications": "आपके पास अभी तक कोई सूचना नहीं है। बातचीत शुरू करने के लिए दूसरों के साथ बातचीत करें।",
|
||||
"empty_column.public": "यहां कुछ नहीं है! सार्वजनिक रूप से कुछ लिखें, या इसे भरने के लिए अन्य सर्वर से उपयोगकर्ताओं का मैन्युअल रूप से अनुसरण करें",
|
||||
"error.unexpected_crash.explanation": "हमारे कोड या ब्राउज़र संगतता समस्या में बग के कारण, यह पृष्ठ सही ढंग से प्रदर्शित नहीं हो सका।",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "स्टैकट्रेस को क्लिपबोर्ड पर कॉपी करें",
|
||||
"errors.unexpected_crash.report_issue": "समस्या सूचित करें",
|
||||
"follow_request.authorize": "अधिकार दें",
|
||||
"follow_request.reject": "अस्वीकार करें",
|
||||
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
|
||||
"follow_requests.unlocked_explanation": "हालाँकि आपका खाता लॉक नहीं है, फिर भी {domain} डोमेन स्टाफ ने सोचा कि आप इन खातों के मैन्युअल अनुरोधों की समीक्षा करना चाहते हैं।",
|
||||
"generic.saved": "Saved",
|
||||
"getting_started.developers": "डेवॅलपर्स",
|
||||
"getting_started.directory": "प्रोफ़ाइल निर्देशिका",
|
||||
|
|
@ -193,31 +197,31 @@
|
|||
"home.column_settings.basic": "बुनियादी",
|
||||
"home.column_settings.show_reblogs": "बूस्ट दिखाए",
|
||||
"home.column_settings.show_replies": "जवाबों को दिखाए",
|
||||
"home.hide_announcements": "Hide announcements",
|
||||
"home.show_announcements": "Show announcements",
|
||||
"home.hide_announcements": "घोषणाएँ छिपाएँ",
|
||||
"home.show_announcements": "घोषणाएं दिखाएं",
|
||||
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
|
||||
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
|
||||
"introduction.federation.action": "अगला",
|
||||
"introduction.federation.federated.headline": "फ़ेडरेटेड",
|
||||
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
|
||||
"introduction.federation.federated.text": "महासंघ के अन्य सर्वरों से सार्वजनिक पद संघटित समय-सीमा में दिखाई देंगे।",
|
||||
"introduction.federation.home.headline": "होम",
|
||||
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
|
||||
"introduction.federation.home.text": "आपके द्वारा अनुसरण किए जाने वाले लोगों के पोस्ट आपके होम फीड में दिखाई देंगे। आप किसी भी सर्वर पर किसी को भी फॉलो कर सकते हैं!",
|
||||
"introduction.federation.local.headline": "लोकल",
|
||||
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
|
||||
"introduction.interactions.action": "Finish toot-orial!",
|
||||
"introduction.interactions.favourite.headline": "पसंदीदा",
|
||||
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
|
||||
"introduction.interactions.favourite.text": "आप बाद में इसके लिए एक टोट को बचा सकते हैं, और लेखक को यह बता दें कि आपको यह पसंद आया, इसे फेवर करके।",
|
||||
"introduction.interactions.reblog.headline": "बूस्ट",
|
||||
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
|
||||
"introduction.interactions.reply.headline": "जवाब",
|
||||
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
|
||||
"introduction.welcome.action": "आइए शुरू करते हैं!",
|
||||
"introduction.welcome.headline": "पहले कदम",
|
||||
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.blocked": "to open blocked users list",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"introduction.welcome.text": "फेडवर्स में आपका स्वागत है! कुछ ही क्षणों में, आप संदेशों को प्रसारित करने और अपने दोस्तों से विस्तृत सर्वर पर बात करने में सक्षम होंगे। लेकिन यह सर्वर, {domain}, विशेष है - यह आपकी प्रोफ़ाइल को होस्ट करता है, इसलिए इसका नाम याद रखें।",
|
||||
"keyboard_shortcuts.back": "वापस जाने के लिए",
|
||||
"keyboard_shortcuts.blocked": "अवरुद्ध उपयोगकर्ताओं की सूची खोलने के लिए",
|
||||
"keyboard_shortcuts.boost": "बढ़ावा देने के लिए",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"keyboard_shortcuts.compose": "कंपोज़ टेक्स्ट-एरिया पर ध्यान केंद्रित करने के लिए",
|
||||
"keyboard_shortcuts.description": "विवरण",
|
||||
|
|
@ -249,42 +253,50 @@
|
|||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Close",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lightbox.close": "बंद करें",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "अगला",
|
||||
"lightbox.previous": "पिछला",
|
||||
"lightbox.view_context": "View context",
|
||||
"lists.account.add": "Add to list",
|
||||
"lists.account.remove": "Remove from list",
|
||||
"lists.delete": "Delete list",
|
||||
"lists.edit": "Edit list",
|
||||
"lists.account.remove": "सूची से निकालें",
|
||||
"lists.delete": "सूची हटाएँ",
|
||||
"lists.edit": "सूची संपादित करें",
|
||||
"lists.edit.submit": "Change title",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.new.create": "सूची जोड़ें",
|
||||
"lists.new.title_placeholder": "नये सूची का शीर्षक",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"lists.subheading": "आपकी सूचियाँ",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
"loading_indicator.label": "लोड हो रहा है...",
|
||||
"media_gallery.toggle_visible": "Hide {number, plural, one {image} other {images}}",
|
||||
"missing_indicator.label": "नहीं मिला",
|
||||
"missing_indicator.sublabel": "यह संसाधन नहीं मिल सका।",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "मोबाइल एप्लिकेशंस",
|
||||
"navigation_bar.blocks": "ब्लॉक्ड यूज़र्स",
|
||||
"navigation_bar.bookmarks": "Bookmarks",
|
||||
"navigation_bar.bookmarks": "पुस्तकचिह्न:",
|
||||
"navigation_bar.community_timeline": "लोकल टाइम्लाइन",
|
||||
"navigation_bar.compose": "नया टूट् लिखें",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.discover": "Discover",
|
||||
"navigation_bar.direct": "सीधा संदेश",
|
||||
"navigation_bar.discover": "खोजें",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.edit_profile": "Edit profile",
|
||||
"navigation_bar.edit_profile": "प्रोफ़ाइल संपादित करें",
|
||||
"navigation_bar.favourites": "Favourites",
|
||||
"navigation_bar.filters": "Muted words",
|
||||
"navigation_bar.follow_requests": "Follow requests",
|
||||
"navigation_bar.follow_requests": "अनुसरण करने के अनुरोध",
|
||||
"navigation_bar.follows_and_followers": "Follows and followers",
|
||||
"navigation_bar.info": "About this server",
|
||||
"navigation_bar.info": "इस सर्वर के बारे में",
|
||||
"navigation_bar.keyboard_shortcuts": "Hotkeys",
|
||||
"navigation_bar.lists": "Lists",
|
||||
"navigation_bar.logout": "Logout",
|
||||
"navigation_bar.lists": "सूचियाँ",
|
||||
"navigation_bar.logout": "बाहर जाए",
|
||||
"navigation_bar.mutes": "Muted users",
|
||||
"navigation_bar.personal": "Personal",
|
||||
"navigation_bar.pins": "Pinned toots",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.reblog": "{name} boosted your status",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Clear notifications",
|
||||
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?",
|
||||
"notifications.column_settings.alert": "Desktop notifications",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "बूस्ट:",
|
||||
"notifications.column_settings.show": "कॉलम में दिखाएँ",
|
||||
"notifications.column_settings.sound": "ध्वनि चलाएँ",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "सभी",
|
||||
"notifications.filter.boosts": "बूस्ट",
|
||||
"notifications.filter.favourites": "पसंदीदा",
|
||||
"notifications.filter.follows": "फॉलो",
|
||||
"notifications.filter.mentions": "उल्लेख",
|
||||
"notifications.filter.polls": "चुनाव परिणाम",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} सूचनाएँ",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "बंद कर दिया",
|
||||
"poll.refresh": "रीफ्रेश करें",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# people}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Detect text from picture",
|
||||
"upload_modal.edit_media": "मीडिया में संशोधन करें",
|
||||
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Preview ({ratio})",
|
||||
"upload_progress.label": "अपलोडिंग...",
|
||||
"video.close": "Close video",
|
||||
|
|
|
|||
|
|
@ -1,365 +1,387 @@
|
|||
{
|
||||
"account.account_note_header": "Note",
|
||||
"account.add_or_remove_from_list": "Add or Remove from lists",
|
||||
"account.account_note_header": "Bilješka",
|
||||
"account.add_or_remove_from_list": "Dodaj ili ukloni s liste",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Group",
|
||||
"account.badges.group": "Grupa",
|
||||
"account.block": "Blokiraj @{name}",
|
||||
"account.block_domain": "Sakrij sve sa {domain}",
|
||||
"account.blocked": "Blocked",
|
||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.block_domain": "Blokiraj domenu {domain}",
|
||||
"account.blocked": "Blokirano",
|
||||
"account.browse_more_on_origin_server": "Pogledajte više na izvornom profilu",
|
||||
"account.cancel_follow_request": "Otkaži zahtjev za praćenje",
|
||||
"account.direct": "Pošalji poruku @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Domena je blokirana",
|
||||
"account.edit_profile": "Uredi profil",
|
||||
"account.endorse": "Feature on profile",
|
||||
"account.follow": "Slijedi",
|
||||
"account.followers": "Sljedbenici",
|
||||
"account.followers.empty": "No one follows this user yet.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
|
||||
"account.follows.empty": "This user doesn't follow anyone yet.",
|
||||
"account.follows_you": "te slijedi",
|
||||
"account.hide_reblogs": "Hide boosts from @{name}",
|
||||
"account.last_status": "Last active",
|
||||
"account.link_verified_on": "Ownership of this link was checked on {date}",
|
||||
"account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.",
|
||||
"account.media": "Media",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Istakni na profilu",
|
||||
"account.follow": "Prati",
|
||||
"account.followers": "Pratitelji",
|
||||
"account.followers.empty": "Nitko još ne prati korisnika/cu.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} pratitelj} other {{counter} pratitelja}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} praćeni} few{{counter} praćena} other {{counter} praćenih}}",
|
||||
"account.follows.empty": "Korisnik/ca još ne prati nikoga.",
|
||||
"account.follows_you": "Prati te",
|
||||
"account.hide_reblogs": "Sakrij boostove od @{name}",
|
||||
"account.last_status": "Posljednja aktivnost",
|
||||
"account.link_verified_on": "Vlasništvo ove poveznice provjereno je {date}",
|
||||
"account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih može pratiti.",
|
||||
"account.media": "Medijski sadržaj",
|
||||
"account.mention": "Spomeni @{name}",
|
||||
"account.moved_to": "{name} has moved to:",
|
||||
"account.moved_to": "Račun {name} je premješten na:",
|
||||
"account.mute": "Utišaj @{name}",
|
||||
"account.mute_notifications": "Mute notifications from @{name}",
|
||||
"account.muted": "Muted",
|
||||
"account.never_active": "Never",
|
||||
"account.posts": "Postovi",
|
||||
"account.posts_with_replies": "Toots with replies",
|
||||
"account.mute_notifications": "Utišaj obavijesti od @{name}",
|
||||
"account.muted": "Utišano",
|
||||
"account.never_active": "Nikad",
|
||||
"account.posts": "Tootovi",
|
||||
"account.posts_with_replies": "Tootovi i odgovori",
|
||||
"account.report": "Prijavi @{name}",
|
||||
"account.requested": "Čeka pristanak",
|
||||
"account.share": "Share @{name}'s profile",
|
||||
"account.show_reblogs": "Show boosts from @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
|
||||
"account.requested": "Čekanje na potvrdu. Kliknite za otkazivanje zahtjeva za praćenje",
|
||||
"account.share": "Podijeli profil @{name}",
|
||||
"account.show_reblogs": "Prikaži boostove od @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} toot} other {{counter} toota}}",
|
||||
"account.unblock": "Deblokiraj @{name}",
|
||||
"account.unblock_domain": "Poništi sakrivanje {domain}",
|
||||
"account.unendorse": "Don't feature on profile",
|
||||
"account.unfollow": "Prestani slijediti",
|
||||
"account.unblock_domain": "Deblokiraj domenu {domain}",
|
||||
"account.unendorse": "Ne ističi na profilu",
|
||||
"account.unfollow": "Prestani pratiti",
|
||||
"account.unmute": "Poništi utišavanje @{name}",
|
||||
"account.unmute_notifications": "Unmute notifications from @{name}",
|
||||
"account_note.placeholder": "Click to add a note",
|
||||
"alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Rate limited",
|
||||
"alert.unexpected.message": "An unexpected error occurred.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"announcement.announcement": "Announcement",
|
||||
"autosuggest_hashtag.per_week": "{count} per week",
|
||||
"boost_modal.combo": "Možeš pritisnuti {combo} kako bi ovo preskočio sljedeći put",
|
||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||
"bundle_column_error.retry": "Try again",
|
||||
"bundle_column_error.title": "Network error",
|
||||
"bundle_modal_error.close": "Close",
|
||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||
"bundle_modal_error.retry": "Try again",
|
||||
"account.unmute_notifications": "Ne utišavaj obavijesti od @{name}",
|
||||
"account_note.placeholder": "Kliknite za dodavanje bilješke",
|
||||
"alert.rate_limited.message": "Molimo pokušajte nakon {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Ograničenje učestalosti",
|
||||
"alert.unexpected.message": "Dogodila se neočekivana greška.",
|
||||
"alert.unexpected.title": "Ups!",
|
||||
"announcement.announcement": "Najava",
|
||||
"autosuggest_hashtag.per_week": "{count} tjedno",
|
||||
"boost_modal.combo": "Možete pritisnuti {combo} kako biste preskočili ovo sljedeći put",
|
||||
"bundle_column_error.body": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.",
|
||||
"bundle_column_error.retry": "Pokušajte ponovno",
|
||||
"bundle_column_error.title": "Greška mreže",
|
||||
"bundle_modal_error.close": "Zatvori",
|
||||
"bundle_modal_error.message": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.",
|
||||
"bundle_modal_error.retry": "Pokušajte ponovno",
|
||||
"column.blocks": "Blokirani korisnici",
|
||||
"column.bookmarks": "Bookmarks",
|
||||
"column.community": "Lokalni timeline",
|
||||
"column.direct": "Direct messages",
|
||||
"column.directory": "Browse profiles",
|
||||
"column.domain_blocks": "Hidden domains",
|
||||
"column.bookmarks": "Knjižne oznake",
|
||||
"column.community": "Lokalna vremenska crta",
|
||||
"column.direct": "Izravne poruke",
|
||||
"column.directory": "Pregledavanje profila",
|
||||
"column.domain_blocks": "Blokirane domene",
|
||||
"column.favourites": "Favoriti",
|
||||
"column.follow_requests": "Zahtjevi za slijeđenje",
|
||||
"column.home": "Dom",
|
||||
"column.lists": "Lists",
|
||||
"column.follow_requests": "Zahtjevi za praćenje",
|
||||
"column.home": "Početna",
|
||||
"column.lists": "Liste",
|
||||
"column.mutes": "Utišani korisnici",
|
||||
"column.notifications": "Notifikacije",
|
||||
"column.pins": "Pinned toot",
|
||||
"column.public": "Federalni timeline",
|
||||
"column.notifications": "Obavijesti",
|
||||
"column.pins": "Prikvačeni tootovi",
|
||||
"column.public": "Federalna vremenska crta",
|
||||
"column_back_button.label": "Natrag",
|
||||
"column_header.hide_settings": "Hide settings",
|
||||
"column_header.moveLeft_settings": "Move column to the left",
|
||||
"column_header.moveRight_settings": "Move column to the right",
|
||||
"column_header.pin": "Pin",
|
||||
"column_header.show_settings": "Show settings",
|
||||
"column_header.unpin": "Unpin",
|
||||
"column_header.hide_settings": "Sakrij postavke",
|
||||
"column_header.moveLeft_settings": "Pomakni stupac ulijevo",
|
||||
"column_header.moveRight_settings": "Pomakni stupac udesno",
|
||||
"column_header.pin": "Prikvači",
|
||||
"column_header.show_settings": "Prikaži postavke",
|
||||
"column_header.unpin": "Otkvači",
|
||||
"column_subheading.settings": "Postavke",
|
||||
"community.column_settings.local_only": "Local only",
|
||||
"community.column_settings.media_only": "Media only",
|
||||
"community.column_settings.remote_only": "Remote only",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning_learn_more": "Learn more",
|
||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||
"compose_form.lock_disclaimer": "Tvoj račun nije {locked}. Svatko te može slijediti kako bi vidio postove namijenjene samo tvojim sljedbenicima.",
|
||||
"community.column_settings.local_only": "Samo lokalno",
|
||||
"community.column_settings.media_only": "Samo medijski sadržaj",
|
||||
"community.column_settings.remote_only": "Samo udaljeno",
|
||||
"compose_form.direct_message_warning": "Ovaj toot bit će poslan samo spomenutim korisnicima.",
|
||||
"compose_form.direct_message_warning_learn_more": "Saznajte više",
|
||||
"compose_form.hashtag_warning": "Ovaj toot neće biti prikazan ni pod jednim hashtagom jer je postavljen kao neprikazan. Samo javni tootovi mogu biti pretraživani pomoći hashtagova.",
|
||||
"compose_form.lock_disclaimer": "Vaš račun nije {locked}. Svatko Vas može pratiti kako bi vidjeli objave namijenjene Vašim pratiteljima.",
|
||||
"compose_form.lock_disclaimer.lock": "zaključan",
|
||||
"compose_form.placeholder": "Što ti je na umu?",
|
||||
"compose_form.poll.add_option": "Add a choice",
|
||||
"compose_form.poll.duration": "Poll duration",
|
||||
"compose_form.poll.option_placeholder": "Choice {number}",
|
||||
"compose_form.poll.remove_option": "Remove this choice",
|
||||
"compose_form.poll.switch_to_multiple": "Change poll to allow multiple choices",
|
||||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.poll.add_option": "Dodaj opciju",
|
||||
"compose_form.poll.duration": "Trajanje ankete",
|
||||
"compose_form.poll.option_placeholder": "Opcija {number}",
|
||||
"compose_form.poll.remove_option": "Ukloni ovu opciju",
|
||||
"compose_form.poll.switch_to_multiple": "Omogući višestruki odabir opcija ankete",
|
||||
"compose_form.poll.switch_to_single": "Omogući odabir samo jedne opcije ankete",
|
||||
"compose_form.publish": "Tootni",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Mark media as sensitive",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Upozorenje o sadržaju",
|
||||
"compose_form.sensitive.hide": "Označi medijski sadržaj kao osjetljiv",
|
||||
"compose_form.sensitive.marked": "Medijski sadržaj označen je kao osjetljiv",
|
||||
"compose_form.sensitive.unmarked": "Medijski sadržaj nije označen kao osjetljiv",
|
||||
"compose_form.spoiler.marked": "Tekst je skriven iza upozorenja",
|
||||
"compose_form.spoiler.unmarked": "Tekst nije skriven",
|
||||
"compose_form.spoiler_placeholder": "Ovdje upišite upozorenje",
|
||||
"confirmation_modal.cancel": "Otkaži",
|
||||
"confirmations.block.block_and_report": "Block & Report",
|
||||
"confirmations.block.block_and_report": "Blokiraj i prijavi",
|
||||
"confirmations.block.confirm": "Blokiraj",
|
||||
"confirmations.block.message": "Želiš li sigurno blokirati {name}?",
|
||||
"confirmations.block.message": "Sigurno želite blokirati {name}?",
|
||||
"confirmations.delete.confirm": "Obriši",
|
||||
"confirmations.delete.message": "Želiš li stvarno obrisati ovaj status?",
|
||||
"confirmations.delete_list.confirm": "Delete",
|
||||
"confirmations.delete_list.message": "Are you sure you want to permanently delete this list?",
|
||||
"confirmations.domain_block.confirm": "Sakrij cijelu domenu",
|
||||
"confirmations.domain_block.message": "Jesi li zaista, zaista siguran da želiš potpuno blokirati {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
|
||||
"confirmations.logout.confirm": "Log out",
|
||||
"confirmations.logout.message": "Are you sure you want to log out?",
|
||||
"confirmations.delete.message": "Stvarno želite obrisati ovaj toot?",
|
||||
"confirmations.delete_list.confirm": "Obriši",
|
||||
"confirmations.delete_list.message": "Jeste li sigurni da želite trajno obrisati ovu listu?",
|
||||
"confirmations.domain_block.confirm": "Blokiraj cijelu domenu",
|
||||
"confirmations.domain_block.message": "Jeste li zaista, zaista sigurni da želite blokirati cijelu domenu {domain}? U većini slučajeva dovoljno je i preferirano nekoliko ciljanih blokiranja ili utišavanja. Nećete vidjeti sadržaj s te domene ni u kojim javnim vremenskim crtama ili Vašim obavijestima. Vaši pratitelji s te domene bit će uklonjeni.",
|
||||
"confirmations.logout.confirm": "Odjavi se",
|
||||
"confirmations.logout.message": "Jeste li sigurni da se želite odjaviti?",
|
||||
"confirmations.mute.confirm": "Utišaj",
|
||||
"confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
|
||||
"confirmations.mute.message": "Jesi li siguran da želiš utišati {name}?",
|
||||
"confirmations.redraft.confirm": "Delete & redraft",
|
||||
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? You will lose all replies, boosts and favourites to it.",
|
||||
"confirmations.reply.confirm": "Reply",
|
||||
"confirmations.mute.explanation": "Ovo će sakriti njihove objave i objave koje ih spominju, ali i dalje će im dopuštati da vide Vaše objave i da Vas prate.",
|
||||
"confirmations.mute.message": "Jeste li sigurni da želite utišati {name}?",
|
||||
"confirmations.redraft.confirm": "Izbriši i ponovno uredi",
|
||||
"confirmations.redraft.message": "Jeste li sigurni da želite izbrisati ovaj toot i ponovno ga urediti? Favoriti i boostovi bit će izgubljeni, a odgovori na izvornu objavu bit će odvojeni.",
|
||||
"confirmations.reply.confirm": "Odgovori",
|
||||
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
|
||||
"confirmations.unfollow.confirm": "Unfollow",
|
||||
"confirmations.unfollow.confirm": "Prestani pratiti",
|
||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||
"conversation.delete": "Delete conversation",
|
||||
"conversation.mark_as_read": "Mark as read",
|
||||
"conversation.open": "View conversation",
|
||||
"conversation.with": "With {names}",
|
||||
"conversation.delete": "Izbriši razgovor",
|
||||
"conversation.mark_as_read": "Označi kao pročitano",
|
||||
"conversation.open": "Prikaži razgovor",
|
||||
"conversation.with": "S {names}",
|
||||
"directory.federated": "From known fediverse",
|
||||
"directory.local": "From {domain} only",
|
||||
"directory.local": "Samo iz {domain}",
|
||||
"directory.new_arrivals": "New arrivals",
|
||||
"directory.recently_active": "Recently active",
|
||||
"directory.recently_active": "Nedavno aktivni",
|
||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||
"embed.preview": "Here is what it will look like:",
|
||||
"emoji_button.activity": "Aktivnost",
|
||||
"emoji_button.custom": "Custom",
|
||||
"emoji_button.custom": "Prilagođeno",
|
||||
"emoji_button.flags": "Zastave",
|
||||
"emoji_button.food": "Hrana & Piće",
|
||||
"emoji_button.label": "Umetni smajlije",
|
||||
"emoji_button.food": "Hrana i piće",
|
||||
"emoji_button.label": "Umetni emotikone",
|
||||
"emoji_button.nature": "Priroda",
|
||||
"emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻",
|
||||
"emoji_button.objects": "Objekti",
|
||||
"emoji_button.not_found": "Nema emotikona!! (╯°□°)╯︵ ┻━┻",
|
||||
"emoji_button.objects": "Predmeti",
|
||||
"emoji_button.people": "Ljudi",
|
||||
"emoji_button.recent": "Frequently used",
|
||||
"emoji_button.recent": "Često korišteno",
|
||||
"emoji_button.search": "Traži...",
|
||||
"emoji_button.search_results": "Search results",
|
||||
"emoji_button.search_results": "Rezultati pretraživanja",
|
||||
"emoji_button.symbols": "Simboli",
|
||||
"emoji_button.travel": "Putovanja & Mjesta",
|
||||
"empty_column.account_timeline": "No toots here!",
|
||||
"empty_column.account_unavailable": "Profile unavailable",
|
||||
"empty_column.blocks": "You haven't blocked any users yet.",
|
||||
"emoji_button.travel": "Putovanje i mjesta",
|
||||
"empty_column.account_timeline": "Ovdje nema tootova!",
|
||||
"empty_column.account_unavailable": "Profil nije dostupan",
|
||||
"empty_column.blocks": "Još niste blokirali nikoga.",
|
||||
"empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.",
|
||||
"empty_column.community": "Lokalni timeline je prazan. Napiši nešto javno kako bi pokrenuo stvari!",
|
||||
"empty_column.community": "Lokalna vremenska crta je prazna. Napišite nešto javno da biste pokrenuli stvari!",
|
||||
"empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.",
|
||||
"empty_column.domain_blocks": "There are no hidden domains yet.",
|
||||
"empty_column.domain_blocks": "Još nema blokiranih domena.",
|
||||
"empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.",
|
||||
"empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.",
|
||||
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.",
|
||||
"empty_column.hashtag": "Još ne postoji ništa s ovim hashtagom.",
|
||||
"empty_column.home": "Još ne slijediš nikoga. Posjeti {public} ili koristi tražilicu kako bi počeo i upoznao druge korisnike.",
|
||||
"empty_column.home.public_timeline": "javni timeline",
|
||||
"empty_column.list": "There is nothing in this list yet.",
|
||||
"empty_column.home": "Vaša početna vremenska crta je prazna! Posjetite {public} ili koristite tražilicu kako biste započeli i upoznali druge korisnike.",
|
||||
"empty_column.home.public_timeline": "javnu vremensku crtu",
|
||||
"empty_column.list": "Na ovoj listi još nema ničega. Kada članovi ove liste objave nove tootove, oni će se pojaviti ovdje.",
|
||||
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
|
||||
"empty_column.mutes": "You haven't muted any users yet.",
|
||||
"empty_column.notifications": "Još nemaš notifikacija. Komuniciraj sa drugima kako bi započeo razgovor.",
|
||||
"empty_column.public": "Ovdje nema ništa! Napiši nešto javno, ili ručno slijedi korisnike sa drugih instanci kako bi popunio",
|
||||
"empty_column.notifications": "Još nemate obavijesti. Komunicirajte s drugima kako biste započeli razgovor.",
|
||||
"empty_column.public": "Ovdje nema ništa! Napišite nešto javno ili ručno pratite korisnike s drugi poslužitelja da biste ovo popunili",
|
||||
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
||||
"errors.unexpected_crash.report_issue": "Report issue",
|
||||
"errors.unexpected_crash.report_issue": "Prijavi problem",
|
||||
"follow_request.authorize": "Autoriziraj",
|
||||
"follow_request.reject": "Odbij",
|
||||
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
|
||||
"generic.saved": "Saved",
|
||||
"getting_started.developers": "Developers",
|
||||
"getting_started.directory": "Profile directory",
|
||||
"getting_started.documentation": "Documentation",
|
||||
"generic.saved": "Spremljeno",
|
||||
"getting_started.developers": "Razvijatelji",
|
||||
"getting_started.directory": "Direktorij profila",
|
||||
"getting_started.documentation": "Dokumentacija",
|
||||
"getting_started.heading": "Počnimo",
|
||||
"getting_started.invite": "Invite people",
|
||||
"getting_started.open_source_notice": "Mastodon je softver otvorenog koda. Možeš pridonijeti ili prijaviti probleme na GitHubu {github}.",
|
||||
"getting_started.security": "Security",
|
||||
"getting_started.terms": "Terms of service",
|
||||
"hashtag.column_header.tag_mode.all": "and {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "or {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "without {additional}",
|
||||
"hashtag.column_settings.select.no_options_message": "No suggestions found",
|
||||
"hashtag.column_settings.select.placeholder": "Enter hashtags…",
|
||||
"hashtag.column_settings.tag_mode.all": "All of these",
|
||||
"hashtag.column_settings.tag_mode.any": "Any of these",
|
||||
"hashtag.column_settings.tag_mode.none": "None of these",
|
||||
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
|
||||
"getting_started.invite": "Pozovi ljude",
|
||||
"getting_started.open_source_notice": "Mastodon je softver otvorenog kôda. Možete pridonijeti ili prijaviti probleme na GitHubu na {github}.",
|
||||
"getting_started.security": "Postavke računa",
|
||||
"getting_started.terms": "Uvjeti pružanja usluga",
|
||||
"hashtag.column_header.tag_mode.all": "i {additional}",
|
||||
"hashtag.column_header.tag_mode.any": "ili {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "bez {additional}",
|
||||
"hashtag.column_settings.select.no_options_message": "Nisu pronađeni prijedlozi",
|
||||
"hashtag.column_settings.select.placeholder": "Unesite hashtagove…",
|
||||
"hashtag.column_settings.tag_mode.all": "Sve navedeno",
|
||||
"hashtag.column_settings.tag_mode.any": "Bilo koji navedeni",
|
||||
"hashtag.column_settings.tag_mode.none": "Nijedan navedeni",
|
||||
"hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovaj stupac",
|
||||
"home.column_settings.basic": "Osnovno",
|
||||
"home.column_settings.show_reblogs": "Pokaži boostove",
|
||||
"home.column_settings.show_replies": "Pokaži odgovore",
|
||||
"home.hide_announcements": "Hide announcements",
|
||||
"home.show_announcements": "Show announcements",
|
||||
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
|
||||
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
|
||||
"introduction.federation.action": "Next",
|
||||
"introduction.federation.federated.headline": "Federated",
|
||||
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
|
||||
"introduction.federation.home.headline": "Home",
|
||||
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
|
||||
"introduction.federation.local.headline": "Local",
|
||||
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
|
||||
"introduction.interactions.action": "Finish toot-orial!",
|
||||
"introduction.interactions.favourite.headline": "Favourite",
|
||||
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
|
||||
"introduction.interactions.reblog.headline": "Boost",
|
||||
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
|
||||
"introduction.interactions.reply.headline": "Reply",
|
||||
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
|
||||
"introduction.welcome.action": "Let's go!",
|
||||
"introduction.welcome.headline": "First steps",
|
||||
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
|
||||
"keyboard_shortcuts.back": "to navigate back",
|
||||
"keyboard_shortcuts.blocked": "to open blocked users list",
|
||||
"keyboard_shortcuts.boost": "to boost",
|
||||
"keyboard_shortcuts.column": "to focus a status in one of the columns",
|
||||
"keyboard_shortcuts.compose": "to focus the compose textarea",
|
||||
"keyboard_shortcuts.description": "Description",
|
||||
"keyboard_shortcuts.direct": "to open direct messages column",
|
||||
"keyboard_shortcuts.down": "to move down in the list",
|
||||
"keyboard_shortcuts.enter": "to open status",
|
||||
"keyboard_shortcuts.favourite": "to favourite",
|
||||
"keyboard_shortcuts.favourites": "to open favourites list",
|
||||
"keyboard_shortcuts.federated": "to open federated timeline",
|
||||
"keyboard_shortcuts.heading": "Keyboard Shortcuts",
|
||||
"keyboard_shortcuts.home": "to open home timeline",
|
||||
"keyboard_shortcuts.hotkey": "Hotkey",
|
||||
"keyboard_shortcuts.legend": "to display this legend",
|
||||
"keyboard_shortcuts.local": "to open local timeline",
|
||||
"keyboard_shortcuts.mention": "to mention author",
|
||||
"keyboard_shortcuts.muted": "to open muted users list",
|
||||
"keyboard_shortcuts.my_profile": "to open your profile",
|
||||
"keyboard_shortcuts.notifications": "to open notifications column",
|
||||
"keyboard_shortcuts.open_media": "to open media",
|
||||
"keyboard_shortcuts.pinned": "to open pinned toots list",
|
||||
"keyboard_shortcuts.profile": "to open author's profile",
|
||||
"keyboard_shortcuts.reply": "to reply",
|
||||
"keyboard_shortcuts.requests": "to open follow requests list",
|
||||
"keyboard_shortcuts.search": "to focus search",
|
||||
"home.hide_announcements": "Sakrij najave",
|
||||
"home.show_announcements": "Prikaži najave",
|
||||
"intervals.full.days": "{number, plural, one {# dan} other {# dana}}",
|
||||
"intervals.full.hours": "{number, plural, one {# sat} few {# sata} other {# sati}}",
|
||||
"intervals.full.minutes": "{number, plural, one {# minuta} few {# minute} other {# minuta}}",
|
||||
"introduction.federation.action": "Sljedeće",
|
||||
"introduction.federation.federated.headline": "Federalno",
|
||||
"introduction.federation.federated.text": "Javne objave s drugih poslužitelja fediverzuma prikazat će se u federalnoj vremenskoj crti.",
|
||||
"introduction.federation.home.headline": "Početna",
|
||||
"introduction.federation.home.text": "Objave ljudi koje pratite prikazat će se na Vašoj početnoj stranici. Možete pratiti bilo koga na bilo kojem poslužitelju!",
|
||||
"introduction.federation.local.headline": "Lokalno",
|
||||
"introduction.federation.local.text": "Javne objave ljudi na istom poslužitelju prikazat će se u lokalnoj vremenskoj crti.",
|
||||
"introduction.interactions.action": "Dovrši tutorijal!",
|
||||
"introduction.interactions.favourite.headline": "Favoriti",
|
||||
"introduction.interactions.favourite.text": "Toot možete spremiti za kasnije i javiti njegovom autoru da Vam se sviđa tako što ga označite kao favorit.",
|
||||
"introduction.interactions.reblog.headline": "Boostanje",
|
||||
"introduction.interactions.reblog.text": "Tuđe tootove možete dijeliti sa svojim pratiteljima tako što ih boostate.",
|
||||
"introduction.interactions.reply.headline": "Odgovaranje",
|
||||
"introduction.interactions.reply.text": "Možete odgovoriti na tuđe i svoje tootove, čime će se oni povezati u razgovor.",
|
||||
"introduction.welcome.action": "Krenimo!",
|
||||
"introduction.welcome.headline": "Prvi koraci",
|
||||
"introduction.welcome.text": "Dobro došli na fediverzum! Za nekoliko trenutaka moći ćete dijeliti poruke i razgovara sa svojim prijateljima kroz široki raspon poslužitelja. Ali ovaj poslužitelj, {domain}, je poseban — on sadrži Vaš profil, pa zapamtite njegovo ime.",
|
||||
"keyboard_shortcuts.back": "za vraćanje natrag",
|
||||
"keyboard_shortcuts.blocked": "za otvaranje liste blokiranih korisnika",
|
||||
"keyboard_shortcuts.boost": "za boostanje",
|
||||
"keyboard_shortcuts.column": "za fokusiranje na toot u jednom od stupaca",
|
||||
"keyboard_shortcuts.compose": "za fokusiranje na tekstualni okvir za stvaranje",
|
||||
"keyboard_shortcuts.description": "Opis",
|
||||
"keyboard_shortcuts.direct": "za otvaranje stupca s izravnim porukama",
|
||||
"keyboard_shortcuts.down": "za pomak dolje na listi",
|
||||
"keyboard_shortcuts.enter": "za otvaranje toota",
|
||||
"keyboard_shortcuts.favourite": "za označavanje favoritom",
|
||||
"keyboard_shortcuts.favourites": "za otvaranje liste favorita",
|
||||
"keyboard_shortcuts.federated": "za otvaranje federalne vremenske crte",
|
||||
"keyboard_shortcuts.heading": "Tipkovnički prečaci",
|
||||
"keyboard_shortcuts.home": "za otvaranje početne vremenske crte",
|
||||
"keyboard_shortcuts.hotkey": "Tipkovnički prečac",
|
||||
"keyboard_shortcuts.legend": "za prikaz ove legende",
|
||||
"keyboard_shortcuts.local": "za otvaranje lokalne vremenske crte",
|
||||
"keyboard_shortcuts.mention": "za spominjanje autora",
|
||||
"keyboard_shortcuts.muted": "za otvaranje liste utišanih korisnika",
|
||||
"keyboard_shortcuts.my_profile": "za otvaranje Vašeg profila",
|
||||
"keyboard_shortcuts.notifications": "za otvaranje stupca s obavijestima",
|
||||
"keyboard_shortcuts.open_media": "za otvaranje medijskog sadržaja",
|
||||
"keyboard_shortcuts.pinned": "za otvaranje liste prikvačenih tootova",
|
||||
"keyboard_shortcuts.profile": "za otvaranje autorovog profila",
|
||||
"keyboard_shortcuts.reply": "za odgovaranje",
|
||||
"keyboard_shortcuts.requests": "za otvaranje liste zahtjeva za praćenje",
|
||||
"keyboard_shortcuts.search": "za fokusiranje na tražilicu",
|
||||
"keyboard_shortcuts.spoilers": "to show/hide CW field",
|
||||
"keyboard_shortcuts.start": "to open \"get started\" column",
|
||||
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "to show/hide media",
|
||||
"keyboard_shortcuts.toot": "to start a brand new toot",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "za prikaz/sakrivanje medijskog sadržaja",
|
||||
"keyboard_shortcuts.toot": "za započinjanje novog toota",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Zatvori",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lightbox.view_context": "View context",
|
||||
"lists.account.add": "Add to list",
|
||||
"lists.account.remove": "Remove from list",
|
||||
"lists.delete": "Delete list",
|
||||
"lists.edit": "Edit list",
|
||||
"lists.edit.submit": "Change title",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Sljedeće",
|
||||
"lightbox.previous": "Prethodno",
|
||||
"lightbox.view_context": "Prikaži kontekst",
|
||||
"lists.account.add": "Dodaj na listu",
|
||||
"lists.account.remove": "Ukloni s liste",
|
||||
"lists.delete": "Izbriši listu",
|
||||
"lists.edit": "Uredi listu",
|
||||
"lists.edit.submit": "Promijeni naslov",
|
||||
"lists.new.create": "Dodaj listu",
|
||||
"lists.new.title_placeholder": "Naziv nove liste",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Traži među praćenim ljudima",
|
||||
"lists.subheading": "Vaše liste",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
"loading_indicator.label": "Učitavam...",
|
||||
"media_gallery.toggle_visible": "Preklopi vidljivost",
|
||||
"missing_indicator.label": "Nije nađen",
|
||||
"loading_indicator.label": "Učitavanje...",
|
||||
"media_gallery.toggle_visible": "Sakrij {number, plural, one {sliku} other {slike}}",
|
||||
"missing_indicator.label": "Nije pronađeno",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mobile apps",
|
||||
"navigation_bar.blocks": "Blokirani korisnici",
|
||||
"navigation_bar.bookmarks": "Bookmarks",
|
||||
"navigation_bar.community_timeline": "Lokalni timeline",
|
||||
"navigation_bar.community_timeline": "Lokalna vremenska crta",
|
||||
"navigation_bar.compose": "Compose new toot",
|
||||
"navigation_bar.direct": "Direct messages",
|
||||
"navigation_bar.discover": "Discover",
|
||||
"navigation_bar.domain_blocks": "Hidden domains",
|
||||
"navigation_bar.direct": "Izravne poruke",
|
||||
"navigation_bar.discover": "Istraživanje",
|
||||
"navigation_bar.domain_blocks": "Blokirane domene",
|
||||
"navigation_bar.edit_profile": "Uredi profil",
|
||||
"navigation_bar.favourites": "Favoriti",
|
||||
"navigation_bar.filters": "Muted words",
|
||||
"navigation_bar.follow_requests": "Zahtjevi za slijeđenje",
|
||||
"navigation_bar.follows_and_followers": "Follows and followers",
|
||||
"navigation_bar.info": "Više informacija",
|
||||
"navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
|
||||
"navigation_bar.lists": "Lists",
|
||||
"navigation_bar.filters": "Utišane riječi",
|
||||
"navigation_bar.follow_requests": "Zahtjevi za praćenje",
|
||||
"navigation_bar.follows_and_followers": "Praćeni i pratitelji",
|
||||
"navigation_bar.info": "O ovom poslužitelju",
|
||||
"navigation_bar.keyboard_shortcuts": "Tipkovnički prečaci",
|
||||
"navigation_bar.lists": "Liste",
|
||||
"navigation_bar.logout": "Odjavi se",
|
||||
"navigation_bar.mutes": "Utišani korisnici",
|
||||
"navigation_bar.personal": "Personal",
|
||||
"navigation_bar.pins": "Pinned toots",
|
||||
"navigation_bar.personal": "Osobno",
|
||||
"navigation_bar.pins": "Prikvačeni tootovi",
|
||||
"navigation_bar.preferences": "Postavke",
|
||||
"navigation_bar.public_timeline": "Federalni timeline",
|
||||
"navigation_bar.security": "Security",
|
||||
"notification.favourite": "{name} je lajkao tvoj status",
|
||||
"notification.follow": "{name} te sada slijedi",
|
||||
"notification.follow_request": "{name} has requested to follow you",
|
||||
"notification.mention": "{name} te je spomenuo",
|
||||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.reblog": "{name} je podigao tvoj status",
|
||||
"notifications.clear": "Očisti notifikacije",
|
||||
"notifications.clear_confirmation": "Želiš li zaista obrisati sve svoje notifikacije?",
|
||||
"notifications.column_settings.alert": "Desktop notifikacije",
|
||||
"navigation_bar.public_timeline": "Federalna vremenska crta",
|
||||
"navigation_bar.security": "Sigurnost",
|
||||
"notification.favourite": "{name} je favorizirao/la Vaš toot",
|
||||
"notification.follow": "{name} Vas je počeo/la pratiti",
|
||||
"notification.follow_request": "{name} zatražio/la je da Vas prati",
|
||||
"notification.mention": "{name} Vas je spomenuo",
|
||||
"notification.own_poll": "Vaša anketa je završila",
|
||||
"notification.poll": "Anketa u kojoj ste glasali je završila",
|
||||
"notification.reblog": "{name} je boostao/la Vaš status",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Očisti obavijesti",
|
||||
"notifications.clear_confirmation": "Želite li zaista trajno očistiti sve Vaše obavijesti?",
|
||||
"notifications.column_settings.alert": "Obavijesti radne površine",
|
||||
"notifications.column_settings.favourite": "Favoriti:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Display all categories",
|
||||
"notifications.column_settings.filter_bar.category": "Quick filter bar",
|
||||
"notifications.column_settings.filter_bar.show": "Show",
|
||||
"notifications.column_settings.follow": "Novi sljedbenici:",
|
||||
"notifications.column_settings.follow_request": "New follow requests:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Prikaži sve kategorije",
|
||||
"notifications.column_settings.filter_bar.category": "Brza traka filtera",
|
||||
"notifications.column_settings.filter_bar.show": "Prikaži",
|
||||
"notifications.column_settings.follow": "Novi pratitelji:",
|
||||
"notifications.column_settings.follow_request": "Novi zahtjevi za praćenje:",
|
||||
"notifications.column_settings.mention": "Spominjanja:",
|
||||
"notifications.column_settings.poll": "Poll results:",
|
||||
"notifications.column_settings.push": "Push notifications",
|
||||
"notifications.column_settings.poll": "Rezultati anketa:",
|
||||
"notifications.column_settings.push": "Push obavijesti",
|
||||
"notifications.column_settings.reblog": "Boostovi:",
|
||||
"notifications.column_settings.show": "Prikaži u stupcu",
|
||||
"notifications.column_settings.sound": "Sviraj zvuk",
|
||||
"notifications.filter.all": "All",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favourites",
|
||||
"notifications.filter.follows": "Follows",
|
||||
"notifications.filter.mentions": "Mentions",
|
||||
"notifications.filter.polls": "Poll results",
|
||||
"notifications.group": "{count} notifications",
|
||||
"poll.closed": "Closed",
|
||||
"poll.refresh": "Refresh",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# people}}",
|
||||
"poll.total_votes": "{count, plural, one {# vote} other {# votes}}",
|
||||
"poll.vote": "Vote",
|
||||
"poll.voted": "You voted for this answer",
|
||||
"poll_button.add_poll": "Add a poll",
|
||||
"poll_button.remove_poll": "Remove poll",
|
||||
"privacy.change": "Podesi status privatnosti",
|
||||
"privacy.direct.long": "Prikaži samo spomenutim korisnicima",
|
||||
"privacy.direct.short": "Direktno",
|
||||
"privacy.private.long": "Prikaži samo sljedbenicima",
|
||||
"privacy.private.short": "Privatno",
|
||||
"privacy.public.long": "Postaj na javne timeline",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "Sve",
|
||||
"notifications.filter.boosts": "Boostovi",
|
||||
"notifications.filter.favourites": "Favoriti",
|
||||
"notifications.filter.follows": "Praćenja",
|
||||
"notifications.filter.mentions": "Spominjanja",
|
||||
"notifications.filter.polls": "Rezultati anketa",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} obavijesti",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Završeno",
|
||||
"poll.refresh": "Osvježi",
|
||||
"poll.total_people": "{count, plural, one {# osoba} few {# osobe} other {# osoba}}",
|
||||
"poll.total_votes": "{count, plural, one {# glas} few {# glasa} other {# glasova}}",
|
||||
"poll.vote": "Glasaj",
|
||||
"poll.voted": "Vi ste glasali za ovaj odgovor",
|
||||
"poll_button.add_poll": "Dodaj anketu",
|
||||
"poll_button.remove_poll": "Ukloni anketu",
|
||||
"privacy.change": "Podesi privatnost toota",
|
||||
"privacy.direct.long": "Vidljivo samo spomenutim korisnicima",
|
||||
"privacy.direct.short": "Izravno",
|
||||
"privacy.private.long": "Vidljivo samo pratiteljima",
|
||||
"privacy.private.short": "Samo pratitelji",
|
||||
"privacy.public.long": "Vidljivo svima, prikazano u javim vremenskim crtama",
|
||||
"privacy.public.short": "Javno",
|
||||
"privacy.unlisted.long": "Ne prikazuj u javnim timelineovima",
|
||||
"privacy.unlisted.short": "Unlisted",
|
||||
"refresh": "Refresh",
|
||||
"regeneration_indicator.label": "Loading…",
|
||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||
"privacy.unlisted.long": "Vidljivo svima, ali se ne prikazuje u javnim vremenskim crtama",
|
||||
"privacy.unlisted.short": "Neprikazano",
|
||||
"refresh": "Osvježi",
|
||||
"regeneration_indicator.label": "Učitavanje…",
|
||||
"regeneration_indicator.sublabel": "Priprema se Vaša početna stranica!",
|
||||
"relative_time.days": "{number}d",
|
||||
"relative_time.hours": "{number}h",
|
||||
"relative_time.just_now": "now",
|
||||
"relative_time.just_now": "sada",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"relative_time.today": "today",
|
||||
"relative_time.today": "danas",
|
||||
"reply_indicator.cancel": "Otkaži",
|
||||
"report.forward": "Forward to {target}",
|
||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.forward": "Proslijedi {target}",
|
||||
"report.forward_hint": "Račun je s drugog poslužitelja. Poslati anonimiziranu kopiju prijave i tamo?",
|
||||
"report.hint": "Prijava bit će poslana moderatorima poslužitelja. Ispod možete dati objašnjenje zašto prijavljujete ovaj račun:",
|
||||
"report.placeholder": "Dodatni komentari",
|
||||
"report.submit": "Pošalji",
|
||||
"report.target": "Prijavljivanje",
|
||||
"report.target": "Prijavljivanje korisnika {target}",
|
||||
"search.placeholder": "Traži",
|
||||
"search_popout.search_format": "Advanced search format",
|
||||
"search_popout.search_format": "Format naprednog pretraživanja",
|
||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||
"search_popout.tips.hashtag": "hashtag",
|
||||
"search_popout.tips.status": "status",
|
||||
"search_popout.tips.status": "toot",
|
||||
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
||||
"search_popout.tips.user": "user",
|
||||
"search_popout.tips.user": "korisnik",
|
||||
"search_results.accounts": "People",
|
||||
"search_results.hashtags": "Hashtags",
|
||||
"search_results.statuses": "Toots",
|
||||
|
|
@ -370,92 +392,93 @@
|
|||
"status.block": "Block @{name}",
|
||||
"status.bookmark": "Bookmark",
|
||||
"status.cancel_reblog_private": "Unboost",
|
||||
"status.cannot_reblog": "Ovaj post ne može biti boostan",
|
||||
"status.cannot_reblog": "Ova objava ne može biti boostana",
|
||||
"status.copy": "Copy link to status",
|
||||
"status.delete": "Obriši",
|
||||
"status.detailed_status": "Detailed conversation view",
|
||||
"status.direct": "Direct message @{name}",
|
||||
"status.embed": "Embed",
|
||||
"status.favourite": "Označi omiljenim",
|
||||
"status.favourite": "Označi favoritom",
|
||||
"status.filtered": "Filtered",
|
||||
"status.load_more": "Učitaj više",
|
||||
"status.media_hidden": "Sakriven media sadržaj",
|
||||
"status.media_hidden": "Sakriven medijski sadržaj",
|
||||
"status.mention": "Spomeni @{name}",
|
||||
"status.more": "More",
|
||||
"status.mute": "Mute @{name}",
|
||||
"status.mute_conversation": "Utišaj razgovor",
|
||||
"status.open": "Proširi ovaj status",
|
||||
"status.open": "Proširi ovaj toot",
|
||||
"status.pin": "Pin on profile",
|
||||
"status.pinned": "Pinned toot",
|
||||
"status.read_more": "Read more",
|
||||
"status.reblog": "Podigni",
|
||||
"status.reblog_private": "Boost with original visibility",
|
||||
"status.reblogged_by": "{name} je podigao",
|
||||
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.",
|
||||
"status.redraft": "Delete & re-draft",
|
||||
"status.remove_bookmark": "Remove bookmark",
|
||||
"status.read_more": "Pročitajte više",
|
||||
"status.reblog": "Boostaj",
|
||||
"status.reblog_private": "Boostaj s izvornom vidljivošću",
|
||||
"status.reblogged_by": "{name} je boostao/la",
|
||||
"status.reblogs.empty": "Nitko još nije boostao ovaj toot. Kada netko to učini, ovdje će biti prikazani.",
|
||||
"status.redraft": "Izbriši i ponovno uredi",
|
||||
"status.remove_bookmark": "Ukloni knjižnu oznaku",
|
||||
"status.reply": "Odgovori",
|
||||
"status.replyAll": "Odgovori na temu",
|
||||
"status.replyAll": "Odgovori na niz",
|
||||
"status.report": "Prijavi @{name}",
|
||||
"status.sensitive_warning": "Osjetljiv sadržaj",
|
||||
"status.share": "Share",
|
||||
"status.share": "Podijeli",
|
||||
"status.show_less": "Pokaži manje",
|
||||
"status.show_less_all": "Show less for all",
|
||||
"status.show_more": "Pokaži više",
|
||||
"status.show_more_all": "Show more for all",
|
||||
"status.show_thread": "Show thread",
|
||||
"status.uncached_media_warning": "Not available",
|
||||
"status.show_thread": "Prikaži nit",
|
||||
"status.uncached_media_warning": "Nije dostupno",
|
||||
"status.unmute_conversation": "Poništi utišavanje razgovora",
|
||||
"status.unpin": "Unpin from profile",
|
||||
"suggestions.dismiss": "Dismiss suggestion",
|
||||
"suggestions.header": "You might be interested in…",
|
||||
"tabs_bar.federated_timeline": "Federalni",
|
||||
"tabs_bar.home": "Dom",
|
||||
"status.unpin": "Otkvači s profila",
|
||||
"suggestions.dismiss": "Odbaci prijedlog",
|
||||
"suggestions.header": "Možda Vas zanima…",
|
||||
"tabs_bar.federated_timeline": "Federalno",
|
||||
"tabs_bar.home": "Početna",
|
||||
"tabs_bar.local_timeline": "Lokalno",
|
||||
"tabs_bar.notifications": "Notifikacije",
|
||||
"tabs_bar.search": "Search",
|
||||
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
|
||||
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
|
||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
||||
"tabs_bar.notifications": "Obavijesti",
|
||||
"tabs_bar.search": "Traži",
|
||||
"time_remaining.days": "{number, plural, one {preostao # dan} other {preostalo # dana}}",
|
||||
"time_remaining.hours": "{number, plural, one {preostao # sat} few {preostalo # sata} other {preostalo # sati}}",
|
||||
"time_remaining.minutes": "{number, plural, one {preostala # minuta} few {preostale # minute} other {preostalo # minuta}}",
|
||||
"time_remaining.moments": "Moments remaining",
|
||||
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
|
||||
"timeline_hint.resources.followers": "Followers",
|
||||
"timeline_hint.resources.follows": "Follows",
|
||||
"timeline_hint.resources.statuses": "Older toots",
|
||||
"time_remaining.seconds": "{number, plural, one {preostala # sekunda} few {preostale # sekunde} other {preostalo # sekundi}}",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} s drugih poslužitelja nisu prikazani.",
|
||||
"timeline_hint.resources.followers": "Pratitelji",
|
||||
"timeline_hint.resources.follows": "Praćenja",
|
||||
"timeline_hint.resources.statuses": "Stariji tootovi",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
|
||||
"trends.trending_now": "Trending now",
|
||||
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Povuci i spusti kako bi uploadao",
|
||||
"upload_button.label": "Dodaj media",
|
||||
"upload_error.limit": "File upload limit exceeded.",
|
||||
"upload_error.poll": "File upload not allowed with polls.",
|
||||
"upload_form.audio_description": "Describe for people with hearing loss",
|
||||
"upload_form.description": "Describe for the visually impaired",
|
||||
"upload_form.edit": "Edit",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.undo": "Poništi",
|
||||
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
|
||||
"upload_modal.analyzing_picture": "Analyzing picture…",
|
||||
"upload_modal.apply": "Apply",
|
||||
"upload_modal.choose_image": "Choose image",
|
||||
"trends.trending_now": "Popularno",
|
||||
"ui.beforeunload": "Vaša skica bit će izgubljena ako napustite Mastodon.",
|
||||
"units.short.billion": "{count} mlrd.",
|
||||
"units.short.million": "{count} mil.",
|
||||
"units.short.thousand": "{count} tis.",
|
||||
"upload_area.title": "Povucite i ispustite za prijenos",
|
||||
"upload_button.label": "Dodajte slike, video ili audio datoteku",
|
||||
"upload_error.limit": "Ograničenje prijenosa datoteka je prekoračeno.",
|
||||
"upload_error.poll": "Prijenos datoteka nije dopušten kod anketa.",
|
||||
"upload_form.audio_description": "Opišite za ljude sa slabim sluhom",
|
||||
"upload_form.description": "Opišite za ljude sa slabim vidom",
|
||||
"upload_form.edit": "Uredi",
|
||||
"upload_form.thumbnail": "Promijeni pretpregled",
|
||||
"upload_form.undo": "Obriši",
|
||||
"upload_form.video_description": "Opišite za ljude sa slabim sluhom ili vidom",
|
||||
"upload_modal.analyzing_picture": "Analiza slike…",
|
||||
"upload_modal.apply": "Primijeni",
|
||||
"upload_modal.choose_image": "Odaberite sliku",
|
||||
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
|
||||
"upload_modal.detect_text": "Detect text from picture",
|
||||
"upload_modal.edit_media": "Edit media",
|
||||
"upload_modal.detect_text": "Detektiraj tekst sa slike",
|
||||
"upload_modal.edit_media": "Uređivanje medija",
|
||||
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Preview ({ratio})",
|
||||
"upload_progress.label": "Uploadam...",
|
||||
"video.close": "Close video",
|
||||
"video.download": "Download file",
|
||||
"video.exit_fullscreen": "Exit full screen",
|
||||
"video.expand": "Expand video",
|
||||
"video.fullscreen": "Full screen",
|
||||
"video.hide": "Hide video",
|
||||
"video.mute": "Mute sound",
|
||||
"video.pause": "Pause",
|
||||
"video.play": "Play",
|
||||
"video.unmute": "Unmute sound"
|
||||
"upload_progress.label": "Prenošenje...",
|
||||
"video.close": "Zatvori video",
|
||||
"video.download": "Preuzmi datoteku",
|
||||
"video.exit_fullscreen": "Izađi iz cijelog zaslona",
|
||||
"video.expand": "Proširi video",
|
||||
"video.fullscreen": "Cijeli zaslon",
|
||||
"video.hide": "Sakrij video",
|
||||
"video.mute": "Utišaj zvuk",
|
||||
"video.pause": "Pauziraj",
|
||||
"video.play": "Reproduciraj",
|
||||
"video.unmute": "Uključi zvuk"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"account.account_note_header": "Megjegyzés @{name} fiókhoz",
|
||||
"account.account_note_header": "Feljegyzés",
|
||||
"account.add_or_remove_from_list": "Hozzáadás vagy eltávolítás a listáról",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Csoport",
|
||||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "További böngészés az eredeti profilon",
|
||||
"account.cancel_follow_request": "Követési kérelem törlése",
|
||||
"account.direct": "Közvetlen üzenet @{name} számára",
|
||||
"account.disable_notifications": "Ne figyelmeztess, ha @{name} tülköl",
|
||||
"account.domain_blocked": "Rejtett domain",
|
||||
"account.edit_profile": "Profil szerkesztése",
|
||||
"account.enable_notifications": "Figyelmeztess, ha @{name} tülköl",
|
||||
"account.endorse": "Kiemelés a profilodon",
|
||||
"account.follow": "Követés",
|
||||
"account.followers": "Követő",
|
||||
|
|
@ -43,7 +45,7 @@
|
|||
"account.unfollow": "Követés vége",
|
||||
"account.unmute": "@{name} némítás feloldása",
|
||||
"account.unmute_notifications": "@{name} némított értesítéseinek feloldása",
|
||||
"account_note.placeholder": "Nincs megjegyzés",
|
||||
"account_note.placeholder": "Klikk a feljegyzéshez",
|
||||
"alert.rate_limited.message": "Próbáld újra {retry_time, time, medium} után.",
|
||||
"alert.rate_limited.title": "Forgalomkorlátozás",
|
||||
"alert.unexpected.message": "Váratlan hiba történt.",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Jelenleg nincsenek értesítéseid. Lépj kapcsolatba másokkal, hogy elindítsd a beszélgetést.",
|
||||
"empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más szervereken levő felhasználókat, hogy megtöltsd",
|
||||
"error.unexpected_crash.explanation": "Egy hiba vagy böngésző inkompatibilitás miatt ez az oldal nem jeleníthető meg rendesen.",
|
||||
"error.unexpected_crash.explanation_addons": "Ezt az oldalt nem lehet helyesen megjeleníteni. Ezt a hibát valószínűleg egy böngésző beépülő vagy egy automatikus fordító okozza.",
|
||||
"error.unexpected_crash.next_steps": "Próbáld frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.",
|
||||
"error.unexpected_crash.next_steps_addons": "Próbáld letiltani őket és frissíteni az oldalt. Ha ez nem segít, egy másik böngészőn vagy appon keresztül még mindig használhatod a Mastodont.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Veremkiíratás vágólapra másolása",
|
||||
"errors.unexpected_crash.report_issue": "Probléma jelentése",
|
||||
"follow_request.authorize": "Engedélyezés",
|
||||
|
|
@ -250,9 +254,11 @@
|
|||
"keyboard_shortcuts.unfocus": "tülk szerkesztés/keresés fókuszpontból való kivétele",
|
||||
"keyboard_shortcuts.up": "felfelé mozdítás a listában",
|
||||
"lightbox.close": "Bezárás",
|
||||
"lightbox.compress": "Képnézet összecsukása",
|
||||
"lightbox.expand": "Képnézet kinagyítása",
|
||||
"lightbox.next": "Következő",
|
||||
"lightbox.previous": "Előző",
|
||||
"lightbox.view_context": "Kontextus megtekintése",
|
||||
"lightbox.view_context": "Környezet megtekintése",
|
||||
"lists.account.add": "Hozzáadás a listához",
|
||||
"lists.account.remove": "Eltávolítás a listából",
|
||||
"lists.delete": "Lista törlése",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Cím megváltoztatása",
|
||||
"lists.new.create": "Lista hozzáadása",
|
||||
"lists.new.title_placeholder": "Új lista címe",
|
||||
"lists.replies_policy.all_replies": "Bármely követett felhasználó",
|
||||
"lists.replies_policy.list_replies": "A lista tagjai",
|
||||
"lists.replies_policy.no_replies": "Senki",
|
||||
"lists.replies_policy.title": "Nekik mutassuk a válaszokat:",
|
||||
"lists.search": "Keresés a követett személyek között",
|
||||
"lists.subheading": "Listáid",
|
||||
"load_pending": "{count, plural, one {# új elem} other {# új elem}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Láthatóság állítása",
|
||||
"missing_indicator.label": "Nincs találat",
|
||||
"missing_indicator.sublabel": "Ez az erőforrás nem található",
|
||||
"mute_modal.duration": "Időtartam",
|
||||
"mute_modal.hide_notifications": "Rejtsük el a felhasználótól származó értesítéseket?",
|
||||
"mute_modal.indefinite": "Határozatlan",
|
||||
"navigation_bar.apps": "Mobil appok",
|
||||
"navigation_bar.blocks": "Letiltott felhasználók",
|
||||
"navigation_bar.bookmarks": "Könyvjelzők",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "A szavazásod véget ért",
|
||||
"notification.poll": "Egy szavazás, melyben részt vettél, véget ért",
|
||||
"notification.reblog": "{name} megtolta a tülködet",
|
||||
"notification.status": "{name} tülkölt egyet",
|
||||
"notifications.clear": "Értesítések törlése",
|
||||
"notifications.clear_confirmation": "Biztos, hogy véglegesen törölni akarod az összes értesítésed?",
|
||||
"notifications.column_settings.alert": "Asztali értesítések",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Megtolások:",
|
||||
"notifications.column_settings.show": "Oszlopban mutatás",
|
||||
"notifications.column_settings.sound": "Hang lejátszása",
|
||||
"notifications.column_settings.status": "Új tülkök:",
|
||||
"notifications.filter.all": "Mind",
|
||||
"notifications.filter.boosts": "Megtolások",
|
||||
"notifications.filter.favourites": "Kedvencnek jelölések",
|
||||
"notifications.filter.follows": "Követések",
|
||||
"notifications.filter.mentions": "Megemlítések",
|
||||
"notifications.filter.polls": "Szavazások eredményei",
|
||||
"notifications.filter.statuses": "Frissítések azoktól, akiket követsz",
|
||||
"notifications.group": "{count} értesítés",
|
||||
"notifications.mark_as_read": "Minden értesítés olvasottnak jelölése",
|
||||
"notifications.permission_denied": "Nem tudjuk engedélyezni az asztali értesítéseket, mert az engedélyt megtagadták.",
|
||||
"notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetőek, mert az engedélyt megtagadták a böngészőben",
|
||||
"notifications_permission_banner.enable": "Asztali értesítések engedélyezése",
|
||||
"notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.",
|
||||
"notifications_permission_banner.title": "Soha ne mulassz el semmit",
|
||||
"picture_in_picture.restore": "Visszarakás",
|
||||
"poll.closed": "Lezárva",
|
||||
"poll.refresh": "Frissítés",
|
||||
"poll.total_people": "{count, plural, one {# személy} other {# személy}}",
|
||||
|
|
@ -430,7 +452,7 @@
|
|||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Húzd ide a feltöltéshez",
|
||||
"upload_button.label": "Média hozzáadása ({formats})",
|
||||
"upload_button.label": "Média hozzáadása",
|
||||
"upload_error.limit": "Túllépted a fájlfeltöltési korlátot.",
|
||||
"upload_error.poll": "Szavazásnál nem lehet fájlt feltölteni.",
|
||||
"upload_form.audio_description": "Írja le a hallássérültek számára",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Szöveg felismerése a képről",
|
||||
"upload_modal.edit_media": "Média szerkesztése",
|
||||
"upload_modal.hint": "Kattints vagy húzd a kört az előnézetben arra a fókuszpontra, mely minden megjelenített bélyegképen látható kell, legyen.",
|
||||
"upload_modal.preparing_ocr": "OCR előkészítése…",
|
||||
"upload_modal.preview_label": "Előnézet ({ratio})",
|
||||
"upload_progress.label": "Feltöltés...",
|
||||
"video.close": "Videó bezárása",
|
||||
|
|
|
|||
|
|
@ -6,11 +6,13 @@
|
|||
"account.block": "Արգելափակել @{name}֊ին",
|
||||
"account.block_domain": "Թաքցնել ամէնը հետեւեալ տիրոյթից՝ {domain}",
|
||||
"account.blocked": "Արգելափակուած է",
|
||||
"account.browse_more_on_origin_server": "Դիտել ավելին իրական պրոֆիլում",
|
||||
"account.browse_more_on_origin_server": "Դիտել աւելին իրական պրոֆիլում",
|
||||
"account.cancel_follow_request": "չեղարկել հետեւելու հայցը",
|
||||
"account.direct": "Նամակ գրել @{name} -ին",
|
||||
"account.disable_notifications": "Ծանուցումները անջատել @{name} գրառումների համար",
|
||||
"account.domain_blocked": "Տիրոյթը արգելափակուած է",
|
||||
"account.edit_profile": "Խմբագրել անձնական էջը",
|
||||
"account.enable_notifications": "Ծանուցել ինձ @{name} գրառումների մասին",
|
||||
"account.endorse": "Ցուցադրել անձնական էջում",
|
||||
"account.follow": "Հետեւել",
|
||||
"account.followers": "Հետեւողներ",
|
||||
|
|
@ -83,7 +85,7 @@
|
|||
"community.column_settings.media_only": "Media only",
|
||||
"community.column_settings.remote_only": "Միայն հեռակա",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning_learn_more": "Իմանալ ավելին",
|
||||
"compose_form.direct_message_warning_learn_more": "Իմանալ աւելին",
|
||||
"compose_form.hashtag_warning": "Այս թութը չի հաշվառվի որեւէ պիտակի տակ, քանզի այն ծածուկ է։ Միայն հրապարակային թթերը հնարավոր է որոնել պիտակներով։",
|
||||
"compose_form.lock_disclaimer": "Քո հաշիւը {locked} չէ։ Իւրաքանչիւրութիւն ոք կարող է հետեւել քեզ եւ տեսնել միայն հետեւողների համար նախատեսուած գրառումները։",
|
||||
"compose_form.lock_disclaimer.lock": "փակ",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Ոչ մի ծանուցում դեռ չունես։ Բզիր միւսներին՝ խօսակցութիւնը սկսելու համար։",
|
||||
"empty_column.public": "Այստեղ բան չկա՛յ։ Հրապարակային մի բան գրիր կամ հետեւիր այլ հանգոյցներից էակների՝ այն լցնելու համար։",
|
||||
"error.unexpected_crash.explanation": "Մեր ծրագրակազմում վրիպակի կամ դիտարկչի անհամատեղելիութեան պատճառով այս էջը չի կարող լիարժէք պատկերուել։",
|
||||
"error.unexpected_crash.explanation_addons": "Այս էջի ճիշտ պատկերումը չի ստացում։ Խափանումը հաւանաբար առաջացել է դիտարկիչի յավելվածից կամ առցանց թարգմանիչից։",
|
||||
"error.unexpected_crash.next_steps": "Փորձիր թարմացնել էջը։ Եթե դա չօգնի ապա կարող ես օգտվել Մաստադոնից ուրիշ դիտարկիչով կամ հավելվածով։",
|
||||
"error.unexpected_crash.next_steps_addons": "Փորձիր անջատել յաւելուածները եւ թարմացնել էջը։ Եթե դա չօգնի, կարող ես օգտուել Մաստադոնից այլ դիտարկիչով կամ յաւելուածով։",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Պատճենել սթաքթրեյսը սեղմատախտակին",
|
||||
"errors.unexpected_crash.report_issue": "Զեկուցել խնդրի մասին",
|
||||
"follow_request.authorize": "Վավերացնել",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "տեքստի/որոնման տիրույթից ապասեւեռվելու համար",
|
||||
"keyboard_shortcuts.up": "ցանկով վերեւ շարժվելու համար",
|
||||
"lightbox.close": "Փակել",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Հաջորդ",
|
||||
"lightbox.previous": "Նախորդ",
|
||||
"lightbox.view_context": "Տեսնել ենթատեքստը",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Փոխել վերնագիրը",
|
||||
"lists.new.create": "Ավելացնել ցանկ",
|
||||
"lists.new.title_placeholder": "Նոր ցանկի վերնագիր",
|
||||
"lists.replies_policy.all_replies": "Ում հետևում եմ",
|
||||
"lists.replies_policy.list_replies": "Ցանկի անդամները",
|
||||
"lists.replies_policy.no_replies": "Ոչ ոք",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Փնտրել քո հետեւած մարդկանց մեջ",
|
||||
"lists.subheading": "Քո ցանկերը",
|
||||
"load_pending": "{count, plural, one {# նոր նիւթ} other {# նոր նիւթ}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Ցուցադրել/թաքցնել",
|
||||
"missing_indicator.label": "Չգտնվեց",
|
||||
"missing_indicator.sublabel": "Պաշարը չի գտնւում",
|
||||
"mute_modal.duration": "Տևողություն",
|
||||
"mute_modal.hide_notifications": "Թաքցնե՞լ ցանուցումներն այս օգտատիրոջից։",
|
||||
"mute_modal.indefinite": "Անժամկետ",
|
||||
"navigation_bar.apps": "Դիւրակիր յաւելուածներ",
|
||||
"navigation_bar.blocks": "Արգելափակված օգտատերեր",
|
||||
"navigation_bar.bookmarks": "Էջանիշեր",
|
||||
|
|
@ -298,9 +310,10 @@
|
|||
"notification.own_poll": "Հարցումդ աւարտուեց",
|
||||
"notification.poll": "Հարցումը, ուր դու քուէարկել ես, աւարտուեց։",
|
||||
"notification.reblog": "{name} տարածեց թութդ",
|
||||
"notification.status": "{name} հենց նոր թթեց",
|
||||
"notifications.clear": "Մաքրել ծանուցումները",
|
||||
"notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապես մաքրել քո բոլոր ծանուցումները։",
|
||||
"notifications.column_settings.alert": "Աշխատատիրույթի ծանուցումներ",
|
||||
"notifications.clear_confirmation": "Վստա՞հ ես, որ ուզում ես մշտապէս մաքրել քո բոլոր ծանուցումները։",
|
||||
"notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ",
|
||||
"notifications.column_settings.favourite": "Հաւանածներից՝",
|
||||
"notifications.column_settings.filter_bar.advanced": "Ցուցադրել բոլոր կատեգորիաները",
|
||||
"notifications.column_settings.filter_bar.category": "Արագ զտման վահանակ",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Տարածածներից՝",
|
||||
"notifications.column_settings.show": "Ցուցադրել սիւնում",
|
||||
"notifications.column_settings.sound": "Ձայն հանել",
|
||||
"notifications.column_settings.status": "Նոր թթեր։",
|
||||
"notifications.filter.all": "Բոլորը",
|
||||
"notifications.filter.boosts": "Տարածածները",
|
||||
"notifications.filter.favourites": "Հաւանածները",
|
||||
"notifications.filter.follows": "Հետեւածները",
|
||||
"notifications.filter.mentions": "Նշումները",
|
||||
"notifications.filter.polls": "Հարցման արդիւնքները",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} ծանուցում",
|
||||
"notifications.mark_as_read": "Համարել բոլոր ծանուցումները ընթերցած",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Միացնել դիտարկչից ծանուցումները",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Փակ",
|
||||
"poll.refresh": "Թարմացնել",
|
||||
"poll.total_people": "{count, plural, one {# հոգի} other {# հոգի}}",
|
||||
|
|
@ -349,7 +371,7 @@
|
|||
"reply_indicator.cancel": "Չեղարկել",
|
||||
"report.forward": "Փոխանցել {target}֊ին",
|
||||
"report.forward_hint": "Այս հաշիւ այլ հանգոյցից է։ Ուղարկե՞մ այնտեղ էլ այս բողոքի անոնիմ պատճէնը։",
|
||||
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:",
|
||||
"report.hint": "Այս զեկոյցը կուղարկուի հանգոյցի մոդերատորներին։ Ներքեւում կարող ես տրամադրել բացատրութիւն, թէ ինչու ես զեկուցում այս հաշուի մասին․",
|
||||
"report.placeholder": "Լրացուցիչ մեկնաբանութիւններ",
|
||||
"report.submit": "Ուղարկել",
|
||||
"report.target": "Բողոքել {target}֊ի մասին",
|
||||
|
|
@ -378,16 +400,16 @@
|
|||
"status.embed": "Ներդնել",
|
||||
"status.favourite": "Հավանել",
|
||||
"status.filtered": "Զտված",
|
||||
"status.load_more": "Բեռնել ավելին",
|
||||
"status.load_more": "Բեռնել աւելին",
|
||||
"status.media_hidden": "մեդիաբովանդակութիւնը թաքցուած է",
|
||||
"status.mention": "Նշել @{name}֊ին",
|
||||
"status.more": "Ավելին",
|
||||
"status.more": "Աւելին",
|
||||
"status.mute": "Լռեցնել @{name}֊ին",
|
||||
"status.mute_conversation": "Լռեցնել խօսակցութիւնը",
|
||||
"status.open": "Ընդարձակել այս թութը",
|
||||
"status.pin": "Ամրացնել անձնական էջում",
|
||||
"status.pinned": "Ամրացված թութ",
|
||||
"status.read_more": "Կարդալ ավելին",
|
||||
"status.read_more": "Կարդալ աւելին",
|
||||
"status.reblog": "Տարածել",
|
||||
"status.reblog_private": "Տարածել սեփական լսարանին",
|
||||
"status.reblogged_by": "{name} տարածել է",
|
||||
|
|
@ -401,7 +423,7 @@
|
|||
"status.share": "Կիսվել",
|
||||
"status.show_less": "Պակաս",
|
||||
"status.show_less_all": "Թաքցնել բոլոր նախազգուշացնումները",
|
||||
"status.show_more": "Ավելին",
|
||||
"status.show_more": "Աւելին",
|
||||
"status.show_more_all": "Ցուցադրել բոլոր նախազգուշացնումները",
|
||||
"status.show_thread": "Բացել շղթան",
|
||||
"status.uncached_media_warning": "Անհասանելի",
|
||||
|
|
@ -423,7 +445,7 @@
|
|||
"timeline_hint.resources.followers": "Հետևորդներ",
|
||||
"timeline_hint.resources.follows": "Հետևել",
|
||||
"timeline_hint.resources.statuses": "Հին թութեր",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խոսում են",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} մարդ} other {{counter} մարդիկ}} խօսում են",
|
||||
"trends.trending_now": "Այժմ արդիական",
|
||||
"ui.beforeunload": "Քո սեւագիրը կկորի, եթե լքես Մաստոդոնը։",
|
||||
"units.short.billion": "{count}մլրդ",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Հայտնբերել տեքստը նկարից",
|
||||
"upload_modal.edit_media": "Խմբագրել մեդիան",
|
||||
"upload_modal.hint": "Սեղմէք եւ տեղաշարժէք նախադիտման շրջանակը՝ որ ընտրէք մանրապատկերում միշտ տեսանելի կէտը։",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Նախադիտում ({ratio})",
|
||||
"upload_progress.label": "Վերբեռնվում է…",
|
||||
"video.close": "Փակել տեսագրութիւնը",
|
||||
|
|
@ -456,6 +479,6 @@
|
|||
"video.hide": "Թաքցնել տեսագրութիւնը",
|
||||
"video.mute": "Լռեցնել ձայնը",
|
||||
"video.pause": "Դադար տալ",
|
||||
"video.play": "Նվագել",
|
||||
"video.play": "Նուագել",
|
||||
"video.unmute": "Միացնել ձայնը"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,22 +1,24 @@
|
|||
{
|
||||
"account.account_note_header": "Note",
|
||||
"account.account_note_header": "Catatan",
|
||||
"account.add_or_remove_from_list": "Tambah atau Hapus dari daftar",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Grup",
|
||||
"account.block": "Blokir @{name}",
|
||||
"account.block_domain": "Sembunyikan segalanya dari {domain}",
|
||||
"account.blocked": "Terblokir",
|
||||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.browse_more_on_origin_server": "Lihat lebih lanjut diprofil asli",
|
||||
"account.cancel_follow_request": "Batalkan permintaan ikuti",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.disable_notifications": "Berhenti memberitahu saya ketika @{name} memposting",
|
||||
"account.domain_blocked": "Domain disembunyikan",
|
||||
"account.edit_profile": "Ubah profil",
|
||||
"account.enable_notifications": "Beritahu saya saat @{name} memposting",
|
||||
"account.endorse": "Tampilkan di profil",
|
||||
"account.follow": "Ikuti",
|
||||
"account.followers": "Pengikut",
|
||||
"account.followers.empty": "Tidak ada satupun yang mengkuti pengguna ini saat ini.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
|
||||
"account.followers_counter": "{count, plural, other {{counter} Pengikut}}",
|
||||
"account.following_counter": "{count, plural, other {{counter} Mengikuti}}",
|
||||
"account.follows.empty": "Pengguna ini belum mengikuti siapapun.",
|
||||
"account.follows_you": "Mengikuti anda",
|
||||
"account.hide_reblogs": "Sembunyikan boosts dari @{name}",
|
||||
|
|
@ -36,14 +38,14 @@
|
|||
"account.requested": "Menunggu persetujuan. Klik untuk membatalkan permintaan",
|
||||
"account.share": "Bagikan profil @{name}",
|
||||
"account.show_reblogs": "Tampilkan boost dari @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
|
||||
"account.statuses_counter": "{count, plural, other {{counter} Toot}}",
|
||||
"account.unblock": "Hapus blokir @{name}",
|
||||
"account.unblock_domain": "Tampilkan {domain}",
|
||||
"account.unblock_domain": "Buka blokir domain {domain}",
|
||||
"account.unendorse": "Jangan tampilkan di profil",
|
||||
"account.unfollow": "Berhenti mengikuti",
|
||||
"account.unmute": "Berhenti membisukan @{name}",
|
||||
"account.unmute_notifications": "Munculkan notifikasi dari @{name}",
|
||||
"account_note.placeholder": "Click to add a note",
|
||||
"account_note.placeholder": "Klik untuk menambah catatan",
|
||||
"alert.rate_limited.message": "Tolong ulangi setelah {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Batasan tingkat",
|
||||
"alert.unexpected.message": "Terjadi kesalahan yang tidak terduga.",
|
||||
|
|
@ -79,9 +81,9 @@
|
|||
"column_header.show_settings": "Tampilkan pengaturan",
|
||||
"column_header.unpin": "Lepaskan",
|
||||
"column_subheading.settings": "Pengaturan",
|
||||
"community.column_settings.local_only": "Local only",
|
||||
"community.column_settings.local_only": "Hanya lokal",
|
||||
"community.column_settings.media_only": "Hanya media",
|
||||
"community.column_settings.remote_only": "Remote only",
|
||||
"community.column_settings.remote_only": "Hanya jarak jauh",
|
||||
"compose_form.direct_message_warning": "This toot will only be visible to all the mentioned users.",
|
||||
"compose_form.direct_message_warning_learn_more": "Pelajari selengkapnya",
|
||||
"compose_form.hashtag_warning": "Toot ini tidak akan ada dalam daftar tagar manapun karena telah di set sebagai tidak terdaftar. Hanya postingan publik yang bisa dicari dengan tagar.",
|
||||
|
|
@ -96,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Ubah japat menjadi pilihan tunggal",
|
||||
"compose_form.publish": "Toot",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Tandai sebagai media sensitif",
|
||||
"compose_form.sensitive.marked": "Sumber ini telah ditandai sebagai sumber sensitif.",
|
||||
"compose_form.sensitive.unmarked": "Sumber ini tidak ditandai sebagai sumber sensitif",
|
||||
"compose_form.sensitive.hide": "{count, plural, other {Tandai media sebagai sensitif}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, other {Media ini ditandai sebagai sensitif}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, other {Media ini tidak ditandai sebagai sensitif}}",
|
||||
"compose_form.spoiler.marked": "Teks disembunyikan dibalik peringatan",
|
||||
"compose_form.spoiler.unmarked": "Teks tidak tersembunyi",
|
||||
"compose_form.spoiler_placeholder": "Peringatan konten",
|
||||
|
|
@ -166,13 +168,15 @@
|
|||
"empty_column.notifications": "Anda tidak memiliki notifikasi apapun. Berinteraksi dengan orang lain untuk memulai percakapan.",
|
||||
"empty_column.public": "Tidak ada apapun disini! Tulis sesuatu, atau ikuti pengguna lain dari server lain untuk mengisi ini",
|
||||
"error.unexpected_crash.explanation": "Karena kutu pada kode kami atau isu kompatibilitas peramban, halaman tak dapat ditampilkan dengan benar.",
|
||||
"error.unexpected_crash.explanation_addons": "Halaman ini tidak dapat ditampilkan dengan benar. Kesalahan ini mungkin disebabkan pengaya peramban atau alat terjemahan otomatis.",
|
||||
"error.unexpected_crash.next_steps": "Coba segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi native.",
|
||||
"error.unexpected_crash.next_steps_addons": "Coba nonaktifkan mereka lalu segarkan halaman. Jika tak membantu, Anda masih bisa memakai Mastodon dengan peramban berbeda atau aplikasi murni.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Salin stacktrace ke papan klip",
|
||||
"errors.unexpected_crash.report_issue": "Laporkan masalah",
|
||||
"follow_request.authorize": "Izinkan",
|
||||
"follow_request.reject": "Tolak",
|
||||
"follow_requests.unlocked_explanation": "Meskipun akun Anda tidak dikunci, staf {domain} menyarankan Anda untuk meninjau permintaan mengikuti dari akun-akun ini secara manual.",
|
||||
"generic.saved": "Saved",
|
||||
"generic.saved": "Disimpan",
|
||||
"getting_started.developers": "Pengembang",
|
||||
"getting_started.directory": "Direktori profil",
|
||||
"getting_started.documentation": "Dokumentasi",
|
||||
|
|
@ -242,7 +246,7 @@
|
|||
"keyboard_shortcuts.reply": "balas",
|
||||
"keyboard_shortcuts.requests": "buka daftar permintaan ikuti",
|
||||
"keyboard_shortcuts.search": "untuk fokus mencari",
|
||||
"keyboard_shortcuts.spoilers": "to show/hide CW field",
|
||||
"keyboard_shortcuts.spoilers": "untuk menampilkan/menyembunyikan bidang CW",
|
||||
"keyboard_shortcuts.start": "buka kolom \"memulai\"",
|
||||
"keyboard_shortcuts.toggle_hidden": "tampilkan/sembunyikan teks di belakang CW",
|
||||
"keyboard_shortcuts.toggle_sensitivity": "tampilkan/sembunyikan media",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "untuk tidak fokus pada area teks/pencarian",
|
||||
"keyboard_shortcuts.up": "untuk memindah ke atas pada daftar",
|
||||
"lightbox.close": "Tutup",
|
||||
"lightbox.compress": "Kompres kotak tampilan gambar",
|
||||
"lightbox.expand": "Besarkan kotak tampilan gambar",
|
||||
"lightbox.next": "Selanjutnya",
|
||||
"lightbox.previous": "Sebelumnya",
|
||||
"lightbox.view_context": "Lihat konteks",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Ubah judul",
|
||||
"lists.new.create": "Tambah daftar",
|
||||
"lists.new.title_placeholder": "Judul daftar baru",
|
||||
"lists.replies_policy.all_replies": "Siapapun pengguna yang diikuti",
|
||||
"lists.replies_policy.list_replies": "Anggota di daftar tersebut",
|
||||
"lists.replies_policy.no_replies": "Tidak ada satu pun",
|
||||
"lists.replies_policy.title": "Tampilkan balasan ke:",
|
||||
"lists.search": "Cari di antara orang yang Anda ikuti",
|
||||
"lists.subheading": "Daftar Anda",
|
||||
"load_pending": "{count, plural, other {# item baru}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Tampil/Sembunyikan",
|
||||
"missing_indicator.label": "Tidak ditemukan",
|
||||
"missing_indicator.sublabel": "Sumber daya tak bisa ditemukan",
|
||||
"mute_modal.duration": "Durasi",
|
||||
"mute_modal.hide_notifications": "Sembunyikan notifikasi dari pengguna ini?",
|
||||
"mute_modal.indefinite": "Tak terbatas",
|
||||
"navigation_bar.apps": "Aplikasi mobile",
|
||||
"navigation_bar.blocks": "Pengguna diblokir",
|
||||
"navigation_bar.bookmarks": "Markah",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Japat Anda telah berakhir",
|
||||
"notification.poll": "Japat yang Anda ikuti telah berakhir",
|
||||
"notification.reblog": "{name} mem-boost status anda",
|
||||
"notification.status": "{name} baru saja memposting",
|
||||
"notifications.clear": "Hapus notifikasi",
|
||||
"notifications.clear_confirmation": "Apa anda yakin hendak menghapus semua notifikasi anda?",
|
||||
"notifications.column_settings.alert": "Notifikasi desktop",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Boost:",
|
||||
"notifications.column_settings.show": "Tampilkan dalam kolom",
|
||||
"notifications.column_settings.sound": "Mainkan suara",
|
||||
"notifications.column_settings.status": "Toot baru:",
|
||||
"notifications.filter.all": "Semua",
|
||||
"notifications.filter.boosts": "Boost",
|
||||
"notifications.filter.favourites": "Favorit",
|
||||
"notifications.filter.follows": "Diikuti",
|
||||
"notifications.filter.mentions": "Sebutan",
|
||||
"notifications.filter.polls": "Hasil japat",
|
||||
"notifications.filter.statuses": "Pembaruan dari orang yang Anda ikuti",
|
||||
"notifications.group": "{count} notifikasi",
|
||||
"notifications.mark_as_read": "Tandai setiap notifikasi sebagai sudah dibaca",
|
||||
"notifications.permission_denied": "Tidak dapat mengaktifkan notifikasi desktop karena izin ditolak.",
|
||||
"notifications.permission_denied_alert": "Notifikasi desktop tidak dapat diaktifkan karena izin peramban telah ditolak sebelumnya",
|
||||
"notifications_permission_banner.enable": "Aktifkan notifikasi desktop",
|
||||
"notifications_permission_banner.how_to_control": "Untuk menerima notifikasi saat Mastodon terbuka, aktifkan notifikasi desktop. Anda dapat mengendalikan tipe interaksi mana yang ditampilkan notifikasi desktop melalui tombol {icon} di atas saat sudah aktif.",
|
||||
"notifications_permission_banner.title": "Jangan lewatkan apapun",
|
||||
"picture_in_picture.restore": "Taruh kembali",
|
||||
"poll.closed": "Ditutup",
|
||||
"poll.refresh": "Segarkan",
|
||||
"poll.total_people": "{count, plural, other {# orang}}",
|
||||
|
|
@ -343,7 +365,7 @@
|
|||
"relative_time.days": "{number}h",
|
||||
"relative_time.hours": "{number}j",
|
||||
"relative_time.just_now": "sekarang",
|
||||
"relative_time.minutes": "{number}b",
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}d",
|
||||
"relative_time.today": "hari ini",
|
||||
"reply_indicator.cancel": "Batal",
|
||||
|
|
@ -419,16 +441,16 @@
|
|||
"time_remaining.minutes": "{number, plural, other {# menit}} tersisa",
|
||||
"time_remaining.moments": "Momen tersisa",
|
||||
"time_remaining.seconds": "{number, plural, other {# detik}} tersisa",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} from other servers are not displayed.",
|
||||
"timeline_hint.resources.followers": "Followers",
|
||||
"timeline_hint.resources.follows": "Follows",
|
||||
"timeline_hint.resources.statuses": "Older toots",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
|
||||
"timeline_hint.remote_resource_not_displayed": "{resource} dari server lain tidak ditampilkan.",
|
||||
"timeline_hint.resources.followers": "Pengikut",
|
||||
"timeline_hint.resources.follows": "Ikuti",
|
||||
"timeline_hint.resources.statuses": "Toot lama",
|
||||
"trends.counter_by_accounts": "{count, plural, other {{counter} orang}} berbicara",
|
||||
"trends.trending_now": "Sedang tren sekarang",
|
||||
"ui.beforeunload": "Naskah anda akan hilang jika anda keluar dari Mastodon.",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"units.short.billion": "{count}M",
|
||||
"units.short.million": "{count}Jt",
|
||||
"units.short.thousand": "{count}Rb",
|
||||
"upload_area.title": "Seret & lepaskan untuk mengunggah",
|
||||
"upload_button.label": "Tambahkan media",
|
||||
"upload_error.limit": "Batas unggah berkas terlampaui.",
|
||||
|
|
@ -436,16 +458,17 @@
|
|||
"upload_form.audio_description": "Penjelasan untuk orang dengan gangguan pendengaran",
|
||||
"upload_form.description": "Deskripsikan untuk mereka yang tidak bisa melihat dengan jelas",
|
||||
"upload_form.edit": "Sunting",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.thumbnail": "Ubah gambar kecil",
|
||||
"upload_form.undo": "Undo",
|
||||
"upload_form.video_description": "Penjelasan untuk orang dengan gangguan pendengaran atau penglihatan",
|
||||
"upload_modal.analyzing_picture": "Analisis gambar…",
|
||||
"upload_modal.apply": "Terapkan",
|
||||
"upload_modal.choose_image": "Choose image",
|
||||
"upload_modal.choose_image": "Pilih gambar",
|
||||
"upload_modal.description_placeholder": "Muharjo seorang xenofobia universal yang takut pada warga jazirah, contohnya Qatar",
|
||||
"upload_modal.detect_text": "Deteksi teks pada gambar",
|
||||
"upload_modal.edit_media": "Sunting media",
|
||||
"upload_modal.hint": "Klik atau seret lingkaran pada pratinjau untuk memilih titik fokus yang akan ditampilkan pada semua gambar kecil.",
|
||||
"upload_modal.preparing_ocr": "Menyiapkan OCR…",
|
||||
"upload_modal.preview_label": "Pratinjau ({ratio})",
|
||||
"upload_progress.label": "Mengunggah...",
|
||||
"video.close": "Tutup video",
|
||||
|
|
|
|||
|
|
@ -9,8 +9,10 @@
|
|||
"account.browse_more_on_origin_server": "Browse more on the original profile",
|
||||
"account.cancel_follow_request": "Cancel follow request",
|
||||
"account.direct": "Direct Message @{name}",
|
||||
"account.disable_notifications": "Stop notifying me when @{name} posts",
|
||||
"account.domain_blocked": "Domain hidden",
|
||||
"account.edit_profile": "Modifikar profilo",
|
||||
"account.enable_notifications": "Notify me when @{name} posts",
|
||||
"account.endorse": "Feature on profile",
|
||||
"account.follow": "Sequar",
|
||||
"account.followers": "Sequanti",
|
||||
|
|
@ -96,9 +98,9 @@
|
|||
"compose_form.poll.switch_to_single": "Change poll to allow for a single choice",
|
||||
"compose_form.publish": "Siflar",
|
||||
"compose_form.publish_loud": "{publish}!",
|
||||
"compose_form.sensitive.hide": "Mark media as sensitive",
|
||||
"compose_form.sensitive.marked": "Media is marked as sensitive",
|
||||
"compose_form.sensitive.unmarked": "Media is not marked as sensitive",
|
||||
"compose_form.sensitive.hide": "{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}",
|
||||
"compose_form.sensitive.marked": "{count, plural, one {Media is marked as sensitive} other {Media is marked as sensitive}}",
|
||||
"compose_form.sensitive.unmarked": "{count, plural, one {Media is not marked as sensitive} other {Media is not marked as sensitive}}",
|
||||
"compose_form.spoiler.marked": "Text is hidden behind warning",
|
||||
"compose_form.spoiler.unmarked": "Text is not hidden",
|
||||
"compose_form.spoiler_placeholder": "Averto di kontenajo",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.",
|
||||
"empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.",
|
||||
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
||||
"error.unexpected_crash.explanation_addons": "This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.",
|
||||
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"error.unexpected_crash.next_steps_addons": "Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
|
||||
"errors.unexpected_crash.report_issue": "Report issue",
|
||||
"follow_request.authorize": "Yurizar",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "to move up in the list",
|
||||
"lightbox.close": "Klozar",
|
||||
"lightbox.compress": "Compress image view box",
|
||||
"lightbox.expand": "Expand image view box",
|
||||
"lightbox.next": "Next",
|
||||
"lightbox.previous": "Previous",
|
||||
"lightbox.view_context": "View context",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Change title",
|
||||
"lists.new.create": "Add list",
|
||||
"lists.new.title_placeholder": "New list title",
|
||||
"lists.replies_policy.all_replies": "Any followed user",
|
||||
"lists.replies_policy.list_replies": "Members of the list",
|
||||
"lists.replies_policy.no_replies": "No one",
|
||||
"lists.replies_policy.title": "Show replies to:",
|
||||
"lists.search": "Search among people you follow",
|
||||
"lists.subheading": "Your lists",
|
||||
"load_pending": "{count, plural, one {# new item} other {# new items}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Chanjar videbleso",
|
||||
"missing_indicator.label": "Ne trovita",
|
||||
"missing_indicator.sublabel": "This resource could not be found",
|
||||
"mute_modal.duration": "Duration",
|
||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
||||
"mute_modal.indefinite": "Indefinite",
|
||||
"navigation_bar.apps": "Mobile apps",
|
||||
"navigation_bar.blocks": "Blokusita uzeri",
|
||||
"navigation_bar.bookmarks": "Bookmarks",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Your poll has ended",
|
||||
"notification.poll": "A poll you have voted in has ended",
|
||||
"notification.reblog": "{name} repetis tua mesajo",
|
||||
"notification.status": "{name} just posted",
|
||||
"notifications.clear": "Efacar savigi",
|
||||
"notifications.clear_confirmation": "Ka tu esas certa, ke tu volas efacar omna tua savigi?",
|
||||
"notifications.column_settings.alert": "Surtabla savigi",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Repeti:",
|
||||
"notifications.column_settings.show": "Montrar en kolumno",
|
||||
"notifications.column_settings.sound": "Plear sono",
|
||||
"notifications.column_settings.status": "New toots:",
|
||||
"notifications.filter.all": "All",
|
||||
"notifications.filter.boosts": "Boosts",
|
||||
"notifications.filter.favourites": "Favourites",
|
||||
"notifications.filter.follows": "Follows",
|
||||
"notifications.filter.mentions": "Mentions",
|
||||
"notifications.filter.polls": "Poll results",
|
||||
"notifications.filter.statuses": "Updates from people you follow",
|
||||
"notifications.group": "{count} notifications",
|
||||
"notifications.mark_as_read": "Mark every notification as read",
|
||||
"notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request",
|
||||
"notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before",
|
||||
"notifications_permission_banner.enable": "Enable desktop notifications",
|
||||
"notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.",
|
||||
"notifications_permission_banner.title": "Never miss a thing",
|
||||
"picture_in_picture.restore": "Put it back",
|
||||
"poll.closed": "Closed",
|
||||
"poll.refresh": "Refresh",
|
||||
"poll.total_people": "{count, plural, one {# person} other {# people}}",
|
||||
|
|
@ -446,6 +468,7 @@
|
|||
"upload_modal.detect_text": "Detect text from picture",
|
||||
"upload_modal.edit_media": "Edit media",
|
||||
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
|
||||
"upload_modal.preparing_ocr": "Preparing OCR…",
|
||||
"upload_modal.preview_label": "Preview ({ratio})",
|
||||
"upload_progress.label": "Kargante...",
|
||||
"video.close": "Close video",
|
||||
|
|
|
|||
|
|
@ -9,14 +9,16 @@
|
|||
"account.browse_more_on_origin_server": "Skoða nánari upplýsingar á notandasniðinu",
|
||||
"account.cancel_follow_request": "Hætta við beiðni um að fylgjast með",
|
||||
"account.direct": "Bein skilaboð til @{name}",
|
||||
"account.disable_notifications": "Hætta að láta mig vita þegar @{name} sendir inn",
|
||||
"account.domain_blocked": "Lén falið",
|
||||
"account.edit_profile": "Breyta notandasniði",
|
||||
"account.enable_notifications": "Láta mig vita þegar @{name} sendir inn",
|
||||
"account.endorse": "Birta á notandasniði",
|
||||
"account.follow": "Fylgjast með",
|
||||
"account.followers": "Fylgjendur",
|
||||
"account.followers.empty": "Ennþá fylgist enginn með þessum notanda.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} Follower} other {{counter} Followers}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} Following} other {{counter} Following}}",
|
||||
"account.followers_counter": "{count, plural, one {{counter} fylgjandi} other {{counter} fylgjendur}}",
|
||||
"account.following_counter": "{count, plural, one {{counter} fylgist með} other {{counter} fylgjast með}}",
|
||||
"account.follows.empty": "Þessi notandi fylgist ennþá ekki með neinum.",
|
||||
"account.follows_you": "Fylgir þér",
|
||||
"account.hide_reblogs": "Fela endurbirtingar fyrir @{name}",
|
||||
|
|
@ -36,7 +38,7 @@
|
|||
"account.requested": "Bíður eftir samþykki. Smelltu til að hætta við beiðni um að fylgjast með",
|
||||
"account.share": "Deila notandasniði fyrir @{name}",
|
||||
"account.show_reblogs": "Sýna endurbirtingar frá @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} tíst} other {{counter} tíst}}",
|
||||
"account.unblock": "Aflétta útilokun af @{name}",
|
||||
"account.unblock_domain": "Hætta að fela {domain}",
|
||||
"account.unendorse": "Ekki birta á notandasniði",
|
||||
|
|
@ -166,13 +168,15 @@
|
|||
"empty_column.notifications": "Þú ert ekki ennþá með neinar tilkynningar. Vertu í samskiptum við aðra til að umræður fari af stað.",
|
||||
"empty_column.public": "Það er ekkert hér! Skrifaðu eitthvað opinberlega, eða fylgstu með notendum á öðrum netþjónum til að fylla upp í þetta",
|
||||
"error.unexpected_crash.explanation": "Vegna villu í kóðanum okkar eða samhæfnivandamála í vafra er ekki hægt að birta þessa síðu svo vel sé.",
|
||||
"error.unexpected_crash.explanation_addons": "Ekki er hægt að birta þessa síðu rétt. Þetta er líklega af völdum forritsviðbótar í vafranum eða sjálfvirkra þýðainaverkfæra.",
|
||||
"error.unexpected_crash.next_steps": "Prófaðu að endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.",
|
||||
"error.unexpected_crash.next_steps_addons": "Prófaðu að gera þau óvirk og svo endurlesa síðuna. Ef það hjálpar ekki til, má samt vera að þú getir notað Mastodon í gegnum annan vafra eða forrit.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Afrita rakningarupplýsingar (stacktrace) á klippispjald",
|
||||
"errors.unexpected_crash.report_issue": "Tilkynna vandamál",
|
||||
"follow_request.authorize": "Heimila",
|
||||
"follow_request.reject": "Hafna",
|
||||
"follow_requests.unlocked_explanation": "Jafnvel þótt aðgangurinn þinn sé ekki læstur, hafa umsjónarmenn {domain} ímyndað sér að þú gætir viljað yfirfara handvirkt fylgjendabeiðnir frá þessum notendum.",
|
||||
"generic.saved": "Saved",
|
||||
"generic.saved": "Vistað",
|
||||
"getting_started.developers": "Forritarar",
|
||||
"getting_started.directory": "Notandasniðamappa",
|
||||
"getting_started.documentation": "Hjálparskjöl",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "að taka virkni úr textainnsetningarreit eða leit",
|
||||
"keyboard_shortcuts.up": "að fara ofar í listanum",
|
||||
"lightbox.close": "Loka",
|
||||
"lightbox.compress": "Þjappa myndskoðunarreit",
|
||||
"lightbox.expand": "Fletta út myndskoðunarreit",
|
||||
"lightbox.next": "Næsta",
|
||||
"lightbox.previous": "Fyrra",
|
||||
"lightbox.view_context": "Skoða samhengi",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Breyta titli",
|
||||
"lists.new.create": "Bæta við lista",
|
||||
"lists.new.title_placeholder": "Titill á nýjum lista",
|
||||
"lists.replies_policy.all_replies": "Allra notenda sem fylgst er með",
|
||||
"lists.replies_policy.list_replies": "Meðlima listans",
|
||||
"lists.replies_policy.no_replies": "Engra",
|
||||
"lists.replies_policy.title": "Sýna svör til:",
|
||||
"lists.search": "Leita meðal þeirra sem þú fylgist með",
|
||||
"lists.subheading": "Listarnir þínir",
|
||||
"load_pending": "{count, plural, one {# nýtt atriði} other {# ný atriði}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Víxla sýnileika",
|
||||
"missing_indicator.label": "Fannst ekki",
|
||||
"missing_indicator.sublabel": "Tilfangið fannst ekki",
|
||||
"mute_modal.duration": "Lengd",
|
||||
"mute_modal.hide_notifications": "Fela tilkynningar frá þessum notanda?",
|
||||
"mute_modal.indefinite": "Óendanlegt",
|
||||
"navigation_bar.apps": "Farsímaforrit",
|
||||
"navigation_bar.blocks": "Útilokaðir notendur",
|
||||
"navigation_bar.bookmarks": "Bókamerki",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Könnuninni þinni er lokið",
|
||||
"notification.poll": "Könnun sem þú tókst þátt í er lokið",
|
||||
"notification.reblog": "{name} endurbirti stöðufærsluna þína",
|
||||
"notification.status": "{name} sendi inn rétt í þessu",
|
||||
"notifications.clear": "Hreinsa tilkynningar",
|
||||
"notifications.clear_confirmation": "Ertu viss um að þú viljir endanlega eyða öllum tilkynningunum þínum?",
|
||||
"notifications.column_settings.alert": "Tilkynningar á skjáborði",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Endurbirtingar:",
|
||||
"notifications.column_settings.show": "Sýna í dálki",
|
||||
"notifications.column_settings.sound": "Spila hljóð",
|
||||
"notifications.column_settings.status": "Ný tíst:",
|
||||
"notifications.filter.all": "Allt",
|
||||
"notifications.filter.boosts": "Endurbirtingar",
|
||||
"notifications.filter.favourites": "Eftirlæti",
|
||||
"notifications.filter.follows": "Fylgist með",
|
||||
"notifications.filter.mentions": "Tilvísanir",
|
||||
"notifications.filter.polls": "Niðurstöður könnunar",
|
||||
"notifications.filter.statuses": "Uppfærslur frá fólki sem þú fylgist með",
|
||||
"notifications.group": "{count} tilkynningar",
|
||||
"notifications.mark_as_read": "Merkja allar tilkynningar sem lesnar",
|
||||
"notifications.permission_denied": "Tilkynningar á skjáborði eru ekki aðgengilegar megna áður hafnaðra beiðna fyrir vafra",
|
||||
"notifications.permission_denied_alert": "Ekki var hægt að virkja tilkynningar á skjáborði, þar sem heimildum fyrir vafra var áður hafnað",
|
||||
"notifications_permission_banner.enable": "Virkja tilkynningar á skjáborði",
|
||||
"notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.",
|
||||
"notifications_permission_banner.title": "Aldrei missa af neinu",
|
||||
"picture_in_picture.restore": "Setja til baka",
|
||||
"poll.closed": "Lokað",
|
||||
"poll.refresh": "Endurlesa",
|
||||
"poll.total_people": "{count, plural, one {# aðili} other {# aðilar}}",
|
||||
|
|
@ -423,29 +445,30 @@
|
|||
"timeline_hint.resources.followers": "Fylgjendur",
|
||||
"timeline_hint.resources.follows": "Fylgist með",
|
||||
"timeline_hint.resources.statuses": "Eldri tíst",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} person} other {{counter} people}} talking",
|
||||
"trends.counter_by_accounts": "{count, plural, one {{counter} aðili} other {{counter} aðilar}} tala",
|
||||
"trends.trending_now": "Í umræðunni núna",
|
||||
"ui.beforeunload": "Drögin tapast ef þú ferð út úr Mastodon.",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Dragðu-og-slepptu hér til að senda inn",
|
||||
"upload_button.label": "Bæta við ({formats}) myndskrá",
|
||||
"upload_button.label": "Bæta við myndum, myndskeiði eða hljóðskrá",
|
||||
"upload_error.limit": "Fór yfir takmörk á innsendingum skráa.",
|
||||
"upload_error.poll": "Innsending skráa er ekki leyfð í könnunum.",
|
||||
"upload_form.audio_description": "Lýstu þessu fyrir heyrnarskerta",
|
||||
"upload_form.description": "Lýstu þessu fyrir sjónskerta",
|
||||
"upload_form.edit": "Breyta",
|
||||
"upload_form.thumbnail": "Change thumbnail",
|
||||
"upload_form.thumbnail": "Skipta um smámynd",
|
||||
"upload_form.undo": "Eyða",
|
||||
"upload_form.video_description": "Lýstu þessu fyrir fólk sem heyrir illa eða er með skerta sjón",
|
||||
"upload_modal.analyzing_picture": "Greini mynd…",
|
||||
"upload_modal.apply": "Virkja",
|
||||
"upload_modal.choose_image": "Choose image",
|
||||
"upload_modal.choose_image": "Veldu mynd",
|
||||
"upload_modal.description_placeholder": "Öllum dýrunum í skóginum þætti bezt að vera vinir",
|
||||
"upload_modal.detect_text": "Skynja texta úr mynd",
|
||||
"upload_modal.edit_media": "Breyta myndskrá",
|
||||
"upload_modal.hint": "Smelltu eða dragðu til hringinn á forskoðuninni til að velja miðpunktinn sem verður alltaf sýnilegastur á öllum smámyndum.",
|
||||
"upload_modal.preparing_ocr": "Undirbý OCR-ljóslestur…",
|
||||
"upload_modal.preview_label": "Forskoðun ({ratio})",
|
||||
"upload_progress.label": "Er að senda inn...",
|
||||
"video.close": "Loka myndskeiði",
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
{
|
||||
"account.account_note_header": "La tua nota per @{name}",
|
||||
"account.add_or_remove_from_list": "Aggiungi o Rimuovi dagli elenchi",
|
||||
"account.account_note_header": "Le tue note sull'utente",
|
||||
"account.add_or_remove_from_list": "Aggiungi o togli dalle liste",
|
||||
"account.badges.bot": "Bot",
|
||||
"account.badges.group": "Gruppo",
|
||||
"account.block": "Blocca @{name}",
|
||||
"account.block_domain": "Blocca dominio {domain}",
|
||||
"account.blocked": "Bloccato",
|
||||
"account.browse_more_on_origin_server": "Naviga di più sul profilo originale",
|
||||
"account.blocked": "Bloccat*",
|
||||
"account.browse_more_on_origin_server": "Sfoglia ulteriormente sul profilo originale",
|
||||
"account.cancel_follow_request": "Annulla richiesta di seguirti",
|
||||
"account.direct": "Messaggio diretto a @{name}",
|
||||
"account.disable_notifications": "Smetti di avvisarmi quando @{name} pubblica un post",
|
||||
"account.domain_blocked": "Dominio bloccato",
|
||||
"account.edit_profile": "Modifica profilo",
|
||||
"account.enable_notifications": "Avvisami quando @{name} pubblica un post",
|
||||
"account.endorse": "Mostra sul profilo",
|
||||
"account.follow": "Segui",
|
||||
"account.followers": "Seguaci",
|
||||
|
|
@ -19,7 +21,7 @@
|
|||
"account.following_counter": "{count, plural, other {{counter} Seguiti}}",
|
||||
"account.follows.empty": "Questo utente non segue ancora nessuno.",
|
||||
"account.follows_you": "Ti segue",
|
||||
"account.hide_reblogs": "Nascondi incrementi da @{name}",
|
||||
"account.hide_reblogs": "Nascondi condivisioni da @{name}",
|
||||
"account.last_status": "Ultima attività",
|
||||
"account.link_verified_on": "La proprietà di questo link è stata controllata il {date}",
|
||||
"account.locked_info": "Lo stato di privacy del profilo è impostato a bloccato. Il proprietario revisiona manualmente chi lo può seguire.",
|
||||
|
|
@ -28,14 +30,14 @@
|
|||
"account.moved_to": "{name} si è trasferito su:",
|
||||
"account.mute": "Silenzia @{name}",
|
||||
"account.mute_notifications": "Silenzia notifiche da @{name}",
|
||||
"account.muted": "Silenziato",
|
||||
"account.muted": "Silenziat*",
|
||||
"account.never_active": "Mai",
|
||||
"account.posts": "Toot",
|
||||
"account.posts_with_replies": "Toot e risposte",
|
||||
"account.report": "Segnala @{name}",
|
||||
"account.requested": "In attesa di approvazione. Clicca per annullare la richiesta di seguire",
|
||||
"account.share": "Condividi il profilo di @{name}",
|
||||
"account.show_reblogs": "Mostra incrementi da @{name}",
|
||||
"account.show_reblogs": "Mostra condivisioni da @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} Toot} other {{counter} Toot}}",
|
||||
"account.unblock": "Sblocca @{name}",
|
||||
"account.unblock_domain": "Sblocca il dominio {domain}",
|
||||
|
|
@ -43,9 +45,9 @@
|
|||
"account.unfollow": "Smetti di seguire",
|
||||
"account.unmute": "Non silenziare @{name}",
|
||||
"account.unmute_notifications": "Non silenziare le notifiche da @{name}",
|
||||
"account_note.placeholder": "Nessun commento fornito",
|
||||
"account_note.placeholder": "Clicca per aggiungere una nota",
|
||||
"alert.rate_limited.message": "Sei pregato di riprovare tra {retry_time, time, medium}.",
|
||||
"alert.rate_limited.title": "Intervallo limitato",
|
||||
"alert.rate_limited.title": "Limitazione per eccesso di richieste",
|
||||
"alert.unexpected.message": "Si è verificato un errore inatteso.",
|
||||
"alert.unexpected.title": "Oops!",
|
||||
"announcement.announcement": "Annuncio",
|
||||
|
|
@ -59,9 +61,9 @@
|
|||
"bundle_modal_error.retry": "Riprova",
|
||||
"column.blocks": "Utenti bloccati",
|
||||
"column.bookmarks": "Segnalibri",
|
||||
"column.community": "Fuso orario locale",
|
||||
"column.community": "Timeline locale",
|
||||
"column.direct": "Messaggi diretti",
|
||||
"column.directory": "Naviga profili",
|
||||
"column.directory": "Sfoglia profili",
|
||||
"column.domain_blocks": "Domini bloccati",
|
||||
"column.favourites": "Preferiti",
|
||||
"column.follow_requests": "Richieste di seguirti",
|
||||
|
|
@ -70,7 +72,7 @@
|
|||
"column.mutes": "Utenti silenziati",
|
||||
"column.notifications": "Notifiche",
|
||||
"column.pins": "Toot in evidenza",
|
||||
"column.public": "Fuso orario federato",
|
||||
"column.public": "Timeline federata",
|
||||
"column_back_button.label": "Indietro",
|
||||
"column_header.hide_settings": "Nascondi impostazioni",
|
||||
"column_header.moveLeft_settings": "Sposta colonna a sinistra",
|
||||
|
|
@ -111,13 +113,13 @@
|
|||
"confirmations.delete_list.confirm": "Cancella",
|
||||
"confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?",
|
||||
"confirmations.domain_block.confirm": "Blocca l'intero dominio",
|
||||
"confirmations.domain_block.message": "Sei davvero, davvero sicuro di voler bloccare l'intero {domain}? In molti casi pochi blocchi di destinazione o muti sono sufficienti e preferibili. Non vedrai il contenuto da quel dominio in alcuna linea temporale pubblica o nelle tue notifiche. i tuoi seguaci saranno rimossi da quel dominio.",
|
||||
"confirmations.domain_block.message": "Sei davvero, davvero sicuro di voler bloccare l'intero {domain}? In molti casi pochi blocchi di destinazione o muti sono sufficienti e preferibili. Non vedrai il contenuto da quel dominio in alcuna timeline pubblica o nelle tue notifiche. i tuoi seguaci saranno rimossi da quel dominio.",
|
||||
"confirmations.logout.confirm": "Disconnettiti",
|
||||
"confirmations.logout.message": "Sei sicuro di volerti disconnettere?",
|
||||
"confirmations.mute.confirm": "Silenzia",
|
||||
"confirmations.mute.explanation": "Questo nasconderà i post da loro ed i post che li menzionano, ma consentirà ancora loro di vedere i tuoi post e di seguirti.",
|
||||
"confirmations.mute.message": "Sei sicuro di voler silenziare {name}?",
|
||||
"confirmations.redraft.confirm": "Cancella e rivali",
|
||||
"confirmations.redraft.confirm": "Cancella e riscrivi",
|
||||
"confirmations.redraft.message": "Sei sicuro di voler eliminare questo toot e riscriverlo? I preferiti e gli incrementi saranno persi e le risposte al post originale saranno perse.",
|
||||
"confirmations.reply.confirm": "Rispondi",
|
||||
"confirmations.reply.message": "Rispondere ora sovrascriverà il messaggio che stai correntemente componendo. Sei sicuro di voler procedere?",
|
||||
|
|
@ -166,7 +168,9 @@
|
|||
"empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.",
|
||||
"empty_column.public": "Qui non c'è nulla! Scrivi qualcosa pubblicamente, o aggiungi utenti da altri server per riempire questo spazio",
|
||||
"error.unexpected_crash.explanation": "A causa di un bug nel nostro codice o di un problema di compatibilità del browser, questa pagina non può essere visualizzata correttamente.",
|
||||
"error.unexpected_crash.explanation_addons": "Questa pagina non può essere visualizzata correttamente. Questo errore è probabilmente causato da un componente aggiuntivo del browser o da strumenti di traduzione automatica.",
|
||||
"error.unexpected_crash.next_steps": "Prova ad aggiornare la pagina. Se non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser diverso o un'app nativa.",
|
||||
"error.unexpected_crash.next_steps_addons": "Prova a disabilitarli e ad aggiornare la pagina. Se questo non funziona, potresti ancora essere in grado di utilizzare Mastodon attraverso un browser o un'app diversi.",
|
||||
"errors.unexpected_crash.copy_stacktrace": "Copia stacktrace negli appunti",
|
||||
"errors.unexpected_crash.report_issue": "Segnala il problema",
|
||||
"follow_request.authorize": "Autorizza",
|
||||
|
|
@ -250,6 +254,8 @@
|
|||
"keyboard_shortcuts.unfocus": "per uscire dall'area di composizione o dalla ricerca",
|
||||
"keyboard_shortcuts.up": "per spostarsi in alto nella lista",
|
||||
"lightbox.close": "Chiudi",
|
||||
"lightbox.compress": "Comprimi casella di visualizzazione immagine",
|
||||
"lightbox.expand": "Espandi casella di visualizzazione immagine",
|
||||
"lightbox.next": "Successivo",
|
||||
"lightbox.previous": "Precedente",
|
||||
"lightbox.view_context": "Mostra contesto",
|
||||
|
|
@ -260,6 +266,10 @@
|
|||
"lists.edit.submit": "Cambia titolo",
|
||||
"lists.new.create": "Aggiungi lista",
|
||||
"lists.new.title_placeholder": "Titolo della nuova lista",
|
||||
"lists.replies_policy.all_replies": "Qualsiasi utente seguito",
|
||||
"lists.replies_policy.list_replies": "Iscritti alla lista",
|
||||
"lists.replies_policy.no_replies": "Nessuno",
|
||||
"lists.replies_policy.title": "Mostra risposte a:",
|
||||
"lists.search": "Cerca tra le persone che segui",
|
||||
"lists.subheading": "Le tue liste",
|
||||
"load_pending": "{count, plural, one {# nuovo oggetto} other {# nuovi oggetti}}",
|
||||
|
|
@ -267,7 +277,9 @@
|
|||
"media_gallery.toggle_visible": "Imposta visibilità",
|
||||
"missing_indicator.label": "Non trovato",
|
||||
"missing_indicator.sublabel": "Risorsa non trovata",
|
||||
"mute_modal.duration": "Durata",
|
||||
"mute_modal.hide_notifications": "Nascondere le notifiche da quest'utente?",
|
||||
"mute_modal.indefinite": "Per sempre",
|
||||
"navigation_bar.apps": "App per dispositivi mobili",
|
||||
"navigation_bar.blocks": "Utenti bloccati",
|
||||
"navigation_bar.bookmarks": "Segnalibri",
|
||||
|
|
@ -298,6 +310,7 @@
|
|||
"notification.own_poll": "Il tuo sondaggio è terminato",
|
||||
"notification.poll": "Un sondaggio in cui hai votato è terminato",
|
||||
"notification.reblog": "{name} ha condiviso il tuo post",
|
||||
"notification.status": "{name} ha appena pubblicato un post",
|
||||
"notifications.clear": "Cancella notifiche",
|
||||
"notifications.clear_confirmation": "Vuoi davvero cancellare tutte le notifiche?",
|
||||
"notifications.column_settings.alert": "Notifiche desktop",
|
||||
|
|
@ -313,13 +326,22 @@
|
|||
"notifications.column_settings.reblog": "Post condivisi:",
|
||||
"notifications.column_settings.show": "Mostra in colonna",
|
||||
"notifications.column_settings.sound": "Riproduci suono",
|
||||
"notifications.column_settings.status": "Nuovi toot:",
|
||||
"notifications.filter.all": "Tutti",
|
||||
"notifications.filter.boosts": "Condivisioni",
|
||||
"notifications.filter.favourites": "Apprezzati",
|
||||
"notifications.filter.follows": "Seguaci",
|
||||
"notifications.filter.mentions": "Menzioni",
|
||||
"notifications.filter.polls": "Risultati del sondaggio",
|
||||
"notifications.filter.statuses": "Aggiornamenti dalle persone che segui",
|
||||
"notifications.group": "{count} notifiche",
|
||||
"notifications.mark_as_read": "Segna tutte le notifiche come lette",
|
||||
"notifications.permission_denied": "Impossibile abilitare le notifiche sul desktop perché il permesso è stato negato.",
|
||||
"notifications.permission_denied_alert": "Le notifiche sul desktop non possono essere abilitate, poiché il permesso nel browser è stato negato in precedenza",
|
||||
"notifications_permission_banner.enable": "Abilita le notifiche sul desktop",
|
||||
"notifications_permission_banner.how_to_control": "Per ricevere notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare con precisione quali tipi di interazioni generano notifiche desktop tramite il pulsante {icon} qui sopra, dopo averle abilitate.",
|
||||
"notifications_permission_banner.title": "Non perderti mai nulla",
|
||||
"picture_in_picture.restore": "Riportalo indietro",
|
||||
"poll.closed": "Chiuso",
|
||||
"poll.refresh": "Aggiorna",
|
||||
"poll.total_people": "{count, plural, one {# persona} other {# persone}}",
|
||||
|
|
@ -426,7 +448,7 @@
|
|||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persone}} ne parla·no",
|
||||
"trends.trending_now": "Di tendenza ora",
|
||||
"ui.beforeunload": "La bozza andrà persa se esci da Mastodon.",
|
||||
"units.short.billion": "{count}B",
|
||||
"units.short.billion": "{count}G",
|
||||
"units.short.million": "{count}M",
|
||||
"units.short.thousand": "{count}K",
|
||||
"upload_area.title": "Trascina per caricare",
|
||||
|
|
@ -446,8 +468,9 @@
|
|||
"upload_modal.detect_text": "Rileva testo dall'immagine",
|
||||
"upload_modal.edit_media": "Modifica media",
|
||||
"upload_modal.hint": "Clicca o trascina il cerchio sull'anteprima per scegliere il punto focale che sarà sempre visualizzato su tutte le miniature.",
|
||||
"upload_modal.preparing_ocr": "Preparazione OCR…",
|
||||
"upload_modal.preview_label": "Anteprima ({ratio})",
|
||||
"upload_progress.label": "Sto caricando...",
|
||||
"upload_progress.label": "Invio in corso...",
|
||||
"video.close": "Chiudi video",
|
||||
"video.download": "Scarica file",
|
||||
"video.exit_fullscreen": "Esci da modalità a schermo intero",
|
||||
|
|
@ -456,6 +479,6 @@
|
|||
"video.hide": "Nascondi video",
|
||||
"video.mute": "Silenzia suono",
|
||||
"video.pause": "Pausa",
|
||||
"video.play": "Avvia",
|
||||
"video.play": "Riproduci",
|
||||
"video.unmute": "Riattiva suono"
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue