diff --git a/.env.production.sample b/.env.production.sample
index b322aee1d..e4ea861e7 100644
--- a/.env.production.sample
+++ b/.env.production.sample
@@ -115,6 +115,20 @@ SMTP_FROM_ADDRESS=notifications@example.com
# S3_ENDPOINT=
# S3_SIGNATURE_VERSION=
+# Google Cloud Storage (optional)
+# Use S3 compatible API. Since GCS does not support Multipart Upload,
+# increase the value of S3_MULTIPART_THRESHOLD to disable Multipart Upload.
+# The attachment host must allow cross origin request - see the description
+# above.
+# S3_ENABLED=true
+# AWS_ACCESS_KEY_ID=
+# AWS_SECRET_ACCESS_KEY=
+# S3_REGION=
+# S3_PROTOCOL=https
+# S3_HOSTNAME=storage.googleapis.com
+# S3_ENDPOINT=https://storage.googleapis.com
+# S3_MULTIPART_THRESHOLD=52428801 # 50.megabytes
+
# Swift (optional)
# The attachment host must allow cross origin request - see the description
# above.
diff --git a/.ruby-version b/.ruby-version
index 6a6a3d8e3..2714f5313 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-2.6.1
+2.6.4
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8f7c77d3..a170c3ecd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,173 @@ All notable changes to this project will be documented in this file.
## Unreleased
-TODO
+### Added
+
+- Add "not available" label to unloaded media attachments in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11715), [Gargron](https://github.com/tootsuite/mastodon/pull/11745))
+- **Add profile directory to web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11688), [mayaeh](https://github.com/tootsuite/mastodon/pull/11872))
+ - Add profile directory opt-in federation
+ - Add profile directory REST API
+- Add special alert for throttled requests in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11677))
+- Add confirmation modal when logging out from the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11671))
+- **Add audio player in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11644), [Gargron](https://github.com/tootsuite/mastodon/pull/11652), [Gargron](https://github.com/tootsuite/mastodon/pull/11654), [ThibG](https://github.com/tootsuite/mastodon/pull/11629))
+- **Add autosuggestions for hashtags in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11422), [ThibG](https://github.com/tootsuite/mastodon/pull/11632), [Gargron](https://github.com/tootsuite/mastodon/pull/11764), [Gargron](https://github.com/tootsuite/mastodon/pull/11588), [Gargron](https://github.com/tootsuite/mastodon/pull/11442))
+- **Add media editing modal with OCR tool in web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11563), [Gargron](https://github.com/tootsuite/mastodon/pull/11566), [ThibG](https://github.com/tootsuite/mastodon/pull/11575), [ThibG](https://github.com/tootsuite/mastodon/pull/11576), [Gargron](https://github.com/tootsuite/mastodon/pull/11577), [Gargron](https://github.com/tootsuite/mastodon/pull/11573), [Gargron](https://github.com/tootsuite/mastodon/pull/11571))
+- Add indicator of unread notifications to window title when web UI is out of focus ([Gargron](https://github.com/tootsuite/mastodon/pull/11560), [Gargron](https://github.com/tootsuite/mastodon/pull/11572))
+- Add indicator for which options you voted for in a poll in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11195))
+- **Add search results pagination to web UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11409), [ThibG](https://github.com/tootsuite/mastodon/pull/11447))
+- **Add option to disable real-time updates in web UI ("slow mode")** ([Gargron](https://github.com/tootsuite/mastodon/pull/9984), [ykzts](https://github.com/tootsuite/mastodon/pull/11880), [ThibG](https://github.com/tootsuite/mastodon/pull/11883), [Gargron](https://github.com/tootsuite/mastodon/pull/11898), [ThibG](https://github.com/tootsuite/mastodon/pull/11859))
+- Add option to disable blurhash previews in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11188))
+- Add native smooth scrolling when supported in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11207))
+- Add search and sort functions to hashtag admin UI ([mayaeh](https://github.com/tootsuite/mastodon/pull/11829), [Gargron](https://github.com/tootsuite/mastodon/pull/11897), [mayaeh](https://github.com/tootsuite/mastodon/pull/11875))
+- Add setting for default search engine indexing in admin UI ([brortao](https://github.com/tootsuite/mastodon/pull/11804))
+- Add account bio to account view in admin UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11473))
+- **Add option to include reported statuses in warning e-mail from admin UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11639), [Gargron](https://github.com/tootsuite/mastodon/pull/11812), [Gargron](https://github.com/tootsuite/mastodon/pull/11741), [Gargron](https://github.com/tootsuite/mastodon/pull/11698), [mayaeh](https://github.com/tootsuite/mastodon/pull/11765))
+- Add number of pending accounts and pending hashtags to dashboard in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11514))
+- **Add account migration UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11846), [noellabo](https://github.com/tootsuite/mastodon/pull/11905), [noellabo](https://github.com/tootsuite/mastodon/pull/11907), [noellabo](https://github.com/tootsuite/mastodon/pull/11906), [noellabo](https://github.com/tootsuite/mastodon/pull/11902))
+- **Add table of contents to about page** ([Gargron](https://github.com/tootsuite/mastodon/pull/11885), [ykzts](https://github.com/tootsuite/mastodon/pull/11941), [ykzts](https://github.com/tootsuite/mastodon/pull/11895), [Kjwon15](https://github.com/tootsuite/mastodon/pull/11916))
+- **Add password challenge to 2FA settings, e-mail notifications** ([Gargron](https://github.com/tootsuite/mastodon/pull/11878))
+- Add optional invite comments ([ThibG](https://github.com/tootsuite/mastodon/pull/10465))
+- **Add optional public list of domain blocks with comments** ([ThibG](https://github.com/tootsuite/mastodon/pull/11298), [ThibG](https://github.com/tootsuite/mastodon/pull/11515), [Gargron](https://github.com/tootsuite/mastodon/pull/11908))
+- Add an RSS feed for featured hashtags ([noellabo](https://github.com/tootsuite/mastodon/pull/10502))
+- Add explanations to featured hashtags UI and profile ([Gargron](https://github.com/tootsuite/mastodon/pull/11586))
+- **Add hashtag trends with admin and user settings** ([Gargron](https://github.com/tootsuite/mastodon/pull/11490), [Gargron](https://github.com/tootsuite/mastodon/pull/11502), [Gargron](https://github.com/tootsuite/mastodon/pull/11641), [Gargron](https://github.com/tootsuite/mastodon/pull/11594), [Gargron](https://github.com/tootsuite/mastodon/pull/11517), [mayaeh](https://github.com/tootsuite/mastodon/pull/11845), [Gargron](https://github.com/tootsuite/mastodon/pull/11774), [Gargron](https://github.com/tootsuite/mastodon/pull/11712), [Gargron](https://github.com/tootsuite/mastodon/pull/11791), [Gargron](https://github.com/tootsuite/mastodon/pull/11743), [Gargron](https://github.com/tootsuite/mastodon/pull/11740), [Gargron](https://github.com/tootsuite/mastodon/pull/11714), [ThibG](https://github.com/tootsuite/mastodon/pull/11631), [Sasha-Sorokin](https://github.com/tootsuite/mastodon/pull/11569), [Gargron](https://github.com/tootsuite/mastodon/pull/11524), [Gargron](https://github.com/tootsuite/mastodon/pull/11513))
+ - Add hashtag usage breakdown to admin UI
+ - Add batch actions for hashtags to admin UI
+ - Add trends to web UI
+ - Add trends to public pages
+ - Add user preference to hide trends
+ - Add admin setting to disable trends
+- **Add categories for custom emojis** ([Gargron](https://github.com/tootsuite/mastodon/pull/11196), [Gargron](https://github.com/tootsuite/mastodon/pull/11793), [Gargron](https://github.com/tootsuite/mastodon/pull/11920), [highemerly](https://github.com/tootsuite/mastodon/pull/11876))
+ - Add custom emoji categories to emoji picker in web UI
+ - Add `category` to custom emojis in REST API
+ - Add batch actions for custom emojis in admin UI
+- Add max image dimensions to error message ([raboof](https://github.com/tootsuite/mastodon/pull/11552))
+- Add aac, m4a, 3gp, amr, wma to allowed audio formats ([Gargron](https://github.com/tootsuite/mastodon/pull/11342), [umonaca](https://github.com/tootsuite/mastodon/pull/11687))
+- **Add search syntax for operators and phrases** ([Gargron](https://github.com/tootsuite/mastodon/pull/11411))
+- **Add REST API for managing featured hashtags** ([noellabo](https://github.com/tootsuite/mastodon/pull/11778))
+- **Add REST API for managing timeline read markers** ([Gargron](https://github.com/tootsuite/mastodon/pull/11762))
+- **Add ActivityPub secure mode** ([Gargron](https://github.com/tootsuite/mastodon/pull/11269), [ThibG](https://github.com/tootsuite/mastodon/pull/11332), [ThibG](https://github.com/tootsuite/mastodon/pull/11295))
+- Add HTTP signatures to all outgoing ActivityPub GET requests ([Gargron](https://github.com/tootsuite/mastodon/pull/11284), [ThibG](https://github.com/tootsuite/mastodon/pull/11300))
+- Add support for ActivityPub Audio activities ([ThibG](https://github.com/tootsuite/mastodon/pull/11189))
+- Add ActivityPub actor representing the entire server ([ThibG](https://github.com/tootsuite/mastodon/pull/11321), [rtucker](https://github.com/tootsuite/mastodon/pull/11400), [ThibG](https://github.com/tootsuite/mastodon/pull/11561), [Gargron](https://github.com/tootsuite/mastodon/pull/11798))
+- **Add whitelist mode** ([Gargron](https://github.com/tootsuite/mastodon/pull/11291), [mayaeh](https://github.com/tootsuite/mastodon/pull/11634))
+- Add config of multipart threshold for S3 ([ykzts](https://github.com/tootsuite/mastodon/pull/11924), [ykzts](https://github.com/tootsuite/mastodon/pull/11944))
+- Add health check endpoint for web ([ykzts](https://github.com/tootsuite/mastodon/pull/11770), [ykzts](https://github.com/tootsuite/mastodon/pull/11947))
+- Add HTTP signature keyId to request log ([Gargron](https://github.com/tootsuite/mastodon/pull/11591))
+- Add `SMTP_REPLY_TO` environment variable ([hugogameiro](https://github.com/tootsuite/mastodon/pull/11718))
+- Add `tootctl preview_cards remove` command ([mayaeh](https://github.com/tootsuite/mastodon/pull/11320))
+- Add `tootctl media refresh` command ([Gargron](https://github.com/tootsuite/mastodon/pull/11775))
+- Add `tootctl cache recount` command ([Gargron](https://github.com/tootsuite/mastodon/pull/11597))
+- Add option to exclude suspended domains from `tootctl domains crawl` ([dariusk](https://github.com/tootsuite/mastodon/pull/11454))
+- Add soft delete for statuses for instant deletes through API ([Gargron](https://github.com/tootsuite/mastodon/pull/11623), [Gargron](https://github.com/tootsuite/mastodon/pull/11648))
+- Add rails-level JSON caching ([Gargron](https://github.com/tootsuite/mastodon/pull/11333), [Gargron](https://github.com/tootsuite/mastodon/pull/11271))
+- **Add request pool to improve delivery performance** ([Gargron](https://github.com/tootsuite/mastodon/pull/10353), [ykzts](https://github.com/tootsuite/mastodon/pull/11756))
+- Add concurrent connection attempts to resolved IP addresses ([ThibG](https://github.com/tootsuite/mastodon/pull/11757))
+- Add index for remember_token to improve login performance ([abcang](https://github.com/tootsuite/mastodon/pull/11881))
+- **Add more accurate hashtag search** ([Gargron](https://github.com/tootsuite/mastodon/pull/11579), [Gargron](https://github.com/tootsuite/mastodon/pull/11427), [Gargron](https://github.com/tootsuite/mastodon/pull/11448))
+- **Add more accurate account search** ([Gargron](https://github.com/tootsuite/mastodon/pull/11537), [Gargron](https://github.com/tootsuite/mastodon/pull/11580))
+- **Add a spam check** ([Gargron](https://github.com/tootsuite/mastodon/pull/11217), [Gargron](https://github.com/tootsuite/mastodon/pull/11806), [ThibG](https://github.com/tootsuite/mastodon/pull/11296))
+
+### Changed
+
+- **Change conversations UI** ([Gargron](https://github.com/tootsuite/mastodon/pull/11896))
+- Change dashboard to short number notation ([noellabo](https://github.com/tootsuite/mastodon/pull/11847), [noellabo](https://github.com/tootsuite/mastodon/pull/11911))
+- Change REST API `GET /api/v1/timelines/public` to require authentication when public preview is off ([ThibG](https://github.com/tootsuite/mastodon/pull/11802))
+- Change REST API `POST /api/v1/follow_requests/:id/(approve|reject)` to return relationship ([ThibG](https://github.com/tootsuite/mastodon/pull/11800))
+- Change rate limit for media proxy ([ykzts](https://github.com/tootsuite/mastodon/pull/11814))
+- Change unlisted custom emoji to not appear in autosuggestions ([Gargron](https://github.com/tootsuite/mastodon/pull/11818))
+- Change max length of media descriptions from 420 to 1500 characters ([Gargron](https://github.com/tootsuite/mastodon/pull/11819), [ThibG](https://github.com/tootsuite/mastodon/pull/11836))
+- **Change deletes to preserve soft-deleted statuses in unresolved reports** ([Gargron](https://github.com/tootsuite/mastodon/pull/11805))
+- **Change tootctl to use inline parallelization instead of Sidekiq** ([Gargron](https://github.com/tootsuite/mastodon/pull/11776))
+- **Change account deletion page to have better explanations** ([Gargron](https://github.com/tootsuite/mastodon/pull/11753), [Gargron](https://github.com/tootsuite/mastodon/pull/11763))
+- Change hashtag component in web UI to show numbers for 2 last days ([Gargron](https://github.com/tootsuite/mastodon/pull/11742), [Gargron](https://github.com/tootsuite/mastodon/pull/11755), [Gargron](https://github.com/tootsuite/mastodon/pull/11754))
+- Change OpenGraph description on sign-up page to reflect invite ([Gargron](https://github.com/tootsuite/mastodon/pull/11744))
+- Change layout of public profile directory to be the same as in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11705))
+- Change detailed status child ordering to sort self-replies on top ([ThibG](https://github.com/tootsuite/mastodon/pull/11686))
+- Change window resize handler to switch to/from mobile layout as soon as needed ([ThibG](https://github.com/tootsuite/mastodon/pull/11656))
+- Change icon button styles to make hover/focus states more obvious ([ThibG](https://github.com/tootsuite/mastodon/pull/11474))
+- Change contrast of status links that are not mentions or hashtags ([ThibG](https://github.com/tootsuite/mastodon/pull/11406))
+- **Change hashtags to preserve first-used casing** ([Gargron](https://github.com/tootsuite/mastodon/pull/11416), [Gargron](https://github.com/tootsuite/mastodon/pull/11508), [Gargron](https://github.com/tootsuite/mastodon/pull/11504), [Gargron](https://github.com/tootsuite/mastodon/pull/11507), [Gargron](https://github.com/tootsuite/mastodon/pull/11441))
+- **Change unconfirmed user login behaviour** ([Gargron](https://github.com/tootsuite/mastodon/pull/11375), [ThibG](https://github.com/tootsuite/mastodon/pull/11394), [Gargron](https://github.com/tootsuite/mastodon/pull/11860))
+- **Change single-column mode to scroll the whole page** ([Gargron](https://github.com/tootsuite/mastodon/pull/11359), [Gargron](https://github.com/tootsuite/mastodon/pull/11894), [Gargron](https://github.com/tootsuite/mastodon/pull/11891), [ThibG](https://github.com/tootsuite/mastodon/pull/11655), [Gargron](https://github.com/tootsuite/mastodon/pull/11463), [Gargron](https://github.com/tootsuite/mastodon/pull/11458), [ThibG](https://github.com/tootsuite/mastodon/pull/11395), [Gargron](https://github.com/tootsuite/mastodon/pull/11418))
+- Change `tootctl accounts follow` to only work with local accounts ([angristan](https://github.com/tootsuite/mastodon/pull/11592))
+- Change Dockerfile ([Shleeble](https://github.com/tootsuite/mastodon/pull/11710), [ykzts](https://github.com/tootsuite/mastodon/pull/11768), [Shleeble](https://github.com/tootsuite/mastodon/pull/11707))
+- Change supported Node versions to include v12 ([abcang](https://github.com/tootsuite/mastodon/pull/11706))
+- Change Portuguese language from `pt` to `pt-PT` ([Gargron](https://github.com/tootsuite/mastodon/pull/11820))
+
+### Removed
+
+- **Remove OStatus support** ([Gargron](https://github.com/tootsuite/mastodon/pull/11205), [Gargron](https://github.com/tootsuite/mastodon/pull/11303), [Gargron](https://github.com/tootsuite/mastodon/pull/11460), [ThibG](https://github.com/tootsuite/mastodon/pull/11280), [ThibG](https://github.com/tootsuite/mastodon/pull/11278))
+- Remove Atom feeds and old URLs in the form of `GET /:username/updates/:id` ([Gargron](https://github.com/tootsuite/mastodon/pull/11247))
+- Remove WebP support ([angristan](https://github.com/tootsuite/mastodon/pull/11589))
+- Remove deprecated config options from Heroku and Scalingo ([ykzts](https://github.com/tootsuite/mastodon/pull/11925))
+- Remove deprecated REST API `GET /api/v1/search` API ([Gargron](https://github.com/tootsuite/mastodon/pull/11823))
+- Remove deprecated REST API `GET /api/v1/statuses/:id/card` ([Gargron](https://github.com/tootsuite/mastodon/pull/11213))
+- Remove deprecated REST API `POST /api/v1/notifications/dismiss?id=:id` ([Gargron](https://github.com/tootsuite/mastodon/pull/11214))
+- Remove deprecated REST API `GET /api/v1/timelines/direct` ([Gargron](https://github.com/tootsuite/mastodon/pull/11212))
+
+### Fixed
+
+- Fix manifest warning ([ykzts](https://github.com/tootsuite/mastodon/pull/11767))
+- Fix admin UI for custom emoji not respecting GIF autoplay preference ([ThibG](https://github.com/tootsuite/mastodon/pull/11801))
+- Fix page body not being scrollable in admin/settings layout ([Gargron](https://github.com/tootsuite/mastodon/pull/11893))
+- Fix placeholder colors for inputs not being explicitly defined ([Gargron](https://github.com/tootsuite/mastodon/pull/11890))
+- Fix incorrect enclosure length in RSS ([tsia](https://github.com/tootsuite/mastodon/pull/11889))
+- Fix TOTP codes not being filtered from logs during enabling/disabling ([Gargron](https://github.com/tootsuite/mastodon/pull/11877))
+- Fix webfinger response not returning 410 when account is suspended ([Gargron](https://github.com/tootsuite/mastodon/pull/11869))
+- Fix ActivityPub Move handler queuing jobs that will fail if account is suspended ([Gargron](https://github.com/tootsuite/mastodon/pull/11864))
+- Fix SSO login not using existing account when e-mail is verified ([Gargron](https://github.com/tootsuite/mastodon/pull/11862))
+- Fix web UI allowing uploads past status limit via drag & drop ([Gargron](https://github.com/tootsuite/mastodon/pull/11863))
+- Fix expiring polls not being displayed as such in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11835))
+- Fix 2FA challenge and password challenge for non-database users ([Gargron](https://github.com/tootsuite/mastodon/pull/11831), [Gargron](https://github.com/tootsuite/mastodon/pull/11943))
+- Fix profile fields overflowing page width in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11828))
+- Fix web push subscriptions being deleted on rate limit or timeout ([Gargron](https://github.com/tootsuite/mastodon/pull/11826))
+- Fix display of long poll options in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11717), [ThibG](https://github.com/tootsuite/mastodon/pull/11833))
+- Fix search API not resolving URL when `type` is given ([Gargron](https://github.com/tootsuite/mastodon/pull/11822))
+- Fix hashtags being split by ZWNJ character ([Gargron](https://github.com/tootsuite/mastodon/pull/11821))
+- Fix scroll position resetting when opening media modals in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11815))
+- Fix duplicate HTML IDs on about page ([ThibG](https://github.com/tootsuite/mastodon/pull/11803))
+- Fix admin UI showing superfluous reject media/reports on suspended domain blocks ([ThibG](https://github.com/tootsuite/mastodon/pull/11749))
+- Fix ActivityPub context not being dynamically computed ([ThibG](https://github.com/tootsuite/mastodon/pull/11746))
+- Fix Mastodon logo style on hover on public pages' footer ([ThibG](https://github.com/tootsuite/mastodon/pull/11735))
+- Fix height of dashboard counters ([ThibG](https://github.com/tootsuite/mastodon/pull/11736))
+- Fix custom emoji animation on hover in web UI directory bios ([ThibG](https://github.com/tootsuite/mastodon/pull/11716))
+- Fix non-numbers being passed to Redis and causing an error ([Gargron](https://github.com/tootsuite/mastodon/pull/11697))
+- Fix error in REST API for an account's statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/11700))
+- Fix uncaught error when resource param is missing in Webfinger request ([Gargron](https://github.com/tootsuite/mastodon/pull/11701))
+- Fix uncaught domain normalization error in remote follow ([Gargron](https://github.com/tootsuite/mastodon/pull/11703))
+- Fix uncaught 422 and 500 errors ([Gargron](https://github.com/tootsuite/mastodon/pull/11590), [Gargron](https://github.com/tootsuite/mastodon/pull/11811))
+- Fix uncaught parameter missing exceptions and missing error templates ([Gargron](https://github.com/tootsuite/mastodon/pull/11702))
+- Fix encoding error when checking e-mail MX records ([Gargron](https://github.com/tootsuite/mastodon/pull/11696))
+- Fix items in StatusContent render list not all having a key ([ThibG](https://github.com/tootsuite/mastodon/pull/11645))
+- Fix remote and staff-removed statuses leaving media behind for a day ([Gargron](https://github.com/tootsuite/mastodon/pull/11638))
+- Fix CSP needlessly allowing blob URLs in script-src ([ThibG](https://github.com/tootsuite/mastodon/pull/11620))
+- Fix ignoring whole status because of one invalid hashtag ([Gargron](https://github.com/tootsuite/mastodon/pull/11621))
+- Fix hidden statuses losing focus ([ThibG](https://github.com/tootsuite/mastodon/pull/11208))
+- Fix loading bar being obscured by other elements in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11598))
+- Fix multiple issues with replies collection for pages further than self-replies ([ThibG](https://github.com/tootsuite/mastodon/pull/11582))
+- Fix blurhash and autoplay not working on public pages ([Gargron](https://github.com/tootsuite/mastodon/pull/11585))
+- Fix 422 being returned instead of 404 when POSTing to unmatched routes ([Gargron](https://github.com/tootsuite/mastodon/pull/11574), [Gargron](https://github.com/tootsuite/mastodon/pull/11704))
+- Fix client-side resizing of image uploads ([ThibG](https://github.com/tootsuite/mastodon/pull/11570))
+- Fix short number formatting for numbers above million in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11559))
+- Fix ActivityPub and REST API queries setting cookies and preventing caching ([ThibG](https://github.com/tootsuite/mastodon/pull/11539), [ThibG](https://github.com/tootsuite/mastodon/pull/11557), [ThibG](https://github.com/tootsuite/mastodon/pull/11336), [ThibG](https://github.com/tootsuite/mastodon/pull/11331))
+- Fix some emojis in profile metadata labels are not emojified. ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/11534))
+- Fix account search always returning exact match on paginated results ([Gargron](https://github.com/tootsuite/mastodon/pull/11525))
+- Fix acct URIs with IDN domains not being resolved ([Gargron](https://github.com/tootsuite/mastodon/pull/11520))
+- Fix admin dashboard missing latest features ([Gargron](https://github.com/tootsuite/mastodon/pull/11505))
+- Fix jumping of toot date when clicking spoiler button ([ariasuni](https://github.com/tootsuite/mastodon/pull/11449))
+- Fix boost to original audience not working on mobile in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11371))
+- Fix handling of webfinger redirects in ResolveAccountService ([ThibG](https://github.com/tootsuite/mastodon/pull/11279))
+- Fix URLs appearing twice in errors of ActivityPub::DeliveryWorker ([Gargron](https://github.com/tootsuite/mastodon/pull/11231))
+- Fix support for HTTP proxies ([ThibG](https://github.com/tootsuite/mastodon/pull/11245))
+- Fix HTTP requests to IPv6 hosts ([ThibG](https://github.com/tootsuite/mastodon/pull/11240))
+- Fix error in ElasticSearch index import ([mayaeh](https://github.com/tootsuite/mastodon/pull/11192))
+- Fix duplicate account error when seeding development database ([ysksn](https://github.com/tootsuite/mastodon/pull/11366))
+- Fix performance of session clean-up scheduler ([abcang](https://github.com/tootsuite/mastodon/pull/11871))
+- Fix older migrations not running ([zunda](https://github.com/tootsuite/mastodon/pull/11377))
+- Fix URLs counting towards RTL detection ([ahangarha](https://github.com/tootsuite/mastodon/pull/11759))
+- Fix unnecessary status re-rendering in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/11211))
+- Fix http_parser.rb gem not being compiled when no network available ([petabyteboy](https://github.com/tootsuite/mastodon/pull/11444))
## [2.9.3] - 2019-08-10
### Added
diff --git a/Gemfile b/Gemfile
index 081cdd04e..7ed1a4e6b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -5,7 +5,7 @@ ruby '>= 2.4.0', '< 2.7.0'
gem 'pkg-config', '~> 1.3'
-gem 'puma', '~> 4.1'
+gem 'puma', '~> 4.2'
gem 'rails', '~> 5.2.3'
gem 'thor', '~> 0.20'
@@ -29,7 +29,7 @@ gem 'bootsnap', '~> 1.4', require: false
gem 'browser'
gem 'charlock_holmes', '~> 0.7.6'
gem 'iso-639'
-gem 'chewy', '~> 5.0'
+gem 'chewy', '~> 5.1'
gem 'cld3', '~> 3.2.4'
gem 'devise', '~> 4.7'
gem 'devise-two-factor', '~> 3.1'
@@ -50,7 +50,7 @@ gem 'fastimage'
gem 'goldfinger', '~> 2.1'
gem 'hiredis', '~> 0.6'
gem 'redis-namespace', '~> 1.5'
-gem 'health_check', '~> 3.0'
+gem 'health_check', git: 'https://github.com/ianheggie/health_check', ref: '0b799ead604f900ed50685e9b2d469cd2befba5b'
gem 'htmlentities', '~> 4.3'
gem 'http', '~> 3.3'
gem 'http_accept_language', '~> 2.1'
@@ -115,7 +115,7 @@ end
group :test do
gem 'capybara', '~> 3.29'
gem 'climate_control', '~> 0.2'
- gem 'faker', '~> 2.3'
+ gem 'faker', '~> 2.4'
gem 'microformats', '~> 4.1'
gem 'rails-controller-testing', '~> 1.0'
gem 'rspec-sidekiq', '~> 3.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index 4545872f0..fdf28bd10 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,3 +1,11 @@
+GIT
+ remote: https://github.com/ianheggie/health_check
+ revision: 0b799ead604f900ed50685e9b2d469cd2befba5b
+ ref: 0b799ead604f900ed50685e9b2d469cd2befba5b
+ specs:
+ health_check (4.0.0.pre)
+ rails (>= 4.0)
+
GIT
remote: https://github.com/rtomayko/posix-spawn
revision: 58465d2e213991f8afb13b984854a49fcdcc980c
@@ -161,7 +169,7 @@ GEM
case_transform (0.2)
activesupport
charlock_holmes (0.7.6)
- chewy (5.0.0)
+ chewy (5.1.0)
activesupport (>= 4.0)
elasticsearch (>= 2.0.0)
elasticsearch-dsl
@@ -209,19 +217,19 @@ GEM
docile (1.3.2)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
- doorkeeper (5.2.0)
+ doorkeeper (5.2.1)
railties (>= 5)
dotenv (2.7.5)
dotenv-rails (2.7.5)
dotenv (= 2.7.5)
railties (>= 3.2, < 6.1)
- elasticsearch (6.0.2)
- elasticsearch-api (= 6.0.2)
- elasticsearch-transport (= 6.0.2)
- elasticsearch-api (6.0.2)
+ elasticsearch (7.3.0)
+ elasticsearch-api (= 7.3.0)
+ elasticsearch-transport (= 7.3.0)
+ elasticsearch-api (7.3.0)
multi_json
- elasticsearch-dsl (0.1.5)
- elasticsearch-transport (6.0.2)
+ elasticsearch-dsl (0.1.8)
+ elasticsearch-transport (7.3.0)
faraday
multi_json
encryptor (3.0.0)
@@ -231,9 +239,9 @@ GEM
tzinfo
excon (0.62.0)
fabrication (2.20.2)
- faker (2.3.0)
+ faker (2.4.0)
i18n (~> 1.6.0)
- faraday (0.15.0)
+ faraday (0.15.4)
multipart-post (>= 1.2, < 3)
fast_blank (1.0.0)
fastimage (2.1.7)
@@ -278,8 +286,6 @@ GEM
concurrent-ruby (~> 1.0)
hashdiff (1.0.0)
hashie (3.6.0)
- health_check (3.0.0)
- railties (>= 5.0)
heapy (0.1.4)
highline (2.0.1)
hiredis (0.6.3)
@@ -370,10 +376,10 @@ GEM
mimemagic (0.3.3)
mini_mime (1.0.2)
mini_portile2 (2.4.0)
- minitest (5.11.3)
+ minitest (5.12.0)
msgpack (1.3.1)
multi_json (1.13.1)
- multipart-post (2.0.0)
+ multipart-post (2.1.1)
necromancer (0.5.0)
net-ldap (0.16.1)
net-scp (2.0.0)
@@ -445,7 +451,7 @@ GEM
pry-rails (0.3.9)
pry (>= 0.10.4)
public_suffix (4.0.1)
- puma (4.1.1)
+ puma (4.2.0)
nio4r (~> 2.0)
pundit (2.1.0)
activesupport (>= 3.0.0)
@@ -500,7 +506,7 @@ GEM
link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.3.3)
rdf (>= 2.2, < 4.0)
- redis (4.1.2)
+ redis (4.1.3)
redis-actionpack (5.0.2)
actionpack (>= 4.0, < 6)
redis-rack (>= 1, < 3)
@@ -590,7 +596,7 @@ GEM
simple_form (4.1.0)
actionpack (>= 5.0)
activemodel (>= 5.0)
- simplecov (0.17.0)
+ simplecov (0.17.1)
docile (~> 1.1)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
@@ -646,7 +652,7 @@ GEM
uniform_notifier (1.12.1)
warden (1.2.8)
rack (>= 2.0.6)
- webmock (3.7.3)
+ webmock (3.7.5)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@@ -687,7 +693,7 @@ DEPENDENCIES
capistrano-yarn (~> 2.0)
capybara (~> 3.29)
charlock_holmes (~> 0.7.6)
- chewy (~> 5.0)
+ chewy (~> 5.1)
cld3 (~> 3.2.4)
climate_control (~> 0.2)
concurrent-ruby
@@ -700,7 +706,7 @@ DEPENDENCIES
doorkeeper (~> 5.2)
dotenv-rails (~> 2.7)
fabrication (~> 2.20)
- faker (~> 2.3)
+ faker (~> 2.4)
fast_blank (~> 1.0)
fastimage
fog-core (<= 2.1.0)
@@ -708,7 +714,7 @@ DEPENDENCIES
fuubar (~> 2.4)
goldfinger (~> 2.1)
hamlit-rails (~> 0.2)
- health_check (~> 3.0)
+ health_check!
hiredis (~> 0.6)
htmlentities (~> 4.3)
http (~> 3.3)
@@ -752,7 +758,7 @@ DEPENDENCIES
private_address_check (~> 0.5)
pry-byebug (~> 3.7)
pry-rails (~> 0.3)
- puma (~> 4.1)
+ puma (~> 4.2)
pundit (~> 2.1)
rack-attack (~> 6.1)
rack-cors (~> 1.0)
@@ -793,7 +799,7 @@ DEPENDENCIES
webpush
RUBY VERSION
- ruby 2.6.1p33
+ ruby 2.6.4p104
BUNDLED WITH
1.17.3
diff --git a/app.json b/app.json
index 09adaac2c..211f17d81 100644
--- a/app.json
+++ b/app.json
@@ -13,15 +13,6 @@
"description": "The domain that your Mastodon instance will run on (this can be appname.herokuapp.com or a custom domain)",
"required": true
},
- "LOCAL_HTTPS": {
- "description": "Will your domain support HTTPS? (Automatic for herokuapp, requires manual configuration for custom domains)",
- "value": "false",
- "required": true
- },
- "PAPERCLIP_SECRET": {
- "description": "The secret key for storing media files",
- "generator": "secret"
- },
"SECRET_KEY_BASE": {
"description": "The secret key base",
"generator": "secret"
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 0f6f5e3a6..1dab5d5f2 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -10,6 +10,7 @@ class AccountsController < ApplicationController
before_action :set_body_classes
skip_around_action :set_locale, if: -> { request.format == :json }
+ skip_before_action :require_functional!
def show
respond_to do |format|
diff --git a/app/controllers/activitypub/collections_controller.rb b/app/controllers/activitypub/collections_controller.rb
index 989fee385..910fefb1c 100644
--- a/app/controllers/activitypub/collections_controller.rb
+++ b/app/controllers/activitypub/collections_controller.rb
@@ -33,9 +33,9 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
def scope_for_collection
case params[:id]
when 'featured'
- @account.statuses.permitted_for(@account, signed_request_account).tap do |scope|
- scope.merge!(@account.pinned_statuses)
- end
+ return Status.none if @account.blocking?(signed_request_account)
+
+ @account.pinned_statuses
else
raise ActiveRecord::RecordNotFound
end
diff --git a/app/controllers/admin/relays_controller.rb b/app/controllers/admin/relays_controller.rb
index 1b02d3c36..6fbb6e063 100644
--- a/app/controllers/admin/relays_controller.rb
+++ b/app/controllers/admin/relays_controller.rb
@@ -3,6 +3,7 @@
module Admin
class RelaysController < BaseController
before_action :set_relay, except: [:index, :new, :create]
+ before_action :require_signatures_enabled!, only: [:new, :create, :enable]
def index
authorize :relay, :update?
@@ -11,7 +12,7 @@ module Admin
def new
authorize :relay, :update?
- @relay = Relay.new(inbox_url: Relay::PRESET_RELAY)
+ @relay = Relay.new
end
def create
@@ -54,5 +55,9 @@ module Admin
def resource_params
params.require(:relay).permit(:inbox_url)
end
+
+ def require_signatures_enabled!
+ redirect_to admin_relays_path, alert: I18n.t('admin.relays.signatures_not_enabled') if authorized_fetch_mode?
+ end
end
end
diff --git a/app/controllers/api/v1/accounts/statuses_controller.rb b/app/controllers/api/v1/accounts/statuses_controller.rb
index 0787cd636..333db9618 100644
--- a/app/controllers/api/v1/accounts/statuses_controller.rb
+++ b/app/controllers/api/v1/accounts/statuses_controller.rb
@@ -57,6 +57,8 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
end
def pinned_scope
+ return Status.none if @account.blocking?(current_account)
+
@account.pinned_statuses
end
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
index b306e8e8c..c12e1c12e 100644
--- a/app/controllers/api/v1/accounts_controller.rb
+++ b/app/controllers/api/v1/accounts_controller.rb
@@ -33,7 +33,7 @@ class Api::V1::AccountsController < Api::BaseController
def follow
FollowService.new.call(current_user.account, @account, reblogs: truthy_param?(:reblogs))
- options = @account.locked? ? {} : { following_map: { @account.id => { reblogs: truthy_param?(:reblogs) } }, requested_map: { @account.id => false } }
+ options = @account.locked? || current_user.account.silenced? ? {} : { following_map: { @account.id => { reblogs: truthy_param?(:reblogs) } }, requested_map: { @account.id => false } }
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(options)
end
diff --git a/app/controllers/api/v2/search_controller.rb b/app/controllers/api/v2/search_controller.rb
index c14cd22d7..cbd9b551d 100644
--- a/app/controllers/api/v2/search_controller.rb
+++ b/app/controllers/api/v2/search_controller.rb
@@ -22,7 +22,7 @@ class Api::V2::SearchController < Api::BaseController
params[:q],
current_account,
limit_param(RESULTS_LIMIT),
- search_params.merge(resolve: truthy_param?(:resolve))
+ search_params.merge(resolve: truthy_param?(:resolve), exclude_unreviewed: truthy_param?(:exclude_unreviewed))
)
end
diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb
index b3113bbef..f48b17c79 100644
--- a/app/controllers/auth/sessions_controller.rb
+++ b/app/controllers/auth/sessions_controller.rb
@@ -8,6 +8,8 @@ class Auth::SessionsController < Devise::SessionsController
skip_before_action :require_no_authentication, only: [:create]
skip_before_action :require_functional!
+ prepend_before_action :authenticate_with_two_factor, if: :two_factor_enabled?, only: [:create]
+
before_action :set_instance_presenter, only: [:new]
before_action :set_body_classes
@@ -20,22 +22,9 @@ class Auth::SessionsController < Devise::SessionsController
end
def create
- self.resource = begin
- if user_params[:email].blank? && session[:otp_user_id].present?
- User.find(session[:otp_user_id])
- else
- warden.authenticate!(auth_options)
- end
- end
-
- if resource.otp_required_for_login?
- if user_params[:otp_attempt].present? && session[:otp_user_id].present?
- authenticate_with_two_factor_via_otp(resource)
- else
- prompt_for_two_factor(resource)
- end
- else
- authenticate_and_respond(resource)
+ super do |resource|
+ remember_me(resource)
+ flash.delete(:notice)
end
end
@@ -49,6 +38,16 @@ class Auth::SessionsController < Devise::SessionsController
protected
+ def find_user
+ if session[:otp_user_id]
+ User.find(session[:otp_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
+ user ||= User.find_for_authentication(email: user_params[:email])
+ end
+ end
+
def user_params
params.require(:user).permit(:email, :password, :otp_attempt)
end
@@ -71,6 +70,10 @@ class Auth::SessionsController < Devise::SessionsController
super
end
+ def two_factor_enabled?
+ find_user&.otp_required_for_login?
+ end
+
def valid_otp_attempt?(user)
user.validate_and_consume_otp!(user_params[:otp_attempt]) ||
user.invalidate_otp_backup_code!(user_params[:otp_attempt])
@@ -78,10 +81,24 @@ class Auth::SessionsController < Devise::SessionsController
false
end
+ def authenticate_with_two_factor
+ user = self.resource = find_user
+
+ if user_params[:otp_attempt].present? && session[:otp_user_id]
+ authenticate_with_two_factor_via_otp(user)
+ elsif user.present? && (user.encrypted_password.blank? || user.valid_password?(user_params[:password]))
+ # If encrypted_password is blank, we got the user from LDAP or PAM,
+ # so credentials are already valid
+
+ prompt_for_two_factor(user)
+ end
+ end
+
def authenticate_with_two_factor_via_otp(user)
if valid_otp_attempt?(user)
session.delete(:otp_user_id)
- authenticate_and_respond(user)
+ remember_me(user)
+ sign_in(user)
else
flash.now[:alert] = I18n.t('users.invalid_otp_token')
prompt_for_two_factor(user)
@@ -90,16 +107,10 @@ class Auth::SessionsController < Devise::SessionsController
def prompt_for_two_factor(user)
session[:otp_user_id] = user.id
+ @body_classes = 'lighter'
render :two_factor
end
- def authenticate_and_respond(user)
- sign_in(user)
- remember_me(user)
-
- respond_with user, location: after_sign_in_path_for(user)
- end
-
private
def set_instance_presenter
@@ -112,11 +123,9 @@ 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
diff --git a/app/controllers/custom_css_controller.rb b/app/controllers/custom_css_controller.rb
index e3f67bd14..0a667a6a6 100644
--- a/app/controllers/custom_css_controller.rb
+++ b/app/controllers/custom_css_controller.rb
@@ -2,6 +2,7 @@
class CustomCssController < ApplicationController
skip_before_action :store_current_location
+ skip_before_action :require_functional!
before_action :set_cache_headers
diff --git a/app/controllers/directories_controller.rb b/app/controllers/directories_controller.rb
index 7da975a23..750c835dd 100644
--- a/app/controllers/directories_controller.rb
+++ b/app/controllers/directories_controller.rb
@@ -9,6 +9,8 @@ class DirectoriesController < ApplicationController
before_action :set_tag, only: :show
before_action :set_accounts
+ skip_before_action :require_functional!
+
def index
render :index
end
diff --git a/app/controllers/follower_accounts_controller.rb b/app/controllers/follower_accounts_controller.rb
index 892c51cf4..705ff4122 100644
--- a/app/controllers/follower_accounts_controller.rb
+++ b/app/controllers/follower_accounts_controller.rb
@@ -8,6 +8,7 @@ class FollowerAccountsController < ApplicationController
before_action :set_cache_headers
skip_around_action :set_locale, if: -> { request.format == :json }
+ skip_before_action :require_functional!
def index
respond_to do |format|
diff --git a/app/controllers/following_accounts_controller.rb b/app/controllers/following_accounts_controller.rb
index 653d9a486..968de980d 100644
--- a/app/controllers/following_accounts_controller.rb
+++ b/app/controllers/following_accounts_controller.rb
@@ -8,6 +8,7 @@ class FollowingAccountsController < ApplicationController
before_action :set_cache_headers
skip_around_action :set_locale, if: -> { request.format == :json }
+ skip_before_action :require_functional!
def index
respond_to do |format|
diff --git a/app/controllers/manifests_controller.rb b/app/controllers/manifests_controller.rb
index 491cde745..960510f60 100644
--- a/app/controllers/manifests_controller.rb
+++ b/app/controllers/manifests_controller.rb
@@ -2,6 +2,7 @@
class ManifestsController < ApplicationController
skip_before_action :store_current_location
+ skip_before_action :require_functional!
def show
expires_in 3.minutes, public: true
diff --git a/app/controllers/media_controller.rb b/app/controllers/media_controller.rb
index 1f693de32..05cf09c28 100644
--- a/app/controllers/media_controller.rb
+++ b/app/controllers/media_controller.rb
@@ -4,6 +4,7 @@ class MediaController < ApplicationController
include Authorization
skip_before_action :store_current_location
+ skip_before_action :require_functional!
before_action :authenticate_user!, if: :whitelist_mode?
before_action :set_media_attachment
diff --git a/app/controllers/media_proxy_controller.rb b/app/controllers/media_proxy_controller.rb
index 47544f21c..014b89de1 100644
--- a/app/controllers/media_proxy_controller.rb
+++ b/app/controllers/media_proxy_controller.rb
@@ -4,6 +4,7 @@ class MediaProxyController < ApplicationController
include RoutingHelper
skip_before_action :store_current_location
+ skip_before_action :require_functional!
before_action :authenticate_user!, if: :whitelist_mode?
diff --git a/app/controllers/remote_follow_controller.rb b/app/controllers/remote_follow_controller.rb
index ba963a7a0..db1604644 100644
--- a/app/controllers/remote_follow_controller.rb
+++ b/app/controllers/remote_follow_controller.rb
@@ -7,6 +7,8 @@ class RemoteFollowController < ApplicationController
before_action :set_body_classes
+ skip_before_action :require_functional!
+
def new
@remote_follow = RemoteFollow.new(session_params)
end
diff --git a/app/controllers/remote_interaction_controller.rb b/app/controllers/remote_interaction_controller.rb
index 15224e853..4073e7ac3 100644
--- a/app/controllers/remote_interaction_controller.rb
+++ b/app/controllers/remote_interaction_controller.rb
@@ -10,6 +10,8 @@ class RemoteInteractionController < ApplicationController
before_action :set_status
before_action :set_body_classes
+ skip_before_action :require_functional!
+
def new
@remote_follow = RemoteFollow.new(session_params)
end
diff --git a/app/controllers/settings/migration/redirects_controller.rb b/app/controllers/settings/migration/redirects_controller.rb
new file mode 100644
index 000000000..6e5b72ffb
--- /dev/null
+++ b/app/controllers/settings/migration/redirects_controller.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+
+class Settings::Migration::RedirectsController < Settings::BaseController
+ layout 'admin'
+
+ before_action :authenticate_user!
+ before_action :require_not_suspended!
+
+ skip_before_action :require_functional!
+
+ def new
+ @redirect = Form::Redirect.new
+ end
+
+ def create
+ @redirect = Form::Redirect.new(resource_params.merge(account: current_account))
+
+ if @redirect.valid_with_challenge?(current_user)
+ current_account.update!(moved_to_account: @redirect.target_account)
+ ActivityPub::UpdateDistributionWorker.perform_async(current_account.id)
+ redirect_to settings_migration_path, notice: I18n.t('migrations.moved_msg', acct: current_account.moved_to_account.acct)
+ else
+ render :new
+ end
+ end
+
+ def destroy
+ if current_account.moved_to_account_id.present?
+ current_account.update!(moved_to_account: nil)
+ ActivityPub::UpdateDistributionWorker.perform_async(current_account.id)
+ end
+
+ redirect_to settings_migration_path, notice: I18n.t('migrations.cancelled_msg')
+ end
+
+ private
+
+ def resource_params
+ params.require(:form_redirect).permit(:acct, :current_password, :current_username)
+ end
+
+ def require_not_suspended!
+ forbidden if current_account.suspended?
+ end
+end
diff --git a/app/controllers/settings/migrations_controller.rb b/app/controllers/settings/migrations_controller.rb
index 90092c692..00bde1d61 100644
--- a/app/controllers/settings/migrations_controller.rb
+++ b/app/controllers/settings/migrations_controller.rb
@@ -27,15 +27,6 @@ class Settings::MigrationsController < Settings::BaseController
end
end
- def cancel
- if current_account.moved_to_account_id.present?
- current_account.update!(moved_to_account: nil)
- ActivityPub::UpdateDistributionWorker.perform_async(current_account.id)
- end
-
- redirect_to settings_migration_path, notice: I18n.t('migrations.cancelled_msg')
- end
-
helper_method :on_cooldown?
private
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb
index 83131f484..57bbeca64 100644
--- a/app/controllers/statuses_controller.rb
+++ b/app/controllers/statuses_controller.rb
@@ -19,6 +19,7 @@ class StatusesController < ApplicationController
before_action :set_autoplay, only: :embed
skip_around_action :set_locale, if: -> { request.format == :json }
+ skip_before_action :require_functional!, only: [:show, :embed]
content_security_policy only: :embed do |p|
p.frame_ancestors(false)
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index 4dfa05264..77d5661b8 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -13,6 +13,8 @@ class TagsController < ApplicationController
before_action :set_body_classes
before_action :set_instance_presenter
+ skip_before_action :require_functional!
+
def show
respond_to do |format|
format.html do
diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js
index 061a36bb8..8e7906c73 100644
--- a/app/javascript/mastodon/actions/compose.js
+++ b/app/javascript/mastodon/actions/compose.js
@@ -234,7 +234,7 @@ export function uploadCompose(files) {
progress[i] = loaded;
dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total));
},
- }).then(({ data }) => dispatch(uploadComposeSuccess(data)));
+ }).then(({ data }) => dispatch(uploadComposeSuccess(data, f)));
}).catch(error => dispatch(uploadComposeFail(error)));
};
};
@@ -289,10 +289,11 @@ export function uploadComposeProgress(loaded, total) {
};
};
-export function uploadComposeSuccess(media) {
+export function uploadComposeSuccess(media, file) {
return {
type: COMPOSE_UPLOAD_SUCCESS,
media: media,
+ file: file,
skipLoading: true,
};
};
@@ -368,6 +369,7 @@ const fetchComposeSuggestionsTags = throttle((dispatch, getState, token) => {
q: token.slice(1),
resolve: false,
limit: 4,
+ exclude_unreviewed: true,
},
}).then(({ data }) => {
dispatch(readyComposeSuggestionsTags(token, data.hashtags));
diff --git a/app/javascript/mastodon/actions/importer/normalizer.js b/app/javascript/mastodon/actions/importer/normalizer.js
index 5e7e78e69..f7108fdb9 100644
--- a/app/javascript/mastodon/actions/importer/normalizer.js
+++ b/app/javascript/mastodon/actions/importer/normalizer.js
@@ -73,8 +73,9 @@ export function normalizePoll(poll) {
const emojiMap = makeEmojiMap(normalPoll);
- normalPoll.options = poll.options.map(option => ({
+ normalPoll.options = poll.options.map((option, index) => ({
...option,
+ voted: poll.own_votes && poll.own_votes.includes(index),
title_emojified: emojify(escapeTextContentForBrowser(option.title), emojiMap),
}));
diff --git a/app/javascript/mastodon/components/poll.js b/app/javascript/mastodon/components/poll.js
index 373f710d3..dd7e2fcd3 100644
--- a/app/javascript/mastodon/components/poll.js
+++ b/app/javascript/mastodon/components/poll.js
@@ -10,9 +10,11 @@ import spring from 'react-motion/lib/spring';
import escapeTextContentForBrowser from 'escape-html';
import emojify from 'mastodon/features/emoji/emoji';
import RelativeTimestamp from './relative_timestamp';
+import Icon from 'mastodon/components/icon';
const messages = defineMessages({
closed: { id: 'poll.closed', defaultMessage: 'Closed' },
+ voted: { id: 'poll.voted', defaultMessage: 'You voted for this answer', description: 'Tooltip of the "voted" checkmark in polls' },
});
const makeEmojiMap = record => record.get('emojis').reduce((obj, emoji) => {
@@ -99,10 +101,11 @@ class Poll extends ImmutablePureComponent {
};
renderOption (option, optionIndex, showResults) {
- const { poll, disabled } = this.props;
- const percent = poll.get('votes_count') === 0 ? 0 : (option.get('votes_count') / poll.get('votes_count')) * 100;
- const leading = poll.get('options').filterNot(other => other.get('title') === option.get('title')).every(other => option.get('votes_count') > other.get('votes_count'));
- const active = !!this.state.selected[`${optionIndex}`];
+ const { poll, disabled, intl } = this.props;
+ const percent = poll.get('votes_count') === 0 ? 0 : (option.get('votes_count') / poll.get('votes_count')) * 100;
+ const leading = poll.get('options').filterNot(other => other.get('title') === option.get('title')).every(other => option.get('votes_count') > other.get('votes_count'));
+ const active = !!this.state.selected[`${optionIndex}`];
+ const voted = option.get('voted') || (poll.get('own_votes') && poll.get('own_votes').includes(optionIndex));
let titleEmojified = option.get('title_emojified');
if (!titleEmojified) {
@@ -131,7 +134,10 @@ class Poll extends ImmutablePureComponent {
/>
{!showResults && }
- {showResults && {Math.round(percent)}%}
+ {showResults &&
+ {!!voted &&
<a>
y <em>
.
- title: Descripción de instancia
- site_description_extended:
- desc_html: Un buen lugar para tu código de conducta, reglas, guías y otras cosas que estén impuestas aparte en tu instancia. Puedes usar tags HTML
- title: Información extendida personalizada
- site_short_description:
- desc_html: Mostrado en la barra lateral y las etiquetas de metadatos. Describe lo que es Mastodon y qué hace especial a este servidor en un solo párrafo. si está vacío, pone por defecto la descripción de la instancia.
- title: Descripción corta de la instancia
- site_terms:
- desc_html: Puedes escribir tus propias políticas de privacidad, términos de servicio u otras legalidades. Puedes usar tags HTML
- title: Términos de servicio personalizados
- site_title: Nombre de instancia
- spam_check_enabled:
- desc_html: Mastodon puede silenciar y reportar cuentas automáticamente usando medidas como detectar cuentas que envían mensajes no solicitados repetidos. Puede que haya falsos positivos.
- title: Contra-spam
- thumbnail:
- desc_html: Se usa para muestras con OpenGraph y APIs. Se recomienda 1200x630px
- title: Portada de instancia
- timeline_preview:
- desc_html: Mostrar línea de tiempo pública en la portada
- title: Previsualización
- title: Ajustes del sitio
- trends:
- desc_html: Mostrar públicamente hashtags previamente revisados que son tendencia
- title: Hashtags de tendencia
- statuses:
- back_to_account: Volver a la cuenta
- batch:
- delete: Eliminar
- nsfw_off: Marcar contenido como no sensible
- nsfw_on: Marcar contenido como sensible
- deleted: Eliminado
- failed_to_execute: Falló al ejecutar
- media:
- title: Multimedia
- no_media: No hay multimedia
- no_status_selected: No se cambió ningún estado al no seleccionar ninguno
- title: Estado de las cuentas
- with_media: Con multimedia
- tags:
- accounts_today: Usos únicos de hoy
- accounts_week: Usos únicos esta semana
- context: Contexto
- directory: En el directorio
- in_directory: "%{count} en el directorio"
- last_active: Última actividad
- most_popular: Más popular
- most_recent: Más reciente
- name: Hashtag
- review: Estado de revisión
- reviewed: Revisado
- title: Etiquetas
- trending_right_now: En tendencia ahora mismo
- unique_uses_today: "%{count} publicando hoy"
- unreviewed: No revisado
- updated_msg: Hashtags actualizados exitosamente
- title: Administración
- warning_presets:
- add_new: Añadir nuevo
- delete: Borrar
- edit: Editar
- edit_preset: Editar aviso predeterminado
- title: Editar configuración predeterminada de avisos
- admin_mailer:
- new_pending_account:
- body: Los detalles de la nueva cuenta están abajos. Puedes aprobar o rechazar esta aplicación.
- subject: Nueva cuenta para revisión en %{instance} (%{username})
- new_report:
- body: "%{reporter} ha reportado a %{target}"
- body_remote: Alguien de %{domain} a reportado a %{target}
- subject: Nuevo reporte para la %{instance} (#%{id})
- new_trending_tag:
- body: 'El hashtag #%{name} está en tendencia hoy, pero no ha sido revisado previamente. No se mostrará públicamente a menos que lo permita, o simplemente guarde el formulario como para no volver a ver esto.'
- subject: Nuevo hashtag para revisión en %{instance} (#%{name})
- appearance:
- advanced_web_interface: Interfaz web avanzada
- advanced_web_interface_hint: 'Si desea utilizar todo el ancho de pantalla, la interfaz web avanzada le permite configurar varias columnas diferentes para ver tanta información al mismo tiempo como quiera: Inicio, notificaciones, línea de tiempo federada, cualquier número de listas y etiquetas.'
- animations_and_accessibility: Animaciones y accesibilidad
- confirmation_dialogs: Diálogos de confirmación
- discovery: Descubrir
- sensitive_content: Contenido sensible
- application_mailer:
- notification_preferences: Cambiar preferencias de correo electrónico
- salutation: "%{name},"
- settings: 'Cambiar preferencias de correo: %{link}'
- view: 'Vista:'
- view_profile: Ver perfil
- view_status: Ver estado
- applications:
- created: Aplicación creada exitosamente
- destroyed: Apicación eliminada exitosamente
- invalid_url: La URL proporcionada es incorrecta
- regenerate_token: Regenerar token de acceso
- token_regenerated: Token de acceso regenerado exitosamente
- warning: Ten mucho cuidado con estos datos. ¡No los compartas con nadie!
- your_token: Tu token de acceso
- auth:
- apply_for_account: Solicitar una invitación
- change_password: Contraseña
- checkbox_agreement_html: Acepto las reglas del servidor y términos de servicio
- checkbox_agreement_without_rules_html: Acepto los términos de servicio
- delete_account: Borrar cuenta
- delete_account_html: Si desea eliminar su cuenta, puede proceder aquí. Será pedido de una confirmación.
- didnt_get_confirmation: "¿No recibió el correo de confirmación?"
- forgot_password: "¿Olvidaste tu contraseña?"
- invalid_reset_password_token: El token de reinicio de contraseña es inválido o expiró. Por favor pide uno nuevo.
- login: Iniciar sesión
- logout: Cerrar sesión
- migrate_account: Mudarse a otra cuenta
- migrate_account_html: Si deseas redireccionar esta cuenta a otra distinta, puedes configurarlo aquí.
- or_log_in_with: O inicia sesión con
- providers:
- cas: CAS
- saml: SAML
- register: Registrarse
- registration_closed: "%{instance} no está aceptando nuevos miembros"
- resend_confirmation: Volver a enviar el correo de confirmación
- reset_password: Restablecer contraseña
- security: Cambiar contraseña
- set_new_password: Establecer nueva contraseña
- setup:
- email_below_hint_html: Si la dirección de correo electrónico que aparece a continuación es incorrecta, se puede cambiarla aquí y recibir un nuevo correo electrónico de confirmación.
- email_settings_hint_html: El correo electrónico de confirmación fue enviado a %{email}. Si esa dirección de correo electrónico no sea correcta, se puede cambiarla en la configuración de la cuenta.
- title: Configuración
- status:
- account_status: Estado de la cuenta
- confirming: Esperando confirmación de correo electrónico.
- functional: Su cuenta está totalmente operativa.
- pending: Su solicitud está pendiente de revisión por nuestros administradores. Eso puede tardar algún tiempo. Usted recibirá un correo electrónico si el solicitud sea aprobada.
- trouble_logging_in: "¿Problemas para iniciar sesión?"
- authorize_follow:
- already_following: Ya estás siguiendo a esta cuenta
- error: Desafortunadamente, ha ocurrido un error buscando la cuenta remota
- follow: Seguir
- follow_request: 'Tienes una solicitud de seguimiento de:'
- following: "¡Éxito! Ahora estás siguiendo a:"
- post_follow:
- close: O, puedes simplemente cerrar esta ventana.
- return: Regresar al perfil del usuario
- web: Ir al sitio web
- title: Seguir a %{acct}
- challenge:
- confirm: Continuar
- datetime:
- distance_in_words:
- about_x_hours: "%{count}h"
- about_x_months: "%{count}m"
- about_x_years: "%{count}a"
- almost_x_years: "%{count}a"
- half_a_minute: Justo ahora
- less_than_x_minutes: "%{count}m"
- less_than_x_seconds: Justo ahora
- over_x_years: "%{count}a"
- x_days: "%{count}d"
- x_minutes: "%{count}m"
- x_months: "%{count}m"
- x_seconds: "%{count}s"
- deletes:
- confirm_password: Ingresa tu contraseña actual para demostrar tu identidad
- proceed: Eliminar cuenta
- success_msg: Tu cuenta se eliminó con éxito
- directories:
- directory: Directorio de perfiles
- explanation: Descubre usuarios según sus intereses
- explore_mastodon: Explorar %{title}
- domain_validator:
- invalid_domain: no es un nombre de dominio válido
- errors:
- '400': The request you submitted was invalid or malformed.
- '403': No tienes permiso para acceder a esta página.
- '404': La página que estabas buscando no existe.
- '406': This page is not available in the requested format.
- '410': La página que estabas buscando no existe más.
- '422':
- content: Verificación de seguridad fallida. ¿Estás bloqueando algunas cookies?
- title: Verificación de seguridad fallida
- '429': Asfixiado
- '500':
- content: Lo sentimos, algo ha funcionado mal por nuestra parte.
- title: Esta página no es correcta
- '503': The page could not be served due to a temporary server failure.
- noscript_html: Para usar la aplicación web de Mastodon, por favor activa Javascript. Alternativamente, prueba alguna de las aplicaciones nativas para Mastodon para tu plataforma.
- existing_username_validator:
- not_found: no pudo encontrar un usuario local con ese nombre de usuario
- not_found_multiple: no pudo encontrar %{usernames}
- exports:
- archive_takeout:
- date: Fecha
- download: Descargar tu archivo
- hint_html: Puedes solicitar un archivo de tus toots y materiales subidos. Los datos exportados estarán en formato ActivityPub, legibles por cualquier software compatible.
- in_progress: Recopilando tu archivo...
- request: Solicitar tu archivo
- size: Tamaño
- blocks: Personas que has bloqueado
- csv: CSV
- domain_blocks: Bloqueos de dominios
- follows: Personas que sigues
- lists: Listas
- mutes: Tienes en silencio
- storage: Almacenamiento
- featured_tags:
- add_new: Añadir nuevo
- errors:
- limit: Ya has alcanzado la cantidad máxima de hashtags
- filters:
- contexts:
- home: Timeline propio
- notifications: Notificaciones
- public: Timeline público
- thread: Conversaciones
- edit:
- title: Editar filtro
- errors:
- invalid_context: Se suminstró un contexto inválido o vacío
- invalid_irreversible: El filtrado irreversible solo funciona con los contextos propios o de notificaciones
- index:
- delete: Borrar
- title: Filtros
- new:
- title: Añadir un nuevo filtro
- footer:
- developers: Desarrolladores
- more: Mas…
- resources: Recursos
- trending_now: Tendencia ahora
- generic:
- all: Todos
- changes_saved_msg: "¡Cambios guardados con éxito!"
- copy: Copiar
- order_by: Ordenar por
- save_changes: Guardar cambios
- validation_errors:
- one: "¡Algo no está bien! Por favor, revisa el error"
- other: "¡Algo no está bien! Por favor, revise %{count} errores más abajo"
- html_validator:
- invalid_markup: 'contiene código HTML no válido: %{error}'
- identity_proofs:
- active: Activo
- authorize: Sí, autorizar
- authorize_connection_prompt: "¿Autorizar esta conexión criptográfica?"
- errors:
- failed: La conexión criptográfica falló. Por favor, inténtalo de nuevo desde %{provider}.
- keybase:
- invalid_token: Los tokens de Keybase son hashes de firmas y deben tener 66 caracteres hex
- verification_failed: Keybase no reconoce este token como una firma del usuario de Keybase %{kb_username}. Por favor, inténtelo de nuevo desde Keybase.
- wrong_user: No se puede crear una prueba para %{proving} mientras se inicia sesión como %{current}. Inicia sesión como %{proving} e inténtalo de nuevo.
- explanation_html: Aquí puedes conectar criptográficamente sus otras identidades, como un perfil de Keybase. Esto permite a otras personas enviarle mensajes encriptados y confiar en el contenido que les envías.
- i_am_html: Soy %{username} en %{service}.
- identity: Identidad
- inactive: Inactivo
- publicize_checkbox: 'Y tootee esto:'
- publicize_toot: "¡Comprobado! Soy %{username} en %{service}: %{url}"
- status: Estado de la verificación
- view_proof: Ver prueba
- imports:
- modes:
- merge: Unir
- merge_long: Mantener registros existentes y añadir nuevos
- overwrite: Sobrescribir
- overwrite_long: Reemplazar registros actuales con los nuevos
- preface: Puedes importar ciertos datos, como todas las personas que estás siguiendo o bloqueando en tu cuenta en esta instancia, desde archivos exportados de otra instancia.
- success: Sus datos se han cargado correctamente y serán procesados en brevedad
- types:
- blocking: Lista de bloqueados
- domain_blocking: Lista de dominios bloqueados
- following: Lista de seguidos
- muting: Lista de silenciados
- upload: Cargar
- in_memoriam_html: En memoria.
- invites:
- delete: Desactivar
- expired: Expiradas
- expires_in:
- '1800': 30 minutos
- '21600': 6 horas
- '3600': 1 hora
- '43200': 12 horas
- '604800': 1 semana
- '86400': 1 día
- expires_in_prompt: Nunca
- generate: Generar
- invited_by: 'Fuiste invitado por:'
- max_uses:
- one: 1 uso
- other: "%{count} usos"
- max_uses_prompt: Sin límite
- prompt: Generar y compartir enlaces con otros para conceder acceso a este nodo
- table:
- expires_at: Expira
- uses: Usos
- title: Invitar a gente
- lists:
- errors:
- limit: Has alcanzado la cantidad máxima de listas
- media_attachments:
- validations:
- images_and_video: No se puede adjuntar un video a un estado que ya contenga imágenes
- too_many: No se pueden adjuntar más de 4 archivos
- migrations:
- acct: username@domain de la nueva cuenta
- moderation:
- title: Moderación
- notification_mailer:
- digest:
- action: Ver todas las notificaciones
- body: Un resumen de los mensajes que perdiste en desde tu última visita, el %{since}
- mention: "%{name} te ha mencionado en:"
- new_followers_summary:
- one: "¡Ademas, has adquirido un nuevo seguidor mientras no estabas! ¡Hurra!"
- other: "¡Ademas, has adquirido %{count} nuevos seguidores mientras no estabas! ¡Genial!"
- subject:
- one: "1 nueva notificación desde tu última visita \U0001F418"
- other: "%{count} nuevas notificaciones desde tu última visita \U0001F418"
- title: En tu ausencia…
- favourite:
- body: 'Tu estado fue marcado como favorito por %{name}:'
- subject: "%{name} marcó como favorito tu estado"
- title: Nuevo favorito
- follow:
- body: "¡%{name} te está siguiendo!"
- subject: "%{name} te está siguiendo"
- title: Nuevo seguidor
- follow_request:
- action: Administrar solicitudes para seguir
- body: "%{name} ha solicitado seguirte"
- subject: 'Seguidor pendiente: %{name}'
- title: Nueva solicitud para seguir
- mention:
- action: Responder
- body: 'Fuiste mencionado por %{name} en:'
- subject: Fuiste mencionado por %{name}
- title: Nueva mención
- reblog:
- body: "%{name} ha retooteado tu estado:"
- subject: "%{name} ha retooteado tu estado"
- title: Nueva difusión
- number:
- human:
- decimal_units:
- format: "%n%u"
- units:
- billion: B
- million: M
- quadrillion: Q
- thousand: m
- trillion: T
- pagination:
- newer: Más nuevo
- next: Próximo
- older: Más antiguo
- prev: Anterior
- truncate: "…"
- polls:
- errors:
- already_voted: Ya has votado en esta encuesta
- duplicate_options: contiene elementos duplicados
- duration_too_long: está demasiado lejos en el futuro
- duration_too_short: es demasiado pronto
- expired: La encuesta ya ha terminado
- over_character_limit: no puede exceder %{max} caracteres cada uno
- too_few_options: debe tener más de un elemento
- too_many_options: no puede contener más de %{max} elementos
- preferences:
- other: Otros
- posting_defaults: Configuración por defecto de publicaciones
- public_timelines: Líneas de tiempo públicas
- relationships:
- activity: Actividad de la cuenta
- dormant: Inactivo
- last_active: Última actividad
- most_recent: Más reciente
- moved: Movido
- mutual: Mutuo
- primary: Principal
- relationship: Relación
- remove_selected_domains: Eliminar todos los seguidores de los dominios seleccionados
- remove_selected_followers: Eliminar los seguidores seleccionados
- remove_selected_follows: Dejar de seguir a los usuarios seleccionados
- status: Estado de la cuenta
- remote_follow:
- acct: Ingesa tu usuario@dominio desde el que quieres seguir
- missing_resource: No se pudo encontrar la URL de redirección requerida para tu cuenta
- no_account_html: "¿No tienes una cuenta? Puedes registrarte aqui"
- proceed: Proceder a seguir
- prompt: 'Vas a seguir a:'
- reason_html: "¿¿Por qué es necesario este paso? %{instance}
puede que no sea el servidor donde estás registrado, así que necesitamos redirigirte primero a tu servidor de origen."
- remote_interaction:
- favourite:
- proceed: Proceder a marcar como favorito
- prompt: 'Quieres marcar como favorito este toot:'
- reblog:
- proceed: Proceder a retootear
- prompt: 'Quieres retootear este toot:'
- reply:
- proceed: Proceder a responder
- prompt: 'Quieres responder a este toot:'
- scheduled_statuses:
- over_daily_limit: Ha superado el límite de %{limit} toots programados para ese día
- over_total_limit: Ha superado el límite de %{limit} toots programados
- too_soon: La fecha programada debe estar en el futuro
- sessions:
- activity: Última actividad
- browser: Navegador
- browsers:
- alipay: Alipay
- blackberry: Blackberry
- chrome: Chrome
- edge: Microsoft Edge
- electron: Electron
- firefox: Firefox
- generic: Desconocido
- ie: Internet Explorer
- micro_messenger: MicroMessenger
- nokia: Navegador de Nokia S40 Ovi
- opera: Opera
- otter: Otter
- phantom_js: PhantomJS
- qq: Navegador QQ
- safari: Safari
- uc_browser: UCBrowser
- weibo: Weibo
- current_session: Sesión actual
- description: "%{browser} en %{platform}"
- explanation: Estos son los navegadores web conectados actualmente en tu cuenta de Mastodon.
- ip: IP
- platforms:
- adobe_air: Adobe Air
- android: Android
- blackberry: Blackberry
- chrome_os: ChromeOS
- firefox_os: Firefox OS
- ios: iOS
- linux: Linux
- mac: Mac
- other: Desconocido
- windows: Windows
- windows_mobile: Windows Mobile
- windows_phone: Windows Phone
- revoke: Revocar
- revoke_success: Sesión revocada exitosamente
- title: Sesiones
- settings:
- account: Cuenta
- account_settings: Ajustes de la cuenta
- appearance: Apariencia
- authorized_apps: Aplicaciones autorizadas
- back: Volver al inicio
- delete: Borrar cuenta
- development: Desarrollo
- edit_profile: Editar perfil
- export: Exportar información
- featured_tags: Hashtags destacados
- identity_proofs: Pruebas de identidad
- import: Importar
- import_and_export: Importar y exportar
- migrate: Migración de cuenta
- notifications: Notificaciones
- preferences: Preferencias
- profile: Perfil
- relationships: Siguiendo y seguidores
- two_factor_authentication: Autenticación de dos factores
- spam_check:
- spam_detected_and_silenced: Este es un informe automatizado. Se ha detectado spam y el remitente ha sido silenciado automáticamente. Si esto es un error, por favor, deja de silenciar la cuenta.
- statuses:
- attached:
- description: 'Adjunto: %{attached}'
- image:
- one: "%{count} imagen"
- other: "%{count} imágenes"
- video:
- one: "%{count} vídeo"
- other: "%{count} vídeos"
- boosted_from_html: Impulsado desde %{acct_link}
- content_warning: 'Alerta de contenido: %{warning}'
- disallowed_hashtags:
- one: 'contenía un hashtag no permitido: %{tags}'
- other: 'contenía los hashtags no permitidos: %{tags}'
- language_detection: Detección automática de idioma
- open_in_web: Abrir en web
- over_character_limit: Límite de caracteres de %{max} superado
- pin_errors:
- limit: Ya has fijado el número máximo de publicaciones
- ownership: El toot de alguien más no puede fijarse
- private: Los toots no-públicos no pueden fijarse
- reblog: Un boost no puede fijarse
- poll:
- total_votes:
- one: "%{count} voto"
- other: "%{count} votos"
- vote: Vota
- show_more: Mostrar más
- sign_in_to_participate: Regístrate para participar en la conversación
- title: '%{name}: "%{quote}"'
- visibilities:
- private: Sólo mostrar a seguidores
- private_long: Solo mostrar a tus seguidores
- public: Público
- public_long: Todos pueden ver
- unlisted: Público, pero no mostrar en la historia federada
- unlisted_long: Todos pueden ver, pero no está listado en las líneas de tiempo públicas
- stream_entries:
- pinned: Toot fijado
- reblogged: retooteado
- sensitive_content: Contenido sensible
- tags:
- does_not_match_previous_name: no coincide con el nombre anterior
- terms:
- body_html: |
- Toda la información que obtenemos de usted puede ser utilizada de las siguientes maneras:
- -Implementamos una variedad de medidas de seguridad para mantener la seguridad de su información personal cuando usted ingresa, envía o accede a su información personal. Entre otras cosas, la sesión de su navegador, así como el tráfico entre sus aplicaciones y la API, están protegidos con SSL, y su contraseña está protegida mediante un algoritmo unidireccional fuerte. Puede habilitar la autenticación de dos factores para un acceso más seguro a su cuenta.
- -Haremos un esfuerzo de buena fe para:
- -Puede solicitar y descargar un archivo de su contenido, incluidos sus mensajes, archivos adjuntos multimedia, foto de perfil e imagen de cabecera.
- -Usted puede borrar su cuenta de forma irreversible en cualquier momento.
- -Sí. Las cookies son pequeños archivos que un sitio o su proveedor de servicios transfiere al disco duro de su ordenador a través de su navegador web (si usted lo permite). Estas cookies permiten al sitio reconocer su navegador y, si tiene una cuenta registrada, asociarla con su cuenta registrada.
- -Utilizamos cookies para entender y guardar sus preferencias para futuras visitas.
- -No vendemos, comerciamos ni transferimos a terceros su información personal identificable. Esto no incluye a los terceros de confianza que nos asisten en la operación de nuestro sitio, en la realización de nuestros negocios o en la prestación de servicios, siempre y cuando dichas partes acuerden mantener la confidencialidad de esta información. También podemos divulgar su información cuando creamos que es apropiado para cumplir con la ley, hacer cumplir las políticas de nuestro sitio, o proteger nuestros u otros derechos, propiedad o seguridad.
- -Su contenido público puede ser descargado por otros servidores de la red. Tus mensajes públicos y sólo para seguidores se envían a los servidores donde residen tus seguidores, y los mensajes directos se envían a los servidores de los destinatarios, en la medida en que dichos seguidores o destinatarios residan en un servidor diferente.
- -Cuando usted autoriza a una aplicación a usar su cuenta, dependiendo del alcance de los permisos que usted apruebe, puede acceder a la información de su perfil público, su lista de seguimiento, sus seguidores, sus listas, todos sus mensajes y sus favoritos. Las aplicaciones nunca podrán acceder a su dirección de correo electrónico o contraseña.
- -Si este servidor está en la UE o en el EEE: Nuestro sitio, productos y servicios están dirigidos a personas mayores de 16 años. Si es menor de 16 años, según los requisitos de la GDPR (General Data Protection Regulation) no utilice este sitio.
- -Si este servidor está en los EE.UU.: Nuestro sitio, productos y servicios están todos dirigidos a personas que tienen al menos 13 años de edad. Si usted es menor de 13 años, según los requisitos de COPPA (Children's Online Privacy Protection Act) no utilice este sitio.
- -Los requisitos legales pueden ser diferentes si este servidor está en otra jurisdicción.
- -Si decidimos cambiar nuestra política de privacidad, publicaremos esos cambios en esta página.
- -Este documento es CC-BY-SA. Fue actualizado por última vez el 7 de marzo de 2018.
- -Adaptado originalmente desde la política de privacidad de Discourse.
- title: Términos del Servicio y Políticas de Privacidad de %{instance} - themes: - contrast: Alto contraste - default: Mastodon - mastodon-light: Mastodon (claro) - time: - formats: - default: "%d de %b del %Y, %H:%M" - month: "%b %Y" - two_factor_authentication: - code_hint: Ingresa el código generado por tu aplicación de autenticación para confirmar - description_html: Si habilitas la autenticación de dos factores, se requerirá estar en posesión de su teléfono, lo que generará tokens para que usted pueda iniciar sesión. - disable: Deshabilitar - enable: Habilitar - enabled: La autenticación de dos factores está activada - enabled_success: Verificación de dos factores activada exitosamente - generate_recovery_codes: generar códigos de recuperación - instructions_html: "Escanea este código QR desde Google Authenticator o una aplicación similar en su teléfono. Desde ahora, esta aplicación va a generar tokens que tienes que ingresar cuando quieras iniciar sesión." - lost_recovery_codes: Los códigos de recuperación te permiten obtener acceso a tu cuenta si pierdes tu teléfono. Si has perdido tus códigos de recuperación, puedes regenerarlos aquí. Tus viejos códigos de recuperación se harán inválidos. - manual_instructions: 'Si no puedes escanear el código QR y necesitas introducirlo manualmente, este es el secreto en texto plano:' - recovery_codes: Hacer copias de seguridad de tus códigos de recuperación - recovery_codes_regenerated: Códigos de recuperación regenerados con éxito - recovery_instructions_html: Si pierdes acceso a tu teléfono, puedes usar uno de los siguientes códigos de recuperación para obtener acceso a tu cuenta. Mantenlos a salvo. Por ejemplo, puedes imprimirlos y guardarlos con otros documentos importantes. - setup: Configurar - wrong_code: "¡El código ingresado es inválido! ¿El dispositivo y tiempo del servidor están correctos?" - user_mailer: - backup_ready: - explanation: Has solicitado una copia completa de tu cuenta de Mastodon. ¡Ya está preparada para descargar! - subject: Tu archivo está preparado para descargar - title: Descargar archivo - warning: - explanation: - disable: Mientras su cuenta esté congelada, la información de su cuenta permanecerá intacta, pero no puede realizar ninguna acción hasta que se desbloquee. - silence: Mientras su cuenta está limitada, sólo las personas que ya le están siguiendo verán sus toots en este servidor, y puede que se le excluya de varios listados públicos. Sin embargo, otros pueden seguirle manualmente. - suspend: Su cuenta ha sido suspendida, y todos tus toots y tus archivos multimedia subidos han sido irreversiblemente eliminados de este servidor, y de los servidores donde tenías seguidores. - review_server_policies: Revisar las políticas del servidor - subject: - disable: Su cuenta %{acct} ha sido congelada - none: Advertencia para %{acct} - silence: Su cuenta %{acct} ha sido limitada - suspend: Su cuenta %{acct} ha sido suspendida - title: - disable: Cuenta congelada - none: Advertencia - silence: Cuenta limitada - suspend: Cuenta suspendida - welcome: - edit_profile_action: Configurar el perfil - edit_profile_step: Puedes personalizar tu perfil subiendo un avatar, una cabecera, cambiando tu nombre de usuario y más cosas. Si quieres revisar a tus nuevos seguidores antes de que se les permita seguirte, puedes bloquear tu cuenta. - explanation: Aquí hay algunos consejos para empezar - final_action: Empezar a publicar - final_step: '¡Empieza a publicar! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea de tiempo local y con "hashtags". Podrías querer introducirte con el "hashtag" #introductions.' - full_handle: Su sobrenombre completo - full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia. - review_preferences_action: Cambiar preferencias - review_preferences_step: Asegúrate de poner tus preferencias, como que correos te gustaría recibir, o que nivel de privacidad te gustaría que tus publicaciones tengan por defecto. Si no tienes mareos, podrías elegir habilitar la reproducción automática de "GIFs". - subject: Bienvenido a Mastodon - tip_federated_timeline: La línea de tiempo federada es una vista de la red de Mastodon. Pero solo incluye gente que tus vecinos están siguiendo, así que no está completa. - tip_following: Sigues a tus administradores de servidor por defecto. Para encontrar más gente interesante, revisa las lineas de tiempo local y federada. - tip_local_timeline: La linea de tiempo local is una vista de la gente en %{instance}. Estos son tus vecinos inmediatos! - tip_mobile_webapp: Si el navegador de tu dispositivo móvil ofrece agregar Mastodon a tu página de inicio, puedes recibir notificaciones. Actúa como una aplicación nativa en muchas formas! - tips: Consejos - title: Te damos la bienvenida a bordo, %{name}! - users: - follow_limit_reached: No puedes seguir a más de %{limit} personas - invalid_email: La dirección de correo es incorrecta - invalid_otp_token: Código de dos factores incorrecto - otp_lost_help_html: Si perdiste al acceso a ambos, puedes ponerte en contancto con %{email} - seamless_external_login: Has iniciado sesión desde un servicio externo, así que los ajustes de contraseña y correo no están disponibles. - signed_in_as: 'Sesión iniciada como:' - verification: - explanation_html: 'Puedes verificarte a ti mismo como el dueño de los links en los metadatos de tu perfil . Para eso, el sitio vinculado debe contener un vínculo a tu perfil de Mastodon. El vínculo en tu sitio debe tener un atributo rel="me"
. El texto del vínculo no importa. Aquí un ejemplo:'
- verification: Verificación
+--- {}
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index b19cd4c96..8dbeb3ade 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -10,7 +10,7 @@ fa:
api: رابط برنامهنویسی کاربردی
apps: اپهای موبایل
apps_platforms: ماستدون را در iOS، اندروید، و سایر سیستمها داشته باشید
- browse_directory: در فهرست گزیدهٔ کاربران این سرور چرخی بزنید و کاربران را بر اساس علاقهمندیهایشان پیدا کنید
+ browse_directory: کاربران این سرور را بر اساس علاقهمندیهایشان پیدا کنید
browse_public_posts: فهرست لحظهای نوشتههای عمومی در ماستدون را ببینید
contact: تماس
contact_missing: تعیین نشده
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index f7306fb41..48476e00b 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -242,8 +242,10 @@ fr:
disabled_msg: Émoji désactivé avec succès !
emoji: Émoji
enable: Activer
+ enabled: Activé
enabled_msg: Émoji activé avec succès
image_hint: PNG de moins de 50 Ko
+ list: Liste
listed: Listé
new:
title: Ajouter un nouvel émoji personnalisé
@@ -252,6 +254,7 @@ fr:
shortcode_hint: Au moins deux caractères, seulement des caractères alphanumériques ou des tirets bas
title: Émojis personnalisés
uncategorized: Non catégorisé
+ unlist: Délisté
unlisted: Délisté
update_failed_msg: N’a pas pu mettre à jour cet émoji
updated_msg: Émoji mis à jour avec succès !
@@ -383,6 +386,7 @@ fr:
pending: En attente de l’approbation du relai
save_and_enable: Sauvegarder et activer
setup: Paramétrer une connexion de relais
+ signatures_not_enabled: Les relais ne fonctionneront pas correctement lorsque le mode sécurisé ou le mode liste blanche est activé
status: Statut
title: Relais
report_notes:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 9670079d6..c1222018d 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -35,6 +35,13 @@ hu:
status_count_before: eddig
tagline: Kövess barátokat és találj újakat
terms: Felhasználási feltételek
+ unavailable_content: A tartalom nem elérhető
+ unavailable_content_description:
+ reason: 'Indok:'
+ rejecting_media: A szerverről származó médiafájlok nem kerülnek feldolgozásra, és nem jelennek meg miniatűrök, amelyek kézi átkattintást igényelnek a másik szerverre.
+ silenced: A szerver hozzászólásai csak a saját hírvonalon jelennek meg, ha követik a szerzőt.
+ suspended: Nem fogsz tudni követni senkit ebből a szerverből, és nem kerül feldolgozásra vagy tárolásra a tőle származó adat, és nincs adatcsere.
+ unavailable_content_html: A Mastodon általában mindenféle tartalomcserét és interakciót lehetővé tesz bármelyik szerverrel a fediverzumban. Ezek azok a kivételek, melyek a mi szerverünkön érvényben vannak.
user_count_after:
one: felhasználónk
other: felhasználónk
@@ -42,6 +49,8 @@ hu:
what_is_mastodon: Mi a Mastodon?
accounts:
choices_html: "%{name} választásai:"
+ endorsements_hint: A webes felületen jóváhagyhatod a követett embereket, és itt jelennek meg.
+ featured_tags_hint: Szerepeltethetsz bizonyos hashtageket, melyek itt jelennek majd meg.
follow: Követés
followers:
one: Követő
@@ -53,6 +62,7 @@ hu:
media: Média
moved_html: "%{name} ide költözött: %{new_profile_link}"
network_hidden: Ez az információ nem elérhető
+ never_active: Soha
nothing_here: Nincs itt semmi!
people_followed_by: "%{name} követettjei"
people_who_follow: "%{name} követői"
@@ -219,10 +229,12 @@ hu:
deleted_status: "(törölt tülk)"
title: Audit napló
custom_emojis:
+ assign_category: Kategóriák
by_domain: Domain
copied_msg: Sikeresen létrehoztuk az emoji helyi másolatát
copy: Másolás
copy_failed_msg: Emoji helyi másolatának létrehozása sikertelen
+ create_new_category: Új kategória létrehozása
created_msg: Emoji létrehozva!
delete: Törlés
destroyed_msg: Emoji törlése sikeres!
@@ -239,6 +251,7 @@ hu:
shortcode: Rövidítés
shortcode_hint: Legalább két karakter, csak betűk, számok és alsóvonás
title: Egyedi emojik
+ uncategorized: Nem kategorizált
unlisted: Nincs listázva
update_failed_msg: Nem sikerült frissíteni az emojit
updated_msg: Emoji sikeresen frissítve!
@@ -418,6 +431,16 @@ hu:
custom_css:
desc_html: Változtasd meg a kinézetet ebben a CSS-ben, mely minden oldalon be fog töltődni
title: Egyedi CSS
+ default_noindex:
+ desc_html: Olyan felhasználókat érinti, akik nem módosították ezt a beállítást
+ title: Alapértelmezésként ne indexeljék a keresők a felhasználóinkat
+ domain_blocks:
+ all: Mindenkinek
+ disabled: Senkinek
+ title: Domain tiltások megjelenitése
+ users: Bejelentkezett helyi felhasználóknak
+ domain_blocks_rationale:
+ title: Mutasd meg az indokolást
hero:
desc_html: A kezdőoldalon látszik. Legalább 600x100px méret javasolt. Ha nincs beállítva, a szerver bélyegképet használjuk
title: Hősi kép
@@ -487,6 +510,7 @@ hu:
delete: Törlés
nsfw_off: Szenzitív megjelölés törlése
nsfw_on: Megjelölés szenzitív tartalomként
+ deleted: Törölve
failed_to_execute: Végrehajtás sikertelen
media:
title: Média
@@ -501,6 +525,10 @@ hu:
context: Környezet
directory: Katalógusban
in_directory: "%{count} a katalógusban"
+ last_active: Utoljára aktív
+ most_popular: Legnépszerűbb
+ most_recent: Legutóbbi
+ name: Címke
review: Engedélyezés állapota
reviewed: Engedélyezett
title: Hashtagek
@@ -526,6 +554,12 @@ hu:
new_trending_tag:
body: 'A #%{name} hashtag trendi a mai napon, de még nem engedélyeztük eddig. Nem mutatjuk meg nyilvánosan, hacsak nem engedélyezed. Csak simán mentsd az űrlapot, ha soha többé nem akarsz erről a hashtagről hallani.'
subject: Új hashtag (#%{name}) engedélyezésre vár a %{instance} szerveren
+ aliases:
+ add_new: Alias készítése
+ created_msg: Elkészült az új aliasod. Most már elkezdheted a költöztetést a régi fiókból.
+ deleted_msg: Sikeresen eltávolítottad az aliast. A fiókról erre a fiókra való áttérés már nem lehetséges.
+ hint_html: Ha másik fiókról kívánsz átlépni erre a fiókra, itt létrehozhatsz egy aliast, amelyre szükség van, mielőtt folytathatod a követők áthelyezését a régi fiókból erre. Ez az áthelyezés önmagában ártalmatlan és visszafordítható folyamat. A fiók áttelepítését a régi fiókból indul el.
+ remove: Alias szétkapcsolása
appearance:
advanced_web_interface: Haladó webes felület
advanced_web_interface_hint: 'Ha szeretnéd, a teljes képernyőszélességet felhasználhatod. A haladó webes felülettel különböző oszlopokat állíthatsz be, hogy egyszerre annyi infót láthass, amennyit csak akarsz: Saját idővonal, értesítések, föderációs idővonal, bármennyi lista vagy hashtag.'
@@ -555,6 +589,10 @@ hu:
checkbox_agreement_without_rules_html: Egyetértek a felhasználási feltételekkel
delete_account: Felhasználói fiók törlése
delete_account_html: Felhasználói fiókod törléséhez kattints ide. A rendszer újbóli megerősítést fog kérni.
+ description:
+ prefix_invited_by_user: "@%{name} meghív téged, hogy csatlakozz erre a Mastodon szerverre!"
+ prefix_sign_up: Regisztrláj még ma a Mastodonra!
+ suffix: Egy fiókkal követhetsz másokat, tülkölhetsz, eszmét cserélhetsz más Mastodon szerverek felhasználóival!
didnt_get_confirmation: Nem kaptad meg a megerősítési lépéseket?
forgot_password: Elfelejtetted a jelszavad?
invalid_reset_password_token: A jelszó-visszaállítási kulcs nem megfelelő vagy lejárt. Kérlek generálj egy újat.
@@ -581,6 +619,7 @@ hu:
confirming: Várakozás a visszaigazolásra.
functional: A fiókod teljesen működőképes.
pending: A jelentkezésed engedélyezésre vár. Ez eltarthat egy ideig. Kapsz egy e-mailt, ha az elbírálás megtörtént.
+ redirecting_to: A fiókod inaktív, mert jelenleg ide %{acct} van átirányítva.
trouble_logging_in: Problémád van a bejelentkezéssel?
authorize_follow:
already_following: Már követed ezt a felhasználót
@@ -593,6 +632,11 @@ hu:
return: Visszatérés a felhasználó profiloldalára
web: Megtekintés a weben
title: "%{acct} követése"
+ challenge:
+ confirm: Folytatás
+ hint_html: "Hasznos: Nem fogjuk megint a jelszavadat kérdezni a következő órában."
+ invalid_password: Érvénytelen jelszó
+ prompt: Add meg a jelszót a folytatáshoz
datetime:
distance_in_words:
about_x_hours: "%{count}ó"
@@ -608,9 +652,22 @@ hu:
x_months: "%{count}h"
x_seconds: "%{count}mp"
deletes:
+ challenge_not_passed: A beírt információ helytelen
confirm_password: Személyazonosságod megerősítéséhez írd be a jelenlegi jelszavad
+ confirm_username: Add meg a felhasználói nevedet a jóváhagyáshoz
proceed: Felhasználói fiók törlése
success_msg: Felhasználói fiókod sikeresen töröltük
+ warning:
+ before: 'Mielőtt továbbmész, kérlek olvasd el ezt alaposan:'
+ caches: Más szerverek által cache-elt tartalmak még megmaradhatnak
+ data_removal: A tülkjeid és minden más adatod véglegesen törlődni fog
+ email_change_html: Megváltoztathatod az email címed a fiókod törlése nélkül
+ email_contact_html: Ha még mindig nem érkezik meg, emailezhetsz ide %{email} segítségért
+ email_reconfirmation_html: Ha nem kaptad meg a megerősítő emailt, itt újrakérheted
+ irreversible: Nem fogod tudni visszaállítani vagy újraaktiválni a fiókodat
+ more_details_html: A részletekért nézd meg az adatvédelmi szabályzatot.
+ username_available: A fiókod ismét elérhetővé válik
+ username_unavailable: A fiókod elérhetetlen marad
directories:
directory: Profilok
explanation: Találj másokra érdeklődésük alapján
@@ -618,10 +675,10 @@ hu:
domain_validator:
invalid_domain: nem egy valódi domain név
errors:
- '400': The request you submitted was invalid or malformed.
+ '400': A küldött kérés érvénytelen vagy hibás volt.
'403': Nincs jogosultságod az oldal megtekintéséhez.
'404': Az általad keresett oldal nem található.
- '406': This page is not available in the requested format.
+ '406': Ez az oldal a kért formátumban nem áll rendelkezésre.
'410': Az általad keresett oldal már nem létezik.
'422':
content: Megerősítés sikertelen. Nem tiltottad le esetleg a sütiket?
@@ -630,7 +687,7 @@ hu:
'500':
content: Sajnáljuk, valami hiba történt a mi oldalunkon.
title: Az oldal nem megfelelő
- '503': The page could not be served due to a temporary server failure.
+ '503': Az oldalt nem tudjuk megmutatni átmeneti szerverprobléma miatt.
noscript_html: A Mastodon webalkalmazás használatához engedélyezned kell a JavaScriptet. A másik megoldás, hogy kipróbálsz egy platformodnak megfelelő alkalmazást.
existing_username_validator:
not_found: ezzel a névvel nem találtunk helyi felhasználót
@@ -654,6 +711,7 @@ hu:
add_new: Új hozzáadása
errors:
limit: Már kiemelted a maximálisan engedélyezett számú hashtaget
+ hint_html: "Mik a kiemelt hashtagek? Ezek állandóan megjelennek a nyilvános profilodon és lehetővé teszik, hogy mások kifejezetten az ezekhez tartozó tülkjeidet böngésszék. Jó eszköz ez kreatív munkák vagy hosszútávú projektek nyomonkövetésére."
filters:
contexts:
home: Saját idővonal
@@ -674,10 +732,12 @@ hu:
developers: Fejlesztőknek
more: Többet…
resources: Segédanyagok
+ trending_now: Most trendi
generic:
all: Mind
changes_saved_msg: A változásokat elmentettük!
copy: Másolás
+ no_batch_actions_available: Ezen az oldalon nem elérhetőek kötegelt műveletek
order_by: Rendezés
save_changes: Változások mentése
validation_errors:
@@ -749,6 +809,31 @@ hu:
too_many: Maximum négy fájlt csatolhatsz a tülkhöz
migrations:
acct: Az új fiók felhasznalonev@domain formátumban
+ cancel: Átirányítás törlése
+ cancel_explanation: Az átirányítás törlése reaktiválja a fiókodat, de nem fogja visszahozni azokat a követőidet, akik közben a másik fiókhoz kerültek át.
+ cancelled_msg: Az átirányítást sikeresen töröltük.
+ errors:
+ already_moved: ugyanaz a fiók, ahová már elköltöztél
+ missing_also_known_as: nem hivatkozza vissza ezt a fiókot
+ move_to_self: nem lehet az aktuális fiók
+ not_found: nem található
+ on_cooldown: Még tart a türelmi idő
+ followers_count: Követő a költözéskor
+ incoming_migrations: Más fiókból költöző
+ incoming_migrations_html: Ahhoz, hogy egy másik fiókból ebbe költözz, először hozz létre egy fiók aliast.
+ moved_msg: A fiókod mostantól ide %{acct} irányít át, a követőidet átköltöztetjük.
+ not_redirecting: A fiókod nincs átirányítva jelenleg sehová sem.
+ on_cooldown: Nemrég költöztetted a fiókod. Ez a funkció %{count} nap múlva lesz megint elérhető.
+ past_migrations: Eddigi költözések
+ proceed_with_move: Követők átköltöztetése
+ redirecting_to: A fiókod át van irányítva ide %{acct}.
+ warning:
+ backreference_required: Az új fiókot először be kell úgy állítani, hogy ezt visszahivatkozza
+ before: 'Mielőtt továbbmész, olvasd el ezeket kérlek figyelmesen:'
+ cooldown: A költözés után van egy türelmi idő, mely alatt nem tudsz majd újra költözni
+ disabled_account: A jelenlegi fiókod nem lesz teljesen használható ezután. Viszont elérhető lesz majd az adatexport funkció, valamint a reaktiválás is.
+ followers: Ez a művelet az összes követődet a jelenlegi fiókról az újra fogja költöztetni
+ other_data: Más adatot nem fogunk automatikusan mozgatni
moderation:
title: Moderáció
notification_mailer:
@@ -893,6 +978,7 @@ hu:
settings:
account: Fiók
account_settings: Fiók beállítások
+ aliases: Fiók aliasok
appearance: Megjelenés
authorized_apps: Jóváhagyott alkalmazások
back: Vissza a Mastodonhoz
@@ -1072,7 +1158,9 @@ hu:
disable: A fiókod befagyasztott állapotban megtartja minden adatát, de feloldásig nem csinálhatsz vele semmit.
silence: A fiókod korlátozott állapotában csak a követőid láthatják a tülkjeidet, valamint nem kerülsz rá nyilvános idővonalakra. Ugyanakkor mások manuálisan még követhetnek.
suspend: A fiókodat felfüggesztették, így minden tülköd és feltöltött fájlod menthetetlenül elveszett erről a szerverről és minden olyanról is, ahol voltak követőid.
+ get_in_touch: Válaszolhatsz erre az emailre, hogy kapcsolatba lépj a %{instance} csapatával.
review_server_policies: Szerver szabályzat átnézése
+ statuses: 'Különösen hozzá:'
subject:
disable: A fiókodat %{acct} befagyasztották
none: Figyelmeztetés a %{acct} fióknak
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 2649fb2a3..4b850a8a8 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -238,8 +238,10 @@ ja:
disabled_msg: 絵文字を無効化しました
emoji: 絵文字
enable: 有効化
+ enabled: 有効
enabled_msg: 絵文字を有効化しました
image_hint: 50KBまでのPNG画像を利用できます
+ list: 表示
listed: 収載
new:
title: 新規カスタム絵文字の追加
@@ -248,6 +250,7 @@ ja:
shortcode_hint: 2文字以上の半角英数字とアンダーバーのみ利用できます
title: カスタム絵文字
uncategorized: 未分類
+ unlist: 非表示
unlisted: 未収載
update_failed_msg: 絵文字を更新できませんでした
updated_msg: 絵文字の更新に成功しました!
@@ -377,6 +380,7 @@ ja:
pending: リレーサーバーの承認待ちです
save_and_enable: 保存して有効にする
setup: リレー接続を設定する
+ signatures_not_enabled: セキュアモードまたはホワイトリストモードが有効の場合、リレーは正常に動作しません
status: ステータス
title: リレー
report_notes:
@@ -646,9 +650,22 @@ ja:
x_months: "%{count}月"
x_seconds: "%{count}秒"
deletes:
+ challenge_not_passed: 入力された情報は正しくありません
confirm_password: 本人確認のため、現在のパスワードを入力してください
+ confirm_username: 確認のためユーザー名を入力してください
proceed: アカウントを削除する
success_msg: アカウントは正常に削除されました
+ warning:
+ before: '続行する前に、次の点を再度確認してください:'
+ caches: 削除しても他のサーバーに残り続ける場合があります
+ data_removal: あなたの投稿やその他のデータはこのサーバーから完全に削除されます
+ email_change_html: アカウントを削除しなくてもメールアドレスを変更できます
+ email_contact_html: それでも届かない場合、%{email} までメールで問い合わせてください
+ email_reconfirmation_html: 確認のメールが届かない場合、もう一度申請できます。
+ irreversible: アカウントを元に戻したり復活させることはできません
+ more_details_html: 詳しくはプライバシーポリシーをご覧ください。
+ username_available: あなたのユーザー名は再利用できるようになります
+ username_unavailable: あなたのユーザー名は引き続き利用できません
directories:
directory: ディレクトリ
explanation: 関心を軸にユーザーを発見しよう
@@ -718,6 +735,7 @@ ja:
all: すべて
changes_saved_msg: 正常に変更されました!
copy: コピー
+ no_batch_actions_available: 利用可能なバッチアクションはありません
order_by: 並び順
save_changes: 変更を保存
validation_errors:
@@ -787,6 +805,31 @@ ja:
too_many: 追加できるファイルは4つまでです
migrations:
acct: 引っ越し先の ユーザー名@ドメイン
+ cancel: 引っ越しを取り消す
+ cancel_explanation: 引っ越しを取り消すと現在のアカウントが再度有効化されますが、引き継がれたフォロワーは戻されません。
+ cancelled_msg: 引っ越し設定を取り消しました。
+ errors:
+ already_moved: は既に引っ越したアカウントと同じです
+ missing_also_known_as: はこのアカウントとエイリアスの設定がされていません
+ move_to_self: 同じアカウントに引っ越すことはできません
+ not_found: 見つかりませんでした
+ on_cooldown: クールダウン期間中です
+ followers_count: 引き継がれるフォロワー
+ incoming_migrations: 別のアカウントから引っ越す
+ incoming_migrations_html: 別のアカウントからこのアカウントに引っ越すには、まずアカウントエイリアスを作成する必要があります。
+ moved_msg: アカウントは %{acct} に引っ越し設定されており、フォロワーは引っ越し先に引き継がれています。
+ not_redirecting: アカウントは現在引っ越し設定されていません。
+ on_cooldown: あなたは最近アカウントを引っ越ししています。この機能は %{count} 日後に再度利用できるようになります。
+ past_migrations: 過去の引っ越し
+ proceed_with_move: フォロワーを引き継ぐ
+ redirecting_to: アカウントは %{acct} に引っ越し設定されています。
+ warning:
+ backreference_required: まずは引っ越し先のアカウントでこのアカウントに対しエイリアスを作成する必要があります
+ before: '続行する前に、次の点を再度確認してください:'
+ cooldown: 引っ越し後はクールダウン期間があります。その間再度引っ越すことはできません
+ disabled_account: 引っ越すと現在のアカウントの機能は完全には利用できなくなります。ただしデータのエクスポートと再有効化は利用できます。
+ followers: この操作により、すべてのフォロワーを現在のアカウントから新しいアカウントに引き継ぎます。
+ other_data: その他のデータは自動的に引き継がれません
moderation:
title: モデレーション
notification_mailer:
@@ -929,6 +972,7 @@ ja:
settings:
account: アカウント
account_settings: セキュリティ
+ aliases: アカウントエイリアス
appearance: 外観
authorized_apps: 認証済みアプリ
back: Mastodon に戻る
@@ -1079,7 +1123,7 @@ ja:
default: "%Y年%m月%d日 %H:%M"
month: "%Y年 %b"
two_factor_authentication:
- code_hint: 確認するには認証アプリで表示されたコードを入力してください
+ code_hint: 続行するには認証アプリで表示されたコードを入力してください
description_html: "二段階認証を有効にするとログイン時、認証アプリからコードを入力する必要があります。"
disable: 無効
enable: 有効
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index fb32552da..303c462fd 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -37,6 +37,10 @@ ko:
unavailable_content: 이용 불가능한 컨텐츠
unavailable_content_description:
reason: '이유:'
+ rejecting_media: 이 서버의 미디어 파일들은 처리되지 않고 썸네일또한 보이지 않게 됩니다. 수동으로 클릭하여 해당 서버로 가게 됩니다.
+ silenced: 이 서버의 게시물은 작성자를 팔로우 한 경우에만 홈 피드에 나타나며 이를 제외한 어디에도 나타나지 않습니다.
+ suspended: 이 서버의 아무도 팔로우 할 수 없으며, 어떤 데이터도 처리되거나 저장 되지 않고 데이터가 교환 되지도 않습니다.
+ unavailable_content_html: 마스토돈은 일반적으로 연합우주에 있는 어떤 서버의 유저와도 게시물을 보고 응답을 할 수 있도록 허용합니다. 다음 항목들은 특정한 서버에 대해 만들어 진 예외사항입니다.
user_count_after:
other: 명
user_count_before: 사용자 수
@@ -525,7 +529,7 @@ ko:
reviewed: 심사 됨
title: 해시태그
trending_right_now: 지금 유행 중
- unique_uses_today: 오늘 %{count}개의 포스팅
+ unique_uses_today: 오늘 %{count}명이 포스팅
unreviewed: 심사 되지 않음
updated_msg: 해시태그 설정이 성공적으로 갱신되었습니다
title: 관리
@@ -546,6 +550,12 @@ ko:
new_trending_tag:
body: "#%{name}가 오늘 유행하고 있습니다, 하지만 심사 된 적이 없습니다. 허용하지 않는 한 공개적으로 나타나지 않습니다. 또는 그냥 저장을 눌러 더이상 나타나지 않게 할 수 있습니다."
subject: 새 해시태그가 %{instance}에서 심사 대기 중입니다(#%{name})
+ aliases:
+ add_new: 별칭 만들기
+ created_msg: 새 별칭이 성공적으로 만들어졌습니다. 이제 기존 계정에서 이주를 시작할 수 있습니다.
+ deleted_msg: 성공적으로 별칭을 삭제했습니다. 해당 계정에서 이 계정으로의 이주는 더이상 가능하지 않습니다.
+ hint_html: 다른 계정에서 이 계정으로 옮기길 원하는 경우, 여기에서 별칭을 만들 수 있습니다, 기존 계정의 팔로워를 이쪽으로 옮기고 싶은 경우 필요한 과정입니다. 이 행동 자체는 해롭지 않고 되돌리기가 가능합니다.계정 이주는 이전 계정에서 착수하게 됩니다
+ remove: 별칭 연결 끊기
appearance:
advanced_web_interface: 고급 웹 인터페이스
advanced_web_interface_hint: '화면의 가로폭을 가득 채우고 싶다면, 고급 웹 인터페이스는 한 번에 여러 정보를 볼 수 있도록 여러 컬럼을 설정할 수 있도록 합니다: 홈, 알림, 연합타임라인, 리스트, 해시태그 등'
@@ -605,6 +615,7 @@ ko:
confirming: 이메일 확인 과정이 완료되기를 기다리는 중.
functional: 계정이 완벽이 작동합니다.
pending: 당신의 가입 신청은 스태프의 검사를 위해 대기중입니다. 이것은 시간이 다소 소요됩니다. 가입 신청이 승인 될 경우 이메일을 받게 됩니다.
+ redirecting_to: 계정이 %{acct}로 리다이렉트 중이기 때문에 비활성 상태입니다.
trouble_logging_in: 로그인 하는데 문제가 있나요?
authorize_follow:
already_following: 이미 이 계정을 팔로우 하고 있습니다
@@ -793,15 +804,28 @@ ko:
migrations:
acct: 새 계정의 username@domain
cancel: 리디렉션 취소
+ cancel_explanation: 리다이렉트를 취소하면 현재 계정이 다시 활성화 됩니다, 새 계정으로 이동한 팔로워를 되찾을 수는 없습니다.
+ cancelled_msg: 리다이렉트를 성공적으로 취소했습니다.
errors:
+ already_moved: 이미 이동한 계정과 동일합니다
+ missing_also_known_as: 이 계정을 역으로 참조하지 않고 있습니다
+ move_to_self: 현재 계정은 사용할 수 없습니다
not_found: 찾을 수 없습니다
+ on_cooldown: 쿨다운 기간입니다
+ followers_count: 이주 될 팔로워들
incoming_migrations: 다른 계정으로부터 옮기기
+ incoming_migrations_html: 다른 계정을 이 계정으로 이주하고 싶은 경우, 먼저 계정 별칭을 만들어야 합니다.
+ moved_msg: 당신의 계정은 %{acct}로 리다이렉트 되고 있으며 팔로워들은 이주 될 것입니다.
+ not_redirecting: 현재 이 계정은 어디로도 리다이렉트 되고 있지 않습니다.
on_cooldown: 당신은 최근에 이미 계정을 이동했습니다. 이 기능은 %{count} 일 후에 다시 이용 가능합니다.
past_migrations: 이전 마이그레이션
proceed_with_move: 팔로워 이동
redirecting_to: 당신의 계정은 %{acct} 로 리다이렉트됩니다.
warning:
+ backreference_required: 새 계정은 이 계정으로 역참조를 하도록 설정되어 있어야 합니다
before: '진행하기 전, 주의사항을 꼼꼼히 읽어보세요:'
+ cooldown: 이주 뒤에는 새로운 이주를 하지 못하는 쿨다운 기간이 존재합니다
+ disabled_account: 이 계정은 완전한 사용이 불가능하게 됩니다. 하지만, 데이터 내보내기나 재활성화를 위해 접근할 수 있습니다.
followers: 이 행동은 현재 계정의 모든 팔로워를 새 계정으로 이동시킵니다
other_data: 다른 어떤 데이터도 자동적으로 옮겨지지 않을 것입니다
moderation:
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 213d213c3..bbffde053 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -41,6 +41,7 @@ nl:
rejecting_media: Mediabestanden van deze server worden niet verwerkt en er worden geen thumbnails getoond. Je moet handmatig naar deze server doorklikken om de mediabestanden te kunnen bekijken.
silenced: Toots van deze server worden nergens weergegeven, behalve op jouw eigen starttijdlijn wanneer je het account volgt.
suspended: Je bent niet in staat om iemand van deze server te volgen, en er worden geen gegevens van deze server verwerkt of opgeslagen, en met deze server uitgewisseld.
+ unavailable_content_html: Met Mastodon kun je in het algemeen berichten bekijken van en communiceren met gebruikers van elke andere server in de fediverse. Dit zijn de uitzonderingen die door deze server zijn gemaakt en expliciet alleen hier gelden.
user_count_after:
one: gebruiker
other: gebruikers
@@ -48,6 +49,8 @@ nl:
what_is_mastodon: Wat is Mastodon?
accounts:
choices_html: 'Aanbevelingen van %{name}:'
+ endorsements_hint: Je kunt mensen die je volgt in de webomgeving aanbevelen, waarna ze dan hier zullen verschijnen.
+ featured_tags_hint: Je kunt specifieke hashtags uitlichten, waarna ze dan hier zullen verschijnen.
follow: Volgen
followers:
one: Volger
@@ -428,6 +431,9 @@ nl:
custom_css:
desc_html: Het uiterlijk van deze server met CSS aanpassen
title: Aangepaste CSS
+ default_noindex:
+ desc_html: Heeft invloed op alle gebruikers die deze instelling niet zelf hebben veranderd
+ title: Toots van gebruikers standaard niet door zoekmachines laten indexeren
domain_blocks:
all: Naar iedereen
disabled: Naar niemand
@@ -486,6 +492,7 @@ nl:
title: Aangepaste gebruiksvoorwaarden
site_title: Naam Mastodonserver
spam_check_enabled:
+ desc_html: Mastodon kan accounts die herhaaldelijk ongevraagde berichten versturen automatisch negeren of rapporteren. Het is mogelijk dat er foutpositieven tussen zitten.
title: Automatische spambestrijding
thumbnail:
desc_html: Gebruikt als voorvertoning voor OpenGraph en de API. 1200x630px aanbevolen
@@ -495,6 +502,7 @@ nl:
title: Tijdlijn op de voorpagina tonen
title: Server-instellingen
trends:
+ desc_html: Eerder beoordeelde hashtags die op dit moment trending zijn openbaar tonen
title: Trending hashtags
statuses:
back_to_account: Terug naar accountpagina
@@ -543,10 +551,14 @@ nl:
body: "%{reporter} heeft %{target} gerapporteerd"
body_remote: Iemand van %{domain} heeft %{target} gerapporteerd
subject: Nieuwe rapportage op %{instance} (#%{id})
+ new_trending_tag:
+ body: 'De hashtag #%{name} is vandaag trending, maar is nog niet beoordeeld. Het wordt niet in het openbaar getoond alvorens je de hashtag goedkeurt. Je kunt ook het formulier zoals het nu is opslaan, waarna je er niks meer over zult horen.'
+ subject: Nieuwe hashtag te beoordelen op %{instance} (#%{name})
aliases:
add_new: Alias aanmaken
created_msg: Succesvol een nieuwe alias aangemaakt. Je kunt nu met de verhuizing vanaf het oude account beginnen.
deleted_msg: De alias is succesvol verwijderd. Verhuizen vanaf dat account naar dit account is niet meer mogelijk.
+ hint_html: Wanneer je vanaf een ander account naar dit account wilt verhuizen, kun je hier een alias aanmaken. Dit is nodig voordat je verder kunt gaan met het verhuizen van volgers van het oude naar dit nieuwe account. Deze actie is op zich ongevaarlijk en omkeerbaar. De accountmigratie wordt gestart vanaf het oude account.
remove: Alias ontkoppelen
appearance:
advanced_web_interface: Geavanceerde webomgeving
@@ -574,10 +586,13 @@ nl:
apply_for_account: Een uitnodiging aanvragen
change_password: Wachtwoord
checkbox_agreement_html: Ik ga akkoord met de regels van deze server en de gebruiksvoorwaarden
+ checkbox_agreement_without_rules_html: Ik ga akkoord met de gebruiksvoorwaarden
delete_account: Account verwijderen
delete_account_html: Wanneer je jouw account graag wilt verwijderen, kun je dat hier doen. We vragen jou daar om een bevestiging.
description:
+ prefix_invited_by_user: "@%{name} nodigt je hierbij uit om een account aan te maken op deze Mastodonserver!"
prefix_sign_up: Registreer je vandaag nog op Mastodon!
+ suffix: Met een account ben je in staat om mensen te volgen, berichten te plaatsen en uit te wisselen met mensen die zich op andere Mastodonservers bevinden en meer!
didnt_get_confirmation: Geen bevestigingsinstructies ontvangen?
forgot_password: Wachtwoord vergeten?
invalid_reset_password_token: De code om jouw wachtwoord opnieuw in te stellen is verlopen. Vraag een nieuwe aan.
@@ -596,10 +611,15 @@ nl:
security: Beveiliging
set_new_password: Nieuw wachtwoord instellen
setup:
+ email_below_hint_html: Wanneer onderstaand e-mailadres niet klopt, kun je dat hier veranderen. Je ontvangt dan hierna een bevestigingsmail.
+ email_settings_hint_html: De bevestigingsmail is verzonden naar %{email}. Wanneer dat e-mailadres niet klopt, kun je dat veranderen in je accountinstellingen.
title: Instellen
status:
account_status: Accountstatus
+ confirming: Aan het wachten totdat de e-mail is bevestigd.
functional: Jouw account is volledig operationeel.
+ pending: Jouw aanvraag moet nog worden beoordeeld door een van onze medewerkers. Dit kan misschien eventjes duren. Je ontvangt een e-mail wanneer jouw aanvraag is goedgekeurd.
+ redirecting_to: Jouw account is inactief omdat het momenteel wordt doorverwezen naar %{acct}.
trouble_logging_in: Problemen met inloggen?
authorize_follow:
already_following: Je volgt dit account al
@@ -614,6 +634,7 @@ nl:
title: Volg %{acct}
challenge:
confirm: Doorgaan
+ hint_html: "Tip: We vragen jou het komende uur niet meer naar jouw wachtwoord."
invalid_password: Ongeldig wachtwoord
prompt: Bevestig wachtwoord om door te gaan
datetime:
@@ -637,6 +658,10 @@ nl:
proceed: Account verwijderen
success_msg: Jouw account is succesvol verwijderd
warning:
+ before: 'Lees deze tekst zorgvuldig voordat je verder gaat:'
+ caches: Toots en media die op andere servers zijn opgeslagen kunnen daar achterblijven
+ data_removal: Jouw toots en andere gegevens worden permanent verwijderd
+ email_change_html: Je kunt je e-mailadres wijzigen zonder dat je jouw account hoeft te verwijderen
username_available: Jouw gebruikersnaam zal weer beschikbaar komen
username_unavailable: Jouw gebruikersnaam zal onbeschikbaar blijven
directories:
@@ -788,7 +813,7 @@ nl:
on_cooldown: Jouw laatste migratie is nog te kort geleden
followers_count: Volgers op het moment van verhuizing
incoming_migrations: Verhuizen vanaf een ander account
- incoming_migrations_html: Om te vanaf een ander account naar dit account te verhuizen, moet je eerst een accountalias aanmaken.
+ incoming_migrations_html: Om vanaf een ander account naar dit account te verhuizen, dien je eerst een accountalias aan te maken.
moved_msg: Jouw account wordt nu naar %{acct} doorverwezen en jouw volgers worden verhuisd.
not_redirecting: Jouw account wordt momenteel niet naar een ander account doorverwezen.
on_cooldown: Je hebt recentelijk jouw account verhuisd. Deze mogelijkheid is weer beschikbaar over %{count} dagen.
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 101483c3e..793b75531 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -53,6 +53,7 @@ oc:
media: Mèdias
moved_html: "%{name} a mudat a %{new_profile_link} :"
network_hidden: Aquesta informacion es pas disponibla
+ never_active: Jamai
nothing_here: I a pas res aquí !
people_followed_by: Lo monde que %{name} sèc
people_who_follow: Lo monde que sègon %{name}
@@ -219,10 +220,12 @@ oc:
deleted_status: "(estatut suprimit)"
title: Audit dels jornals
custom_emojis:
+ assign_category: Atribuir una categoria
by_domain: Domeni
copied_msg: Còpia locala de l’emoji ben creada
copy: Copiar
copy_failed_msg: Fracàs de la còpia locala de l’emoji
+ create_new_category: Crear una nòva categoria
created_msg: Emoji ben creat !
delete: Suprimir
destroyed_msg: Emoji ben suprimit !
@@ -244,6 +247,7 @@ oc:
updated_msg: Emoji ben mes a jorn !
upload: Enviar
dashboard:
+ authorized_fetch_mode: Mòde recuperacion autorizat
backlog: Accions en retard
config: Configuracion
feature_deletions: Supressions de comptes
@@ -472,12 +476,15 @@ oc:
desc_html: Mostrar lo flux public sus la pagina d’acuèlh
title: Apercebut flux public
title: Paramètres del site
+ trends:
+ title: Etiquetas tendéncia
statuses:
back_to_account: Tornar a la pagina Compte
batch:
delete: Suprimir
nsfw_off: Marcar coma pas sensible
nsfw_on: Marcar coma sensible
+ deleted: Suprimits
failed_to_execute: Fracàs
media:
title: Mèdia
@@ -572,6 +579,7 @@ oc:
title: Sègre %{acct}
challenge:
confirm: Contunhar
+ hint_html: "Asutúcia : vos demandarem pas vòstre senhal de nòu d’aquí unas oras."
invalid_password: Senhal invalid
prompt: Confirmatz lo senhal per dire de contunhar
datetime:
@@ -589,9 +597,15 @@ oc:
x_months: "%{count} meses"
x_seconds: "%{count}s"
deletes:
+ challenge_not_passed: Las informacions qu’avètz fornidas son pas corrèctas
confirm_password: Picatz vòstre senhal actual per verificar vòstra identitat
+ confirm_username: Picatz vòstre nom d’utilizaire per confirmar la procedura
proceed: Suprimir lo compte
success_msg: Compte ben suprimit
+ warning:
+ caches: Lo contengut en cache suls autres servidors pòt demorar
+ email_change_html: Podètz cambiar vòstra adreça electroniasens suprimir vòstre compte
+ username_unavailable: Vòstre nom d’utilizaire demorarà pas disponible
directories:
directory: Annuari de perfils
explanation: Trobar d’utilizaires segon lor interèsses
@@ -731,6 +745,8 @@ oc:
too_many: Se pòt pas ajustar mai de 4 fichièrs
migrations:
acct: nomutilizaire@domeni del nòu compte
+ cancel: Anullar la redireccion
+ cancelled_msg: Redireccion corrèctament anullada.
errors:
move_to_self: pòt pas èsser lo compte actual
not_found: impossible de trobar
@@ -1056,6 +1072,7 @@ oc:
disable: Quand vòstre compte es gelat, las donadas d’aqueste demòran senceras, mas podètz pas realizar cap d’accion fins que siá desblocat.
silence: Del temps que vòstre compte es limitat, solament lo monde que vos sègon veiràn vòstres tuts sus aqueste servidor, e poiriatz èsser tirat de mantunas listas publicas. Pasmens, d’autres vos pòdon sègre manualament.
suspend: Vòstre compte es suspendut e totes vòstres tuts e fichièrs enviats son estats suprimits sens retorn possible d’aqueste servidor e los de vòstres seguidors.
+ get_in_touch: Podètz respondre a aqueste corrièl per contactar la còla de %{instance}.
review_server_policies: Repassar las politicas del servidor
statuses: 'Especificament per :'
subject:
diff --git a/config/locales/simple_form.ar.yml b/config/locales/simple_form.ar.yml
index e09f92205..548d275ba 100644
--- a/config/locales/simple_form.ar.yml
+++ b/config/locales/simple_form.ar.yml
@@ -15,7 +15,7 @@ ar:
context: واحد أو أكثر من السياقات التي يجب أن ينطبق عليها عامل التصفية
digest: تُرسَل إليك بعد مُضيّ مدة مِن خمول نشاطك و فقط إذا ما تلقيت رسائل شخصية مباشِرة أثناء فترة غيابك مِن الشبكة
email: سوف تتلقى رسالة إلكترونية للتأكيد
- fields: يُمكنك عرض 4 عناصر على شكل جدول في ملفك الشخصي
+ fields: يُمكنك عرض 4 عناصر على شكل جدول في صفحتك التعريفية
header: ملف PNG أو GIF أو JPG. حجمه على أقصى تصدير %{size}. سيتم تصغيره إلى %{dimensions}px
inbox_url: نسخ العنوان الذي تريد استخدامه مِن صفحة الاستقبال للمُرحَّل
irreversible: التبويقات التي تم تصفيتها ستختفي لا محالة حتى و إن تمت إزالة عامِل التصفية لاحقًا
@@ -28,11 +28,13 @@ ar:
setting_display_media_default: إخفاء الوسائط المُعيَّنة كحساسة
setting_display_media_hide_all: إخفاء كافة الوسائط دائمًا
setting_display_media_show_all: دائمًا عرض الوسائط المُعيَّنة كحساسة
- setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك الشخصية
- setting_noindex: ذلك يؤثر على حالة ملفك الشخصي و صفحاتك
+ setting_hide_network: الحسابات التي تُتابعها و التي تُتابِعك على حد سواء لن تُعرَض على صفحتك التعريفية
+ setting_noindex: ذلك يؤثر على صفحتك التعريفية وصفحات المنشورات
username: اسم المستخدم الخاص بك سوف يكون فريدا مِن نوعه على %{domain}
featured_tag:
- name: 'رُبَّما تريد/ي استخدام أحد هؤلاء:'
+ name: 'رُبَّما تريد·ين استخدام واحد مِن هذه:'
+ form_challenge:
+ current_password: إنك بصدد الدخول إلى منطقة آمنة
imports:
data: ملف CSV تم تصديره مِن خادوم ماستدون آخر
invite_request:
@@ -46,6 +48,8 @@ ar:
fields:
name: التسمية
value: المحتوى
+ account_alias:
+ acct: مُعرّف الحساب القديم
account_warning_preset:
text: نموذج نصي
admin_account_action:
@@ -72,7 +76,7 @@ ar:
display_name: الاسم المعروض
email: عنوان البريد الإلكتروني
expires_in: تنتهي مدة صلاحيته بعد
- fields: البيانات الوصفية للصفحة الشخصية
+ fields: البيانات الوصفية للصفحة التعريفية
header: الرأسية
inbox_url: عنوان رابط صندوق المُرَحِّل
irreversible: إسقاط بدلا من إخفائها
@@ -128,6 +132,7 @@ ar:
reblog: ابعث بريداً إلكترونيًا عندما يقوم أحدهم بترقية منشورك
report: إرسال رسالة إلكترونية عند تلقّي إبلاغ جديد
tag:
+ listable: اسمح لهذا الوسم بالظهور في البحث وفي دليل الصفحات التعريفية
name: الوسم
usable: اسمح للتبويقات باستخدام هذا الوسم
'no': لا
diff --git a/config/locales/simple_form.co.yml b/config/locales/simple_form.co.yml
index fbf6813a4..245bcea08 100644
--- a/config/locales/simple_form.co.yml
+++ b/config/locales/simple_form.co.yml
@@ -2,6 +2,10 @@
co:
simple_form:
hints:
+ account_alias:
+ acct: Entrate u cugnome@duminiu di u contu attuale
+ account_migration:
+ acct: Entrate u cugnome@duminiu di u contu induve vulete traslucà
account_warning_preset:
text: Pudete utilizà a sintassa di i statuti, per esempiu l'URL, hashtag, minzione
admin_account_action:
@@ -15,6 +19,8 @@ co:
avatar: Furmatu PNG, GIF o JPG. %{size} o menu. Sarà ridottu à %{dimensions}px
bot: Stu contu hè autumatizatu è ùn hè forse micca survegliatu
context: Cuntestu·i induve u filtru deve esse applicatu
+ current_password: Per ragione di sicurità, entrate a chjave d'accessu di stu contu
+ current_username: Per cunfirmà, entrate u cugnome di questu contu
digest: Solu mandatu dopu à una longa perioda d’inattività, è solu s’elli ci sò novi missaghji diretti
discoverable: L'annuariu di i prufili hè un'altra manera per u vostru contu di tuccà un'audienza più larga
email: Avete da riceve un'e-mail di cunfirmazione
@@ -60,6 +66,10 @@ co:
fields:
name: Marcu
value: Cuntinutu
+ account_alias:
+ acct: Cugnome di l'anzianu contu
+ account_migration:
+ acct: Cugnome di u novu contu
account_warning_preset:
text: Testu preselezziunatu
admin_account_action:
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index 93e052f27..9b06bf473 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -57,6 +57,8 @@ cy:
text: Bydd hyn yn helpu ni adolygu eich cais
sessions:
otp: 'Mewnbynnwch y cod dau gam a gynhyrchwyd gan eich ap ffôn neu defnyddiwch un o''ch codau adfer:'
+ tag:
+ name: Dim ond er mwyn ei gwneud yn fwy darllenadwy y gallwch chi newid y llythrennau, er enghraifft
user:
chosen_languages: Wedi eu dewis, dim ond tŵtiau yn yr ieithoedd hyn bydd yn cael eu harddangos mewn ffrydiau cyhoeddus
labels:
@@ -64,9 +66,14 @@ cy:
fields:
name: Label
value: Cynnwys
+ account_alias:
+ acct: Enw'r hen gyfrif
+ account_migration:
+ acct: Enw'r cyfrif newydd
account_warning_preset:
text: Testun rhagosodedig
admin_account_action:
+ include_statuses: Cynhwyswch tŵtiau yr adroddwyd amdanynt yn yr e-bost
send_email_notification: Hysbysu'r defnyddiwr trwy e-bost
text: Rhybudd wedi'i addasu
type: Gweithredu
@@ -121,6 +128,7 @@ cy:
setting_show_application: Datguddio'r offer defnyddwyd i anfon tŵtiau
setting_system_font_ui: Defnyddio ffont rhagosodedig y system
setting_theme: Thema'r wefan
+ setting_trends: Dangos tueddiadau o heddiw ymlaen
setting_unfollow_modal: Dangos deialog cadarnhau cyn dad-ddilyn rhywun
setting_use_blurhash: Dangoswch raddiannau lliwgar ar gyfer cyfryngau cudd
setting_use_pending_items: Modd araf
@@ -148,6 +156,7 @@ cy:
pending_account: Anfon ebost pan mae cyfrif newydd angen adolygiad
reblog: Anfon e-bost pan mae rhywun yn bŵstio eich statws
report: Anfon e-bost pan y cyflwynir adroddiad newydd
+ trending_tag: Anfonwch e-bost pan fydd hashnod heb ei adolygu yn tueddu
tag:
listable: Gadewch i'r hashnod hwn ymddangos mewn chwiliadau ac ar y cyfeiriadur proffil
name: Hashnod
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 2fb33dbc3..515d5c1ed 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -1,170 +1 @@
----
-es:
- simple_form:
- hints:
- account_alias:
- acct: Especifique el nombre de usuario@dominio de la cuenta desde la cual se desea migrar
- account_migration:
- acct: Especifique el nombre de usuario@dominio de la cuenta a la cual se desea migrar
- account_warning_preset:
- text: Puede usar sintaxis de toots, como URLs, hashtags y menciones
- admin_account_action:
- include_statuses: El usuario verá qué toots han causado la acción de moderación o advertencia
- send_email_notification: El usuario recibirá una explicación de lo que sucedió con respecto a su cuenta
- text_html: Opcional. Puede usar sintaxis de toots. Puede añadir configuraciones predefinidas de advertencia para ahorrar tiempo
- type_html: Elige qué hacer con %{acct}
- warning_preset_id: Opcional. Aún puede añadir texto personalizado al final de la configuración predefinida
- defaults:
- autofollow: Los usuarios que se registren mediante la invitación te seguirán automáticamente
- avatar: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
- bot: Esta cuenta ejecuta principalmente acciones automatizadas y podría no ser monitorizada
- context: Uno o múltiples contextos en los que debe aplicarse el filtro
- current_password: Por razones de seguridad por favor ingrese la contraseña de la cuenta actual
- current_username: Para confirmar, por favor ingrese el nombre de usuario de la cuenta actual
- digest: Solo enviado tras un largo periodo de inactividad y solo si has recibido mensajes personales durante tu ausencia
- discoverable: El directorio del perfil es otra forma en la que su cuenta puede llegar a un público más amplio
- email: Se le enviará un correo de confirmación
- fields: Puedes tener hasta 4 elementos mostrándose como una tabla en tu perfil
- header: PNG, GIF o JPG. Máximo %{size}. Será escalado a %{dimensions}px
- inbox_url: Copia la URL de la página principal del relés que quieres utilizar
- irreversible: Los toots filtrados desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante
- locale: El idioma de la interfaz de usuario, correos y notificaciones push
- locked: Requiere que manualmente apruebes seguidores y las publicaciones serán mostradas solamente a tus seguidores
- password: Utilice al menos 8 caracteres
- phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de un toot
- scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales.
- setting_aggregate_reblogs: No mostrar nuevos retoots para los toots que han sido recientemente retooteados (sólo afecta a los retoots recibidos recientemente)
- setting_default_sensitive: El contenido multimedia sensible está oculto por defecto y puede ser mostrado con un click
- setting_display_media_default: Ocultar contenido multimedia marcado como sensible
- setting_display_media_hide_all: Siempre ocultar todo el contenido multimedia
- setting_display_media_show_all: Mostrar siempre contenido multimedia marcado como sensible
- setting_hide_network: A quién sigues y quién te sigue no será mostrado en tu perfil
- setting_noindex: Afecta a tu perfil público y páginas de estado
- setting_show_application: La aplicación que utiliza usted para publicar toots se mostrará en la vista detallada de sus toots
- setting_use_blurhash: Los gradientes se basan en los colores de las imágenes ocultas pero haciendo borrosos los detalles
- setting_use_pending_items: Ocultar nuevos estados detrás de un clic en lugar de desplazar automáticamente el feed
- username: Tu nombre de usuario será único en %{domain}
- whole_word: Cuando la palabra clave o frase es solo alfanumérica, solo será aplicado si concuerda con toda la palabra
- domain_allow:
- domain: Este dominio podrá obtener datos de este servidor y los datos entrantes serán procesados y archivados
- featured_tag:
- name: 'Puede que quieras usar uno de estos:'
- form_challenge:
- current_password: Estás entrando en un área segura
- imports:
- data: Archivo CSV exportado desde otra instancia de Mastodon
- invite_request:
- text: Esto nos ayudará a revisar su aplicación
- sessions:
- otp: 'Introduce el código de autenticación de dos factores geberado por tu aplicación de teléfono o usa uno de tus códigos de recuperación:'
- tag:
- name: Sólo se puede cambiar el cajón de las letras, por ejemplo, para que sea más legible
- user:
- chosen_languages: Cuando se marca, solo se mostrarán los toots en los idiomas seleccionados en los timelines públicos
- labels:
- account:
- fields:
- name: Etiqueta
- value: Contenido
- account_alias:
- acct: Maneja la cuenta antigua
- account_migration:
- acct: Maneja la cuenta nueva
- account_warning_preset:
- text: Texto predefinido
- admin_account_action:
- include_statuses: Incluir en el correo electrónico a los toots denunciados
- send_email_notification: Notificar al usuario por correo electrónico
- text: Aviso personalizado
- type: Acción
- types:
- disable: Deshabilitar
- none: No hacer nada
- silence: Silenciar
- suspend: Suspender y eliminar de forma irreversible la información de la cuenta
- warning_preset_id: Usar un aviso predeterminado
- defaults:
- autofollow: Invitar a seguir tu cuenta
- avatar: Avatar
- bot: Esta es una cuenta bot
- chosen_languages: Filtrar idiomas
- confirm_new_password: Confirmar nueva contraseña
- confirm_password: Confirmar contraseña
- context: Filtrar contextos
- current_password: Contraseña actual
- data: Información
- discoverable: Listar esta cuenta en el directorio
- display_name: Nombre para mostrar
- email: Dirección de correo electrónico
- expires_in: Expirar tras
- fields: Metadatos de perfil
- header: Img. cabecera
- inbox_url: URL de la entrada de relés
- irreversible: Dejar en lugar de ocultar
- locale: Idioma
- locked: Hacer privada esta cuenta
- max_uses: Máx. número de usos
- new_password: Nueva contraseña
- note: Biografía
- otp_attempt: Código de dos factores
- password: Contraseña
- phrase: Palabra clave o frase
- setting_advanced_layout: Habilitar interfaz web avanzada
- setting_aggregate_reblogs: Agrupar retoots en las líneas de tiempo
- setting_auto_play_gif: Reproducir automáticamente los GIFs animados
- setting_boost_modal: Mostrar ventana de confirmación antes de un Retoot
- setting_default_language: Idioma de publicación
- setting_default_privacy: Privacidad de publicaciones
- setting_default_sensitive: Marcar siempre imágenes como sensibles
- setting_delete_modal: Mostrar diálogo de confirmación antes de borrar un toot
- setting_display_media: Visualización multimedia
- setting_display_media_default: Por defecto
- setting_display_media_hide_all: Ocultar todo
- setting_display_media_show_all: Mostrar todo
- setting_expand_spoilers: Siempre expandir los toots marcados con advertencias de contenido
- setting_hide_network: Ocultar tu red
- setting_noindex: Excluirse del indexado de motores de búsqueda
- setting_reduce_motion: Reducir el movimiento de las animaciones
- setting_show_application: Mostrar aplicación usada para publicar toots
- setting_system_font_ui: Utilizar la tipografía por defecto del sistema
- setting_theme: Tema del sitio
- setting_trends: Mostrar las tendencias de hoy
- setting_unfollow_modal: Mostrar diálogo de confirmación antes de dejar de seguir a alguien
- setting_use_blurhash: Mostrar gradientes coloridos para contenido multimedia oculto
- setting_use_pending_items: Modo lento
- severity: Severidad
- type: Importar tipo
- username: Nombre de usuario
- username_or_email: Usuario o Email
- whole_word: Toda la palabra
- featured_tag:
- name: Etiqueta
- interactions:
- must_be_follower: Bloquear notificaciones de personas que no te siguen
- must_be_following: Bloquear notificaciones de personas que no sigues
- must_be_following_dm: Bloquear mensajes directos de la gente que no sigues
- invite:
- comment: Comentar
- invite_request:
- text: "¿Por qué quiere unirse usted?"
- notification_emails:
- digest: Enviar resumen de correos electrónicos
- favourite: Enviar correo electrónico cuando alguien de a favorito en su publicación
- follow: Enviar correo electrónico cuando alguien te siga
- follow_request: Enviar correo electrónico cuando alguien solicita seguirte
- mention: Enviar correo electrónico cuando alguien te mencione
- pending_account: Enviar correo electrónico cuando una nueva cuenta necesita revisión
- reblog: Enviar correo electrónico cuando alguien comparta su publicación
- report: Enviar un correo cuando se envía un nuevo informe
- trending_tag: Enviar correo electrónico cuando una etiqueta no revisada está de tendencia
- tag:
- listable: Permitir que esta etiqueta aparezca en las búsquedas y en el directorio del perfil
- name: Etiqueta
- trendable: Permitir que esta etiqueta aparezca bajo tendencias
- usable: Permitir a los toots usar esta etiqueta
- 'no': 'No'
- recommended: Recomendado
- required:
- mark: "*"
- text: necesario
- 'yes': Sí
+es-AR:
diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml
index b9f0e9372..70ad0c66a 100644
--- a/config/locales/simple_form.fa.yml
+++ b/config/locales/simple_form.fa.yml
@@ -45,14 +45,20 @@ fa:
setting_use_pending_items: به جای پیشرفتن خودکار در فهرست، بهروزرسانی فهرست نوشتهها را پشت یک کلیک پنهان کن
username: نام کاربری شما روی %{domain} یکتا خواهد بود
whole_word: اگر کلیدواژه فقط دارای حروف و اعداد باشد، تنها وقتی پیدا میشود که با کل یک واژه در متن منطبق باشد، نه با بخشی از یک واژه
+ domain_allow:
+ domain: این دامین خواهد توانست دادهها از این سرور را دریافت کند و دادههای از این دامین در اینجا پردازش و ذخیره خواهند شد
featured_tag:
name: 'شاید بخواهید چنین چیزهایی را به کار ببرید:'
+ form_challenge:
+ current_password: شما در حال ورود به یک منطقهٔ حفاظتشده هستید
imports:
data: پروندهٔ CSV که از سرور ماستدون دیگری برونسپاری شده
invite_request:
text: این برای بررسی درخواست شما به ما کمک خواهد کرد
sessions:
otp: 'کد تأیید دومرحلهای که اپ روی تلفن شما ساخته را وارد کنید یا یکی از کدهای بازیابی را به کار ببرید:'
+ tag:
+ name: شما تنها میتوانید بزرگی و کوچکی حروف را تغییر دهید تا مثلاً آن را خواناتر کنید
user:
chosen_languages: اگر انتخاب کنید، تنها نوشتههایی که به زبانهای برگزیدهٔ شما نوشته شدهاند در فهرست نوشتههای عمومی نشان داده میشوند
labels:
@@ -60,9 +66,14 @@ fa:
fields:
name: برچسب
value: محتوا
+ account_alias:
+ acct: نشانی حساب قدیمی
+ account_migration:
+ acct: نشانی حساب تازه
account_warning_preset:
text: متن از پیش آمادهشده
admin_account_action:
+ include_statuses: بوقهای گزارششده را در ایمیل بگنجان
send_email_notification: اطلاعرسانی به کاربر از راه ایمیل
text: هشدار موردی
type: نوع کنش
@@ -117,6 +128,7 @@ fa:
setting_show_application: برنامهای که به کار میبرید آشکار شود
setting_system_font_ui: بهکاربردن قلم پیشفرض سیستم
setting_theme: تم سایت
+ setting_trends: نشاندادن موضوعات پرطرفدار روز
setting_unfollow_modal: نمایش پیغام تأیید پیش از لغو پیگیری دیگران
setting_use_blurhash: به جای تصویرهای پنهانشده، سایههای رنگی نشان بده
setting_use_pending_items: حالت آهسته
@@ -131,6 +143,8 @@ fa:
must_be_follower: مسدودکردن اعلانهای همه به جز پیگیران
must_be_following: مسدودکردن اعلانهای کسانی که شما پی نمیگیرید
must_be_following_dm: مسدودکردن پیغامهای خصوصی کسانی که شما پی نمیگیرید
+ invite:
+ comment: توضیح
invite_request:
text: چرا میخواهید عضو شوید؟
notification_emails:
@@ -142,6 +156,12 @@ fa:
pending_account: وقتی حساب تازهای نیاز به بازبینی داشت ایمیل بفرست
reblog: وقتی کسی نوشتهٔ شما را بازبوقید ایمیل بفرست
report: وقتی گزارش تازهای فرستاده شد ایمیل بفرست
+ trending_tag: وقتی یک برچسب بازبینینشده پرطرفدار شد ایمیل بفرست
+ tag:
+ listable: بگذارید که این برچسب در جستجوها و در فهرست گزیدهٔ کاربران نمایش داده شود
+ name: برچسب
+ trendable: بگذارید که این برچسب در موضوعات پرطرفدار دیده شود
+ usable: بگذارید که این برچسب در بوقها به کار بروند
'no': خیر
recommended: توصیه میشود
required:
diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml
index e3875cd6b..de1830f5d 100644
--- a/config/locales/simple_form.hu.yml
+++ b/config/locales/simple_form.hu.yml
@@ -2,9 +2,14 @@
hu:
simple_form:
hints:
+ account_alias:
+ acct: Adjad meg annak a fióknak a felhasználóneve@domainjét, ahonnan át szeretnéd mozgatni
+ account_migration:
+ acct: Add meg a fióknév@domain fiókot, melybe költözni szeretnél
account_warning_preset:
text: Használhatod a tülkökben szokásos szintaxist, URL-eket, hashtageket, megemlítéseket
admin_account_action:
+ include_statuses: A felhasználó látni fogja, melyik tülk okozta a moderációt vagy figyelmeztetést
send_email_notification: A felhasználó magyarázatot kap arra, mi történt a fiókjával
text_html: Opcionális. A tülk szintaxis használható. Egyszerűsítés végett létre is hozhatsz figyelmeztetéseket
type_html: Megmondhatod, mi legyen vele %{acct}
@@ -14,7 +19,10 @@ hu:
avatar: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre
bot: Ez a fiók automatikus műveleteket végez és valószínűleg nem figyeljük
context: Kontextusok, ahol a szűrőnek működnie kell
+ current_password: Biztonsági okok miatt kérlek, írd be a jelenlegi fiók jelszavát
+ current_username: A jóváhagyáshoz írd be a jelenlegi fiók felhasználói nevét
digest: Csak hosszú távollét esetén küldődik és csak ha személyes üzenetet kaptál távollétedben
+ discoverable: A profil adatbázis egy újabb mód, ahogyan a fiókod szélesebb tömegeket érhet el
email: Kapsz egy megerősítő e-mailt
fields: A profilodon legfeljebb 4 bejegyzés szerepelhet táblázatos formában
header: PNG, GIF vagy JPG. Maximum %{size}. Átméretezzük %{dimensions} pixelre
@@ -41,6 +49,8 @@ hu:
domain: Ez a domain adatot kérhet le a szerverünkről és az ettől érkező adatokat feldolgozzuk és mentjük
featured_tag:
name: 'Ezeket esetleg használhatod:'
+ form_challenge:
+ current_password: Beléptél egy biztonsági térben
imports:
data: Egy másik Mastodon szerverről exportált CSV fájl
invite_request:
@@ -56,9 +66,14 @@ hu:
fields:
name: Címke
value: Tartalom
+ account_alias:
+ acct: Régi fiók kezelése
+ account_migration:
+ acct: Új fiók kezelése
account_warning_preset:
text: Figyelmeztető szöveg
admin_account_action:
+ include_statuses: Helyezd az e-mailbe a jelentett tülköket
send_email_notification: Figyelmeztessük a felhasználót e-mailben
text: Egyedi figyelmeztetés
type: Művelet
@@ -128,6 +143,8 @@ hu:
must_be_follower: Nem követőidtől érkező értesítések tiltása
must_be_following: Nem követettjeidtől érkező értesítések tiltása
must_be_following_dm: Nem követettjeidtől érkező üzenetek tiltása
+ invite:
+ comment: Hozzászólás
invite_request:
text: Miért akarsz csatlakozni?
notification_emails:
@@ -142,6 +159,7 @@ hu:
trending_tag: E-mail küldése, ha egy még nem látott hashtag trendi lett
tag:
listable: A hashtag megjelenhet a profiladatbázisban
+ name: Címke
trendable: A hashtag megjelenhet a trendek között
usable: Tülkök használhatják ezt a hashtaget
'no': Nem
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index 2205dcf8f..b936c8e9a 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -2,6 +2,10 @@
ja:
simple_form:
hints:
+ account_alias:
+ acct: 引っ越し元のユーザー名@ドメインを指定してください
+ account_migration:
+ acct: 引っ越し先のユーザー名@ドメインを指定してください
account_warning_preset:
text: URL、ハッシュタグ、メンションなど、投稿に用いる構文が使用できます
admin_account_action:
@@ -15,6 +19,8 @@ ja:
avatar: "%{size}までのPNG、GIF、JPGが利用可能です。%{dimensions}pxまで縮小されます"
bot: このアカウントは主に自動で動作し、人が見ていない可能性があります
context: フィルターを適用する対象 (複数選択可)
+ current_password: 現在のアカウントのパスワードを入力してください
+ current_username: 確認のため、現在のアカウントのユーザー名を入力してください
digest: 長期間使用していない場合と不在時に返信を受けた場合のみ送信されます
discoverable: ディレクトリはあなたのアカウントをより多くの人に見つけてもらうためのひとつの手段です
email: 確認のメールが送信されます
@@ -43,6 +49,8 @@ ja:
domain: 登録するとこのサーバーからデータを受信したり、このドメインから受信するデータを処理して保存できるようになります
featured_tag:
name: 'これらを使うといいかもしれません:'
+ form_challenge:
+ current_password: セキュリティ上重要なエリアにアクセスしています
imports:
data: 他の Mastodon サーバーからエクスポートしたCSVファイルを選択して下さい
invite_request:
@@ -58,6 +66,10 @@ ja:
fields:
name: ラベル
value: 内容
+ account_alias:
+ acct: 引っ越し元のユーザー ID
+ account_migration:
+ acct: 引っ越し先のユーザー ID
account_warning_preset:
text: プリセット警告文
admin_account_action:
@@ -131,6 +143,8 @@ ja:
must_be_follower: フォロワー以外からの通知をブロック
must_be_following: フォローしていないユーザーからの通知をブロック
must_be_following_dm: フォローしていないユーザーからのダイレクトメッセージをブロック
+ invite:
+ comment: コメント
invite_request:
text: 意気込みをお聞かせください
notification_emails:
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 7c0a81558..d96eafb8b 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -2,6 +2,10 @@
ko:
simple_form:
hints:
+ account_alias:
+ acct: 이동하고자 하는 계정의 사용자이름@도메인을 설정하세요
+ account_migration:
+ acct: 이동하고자 하는 목적지 계정의 사용자이름@도메인을 설정하세요
account_warning_preset:
text: URL, 해시태그, 멘션과 같은 툿 문법을 사용할 수 있습니다
admin_account_action:
@@ -62,6 +66,10 @@ ko:
fields:
name: 라벨
value: 내용
+ account_alias:
+ acct: 기존 계정의 핸들
+ account_migration:
+ acct: 새 계정의 핸들
account_warning_preset:
text: 프리셋 텍스트
admin_account_action:
diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml
index 50a8efab1..220f944ce 100644
--- a/config/locales/simple_form.oc.yml
+++ b/config/locales/simple_form.oc.yml
@@ -2,9 +2,14 @@
oc:
simple_form:
hints:
+ account_alias:
+ acct: Donatz l’utilizaire@domeni del compte que volètz desplaçar
+ account_migration:
+ acct: Donatz l’utilizaire@domeni del compte ont volètz anar
account_warning_preset:
text: Podètz utilizar la sintaxi dels tuts, coma las URL, las etiquetas e las mencions
admin_account_action:
+ include_statuses: L’utilizaire veiràs quals tuts a provocat l’accion de moderacion o avertiment
send_email_notification: L’utilizaire recebrà una explicacion de çò qu’arribèt a son compte
text_html: Opcional. Podètz utilizar la sintaxi dels tuts. Podètz ajustar un avertiment personalizat per estalviar de temps
type_html: Causir de qué far amb %{acct}
@@ -14,7 +19,10 @@ oc:
avatar: PNG, GIF o JPG. Maximum %{size}. Serà retalhat en %{dimensions}px
bot: Avisar lo monde qu’aqueste compte es pas d’una persona
context: Un o mai de contèxtes ont lo filtre deuriá s’aplicar
+ current_password: Per de rasons de seguretat volgatz picar lo senhal del compte actual
+ current_username: Per confirmar, volgatz picar lo nom d’utilizaire del compte actual
digest: Solament enviat aprèp un long moment d’inactivitat e solament s’avètz recebut de messatges personals pendent vòstra abséncia
+ discoverable: L’annuari de perfiles es un biais mai per que vòstre compte aja una audiéncia mai granda
email: Vos mandarem un corrièl de confirmacion
fields: Podètz far veire cap a 4 elements sus vòstre perfil
header: PNG, GIF o JPG. Maximum %{size}. Serà retalhada en %{dimensions}px
@@ -39,12 +47,16 @@ oc:
whole_word: Quand lo mot-clau o frasa es solament alfranumeric, serà pas qu’aplicat se correspond al mot complèt
featured_tag:
name: 'Benlèu que volètz utilizar una d’aquestas causas :'
+ form_challenge:
+ current_password: Dintratz dins una zòna segura
imports:
data: Fichièr CSV exportat d’un autre servidor Mastodon
invite_request:
text: Aquò nos ajudarà per validar vòstra demanda
sessions:
otp: 'Picatz lo còdi d’autentificacion en dos temps (Two factor code) de vòstra aplicacion mobil o utilizatz un de vòstres còdis de recuperacion :'
+ tag:
+ name: Podètz pas que cambiar la talha de las letras, per exemple, per que sián de melhor legir
user:
chosen_languages: Quand seleccionadas, solament los tuts dins las lengas triadas seràn mostrats dins vòstre flux d’actualitat
labels:
@@ -52,9 +64,14 @@ oc:
fields:
name: Nom
value: Contengut
+ account_alias:
+ acct: Identificant de l’ancian compte
+ account_migration:
+ acct: Identificant del nòu compte
account_warning_preset:
text: Tèxt predefinit
admin_account_action:
+ include_statuses: Inclure los tuts senhalats dins lo corrièl
send_email_notification: Avisar l’utilizaire per corrièl
text: Avertiment personalizat
type: Accions
@@ -137,6 +154,7 @@ oc:
pending_account: Enviar un corrièl quand cal validar un compte novèl
reblog: Enviar un corrièl quand qualqu’un tòrna partejar vòstre estatut
report: Enviar un corrièl pels nòus senhalaments
+ trending_tag: Enviar un corrièl quand una etiqueta pas repassada es en tendéncia
tag:
listable: Permetre a aquesta etiqueta d’aparéisser a las recèrcas e a l’annuari de perfils
name: Etiqueta
diff --git a/config/locales/simple_form.pt-BR.yml b/config/locales/simple_form.pt-BR.yml
index 8400951f0..3f3f78180 100644
--- a/config/locales/simple_form.pt-BR.yml
+++ b/config/locales/simple_form.pt-BR.yml
@@ -2,9 +2,14 @@
pt-BR:
simple_form:
hints:
+ account_alias:
+ acct: Especifique o usuário@domínio da conta da qual você deseja mover
+ account_migration:
+ acct: Especifique o usuário@domínio da conta para o qual você deseja mover
account_warning_preset:
text: Você pode usar a sintaxe de um toot, como URLs, hashtags e menções
admin_account_action:
+ include_statuses: O usuário verá quais toots causaram o aviso ou ação da moderação
send_email_notification: O usuário vai receber uma explicação do que aconteceu com a sua conta
text_html: Opcional. Você pode usar a sintaxe de toots. Você pode adicionar avisos pré-definidos para ganhar tempo
type_html: Escolha o que fazer com %{acct}
@@ -14,6 +19,8 @@ pt-BR:
avatar: PNG, GIF or JPG. Arquivos de até %{size}. Eles serão diminuídos para %{dimensions}px
bot: Essa conta executa principalmente ações automatizadas e pode não ser monitorada
context: Um ou mais contextos onde o filtro deve ser aplicado
+ current_password: Para fins de segurança digite a senha da conta atual
+ current_username: Para confirmar, por favor, digite o usuário da conta atual
digest: Enviado após um longo período de inatividade com um resumo das menções que você recebeu em sua ausência
email: Você receberá um email de confirmação
fields: Você pode ter até 4 itens exibidos em forma de tabela no seu perfil
@@ -26,16 +33,21 @@ pt-BR:
phrase: Vai coincidir, independente de maiúsculas ou minúsculas, no texto ou no aviso de conteúdo de um toot
scopes: Quais APIs a aplicação vai ter permissão de acessar. Se você selecionar um escopo de alto nível, você não precisa selecionar individualmente os outros.
setting_aggregate_reblogs: Não mostrar novos compartilhamentos para toots que foram compartilhados recentemente (afeta somente novos compartilhamentos recebidos)
+ setting_default_sensitive: Mídia sensível está oculta por padrão e pode ser revelada com um clique
setting_display_media_default: Esconder mídia marcada como sensível
setting_display_media_hide_all: Sempre esconder todas as mídias
setting_display_media_show_all: Sempre mostrar mídia marcada como sensível
setting_hide_network: Quem você segue e quem segue você não serão exibidos no seu perfil
setting_noindex: Afeta seu perfil público e as páginas de suas postagens
setting_show_application: A aplicação que você usar para enviar seus toots vai aparecer na visão detalhada dos seus toots
+ setting_use_blurhash: Os gradientes são baseados nas cores das imagens escondidas, mas ofuscam quaisquer detalhes
+ setting_use_pending_items: Ocultar atualizações de linha de tempo atrás de um clique ao invés de rolar automaticamente o feed
username: Seu nome de usuário será único em %{domain}
whole_word: Quando a palavra ou frase é inteiramente alfanumérica, ela será aplicada somente se corresponder a palavra inteira
featured_tag:
name: 'Você pode querer usar um destes:'
+ form_challenge:
+ current_password: Você está entrando em uma área segura
imports:
data: Arquivo CSV exportado de outra instância do Mastodon
invite_request:
@@ -52,6 +64,7 @@ pt-BR:
account_warning_preset:
text: Texto pré-definido
admin_account_action:
+ include_statuses: Incluir toots reportados no e-mail
send_email_notification: Notificar o usuário por e-mail
text: Aviso customizado
type: Ação
@@ -63,6 +76,7 @@ pt-BR:
warning_preset_id: Usar um aviso pré-definido
defaults:
autofollow: Convite para seguir a sua conta
+ avatar: Imagem de Perfil
bot: Esta é uma conta-robô
chosen_languages: Filtros de idioma
confirm_new_password: Confirmar nova senha
@@ -82,6 +96,7 @@ pt-BR:
locked: Trancar conta
max_uses: Número máximo de usos
new_password: Nova senha
+ note: Biografia
otp_attempt: Código de autenticação em dois passos
password: Senha
phrase: Palavra-chave ou frase
@@ -109,10 +124,14 @@ pt-BR:
username: Nome de usuário
username_or_email: Nome de usuário ou e-mail
whole_word: Palavra inteira
+ featured_tag:
+ name: Hashtag
interactions:
must_be_follower: Bloquear notificações de não-seguidores
must_be_following: Bloquear notificações de pessoas que você não segue
must_be_following_dm: Bloquear mensagens diretas de pessoas que você não segue
+ invite:
+ comment: Comentário
invite_request:
text: Por que você quer se cadastrar?
notification_emails:
@@ -124,7 +143,15 @@ pt-BR:
pending_account: Mandar um -mail quando uma nova conta precisar ser revisada
reblog: Mandar um e-mail quando alguém compartilhar suas postagens
report: Mandar um e-mail quando uma nova denúncia é submetida
+ trending_tag: Enviar e-mail quando uma hashtag não revisada estiver em alta
+ tag:
+ listable: Permitir que esta hashtag apareça em pesquisas e no diretório de perfis
+ name: Hashtag
+ trendable: Permitir que esta hashtag apareça em alta
+ usable: Permitir que toots usem esta hastag
'no': Não
+ recommended: Recomendado
required:
+ mark: "*"
text: obrigatório
'yes': Sim
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index 0ac31f8c2..57acde4d9 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -2,9 +2,14 @@
pt-PT:
simple_form:
hints:
+ account_alias:
+ acct: Especifique o nome de usuário@domínio da conta de onde você deseja mover
+ account_migration:
+ acct: Especifique o nome de usuário@domínio da conta para onde você deseja mover
account_warning_preset:
text: Tu podes usar sintaxe de escrita, como URLs, hashtags e referências
admin_account_action:
+ include_statuses: O usuário verá quais ferramentas causaram a ação de moderação ou aviso
send_email_notification: O utilizador receberá uma explicação sobre o que aconteceu com a sua conta
text_html: Opcional. Tu podes usar sintaxe de escrita. Tu podes adicionar predefinições de aviso para poupar tempo
type_html: Escolhe o que fazer com %{acct}
@@ -14,6 +19,7 @@ pt-PT:
avatar: PNG, GIF or JPG. Arquivos até %{size}. Vão ser reduzidos para %{dimensions}px
bot: Esta conta executa essencialmente acções automáticas e pode não poder ser monitorizada
context: Um ou múltiplos contextos nos quais o filtro deve ser aplicado
+ current_password: Para fins de segurança, por favor, digite a senha da conta atual
digest: Enviado após um longo período de inatividade e apenas se foste mencionado na tua ausência
email: Será enviado um e-mail de confirmação
fields: Podes ter até 4 itens expostos, em forma de tabela, no teu perfil
diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml
index 8caae951c..869231bdf 100644
--- a/config/locales/simple_form.th.yml
+++ b/config/locales/simple_form.th.yml
@@ -123,6 +123,8 @@ th:
must_be_follower: ปิดกั้นการแจ้งเตือนจากที่ไม่ใช่ผู้ติดตาม
must_be_following: ปิดกั้นการแจ้งเตือนจากผู้คนที่คุณไม่ได้ติดตาม
must_be_following_dm: ปิดกั้นข้อความโดยตรงจากผู้คนที่คุณไม่ได้ติดตาม
+ invite:
+ comment: ความคิดเห็น
invite_request:
text: ทำไมคุณจึงต้องการเข้าร่วม?
notification_emails:
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index 1e4a262e7..a6ae14f6d 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -82,6 +82,7 @@ uk:
discoverable: Оприлюднити обліковий запис у каталозі
display_name: Ім'я
email: Email адреса
+ expires_in: Закінчується після
fields: Метадані профіля
header: Заголовок
inbox_url: URL поштової скриньки ретранслятора
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 01f5bf750..729573d92 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -246,8 +246,10 @@ sk:
disabled_msg: Emoji bolo úspešne zakázané
emoji: Emotikony
enable: Povoľ
+ enabled: Povolené
enabled_msg: Emoji bolo úspešne povolené
image_hint: PNG do 50KB
+ list: Zoznam
listed: V zozname
new:
title: Pridaj nové, vlastné emoji
@@ -256,11 +258,13 @@ sk:
shortcode_hint: Aspoň 2 znaky, povolené sú alfanumerické, alebo podčiarkovník
title: Vlastné emoji
uncategorized: Nezaradené
+ unlist: Nezaraď
unlisted: Nie je na zozname
update_failed_msg: Nebolo možné aktualizovať toto emoji
updated_msg: Emoji bolo úspešne aktualizované!
upload: Nahraj
dashboard:
+ authorized_fetch_mode: Autorizovaný režim
backlog: odložené aktivity
config: Nastavenia
feature_deletions: Vymazanie účtov
@@ -557,6 +561,7 @@ sk:
subject: Nový haštag očakáva preverenie na %{instance} (#%{name})
aliases:
add_new: Vytvor alias
+ remove: Odpoj alias
appearance:
advanced_web_interface: Pokročilé webové rozhranie
advanced_web_interface_hint: 'Ak chceš využiť celkovú šírku tvojej obrazovky, pokročilé webové rozhranie ti umožňuje nastaviť mnoho rôznych stĺpcov, aby si videl/a toľko informácií naraz, koľko chceš: Domov, oboznámenia, federovanú časovú os, a ľubovolný počet zoznamov, či haštagov.'
@@ -613,6 +618,7 @@ sk:
confirming: Čaká sa na dokončenie potvrdenia emailom.
functional: Tvoj účet je plne funkčný.
pending: Tvoja žiadosť čaká na schvílenie od nášho týmu. Môže to chviľu potrvať. Ak bude tvoja žiadosť schválená, dostaneš o tom email.
+ redirecting_to: Tvoj účet je neaktívny, lebo v súčasnosti presmerováva na %{acct}.
trouble_logging_in: Problém s prihlásením?
authorize_follow:
already_following: Tento účet už následuješ
@@ -645,6 +651,7 @@ sk:
x_seconds: "%{count}sek"
deletes:
confirm_password: Napíšte svoje terajšie heslo pre overenie vašej identity
+ confirm_username: Zadaj svoju prezývku, na potvrdenie úkonu
proceed: Vymaž účet
success_msg: Tvoj účet bol úspešne vymazaný
warning:
@@ -801,11 +808,19 @@ sk:
migrations:
acct: prezývka@doména nového účtu
cancel: Zruš presmerovanie
+ cancelled_msg: Presmerovanie úspešne zrušené.
errors:
+ missing_also_known_as: neodkazuje spätne na tento účet
move_to_self: nemôže to byť tvoj súčasný účet
not_found: nebolo možné nájsť
+ followers_count: Následovatelia v čase presunu
+ incoming_migrations: Presúvam sa z iného účtu
+ not_redirecting: Tvoj účet v súčasnosti nepresmerováva na žiaden iný účet.
past_migrations: Predošlé presuny
proceed_with_move: Presuň sledovateľov
+ redirecting_to: Tvoj účet presmerováva na %{acct}.
+ warning:
+ other_data: Žiadne iné dáta nebudú presunuté automaticky
moderation:
title: Moderovanie
notification_mailer:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index e1056d0c2..09d81c752 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -30,6 +30,8 @@ th:
other: สถานะ
status_count_before: ผู้ใช้เหล่านั้นได้สร้าง
terms: เงื่อนไขการให้บริการ
+ unavailable_content_description:
+ reason: 'เหตุผล:'
user_count_after:
other: ผู้ใช้
user_count_before: บ้านของ
@@ -174,6 +176,7 @@ th:
custom_emojis:
by_domain: โดเมน
copy: คัดลอก
+ create_new_category: สร้างหมวดหมู่ใหม่
created_msg: สร้างอีโมจิสำเร็จ!
delete: ลบ
destroyed_msg: ทำลายอีโมโจสำเร็จ!
@@ -217,6 +220,7 @@ th:
created_msg: กำลังประมวลผลการปิดกั้นโดเมน
destroyed_msg: เลิกทำการปิดกั้นโดเมนแล้ว
domain: โดเมน
+ edit: แก้ไขการปิดกั้นโดเมน
new:
create: สร้างการปิดกั้น
hint: การปิดกั้นโดเมนจะไม่ป้องกันการสร้างรายการบัญชีในฐานข้อมูล แต่จะใช้วิธีการควบคุมเฉพาะกับบัญชีเหล่านั้นย้อนหลังและโดยอัตโนมัติ
@@ -226,6 +230,8 @@ th:
silence: เงียบ
suspend: ระงับ
title: การปิดกั้นโดเมนใหม่
+ private_comment: ความคิดเห็นส่วนตัว
+ public_comment: ความคิดเห็นสาธารณะ
reject_media: ปฏิเสธไฟล์สื่อ
reject_media_hint: เอาไฟล์สื่อที่จัดเก็บไว้ในเว็บออกและปฏิเสธที่จะดาวน์โหลดไฟล์ใด ๆ ในอนาคต ไม่เกี่ยวข้องกับการระงับ
reject_reports: ปฏิเสธรายงาน
@@ -241,6 +247,7 @@ th:
title: เลิกทำการปิดกั้นโดเมนสำหรับ %{domain}
undo: เลิกทำ
undo: เลิกทำการปิดกั้นโดเมน
+ view: ดูการปิดกั้นโดเมน
email_domain_blocks:
add_new: เพิ่มใหม่
delete: ลบ
@@ -348,11 +355,14 @@ th:
delete: ลบ
nsfw_off: ทำเครื่องหมายว่าไม่ละเอียดอ่อน
nsfw_on: ทำเครื่องหมายว่าละเอียดอ่อน
+ deleted: ลบแล้ว
media:
title: สื่อ
no_media: ไม่มีสื่อ
title: สถานะบัญชี
tags:
+ in_directory: "%{count} ในไดเรกทอรี"
+ name: แฮชแท็ก
title: แฮชแท็ก
title: การดูแล
warning_presets:
@@ -405,6 +415,9 @@ th:
return: แสดงโปรไฟล์ของผู้ใช้
web: ไปยังเว็บ
title: ติดตาม %{acct}
+ challenge:
+ invalid_password: รหัสผ่านไม่ถูกต้อง
+ prompt: ยืนยันรหัสผ่านเพื่อดำเนินการต่อ
datetime:
distance_in_words:
about_x_hours: "%{count} ชั่วโมง"
@@ -641,6 +654,7 @@ th:
video:
other: "%{count} วิดีโอ"
content_warning: 'คำเตือนเนื้อหา: %{warning}'
+ language_detection: ตรวจหาภาษาโดยอัตโนมัติ
open_in_web: เปิดในเว็บ
pin_errors:
reblog: ไม่สามารถปักหมุดการดัน
diff --git a/config/navigation.rb b/config/navigation.rb
index 32c299143..eebd4f75e 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -47,7 +47,7 @@ SimpleNavigation::Configuration.run do |navigation|
s.item :dashboard, safe_join([fa_icon('tachometer fw'), t('admin.dashboard.title')]), admin_dashboard_url
s.item :settings, safe_join([fa_icon('cogs fw'), t('admin.settings.title')]), edit_admin_settings_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/settings}
s.item :custom_emojis, safe_join([fa_icon('smile-o fw'), t('admin.custom_emojis.title')]), admin_custom_emojis_url, highlights_on: %r{/admin/custom_emojis}
- s.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? }, highlights_on: %r{/admin/relays}
+ s.item :relays, safe_join([fa_icon('exchange fw'), t('admin.relays.title')]), admin_relays_url, if: -> { current_user.admin? && !whitelist_mode? }, highlights_on: %r{/admin/relays}
s.item :sidekiq, safe_join([fa_icon('diamond fw'), 'Sidekiq']), sidekiq_url, link_html: { target: 'sidekiq' }, if: -> { current_user.admin? }
s.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? }
end
diff --git a/config/routes.rb b/config/routes.rb
index 2fdb6f1f3..4bf199066 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -134,11 +134,10 @@ Rails.application.routes.draw do
end
resource :delete, only: [:show, :destroy]
+ resource :migration, only: [:show, :create]
- resource :migration, only: [:show, :create] do
- collection do
- post :cancel
- end
+ namespace :migration do
+ resource :redirect, only: [:new, :create, :destroy]
end
resources :aliases, only: [:index, :create, :destroy]
diff --git a/db/migrate/20161202132159_add_in_reply_to_account_id_to_statuses.rb b/db/migrate/20161202132159_add_in_reply_to_account_id_to_statuses.rb
index 2c24b53d0..3a559ccd6 100644
--- a/db/migrate/20161202132159_add_in_reply_to_account_id_to_statuses.rb
+++ b/db/migrate/20161202132159_add_in_reply_to_account_id_to_statuses.rb
@@ -3,7 +3,7 @@ class AddInReplyToAccountIdToStatuses < ActiveRecord::Migration[5.0]
add_column :statuses, :in_reply_to_account_id, :integer, null: true, default: nil
ActiveRecord::Base.transaction do
- Status.where.not(in_reply_to_id: nil).includes(:thread).find_each do |status|
+ Status.unscoped.where.not(in_reply_to_id: nil).includes(:thread).find_each do |status|
next if status.thread.nil?
status.in_reply_to_account_id = status.thread.account_id
diff --git a/db/migrate/20170209184350_add_reply_to_statuses.rb b/db/migrate/20170209184350_add_reply_to_statuses.rb
index c5074728b..b8b5c1306 100644
--- a/db/migrate/20170209184350_add_reply_to_statuses.rb
+++ b/db/migrate/20170209184350_add_reply_to_statuses.rb
@@ -1,7 +1,7 @@
class AddReplyToStatuses < ActiveRecord::Migration[5.0]
def up
add_column :statuses, :reply, :boolean, nil: false, default: false
- Status.update_all('reply = (in_reply_to_id IS NOT NULL)')
+ Status.unscoped.update_all('reply = (in_reply_to_id IS NOT NULL)')
end
def down
diff --git a/db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb b/db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb
new file mode 100644
index 000000000..c2397476a
--- /dev/null
+++ b/db/post_migrate/20190927124642_remove_invalid_web_push_subscription.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class RemoveInvalidWebPushSubscription < ActiveRecord::Migration[5.2]
+ disable_ddl_transaction!
+
+ def up
+ invalid_web_push_subscriptions = Web::PushSubscription.where(endpoint: '')
+ .or(Web::PushSubscription.where(key_p256dh: ''))
+ .or(Web::PushSubscription.where(key_auth: ''))
+ .preload(:session_activation)
+ invalid_web_push_subscriptions.find_each do |web_push_subscription|
+ web_push_subscription.session_activation&.update!(web_push_subscription_id: nil)
+ web_push_subscription.destroy!
+ end
+ end
+
+ def down; end
+end
diff --git a/db/schema.rb b/db/schema.rb
index daa820330..8c533685e 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2019_09_17_213523) do
+ActiveRecord::Schema.define(version: 2019_09_27_124642) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
diff --git a/lib/devise/ldap_authenticatable.rb b/lib/devise/ldap_authenticatable.rb
deleted file mode 100644
index 6903d468d..000000000
--- a/lib/devise/ldap_authenticatable.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-# frozen_string_literal: true
-
-require 'net/ldap'
-require 'devise/strategies/authenticatable'
-
-module Devise
- module Strategies
- class LdapAuthenticatable < Authenticatable
- def authenticate!
- if params[:user]
- ldap = Net::LDAP.new(
- host: Devise.ldap_host,
- port: Devise.ldap_port,
- base: Devise.ldap_base,
- encryption: {
- method: Devise.ldap_method,
- tls_options: tls_options,
- },
- auth: {
- method: :simple,
- username: Devise.ldap_bind_dn,
- password: Devise.ldap_password,
- },
- connect_timeout: 10
- )
-
- filter = format(Devise.ldap_search_filter, uid: Devise.ldap_uid, email: email)
-
- if (user_info = ldap.bind_as(base: Devise.ldap_base, filter: filter, password: password))
- user = User.ldap_get_user(user_info.first)
- success!(user)
- else
- return fail(:invalid)
- end
- end
- end
-
- def email
- params[:user][:email]
- end
-
- def password
- params[:user][:password]
- end
-
- def tls_options
- OpenSSL::SSL::SSLContext::DEFAULT_PARAMS.tap do |options|
- options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE if Devise.ldap_tls_no_verify
- end
- end
- end
- end
-end
-
-Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)
diff --git a/lib/devise/two_factor_ldap_authenticatable.rb b/lib/devise/two_factor_ldap_authenticatable.rb
new file mode 100644
index 000000000..065aa2de8
--- /dev/null
+++ b/lib/devise/two_factor_ldap_authenticatable.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+require 'net/ldap'
+require 'devise/strategies/base'
+
+module Devise
+ module Strategies
+ class TwoFactorLdapAuthenticatable < Base
+ def valid?
+ valid_params? && mapping.to.respond_to?(:authenticate_with_ldap)
+ end
+
+ def authenticate!
+ resource = mapping.to.authenticate_with_ldap(params[scope])
+
+ if resource && !resource.otp_required_for_login?
+ success!(resource)
+ else
+ fail(:invalid)
+ end
+ end
+
+ protected
+
+ def valid_params?
+ params[scope] && params[scope][:password].present?
+ end
+ end
+ end
+end
+
+Warden::Strategies.add(:two_factor_ldap_authenticatable, Devise::Strategies::TwoFactorLdapAuthenticatable)
diff --git a/lib/devise/two_factor_pam_authenticatable.rb b/lib/devise/two_factor_pam_authenticatable.rb
new file mode 100644
index 000000000..5ce723b33
--- /dev/null
+++ b/lib/devise/two_factor_pam_authenticatable.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'devise/strategies/base'
+
+module Devise
+ module Strategies
+ class TwoFactorPamAuthenticatable < Base
+ def valid?
+ valid_params? && mapping.to.respond_to?(:authenticate_with_pam)
+ end
+
+ def authenticate!
+ resource = mapping.to.authenticate_with_pam(params[scope])
+
+ if resource && !resource.otp_required_for_login?
+ success!(resource)
+ else
+ fail(:invalid)
+ end
+ end
+
+ protected
+
+ def valid_params?
+ params[scope] && params[scope][:password].present?
+ end
+ end
+ end
+end
+
+Warden::Strategies.add(:two_factor_pam_authenticatable, Devise::Strategies::TwoFactorPamAuthenticatable)
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
index ee9657b0e..2e92e8ded 100644
--- a/lib/tasks/mastodon.rake
+++ b/lib/tasks/mastodon.rake
@@ -135,7 +135,7 @@ namespace :mastodon do
prompt.say "\n"
if prompt.yes?('Do you want to store uploaded files on the cloud?', default: false)
- case prompt.select('Provider', ['Amazon S3', 'Wasabi', 'Minio'])
+ case prompt.select('Provider', ['Amazon S3', 'Wasabi', 'Minio', 'Google Cloud Storage'])
when 'Amazon S3'
env['S3_ENABLED'] = 'true'
env['S3_PROTOCOL'] = 'https'
@@ -217,6 +217,34 @@ namespace :mastodon do
q.required true
q.modify :strip
end
+ when 'Google Cloud Storage'
+ env['S3_ENABLED'] = 'true'
+ env['S3_PROTOCOL'] = 'https'
+ env['S3_HOSTNAME'] = 'storage.googleapis.com'
+ env['S3_ENDPOINT'] = 'https://storage.googleapis.com'
+ env['S3_MULTIPART_THRESHOLD'] = 50.megabytes
+
+ env['S3_BUCKET'] = prompt.ask('GCS bucket name:') do |q|
+ q.required true
+ q.default "files.#{env['LOCAL_DOMAIN']}"
+ q.modify :strip
+ end
+
+ env['S3_REGION'] = prompt.ask('GCS region:') do |q|
+ q.required true
+ q.default 'us-west1'
+ q.modify :strip
+ end
+
+ env['AWS_ACCESS_KEY_ID'] = prompt.ask('GCS access key:') do |q|
+ q.required true
+ q.modify :strip
+ end
+
+ env['AWS_SECRET_ACCESS_KEY'] = prompt.ask('GCS secret key:') do |q|
+ q.required true
+ q.modify :strip
+ end
end
if prompt.yes?('Do you want to access the uploaded files from your own domain?')
diff --git a/package.json b/package.json
index 7c378eb39..382e0b8d3 100644
--- a/package.json
+++ b/package.json
@@ -111,7 +111,7 @@
"lodash": "^4.17.14",
"mark-loader": "^0.1.6",
"marky": "^1.2.1",
- "mini-css-extract-plugin": "^0.7.0",
+ "mini-css-extract-plugin": "^0.8.0",
"mkdirp": "^0.5.1",
"npmlog": "^4.1.2",
"object-assign": "^4.1.1",
@@ -152,7 +152,7 @@
"requestidlecallback": "^0.3.0",
"reselect": "^4.0.0",
"rimraf": "^3.0.0",
- "sass": "^1.22.9",
+ "sass": "^1.22.12",
"sass-loader": "^7.0.3",
"stringz": "^2.0.0",
"substring-trie": "^1.0.2",
@@ -171,10 +171,10 @@
},
"devDependencies": {
"babel-eslint": "^10.0.3",
- "babel-jest": "^24.8.0",
+ "babel-jest": "^24.9.0",
"enzyme": "^3.10.0",
"enzyme-adapter-react-16": "^1.14.0",
- "eslint": "^6.1.0",
+ "eslint": "^6.4.0",
"eslint-plugin-import": "~2.18.2",
"eslint-plugin-jsx-a11y": "~6.2.3",
"eslint-plugin-promise": "~4.2.1",
diff --git a/scalingo.json b/scalingo.json
index dd8fb5530..324356df0 100644
--- a/scalingo.json
+++ b/scalingo.json
@@ -8,15 +8,6 @@
"description": "The domain that your Mastodon instance will run on (this can be appname.scalingo.io or a custom domain)",
"required": true
},
- "LOCAL_HTTPS": {
- "description": "Will your domain support HTTPS? (Automatic for *.scalingo.io, requires manual configuration for custom domains)",
- "value": "true",
- "required": true
- },
- "PAPERCLIP_SECRET": {
- "description": "The secret key for storing media files",
- "generator": "secret"
- },
"SECRET_KEY_BASE": {
"description": "The secret key base",
"generator": "secret"
diff --git a/spec/lib/activitypub/activity/follow_spec.rb b/spec/lib/activitypub/activity/follow_spec.rb
index 6bbacdbe6..05112cc18 100644
--- a/spec/lib/activitypub/activity/follow_spec.rb
+++ b/spec/lib/activitypub/activity/follow_spec.rb
@@ -31,6 +31,36 @@ RSpec.describe ActivityPub::Activity::Follow do
end
end
+ context 'silenced account following an unlocked account' do
+ before do
+ sender.touch(:silenced_at)
+ subject.perform
+ end
+
+ it 'does not create a follow from sender to recipient' do
+ expect(sender.following?(recipient)).to be false
+ end
+
+ it 'creates a follow request' do
+ expect(sender.requested?(recipient)).to be true
+ end
+ end
+
+ context 'unlocked account muting the sender' do
+ before do
+ recipient.mute!(sender)
+ subject.perform
+ end
+
+ it 'creates a follow from sender to recipient' do
+ expect(sender.following?(recipient)).to be true
+ end
+
+ it 'does not create a follow request' do
+ expect(sender.requested?(recipient)).to be false
+ end
+ end
+
context 'locked account' do
before do
recipient.update(locked: true)
diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb
index 86c85293e..ae863a9f0 100644
--- a/spec/services/follow_service_spec.rb
+++ b/spec/services/follow_service_spec.rb
@@ -30,6 +30,33 @@ RSpec.describe FollowService, type: :service do
end
end
+ describe 'unlocked account, from silenced account' do
+ let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account }
+
+ before do
+ sender.touch(:silenced_at)
+ subject.call(sender, bob.acct)
+ end
+
+ it 'creates a follow request with reblogs' do
+ expect(FollowRequest.find_by(account: sender, target_account: bob, show_reblogs: true)).to_not be_nil
+ end
+ end
+
+ describe 'unlocked account, from a muted account' do
+ let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account }
+
+ before do
+ bob.mute!(sender)
+ subject.call(sender, bob.acct)
+ end
+
+ it 'creates a following relation with reblogs' do
+ expect(sender.following?(bob)).to be true
+ expect(sender.muting_reblogs?(bob)).to be false
+ end
+ end
+
describe 'unlocked account' do
let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account }
diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb
index ade306ed2..739bb9cf5 100644
--- a/spec/services/search_service_spec.rb
+++ b/spec/services/search_service_spec.rb
@@ -77,10 +77,10 @@ describe SearchService, type: :service do
it 'includes the tag in the results' do
query = '#tag'
tag = Tag.new
- allow(Tag).to receive(:search_for).with('tag', 10, 0).and_return([tag])
+ allow(Tag).to receive(:search_for).with('tag', 10, 0, exclude_unreviewed: nil).and_return([tag])
results = subject.call(query, nil, 10)
- expect(Tag).to have_received(:search_for).with('tag', 10, 0)
+ expect(Tag).to have_received(:search_for).with('tag', 10, 0, exclude_unreviewed: nil)
expect(results).to eq empty_results.merge(hashtags: [tag])
end
it 'does not include tag when starts with @ character' do
diff --git a/spec/services/update_account_service_spec.rb b/spec/services/update_account_service_spec.rb
new file mode 100644
index 000000000..960b26891
--- /dev/null
+++ b/spec/services/update_account_service_spec.rb
@@ -0,0 +1,38 @@
+require 'rails_helper'
+
+RSpec.describe UpdateAccountService, type: :service do
+ subject { UpdateAccountService.new }
+
+ describe 'switching form locked to unlocked accounts' do
+ let(:account) { Fabricate(:account, locked: true) }
+ let(:alice) { Fabricate(:user, email: 'alice@example.com', account: Fabricate(:account, username: 'alice')).account }
+ let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account }
+ let(:eve) { Fabricate(:user, email: 'eve@example.com', account: Fabricate(:account, username: 'eve')).account }
+
+ before do
+ bob.touch(:silenced_at)
+ account.mute!(eve)
+
+ FollowService.new.call(alice, account)
+ FollowService.new.call(bob, account)
+ FollowService.new.call(eve, account)
+
+ subject.call(account, { locked: false })
+ end
+
+ it 'auto-accepts pending follow requests' do
+ expect(alice.following?(account)).to be true
+ expect(alice.requested?(account)).to be false
+ end
+
+ it 'does not auto-accept pending follow requests from silenced users' do
+ expect(bob.following?(account)).to be false
+ expect(bob.requested?(account)).to be true
+ end
+
+ it 'auto-accepts pending follow requests from muted users so as to not leak mute' do
+ expect(eve.following?(account)).to be true
+ expect(eve.requested?(account)).to be false
+ end
+ end
+end
diff --git a/yarn.lock b/yarn.lock
index 9c85ea741..f8314e4d9 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -953,15 +953,6 @@
"@jest/types" "^24.9.0"
jest-mock "^24.9.0"
-"@jest/fake-timers@^24.8.0":
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1"
- integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==
- dependencies:
- "@jest/types" "^24.8.0"
- jest-message-util "^24.8.0"
- jest-mock "^24.8.0"
-
"@jest/fake-timers@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93"
@@ -1016,15 +1007,6 @@
graceful-fs "^4.1.15"
source-map "^0.6.0"
-"@jest/test-result@^24.8.0":
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3"
- integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==
- dependencies:
- "@jest/console" "^24.7.1"
- "@jest/types" "^24.8.0"
- "@types/istanbul-lib-coverage" "^2.0.0"
-
"@jest/test-result@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca"
@@ -1044,27 +1026,6 @@
jest-runner "^24.9.0"
jest-runtime "^24.9.0"
-"@jest/transform@^24.8.0":
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.8.0.tgz#628fb99dce4f9d254c6fd9341e3eea262e06fef5"
- integrity sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==
- dependencies:
- "@babel/core" "^7.1.0"
- "@jest/types" "^24.8.0"
- babel-plugin-istanbul "^5.1.0"
- chalk "^2.0.1"
- convert-source-map "^1.4.0"
- fast-json-stable-stringify "^2.0.0"
- graceful-fs "^4.1.15"
- jest-haste-map "^24.8.0"
- jest-regex-util "^24.3.0"
- jest-util "^24.8.0"
- micromatch "^3.1.10"
- realpath-native "^1.1.0"
- slash "^2.0.0"
- source-map "^0.6.1"
- write-file-atomic "2.4.1"
-
"@jest/transform@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56"
@@ -1087,15 +1048,6 @@
source-map "^0.6.1"
write-file-atomic "2.4.1"
-"@jest/types@^24.8.0":
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad"
- integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^1.1.1"
- "@types/yargs" "^12.0.9"
-
"@jest/types@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
@@ -1204,11 +1156,6 @@
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==
-"@types/yargs@^12.0.9":
- version "12.0.9"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.9.tgz#693e76a52f61a2f1e7fb48c0eef167b95ea4ffd0"
- integrity sha512-sCZy4SxP9rN2w30Hlmg5dtdRwgYQfYRiLo9usw8X9cxlf+H4FqM1xX7+sNH7NNKVdbXMJWqva7iyy+fxh/V7fA==
-
"@types/yargs@^13.0.0":
version "13.0.2"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653"
@@ -1405,10 +1352,10 @@ acorn-jsx@^3.0.0:
dependencies:
acorn "^3.0.4"
-acorn-jsx@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
- integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
+acorn-jsx@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f"
+ integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==
acorn-walk@^6.0.1, acorn-walk@^6.1.1:
version "6.1.1"
@@ -1430,6 +1377,11 @@ acorn@^6.0.1, acorn@^6.0.7, acorn@^6.2.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3"
integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==
+acorn@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a"
+ integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==
+
airbnb-prop-types@^2.13.2:
version "2.13.2"
resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz#43147a5062dd2a4a5600e748a47b64004cc5f7fc"
@@ -1798,19 +1750,6 @@ babel-eslint@^10.0.3:
eslint-visitor-keys "^1.0.0"
resolve "^1.12.0"
-babel-jest@^24.8.0:
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589"
- integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==
- dependencies:
- "@jest/transform" "^24.8.0"
- "@jest/types" "^24.8.0"
- "@types/babel__core" "^7.1.0"
- babel-plugin-istanbul "^5.1.0"
- babel-preset-jest "^24.6.0"
- chalk "^2.4.2"
- slash "^2.0.0"
-
babel-jest@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
@@ -1868,13 +1807,6 @@ babel-plugin-istanbul@^5.1.0:
istanbul-lib-instrument "^3.0.0"
test-exclude "^5.0.0"
-babel-plugin-jest-hoist@^24.6.0:
- version "24.6.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019"
- integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==
- dependencies:
- "@types/babel__traverse" "^7.0.6"
-
babel-plugin-jest-hoist@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756"
@@ -1936,14 +1868,6 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24:
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
-babel-preset-jest@^24.6.0:
- version "24.6.0"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984"
- integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==
- dependencies:
- "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
- babel-plugin-jest-hoist "^24.6.0"
-
babel-preset-jest@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc"
@@ -3909,14 +3833,14 @@ eslint-scope@^5.0.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
-eslint-utils@^1.3.1:
+eslint-utils@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab"
integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==
dependencies:
eslint-visitor-keys "^1.0.0"
-eslint-visitor-keys@^1.0.0:
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
@@ -3960,10 +3884,10 @@ eslint@^2.7.0:
text-table "~0.2.0"
user-home "^2.0.0"
-eslint@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646"
- integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==
+eslint@^6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a"
+ integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.10.0"
@@ -3972,9 +3896,9 @@ eslint@^6.1.0:
debug "^4.0.1"
doctrine "^3.0.0"
eslint-scope "^5.0.0"
- eslint-utils "^1.3.1"
- eslint-visitor-keys "^1.0.0"
- espree "^6.0.0"
+ eslint-utils "^1.4.2"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.1.1"
esquery "^1.0.1"
esutils "^2.0.2"
file-entry-cache "^5.0.1"
@@ -4011,14 +3935,14 @@ espree@^3.1.6:
acorn "^5.5.0"
acorn-jsx "^3.0.0"
-espree@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6"
- integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==
+espree@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de"
+ integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==
dependencies:
- acorn "^6.0.7"
- acorn-jsx "^5.0.0"
- eslint-visitor-keys "^1.0.0"
+ acorn "^7.0.0"
+ acorn-jsx "^5.0.2"
+ eslint-visitor-keys "^1.1.0"
esprima@^3.1.3:
version "3.1.3"
@@ -5902,25 +5826,6 @@ jest-get-type@^24.9.0:
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
-jest-haste-map@^24.8.0:
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.0.tgz#51794182d877b3ddfd6e6d23920e3fe72f305800"
- integrity sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ==
- dependencies:
- "@jest/types" "^24.8.0"
- anymatch "^2.0.0"
- fb-watchman "^2.0.0"
- graceful-fs "^4.1.15"
- invariant "^2.2.4"
- jest-serializer "^24.4.0"
- jest-util "^24.8.0"
- jest-worker "^24.6.0"
- micromatch "^3.1.10"
- sane "^4.0.3"
- walker "^1.0.7"
- optionalDependencies:
- fsevents "^1.2.7"
-
jest-haste-map@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d"
@@ -5980,20 +5885,6 @@ jest-matcher-utils@^24.9.0:
jest-get-type "^24.9.0"
pretty-format "^24.9.0"
-jest-message-util@^24.8.0:
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b"
- integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==
- dependencies:
- "@babel/code-frame" "^7.0.0"
- "@jest/test-result" "^24.8.0"
- "@jest/types" "^24.8.0"
- "@types/stack-utils" "^1.0.1"
- chalk "^2.0.1"
- micromatch "^3.1.10"
- slash "^2.0.0"
- stack-utils "^1.0.1"
-
jest-message-util@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3"
@@ -6008,13 +5899,6 @@ jest-message-util@^24.9.0:
slash "^2.0.0"
stack-utils "^1.0.1"
-jest-mock@^24.8.0:
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56"
- integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==
- dependencies:
- "@jest/types" "^24.8.0"
-
jest-mock@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6"
@@ -6111,11 +5995,6 @@ jest-runtime@^24.9.0:
strip-bom "^3.0.0"
yargs "^13.3.0"
-jest-serializer@^24.4.0:
- version "24.4.0"
- resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3"
- integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==
-
jest-serializer@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73"
@@ -6140,24 +6019,6 @@ jest-snapshot@^24.9.0:
pretty-format "^24.9.0"
semver "^6.2.0"
-jest-util@^24.8.0:
- version "24.8.0"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1"
- integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==
- dependencies:
- "@jest/console" "^24.7.1"
- "@jest/fake-timers" "^24.8.0"
- "@jest/source-map" "^24.3.0"
- "@jest/test-result" "^24.8.0"
- "@jest/types" "^24.8.0"
- callsites "^3.0.0"
- chalk "^2.0.1"
- graceful-fs "^4.1.15"
- is-ci "^2.0.0"
- mkdirp "^0.5.1"
- slash "^2.0.0"
- source-map "^0.6.0"
-
jest-util@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162"
@@ -6830,10 +6691,10 @@ mimic-fn@^1.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-mini-css-extract-plugin@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0"
- integrity sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ==
+mini-css-extract-plugin@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1"
+ integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==
dependencies:
loader-utils "^1.1.0"
normalize-url "1.9.1"
@@ -9368,10 +9229,10 @@ sass-loader@^7.0.3:
pify "^3.0.0"
semver "^5.5.0"
-sass@^1.22.9:
- version "1.22.9"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.22.9.tgz#41a2ed6038027f58be2bd5041293452a29c2cb84"
- integrity sha512-FzU1X2V8DlnqabrL4u7OBwD2vcOzNMongEJEx3xMEhWY/v26FFR3aG0hyeu2T965sfR0E9ufJwmG+Qjz78vFPQ==
+sass@^1.22.12:
+ version "1.22.12"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.22.12.tgz#5cbdd38720ffd1857da695331faee9f634bcb5d7"
+ integrity sha512-u5Rxn+dKTPCW5/11kMNxtmqKsxCjcpnqj9CaJoru1NqeJ0DOa9rOM00e0HqmseTAatGkKoLY+jaNecMYevu1gg==
dependencies:
chokidar ">=2.0.0 <4.0.0"