diff --git a/.github/workflows/crowdin-upload.yml b/.github/workflows/crowdin-upload.yml
index 62ad1150b..4f4d917d1 100644
--- a/.github/workflows/crowdin-upload.yml
+++ b/.github/workflows/crowdin-upload.yml
@@ -1,7 +1,6 @@
name: Crowdin / Upload translations
on:
- merge_group:
push:
branches:
- 'main'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5eef082cc..566c47435 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,7 @@
All notable changes to this project will be documented in this file.
-## [4.3.0] - UNRELEASED
+## [4.3.0] - 2024-10-08
The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski.
@@ -11,12 +11,12 @@ The following changelog entries focus on changes visible to users, administrator
- **Add confirmation interstitial instead of silently redirecting logged-out visitors to remote resources** (#27792, #28902, and #30651 by @ClearlyClaire and @Gargron)\
This fixes a longstanding open redirect in Mastodon, at the cost of added friction when local links to remote resources are shared.
- Fix ReDoS vulnerability on some Ruby versions ([GHSA-jpxp-r43f-rhvx](https://github.com/mastodon/mastodon/security/advisories/GHSA-jpxp-r43f-rhvx))
-- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 by @ClearlyClaire)
+- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 and #32241 by @ClearlyClaire)
- Update dependencies
### Added
-- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089 and #32085 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\
+- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089, #32085, #32243, #32179 and #32254 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\
Group notifications of the same type for the same target, so that your notifications no longer get cluttered by boost and favorite notifications as soon as a couple of your posts get traction.\
This is done server-side so that clients can efficiently get relevant groups without having to go through numerous pages of individual notifications.\
As part of this, the visual design of the entire notifications feature has been revamped.\
@@ -28,7 +28,7 @@ The following changelog entries focus on changes visible to users, administrator
- `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts
- `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group
- `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count
-- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723 and #32062 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\
+- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723, #32062 and #32281 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\
The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\
You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\
Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\
@@ -61,7 +61,7 @@ The following changelog entries focus on changes visible to users, administrator
- **Add timeline of public posts about a trending link** (#30381 and #30840 by @Gargron)\
You can now see public posts mentioning currently-trending articles from people who have opted into discovery features.\
This adds a new REST API endpoint: https://docs.joinmastodon.org/methods/timelines/#link
-- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, and #31900 by @Gargron and @oneiros)\
+- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, #31900 and #32188 by @Gargron, @mjankowski and @oneiros)\
This adds a mechanism to [highlight the author of news articles](https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/) shared on Mastodon.\
Articles hosted outside the fediverse can indicate a fediverse author with a meta tag:
```html
@@ -150,10 +150,12 @@ The following changelog entries focus on changes visible to users, administrator
- Add groundwork for annual reports for accounts (#28693 by @Gargron)\
This lays the groundwork for a “year-in-review”/“wrapped” style report for local users, but is currently not in use.
- Add notification email on invalid second authenticator (#28822 by @ClearlyClaire)
+- Add date of account deletion in list of accounts in the admin interface (#25640 by @tribela)
- Add new emojis from `jdecked/twemoji` 15.0 (#28404 by @TheEssem)
- Add configurable error handling in attachment batch deletion (#28184 by @vmstan)\
This makes the S3 batch size configurable through the `S3_BATCH_DELETE_LIMIT` environment variable (defaults to 1000), and adds some retry logic, configurable through the `S3_BATCH_DELETE_RETRY` environment variable (defaults to 3).
- Add VAPID public key to instance serializer (#28006 by @ThisIsMissEm)
+- Add support for serving JRD `/.well-known/host-meta.json` in addition to XRD host-meta (#32206 by @c960657)
- Add `nodeName` and `nodeDescription` to nodeinfo `metadata` (#28079 by @6543)
- Add Thai diacritics and tone marks in `HASHTAG_INVALID_CHARS_RE` (#26576 by @ppnplus)
- Add variable delay before link verification of remote account links (#27774 by @ClearlyClaire)
@@ -168,7 +170,7 @@ The following changelog entries focus on changes visible to users, administrator
### Changed
-- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, and #31525 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\
+- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, #31525, #32153, and #32201 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\
This changes all the interface icons from FontAwesome to Material Symbols for a more modern look, consistent with the official Mastodon Android app.\
In addition, better care is given to pixel alignment, and icon variants are used to better highlight active/inactive state.
- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, #31889 and #32033 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\
@@ -192,9 +194,9 @@ The following changelog entries focus on changes visible to users, administrator
Administrators may need to update their setup accordingly.
- Change how content warnings and filters are displayed in web UI (#31365, and #31761 by @Gargron)
- Change preview card processing to ignore `undefined` as canonical url (#31882 by @oneiros)
-- Change embedded posts to use web UI (#31766 and #32135 by @Gargron)
+- Change embedded posts to use web UI (#31766, #32135 and #32271 by @Gargron)
- Change inner borders in media galleries in web UI (#31852 by @Gargron)
-- Change design of media attachments and profile media tab in web UI (#31807, #32048, and #31967 by @Gargron)
+- Change design of media attachments and profile media tab in web UI (#31807, #32048, #31967, #32217, #32224 and #32257 by @ClearlyClaire and @Gargron)
- Change labels on thread indicators in web UI (#31806 by @Gargron)
- Change label of "Data export" menu item in settings interface (#32099 by @c960657)
- Change responsive break points on navigation panel in web UI (#32034 by @Gargron)
@@ -284,9 +286,10 @@ The following changelog entries focus on changes visible to users, administrator
- Fix error when accepting an appeal for sensitive posts deleted in the meantime (#32037 by @ClearlyClaire)
- Fix error when encountering reblog of deleted post in feed rebuild (#32001 by @ClearlyClaire)
- Fix Safari browser glitch related to horizontal scrolling (#31960 by @Gargron)
+- Fix unresolvable mentions sometimes preventing processing incoming posts (#29215 by @tribela and @ClearlyClaire)
- Fix too many requests caused by relationship look-ups in web UI (#32042 by @Gargron)
- Fix links for reblogs in moderation interface (#31979 by @ClearlyClaire)
-- Fix the appearance of avatars when they do not load (#31966 by @renchap)
+- Fix the appearance of avatars when they do not load (#31966 and #32270 by @Gargron and @renchap)
- Fix spurious error notifications for aborted requests in web UI (#31952 by @c960657)
- Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil)
- Fix security context sometimes not being added in LD-Signed activities (#31871 by @ClearlyClaire)
@@ -309,10 +312,12 @@ The following changelog entries focus on changes visible to users, administrator
- Fix “Redirect URI” field not being marked as required in “New application” form (#30311 by @ThisIsMissEm)
- Fix right-to-left text in preview cards (#30930 by @ClearlyClaire)
- Fix rack attack `match_type` value typo in logging config (#30514 by @mjankowski)
-- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445 and #32091 by @ClearlyClaire, @valtlai and @vmstan)
+- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445, #32091, #32147 and #32137 by @ClearlyClaire, @mjankowski, @valtlai and @vmstan)
+- Fix editing description of media uploads with custom thumbnails (#32221 by @ClearlyClaire)
- Fix race condition in `POST /api/v1/push/subscription` (#30166 by @ClearlyClaire)
- Fix post deletion not being delayed when those are part of an account warning (#30163 by @ClearlyClaire)
- Fix rendering error on `/start` when not logged in (#30023 by @timothyjrogers)
+- Fix unneeded requests to blocked domains when receiving relayed signed activities from them (#31161 by @ClearlyClaire)
- Fix logo pushing header buttons out of view on certain conditions in mobile layout (#29787 by @ClearlyClaire)
- Fix notification-related records not being reattributed when merging accounts (#29694 by @ClearlyClaire)
- Fix results/query in `api/v1/featured_tags/suggestions` (#29597 by @mjankowski)
@@ -322,6 +327,7 @@ The following changelog entries focus on changes visible to users, administrator
- Fix full date display not respecting the locale 12/24h format (#29448 by @renchap)
- Fix filters title and keywords overflow (#29396 by @GeopJr)
- Fix incorrect date format in “Follows and followers” (#29390 by @JasonPunyon)
+- Fix navigation item active highlight for some paths (#32159 by @mjankowski)
- Fix “Edit media” modal sizing and layout when space-constrained (#27095 by @ronilaukkarinen)
- Fix modal container bounds (#29185 by @nico3333fr)
- Fix inefficient HTTP signature parsing using regexps and `StringScanner` (#29133 by @ClearlyClaire)
diff --git a/SECURITY.md b/SECURITY.md
index 156954ce0..43ab4454c 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -13,8 +13,9 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through
## Supported Versions
-| Version | Supported |
-| ------- | --------- |
-| 4.2.x | Yes |
-| 4.1.x | Yes |
-| < 4.1 | No |
+| Version | Supported |
+| ------- | ---------------- |
+| 4.3.x | Yes |
+| 4.2.x | Yes |
+| 4.1.x | Until 2025-04-08 |
+| < 4.1 | No |
diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb
index 84b604b30..28acaeea0 100644
--- a/app/controllers/api/v1/accounts_controller.rb
+++ b/app/controllers/api/v1/accounts_controller.rb
@@ -16,6 +16,7 @@ class Api::V1::AccountsController < Api::BaseController
before_action :check_account_confirmation, except: [:index, :create]
before_action :check_enabled_registrations, only: [:create]
before_action :check_accounts_limit, only: [:index]
+ before_action :check_following_self, only: [:follow]
skip_before_action :require_authenticated_user!, only: :create
@@ -101,6 +102,10 @@ class Api::V1::AccountsController < Api::BaseController
raise(Mastodon::ValidationError) if account_ids.size > DEFAULT_ACCOUNTS_LIMIT
end
+ def check_following_self
+ render json: { error: I18n.t('accounts.self_follow_error') }, status: 403 if current_user.account.id == @account.id
+ end
+
def relationships(**options)
AccountRelationshipsPresenter.new([@account], current_user.account_id, **options)
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 62e3355ae..d493bd43b 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -32,7 +32,7 @@ class ApplicationController < ActionController::Base
rescue_from ActionController::InvalidAuthenticityToken, with: :unprocessable_entity
rescue_from Mastodon::RateLimitExceededError, with: :too_many_requests
- rescue_from HTTP::Error, OpenSSL::SSL::SSLError, with: :internal_server_error
+ rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, with: :internal_server_error)
rescue_from Mastodon::RaceConditionError, Stoplight::Error::RedLight, ActiveRecord::SerializationFailure, with: :service_unavailable
rescue_from Seahorse::Client::NetworkingError do |e|
diff --git a/app/controllers/concerns/api/error_handling.rb b/app/controllers/concerns/api/error_handling.rb
index ad559fe2d..9ce4795b0 100644
--- a/app/controllers/concerns/api/error_handling.rb
+++ b/app/controllers/concerns/api/error_handling.rb
@@ -20,7 +20,7 @@ module Api::ErrorHandling
render json: { error: 'Record not found' }, status: 404
end
- rescue_from HTTP::Error, Mastodon::UnexpectedResponseError do
+ rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::UnexpectedResponseError) do
render json: { error: 'Remote data could not be fetched' }, status: 503
end
diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb
index 68f09ee02..4ae63632c 100644
--- a/app/controllers/concerns/signature_verification.rb
+++ b/app/controllers/concerns/signature_verification.rb
@@ -80,7 +80,7 @@ module SignatureVerification
fail_with! "Verification failed for #{actor.to_log_human_identifier} #{actor.uri} using rsa-sha256 (RSASSA-PKCS1-v1_5 with SHA-256)", signed_string: compare_signed_string, signature: signature_params['signature']
rescue SignatureVerificationError => e
fail_with! e.message
- rescue HTTP::Error, OpenSSL::SSL::SSLError => e
+ rescue *Mastodon::HTTP_CONNECTION_ERRORS => e
fail_with! "Failed to fetch remote data: #{e.message}"
rescue Mastodon::UnexpectedResponseError
fail_with! 'Failed to fetch remote data (got unexpected reply from server)'
diff --git a/app/controllers/media_proxy_controller.rb b/app/controllers/media_proxy_controller.rb
index c4230d62c..f68d85e44 100644
--- a/app/controllers/media_proxy_controller.rb
+++ b/app/controllers/media_proxy_controller.rb
@@ -13,7 +13,7 @@ class MediaProxyController < ApplicationController
rescue_from ActiveRecord::RecordInvalid, with: :not_found
rescue_from Mastodon::UnexpectedResponseError, with: :not_found
rescue_from Mastodon::NotPermittedError, with: :not_found
- rescue_from HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, with: :internal_server_error
+ rescue_from(*Mastodon::HTTP_CONNECTION_ERRORS, with: :internal_server_error)
def show
with_redis_lock("media_download:#{params[:id]}") do
diff --git a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap
index 2f0a2de32..124b50d8c 100644
--- a/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap
+++ b/app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.jsx.snap
@@ -2,7 +2,7 @@
exports[` Autoplay renders a animated avatar 1`] = `
Autoplay renders a animated avatar 1`] = `
>
@@ -21,7 +23,7 @@ exports[` Autoplay renders a animated avatar 1`] = `
exports[` Still renders a still avatar 1`] = `
Still renders a still avatar 1`] = `
>
diff --git a/app/javascript/mastodon/components/avatar.tsx b/app/javascript/mastodon/components/avatar.tsx
index 8b16296c2..f61d9676d 100644
--- a/app/javascript/mastodon/components/avatar.tsx
+++ b/app/javascript/mastodon/components/avatar.tsx
@@ -1,10 +1,11 @@
+import { useState, useCallback } from 'react';
+
import classNames from 'classnames';
+import { useHovering } from 'mastodon/../hooks/useHovering';
+import { autoPlayGif } from 'mastodon/initial_state';
import type { Account } from 'mastodon/models/account';
-import { useHovering } from '../../hooks/useHovering';
-import { autoPlayGif } from '../initial_state';
-
interface Props {
account: Account | undefined; // FIXME: remove `undefined` once we know for sure its always there
size: number;
@@ -25,6 +26,8 @@ export const Avatar: React.FC = ({
counterBorderColor,
}) => {
const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(animate);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(false);
const style = {
...styleFromParent,
@@ -37,16 +40,28 @@ export const Avatar: React.FC = ({
? account?.get('avatar')
: account?.get('avatar_static');
+ const handleLoad = useCallback(() => {
+ setLoading(false);
+ }, [setLoading]);
+
+ const handleError = useCallback(() => {
+ setError(true);
+ }, [setError]);
+
return (
diff --git a/app/javascript/mastodon/features/ui/components/column_link.jsx b/app/javascript/mastodon/features/ui/components/column_link.jsx
index 3386c17f0..f27ed5067 100644
--- a/app/javascript/mastodon/features/ui/components/column_link.jsx
+++ b/app/javascript/mastodon/features/ui/components/column_link.jsx
@@ -15,7 +15,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text
if (href) {
return (
-
+
{active ? activeIconElement : iconElement}
{text}
{badgeElement}
@@ -23,7 +23,7 @@ const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text
);
} else {
return (
-
+
{active ? activeIconElement : iconElement}
{text}
{badgeElement}
diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json
index 797d8cc22..d3a29eae4 100644
--- a/app/javascript/mastodon/locales/be.json
+++ b/app/javascript/mastodon/locales/be.json
@@ -85,6 +85,7 @@
"alert.rate_limited.title": "Ліміт перавышаны",
"alert.unexpected.message": "Узнікла нечаканая памылка.",
"alert.unexpected.title": "Вой!",
+ "alt_text_badge.title": "Альтернативный текст",
"announcement.announcement": "Аб'ява",
"attachments_list.unprocessed": "(неапрацаваны)",
"audio.hide": "Схаваць аўдыя",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index b79ac156e..1b583b320 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Resposta en privat",
"notification.label.reply": "Resposta",
"notification.mention": "Menció",
+ "notification.mentioned_you": "{name} us ha mencionat",
"notification.moderation-warning.learn_more": "Per a saber-ne més",
"notification.moderation_warning": "Heu rebut un avís de moderació",
"notification.moderation_warning.action_delete_statuses": "S'han eliminat algunes de les vostres publicacions.",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 659f807d0..e225bb30a 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Privat svar",
"notification.label.reply": "Besvar",
"notification.mention": "Omtale",
+ "notification.mentioned_you": "{name} nævnte dig",
"notification.moderation-warning.learn_more": "Læs mere",
"notification.moderation_warning": "Du er tildelt en moderationsadvarsel",
"notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 0b541b2e4..b807d93ab 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Private Antwort",
"notification.label.reply": "Antwort",
"notification.mention": "Erwähnung",
+ "notification.mentioned_you": "{name} erwähnte dich",
"notification.moderation-warning.learn_more": "Mehr erfahren",
"notification.moderation_warning": "Du wurdest von den Moderator*innen verwarnt",
"notification.moderation_warning.action_delete_statuses": "Einige deiner Beiträge sind entfernt worden.",
diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index b1d61ddd3..da4c00520 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -852,6 +852,11 @@
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.audio_description": "Describe for people who are deaf or hard of hearing",
"upload_form.description": "Describe for people who are blind or have low vision",
+ "upload_form.drag_and_drop.instructions": "To pick up a media attachment, press space or enter. While dragging, use the arrow keys to move the media attachment in any given direction. Press space or enter again to drop the media attachment in its new position, or press escape to cancel.",
+ "upload_form.drag_and_drop.on_drag_cancel": "Dragging was cancelled. Media attachment {item} was dropped.",
+ "upload_form.drag_and_drop.on_drag_end": "Media attachment {item} was dropped.",
+ "upload_form.drag_and_drop.on_drag_over": "Media attachment {item} was moved.",
+ "upload_form.drag_and_drop.on_drag_start": "Picked up media attachment {item}.",
"upload_form.edit": "Edit",
"upload_form.thumbnail": "Change thumbnail",
"upload_form.video_description": "Describe for people who are deaf, hard of hearing, blind or have low vision",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index ab6048799..565c9e4ab 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Private reply",
"notification.label.reply": "Reply",
"notification.mention": "Mention",
+ "notification.mentioned_you": "{name} mentioned you",
"notification.moderation-warning.learn_more": "Learn more",
"notification.moderation_warning": "You have received a moderation warning",
"notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 35c2a5c74..5f6582fb6 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Privata respondo",
"notification.label.reply": "Respondi",
"notification.mention": "Mencii",
+ "notification.mentioned_you": "{name} menciis vin",
"notification.moderation-warning.learn_more": "Lerni pli",
"notification.moderation_warning": "Vi ricevis moderigan averton",
"notification.moderation_warning.action_delete_statuses": "Kelkaj el viaj afiŝoj estis forigitaj.",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index 609175d94..7fec88a96 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Respuesta privada",
"notification.label.reply": "Respuesta",
"notification.mention": "Mención",
+ "notification.mentioned_you": "{name} te mencionó",
"notification.moderation-warning.learn_more": "Aprendé más",
"notification.moderation_warning": "Recibiste una advertencia de moderación",
"notification.moderation_warning.action_delete_statuses": "Se eliminaron algunos de tus mensajes.",
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
index 7c2e40033..ddfdf6960 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Respuesta privada",
"notification.label.reply": "Respuesta",
"notification.mention": "Mención",
+ "notification.mentioned_you": "{name} te ha mencionado",
"notification.moderation-warning.learn_more": "Saber más",
"notification.moderation_warning": "Has recibido una advertencia de moderación",
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
@@ -852,11 +853,11 @@
"upload_error.poll": "Subida de archivos no permitida con encuestas.",
"upload_form.audio_description": "Describir para personas con problemas auditivos",
"upload_form.description": "Describir para los usuarios con dificultad visual",
- "upload_form.drag_and_drop.instructions": "Para recoger un archivo multimedia, pulsa la barra espaciadora o la tecla Enter. Mientras arrastras, utiliza las teclas de flecha para mover el archivo multimedia en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Enter para soltar el archivo multimedia en su nueva posición, o pulsa Escape para cancelar.",
- "upload_form.drag_and_drop.on_drag_cancel": "Se canceló el arrastre. Se eliminó el archivo adjunto {item}.",
- "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} ha sido eliminado.",
- "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} se ha movido.",
- "upload_form.drag_and_drop.on_drag_start": "Se ha recogido el archivo adjunto {item}.",
+ "upload_form.drag_and_drop.instructions": "Para recoger un archivo adjunto, pulsa la barra espaciadora o la tecla Intro. Mientras arrastras, usa las teclas de flecha para mover el archivo adjunto en cualquier dirección. Vuelve a pulsar la barra espaciadora o la tecla Intro para soltar el archivo adjunto en su nueva posición, o pulsa la tecla Escape para cancelar.",
+ "upload_form.drag_and_drop.on_drag_cancel": "Arrastre cancelado. El archivo adjunto {item} fue eliminado.",
+ "upload_form.drag_and_drop.on_drag_end": "El archivo adjunto {item} fue eliminado.",
+ "upload_form.drag_and_drop.on_drag_over": "El archivo adjunto {item} fue movido.",
+ "upload_form.drag_and_drop.on_drag_start": "Recogidos los archivos adjuntos {item}.",
"upload_form.edit": "Editar",
"upload_form.thumbnail": "Cambiar miniatura",
"upload_form.video_description": "Describir para personas con problemas auditivos o visuales",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index b84148933..2aeb7d47e 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Respuesta privada",
"notification.label.reply": "Respuesta",
"notification.mention": "Mención",
+ "notification.mentioned_you": "{name} te ha mencionado",
"notification.moderation-warning.learn_more": "Saber más",
"notification.moderation_warning": "Has recibido una advertencia de moderación",
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 2e4cd661d..ac7ab097f 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Yksityinen vastaus",
"notification.label.reply": "Vastaus",
"notification.mention": "Maininta",
+ "notification.mentioned_you": "{name} mainitsi sinut",
"notification.moderation-warning.learn_more": "Lue lisää",
"notification.moderation_warning": "Olet saanut moderointivaroituksen",
"notification.moderation_warning.action_delete_statuses": "Julkaisujasi on poistettu.",
diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json
index c7e752d37..5ad8ba557 100644
--- a/app/javascript/mastodon/locales/fo.json
+++ b/app/javascript/mastodon/locales/fo.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Privat svar",
"notification.label.reply": "Svara",
"notification.mention": "Umrøð",
+ "notification.mentioned_you": "{name} nevndi teg",
"notification.moderation-warning.learn_more": "Lær meira",
"notification.moderation_warning": "Tú hevur móttikið eina umsjónarávaring",
"notification.moderation_warning.action_delete_statuses": "Onkrir av tínum postum eru strikaðir.",
diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json
index 1d71ef36c..9fa2300fb 100644
--- a/app/javascript/mastodon/locales/fy.json
+++ b/app/javascript/mastodon/locales/fy.json
@@ -85,6 +85,7 @@
"alert.rate_limited.title": "Dataferkear beheind",
"alert.unexpected.message": "Der is in ûnferwachte flater bard.",
"alert.unexpected.title": "Oepsy!",
+ "alt_text_badge.title": "Alternative tekst",
"announcement.announcement": "Oankundiging",
"attachments_list.unprocessed": "(net ferwurke)",
"audio.hide": "Audio ferstopje",
@@ -221,6 +222,8 @@
"domain_block_modal.they_cant_follow": "Net ien op dizze server kin jo folgje.",
"domain_block_modal.they_wont_know": "Se krije net te witten dat se blokkearre wurde.",
"domain_block_modal.title": "Domein blokkearje?",
+ "domain_block_modal.you_will_lose_num_followers": "Jo ferlieze {followersCount, plural, one {{followersCountDisplay} folger} other {{followersCountDisplay} folgers}} en {followingCount, plural, one {{followingCountDisplay} persoan dy’t jo folgje} other {{followingCountDisplay} persoanen dy’t jo folgje}}.",
+ "domain_block_modal.you_will_lose_relationships": "Jo ferlieze alle folgers en minsken dy’t jo folgje fan dizze server.",
"domain_block_modal.you_wont_see_posts": "Jo sjogge gjin berjochten of meldingen mear fan brûkers op dizze server.",
"domain_pill.activitypub_lets_connect": "It soarget derfoar dat jo net allinnich mar ferbine en kommunisearje kinne mei minsken op Mastodon, mar ek mei oare sosjale apps.",
"domain_pill.activitypub_like_language": "ActivityPub is de taal dy’t Mastodon mei oare sosjale netwurken sprekt.",
@@ -433,6 +436,8 @@
"lightbox.close": "Slute",
"lightbox.next": "Folgjende",
"lightbox.previous": "Foarige",
+ "lightbox.zoom_in": "Oarspronklike grutte toane",
+ "lightbox.zoom_out": "Passend toane",
"limited_account_hint.action": "Profyl dochs besjen",
"limited_account_hint.title": "Dit profyl is troch de behearders fan {domain} ferstoppe.",
"link_preview.author": "Troch {name}",
@@ -454,6 +459,7 @@
"lists.subheading": "Jo listen",
"load_pending": "{count, plural, one {# nij item} other {# nije items}}",
"loading_indicator.label": "Lade…",
+ "media_gallery.hide": "Ferstopje",
"moved_to_account_banner.text": "Omdat jo nei {movedToAccount} ferhuze binne is jo account {disabledAccount} op dit stuit útskeakele.",
"mute_modal.hide_from_notifications": "Meldingen ferstopje",
"mute_modal.hide_options": "Opsjes ferstopje",
@@ -510,6 +516,7 @@
"notification.label.private_reply": "Priveereaksje",
"notification.label.reply": "Beäntwurdzje",
"notification.mention": "Fermelding",
+ "notification.mentioned_you": "{name} hat dy fermeld",
"notification.moderation-warning.learn_more": "Mear ynfo",
"notification.moderation_warning": "Jo hawwe in moderaasje-warskôging ûntfongen",
"notification.moderation_warning.action_delete_statuses": "Guon fan jo berjochten binne fuortsmiten.",
@@ -774,6 +781,7 @@
"status.bookmark": "Blêdwizer tafoegje",
"status.cancel_reblog_private": "Net langer booste",
"status.cannot_reblog": "Dit berjocht kin net boost wurde",
+ "status.continued_thread": "Ferfolgje it petear",
"status.copy": "Copy link to status",
"status.delete": "Fuortsmite",
"status.detailed_status": "Detaillearre petearoersjoch",
@@ -782,6 +790,7 @@
"status.edit": "Bewurkje",
"status.edited": "Lêst bywurke op {date}",
"status.edited_x_times": "{count, plural, one {{count} kear} other {{count} kearen}} bewurke",
+ "status.embed": "Koade om op te nimmen",
"status.favourite": "Favoryt",
"status.favourites": "{count, plural, one {favoryt} other {favoriten}}",
"status.filter": "Dit berjocht filterje",
@@ -806,6 +815,7 @@
"status.reblogs.empty": "Net ien hat dit berjocht noch boost. Wannear’t ien dit docht, falt dat hjir te sjen.",
"status.redraft": "Fuortsmite en opnij opstelle",
"status.remove_bookmark": "Blêdwizer fuortsmite",
+ "status.replied_in_thread": "Antwurde yn petear",
"status.replied_to": "Antwurde op {name}",
"status.reply": "Beäntwurdzje",
"status.replyAll": "Alle beäntwurdzje",
@@ -843,6 +853,11 @@
"upload_error.poll": "It opladen fan bestannen is yn enkêten net tastien.",
"upload_form.audio_description": "Describe for people with hearing loss",
"upload_form.description": "Describe for the visually impaired",
+ "upload_form.drag_and_drop.instructions": "Druk op spaasje of Enter om in mediabylage op te pakken. Bruk de pylktoetsen om de bylage yn in bepaalde rjochting te ferpleatsen. Druk opnij op de spaasjebalke of Enter om de mediabylage op de nije posysje te pleatsen, of druk op Esc om te annulearjen.",
+ "upload_form.drag_and_drop.on_drag_cancel": "Slepen is annulearre. Mediabylage {item} is net ferpleatst.",
+ "upload_form.drag_and_drop.on_drag_end": "Mediabylage {item} is net ferpleatst.",
+ "upload_form.drag_and_drop.on_drag_over": "Mediabylage {item} is ferpleatst.",
+ "upload_form.drag_and_drop.on_drag_start": "Mediabylage {item} is oppakt.",
"upload_form.edit": "Bewurkje",
"upload_form.thumbnail": "Miniatuerôfbylding wizigje",
"upload_form.video_description": "Describe for people with hearing loss or visual impairment",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 2a31bfa46..27b4ad246 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Resposta privada",
"notification.label.reply": "Resposta",
"notification.mention": "Mención",
+ "notification.mentioned_you": "{name} mencionoute",
"notification.moderation-warning.learn_more": "Saber máis",
"notification.moderation_warning": "Recibiches unha advertencia da moderación",
"notification.moderation_warning.action_delete_statuses": "Algunha das túas publicacións foron eliminadas.",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 16f558e54..d9b0382f4 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -1,5 +1,5 @@
{
- "about.blocks": "שרתים שנחסמו על ידי המנהלים",
+ "about.blocks": "שרתים מוגבלים",
"about.contact": "יצירת קשר:",
"about.disclaimer": "מסטודון היא תוכנת קוד פתוח חינמית וסימן מסחרי של Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "הסיבה אינה זמינה",
@@ -34,9 +34,9 @@
"account.follow_back": "לעקוב בחזרה",
"account.followers": "עוקבים",
"account.followers.empty": "אף אחד לא עוקב אחר המשתמש הזה עדיין.",
- "account.followers_counter": "{count, plural,one {עוקב אחד} other {{count} עוקבים}}",
+ "account.followers_counter": "{count, plural,one {עוקב אחד} other {{counter} עוקבים}}",
"account.following": "נעקבים",
- "account.following_counter": "{count, plural,one {עוקב אחרי {count}}other {עוקב אחרי {count}}}",
+ "account.following_counter": "{count, plural,one {עוקב אחרי {count}}other {עוקב אחרי {counter}}}",
"account.follows.empty": "משתמש זה עדיין לא עוקב אחרי אף אחד.",
"account.go_to_profile": "מעבר לפרופיל",
"account.hide_reblogs": "להסתיר הידהודים מאת @{name}",
@@ -62,7 +62,7 @@
"account.requested_follow": "{name} ביקשו לעקוב אחריך",
"account.share": "שתף את הפרופיל של @{name}",
"account.show_reblogs": "הצג הדהודים מאת @{name}",
- "account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}",
+ "account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}",
"account.unblock": "להסיר חסימה ל- @{name}",
"account.unblock_domain": "הסירי את החסימה של קהילת {domain}",
"account.unblock_short": "הסר חסימה",
@@ -349,9 +349,9 @@
"hashtag.column_settings.tag_mode.any": "לפחות אחד מאלה",
"hashtag.column_settings.tag_mode.none": "אף אחד מאלה",
"hashtag.column_settings.tag_toggle": "כלול תגיות נוספות בטור זה",
- "hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{count} משתתפיםות}}",
- "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}",
- "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}} היום",
+ "hashtag.counter_by_accounts": "{count, plural,one{{count} משתתף.ת}other{{counter} משתתפיםות}}",
+ "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}",
+ "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}} היום",
"hashtag.follow": "לעקוב אחרי תגית",
"hashtag.unfollow": "להפסיק לעקוב אחרי תגית",
"hashtags.and_other": "…{count, plural,other {ועוד #}}",
@@ -442,7 +442,7 @@
"limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי המנחים של {domain}.",
"link_preview.author": "מאת {name}",
"link_preview.more_from_author": "עוד מאת {name}",
- "link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{count} הודעות} other {{count} הודעות}}",
+ "link_preview.shares": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}",
"lists.account.add": "הוסף לרשימה",
"lists.account.remove": "הסר מרשימה",
"lists.delete": "מחיקת רשימה",
@@ -516,6 +516,7 @@
"notification.label.private_reply": "תשובה בפרטי",
"notification.label.reply": "תשובה",
"notification.mention": "אזכור",
+ "notification.mentioned_you": "אוזכרת על ידי {name}",
"notification.moderation-warning.learn_more": "למידע נוסף",
"notification.moderation_warning": "קיבלת אזהרה מצוות ניהול התוכן",
"notification.moderation_warning.action_delete_statuses": "חלק מהודעותיך הוסרו.",
@@ -840,7 +841,7 @@
"time_remaining.minutes": "נותרו {number, plural, one {# דקה} other {# דקות}}",
"time_remaining.moments": "רגעים נותרו",
"time_remaining.seconds": "נותרו {number, plural, one {# שניה} other {# שניות}}",
- "trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{count} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}",
+ "trends.counter_by_accounts": "{count, plural, one {אדם אחד} other {{counter} א.נשים}} {days, plural, one {מאז אתמול} two {ביומיים האחרונים} other {במשך {days} הימים האחרונים}}",
"trends.trending_now": "נושאים חמים",
"ui.beforeunload": "הטיוטא תאבד אם תעזבו את מסטודון.",
"units.short.billion": "{count} מליארד",
diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json
index f9f403177..0fee79f8b 100644
--- a/app/javascript/mastodon/locales/hu.json
+++ b/app/javascript/mastodon/locales/hu.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Privát válasz",
"notification.label.reply": "Válasz",
"notification.mention": "Említés",
+ "notification.mentioned_you": "{name} megemlített",
"notification.moderation-warning.learn_more": "További információ",
"notification.moderation_warning": "Moderációs figyelmeztetést kaptál",
"notification.moderation_warning.action_delete_statuses": "Néhány bejegyzésedet eltávolították.",
diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json
index c78c5d784..bbd3a7a35 100644
--- a/app/javascript/mastodon/locales/is.json
+++ b/app/javascript/mastodon/locales/is.json
@@ -85,6 +85,7 @@
"alert.rate_limited.title": "Með takmörkum",
"alert.unexpected.message": "Upp kom óvænt villa.",
"alert.unexpected.title": "Úbbs!",
+ "alt_text_badge.title": "Hjálpartexti mynda",
"announcement.announcement": "Auglýsing",
"attachments_list.unprocessed": "(óunnið)",
"audio.hide": "Fela hljóð",
@@ -433,6 +434,8 @@
"lightbox.close": "Loka",
"lightbox.next": "Næsta",
"lightbox.previous": "Fyrra",
+ "lightbox.zoom_in": "Renna að raunstærð",
+ "lightbox.zoom_out": "Renna að svo passi",
"limited_account_hint.action": "Birta notandasniðið samt",
"limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.",
"link_preview.author": "Frá {name}",
@@ -511,6 +514,7 @@
"notification.label.private_reply": "Einkasvar",
"notification.label.reply": "Svara",
"notification.mention": "Minnst á",
+ "notification.mentioned_you": "{name} minntist á þig",
"notification.moderation-warning.learn_more": "Kanna nánar",
"notification.moderation_warning": "Þú hefur fengið aðvörun frá umsjónarmanni",
"notification.moderation_warning.action_delete_statuses": "Sumar færslurnar þínar hafa verið fjarlægðar.",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index ef709516c..885be73c6 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Rispondi in privato",
"notification.label.reply": "Rispondi",
"notification.mention": "Menziona",
+ "notification.mentioned_you": "{name} ti ha menzionato",
"notification.moderation-warning.learn_more": "Scopri di più",
"notification.moderation_warning": "Hai ricevuto un avviso di moderazione",
"notification.moderation_warning.action_delete_statuses": "Alcuni dei tuoi post sono stati rimossi.",
@@ -852,6 +853,11 @@
"upload_error.poll": "Caricamento del file non consentito con i sondaggi.",
"upload_form.audio_description": "Descrizione per persone con deficit uditivi",
"upload_form.description": "Descrizione per ipovedenti",
+ "upload_form.drag_and_drop.instructions": "Per selezionare un allegato multimediale, premi Spazio o Invio. Mentre trascini, usa i tasti con le frecce per spostare l'allegato multimediale in una qualsiasi direzione. Premi di nuovo Spazio o Invio per rilasciare l'allegato multimediale nella sua nuova posizione, oppure premi Esc per annullare.",
+ "upload_form.drag_and_drop.on_drag_cancel": "Il trascinamento è stato annullato. L'allegato multimediale {item} è stato eliminato.",
+ "upload_form.drag_and_drop.on_drag_end": "L'allegato multimediale {item} è stato eliminato.",
+ "upload_form.drag_and_drop.on_drag_over": "L'allegato multimediale {item} è stato spostato.",
+ "upload_form.drag_and_drop.on_drag_start": "L'allegato multimediale {item} è stato ricevuto.",
"upload_form.edit": "Modifica",
"upload_form.thumbnail": "Cambia la miniatura",
"upload_form.video_description": "Descrizione per persone con deficit uditivi o ipovedenti",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 46444863a..1810314c8 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -514,6 +514,7 @@
"notification.label.private_reply": "非公開の返信",
"notification.label.reply": "返信",
"notification.mention": "メンション",
+ "notification.mentioned_you": "{name} さんがあなたに返信しました",
"notification.moderation-warning.learn_more": "さらに詳しく",
"notification.moderation_warning": "管理者から警告が来ています",
"notification.moderation_warning.action_delete_statuses": "あなたによるいくつかの投稿が削除されました。",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 25cf25329..0bbe42878 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "개인 답글",
"notification.label.reply": "답글",
"notification.mention": "멘션",
+ "notification.mentioned_you": "{name} 님의 멘션",
"notification.moderation-warning.learn_more": "더 알아보기",
"notification.moderation_warning": "중재 경고를 받았습니다",
"notification.moderation_warning.action_delete_statuses": "게시물 몇 개가 삭제되었습니다.",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index 71523b37d..c0ca8f176 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -516,10 +516,11 @@
"notification.label.private_reply": "Privéreactie",
"notification.label.reply": "Reactie",
"notification.mention": "Vermelding",
+ "notification.mentioned_you": "Je bent vermeld door {name}",
"notification.moderation-warning.learn_more": "Meer informatie",
"notification.moderation_warning": "Je hebt een moderatie-waarschuwing ontvangen",
"notification.moderation_warning.action_delete_statuses": "Sommige van je berichten zijn verwijderd.",
- "notification.moderation_warning.action_disable": "Je account is uitgeschakeld.",
+ "notification.moderation_warning.action_disable": "Jouw account is uitgeschakeld.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Sommige van je berichten zijn gemarkeerd als gevoelig.",
"notification.moderation_warning.action_none": "Jouw account heeft een moderatie-waarschuwing ontvangen.",
"notification.moderation_warning.action_sensitive": "Je berichten worden vanaf nu als gevoelig gemarkeerd.",
@@ -531,11 +532,11 @@
"notification.reblog.name_and_others_with_link": "{name} en {count, plural, one {# ander persoon} other {# andere personen}} hebben jouw bericht geboost",
"notification.relationships_severance_event": "Verloren verbindingen met {name}",
"notification.relationships_severance_event.account_suspension": "Een beheerder van {from} heeft {target} geschorst, wat betekent dat je geen updates meer van hen kunt ontvangen of met hen kunt communiceren.",
- "notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt.",
+ "notification.relationships_severance_event.domain_block": "Een beheerder van {from} heeft {target} geblokkeerd, inclusief {followersCount} van jouw volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt.",
"notification.relationships_severance_event.learn_more": "Meer informatie",
- "notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die jij volgt, bent verloren.",
+ "notification.relationships_severance_event.user_domain_block": "Je hebt {target} geblokkeerd, waarmee je {followersCount} van je volgers en {followingCount, plural, one {# account} other {# accounts}} die je volgt, bent verloren.",
"notification.status": "{name} heeft zojuist een bericht geplaatst",
- "notification.update": "{name} heeft een bericht bewerkt",
+ "notification.update": "{name} bewerkte een bericht",
"notification_requests.accept": "Accepteren",
"notification_requests.accept_multiple": "{count, plural, one {# verzoek accepteren…} other {# verzoeken accepteren…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Verzoek accepteren} other {Verzoeken accepteren}}",
diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json
index 69883a549..58ed018ba 100644
--- a/app/javascript/mastodon/locales/nn.json
+++ b/app/javascript/mastodon/locales/nn.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Privat svar",
"notification.label.reply": "Svar",
"notification.mention": "Omtale",
+ "notification.mentioned_you": "{name} nemnde deg",
"notification.moderation-warning.learn_more": "Lær meir",
"notification.moderation_warning": "Du har mottatt ei moderasjonsåtvaring",
"notification.moderation_warning.action_delete_statuses": "Nokre av innlegga dine har blitt fjerna.",
diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json
index 4dc74db8c..c6555ebb7 100644
--- a/app/javascript/mastodon/locales/pl.json
+++ b/app/javascript/mastodon/locales/pl.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Odpowiedź prywatna",
"notification.label.reply": "Odpowiedź",
"notification.mention": "Wzmianka",
+ "notification.mentioned_you": "{name} wspomniał(a) o Tobie",
"notification.moderation-warning.learn_more": "Dowiedz się więcej",
"notification.moderation_warning": "Otrzymałeś/-łaś ostrzeżenie moderacyjne",
"notification.moderation_warning.action_delete_statuses": "Niektóre twoje wpisy zostały usunięte.",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index ab5701cde..b6d2fe112 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Resposta privada",
"notification.label.reply": "Resposta",
"notification.mention": "Menção",
+ "notification.mentioned_you": "{name} te mencionou",
"notification.moderation-warning.learn_more": "Aprender mais",
"notification.moderation_warning": "Você recebeu um aviso de moderação",
"notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index 15101be47..182f01887 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Përgjigje private",
"notification.label.reply": "Përgjigje",
"notification.mention": "Përmendje",
+ "notification.mentioned_you": "{name} ju ka përmendur",
"notification.moderation-warning.learn_more": "Mësoni më tepër",
"notification.moderation_warning": "Ju është dhënë një sinjalizim moderimi",
"notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index b1e5a95ed..298852100 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -506,6 +506,7 @@
"notification.label.private_reply": "Privata svar",
"notification.label.reply": "Svar",
"notification.mention": "Nämn",
+ "notification.mentioned_you": "{name} nämnde dig",
"notification.moderation-warning.learn_more": "Läs mer",
"notification.moderation_warning": "Du har fått en moderationsvarning",
"notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.",
diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json
index 160b6ec4e..88c48bfb4 100644
--- a/app/javascript/mastodon/locales/th.json
+++ b/app/javascript/mastodon/locales/th.json
@@ -512,6 +512,7 @@
"notification.label.private_reply": "การตอบกลับแบบส่วนตัว",
"notification.label.reply": "การตอบกลับ",
"notification.mention": "การกล่าวถึง",
+ "notification.mentioned_you": "{name} ได้กล่าวถึงคุณ",
"notification.moderation-warning.learn_more": "เรียนรู้เพิ่มเติม",
"notification.moderation_warning": "คุณได้รับคำเตือนการกลั่นกรอง",
"notification.moderation_warning.action_delete_statuses": "เอาโพสต์บางส่วนของคุณออกแล้ว",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 36c0b68f0..937b3e8e1 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Özel yanıt",
"notification.label.reply": "Yanıt",
"notification.mention": "Bahsetme",
+ "notification.mentioned_you": "{name} sizden söz etti",
"notification.moderation-warning.learn_more": "Daha fazlası",
"notification.moderation_warning": "Hesabınız bir denetim uyarısı aldı",
"notification.moderation_warning.action_delete_statuses": "Bazı gönderileriniz kaldırıldı.",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index a48b071f5..5a9d388f0 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Приватна відповідь",
"notification.label.reply": "Відповідь",
"notification.mention": "Згадка",
+ "notification.mentioned_you": "{name} згадує вас",
"notification.moderation-warning.learn_more": "Докладніше",
"notification.moderation_warning": "Ви отримали попередження модерації",
"notification.moderation_warning.action_delete_statuses": "Деякі з ваших дописів було вилучено.",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 770dcbaef..cf33a15d3 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "Trả lời riêng",
"notification.label.reply": "Trả lời",
"notification.mention": "Lượt nhắc",
+ "notification.mentioned_you": "{name} nhắc đến bạn",
"notification.moderation-warning.learn_more": "Tìm hiểu",
"notification.moderation_warning": "Bạn vừa nhận một cảnh báo kiểm duyệt",
"notification.moderation_warning.action_delete_statuses": "Một vài tút của bạn bị gỡ.",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 0a4505d4e..74702e512 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "私人回复",
"notification.label.reply": "回复",
"notification.mention": "提及",
+ "notification.mentioned_you": "{name} 提到了你",
"notification.moderation-warning.learn_more": "了解更多",
"notification.moderation_warning": "你收到了一条管理警告",
"notification.moderation_warning.action_delete_statuses": "你的一些嘟文已被移除。",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index 2047a69f4..e93f7d518 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -516,6 +516,7 @@
"notification.label.private_reply": "私訊回嘟",
"notification.label.reply": "回嘟",
"notification.mention": "提及",
+ "notification.mentioned_you": "{name} 已提及您",
"notification.moderation-warning.learn_more": "了解更多",
"notification.moderation_warning": "您已收到管理員警告",
"notification.moderation_warning.action_delete_statuses": "某些您的嘟文已被刪除。",
diff --git a/app/javascript/mastodon/service_worker/web_push_locales.js b/app/javascript/mastodon/service_worker/web_push_locales.js
index 89ae20007..3e39c9a4e 100644
--- a/app/javascript/mastodon/service_worker/web_push_locales.js
+++ b/app/javascript/mastodon/service_worker/web_push_locales.js
@@ -6,6 +6,12 @@
const fs = require('fs');
const path = require('path');
+const { defineMessages } = require('react-intl');
+
+const messages = defineMessages({
+ mentioned_you: { id: 'notification.mentioned_you', defaultMessage: '{name} mentioned you' },
+});
+
const filtered = {};
const filenames = fs.readdirSync(path.resolve(__dirname, '../locales'));
@@ -20,7 +26,7 @@ filenames.forEach(filename => {
'notification.favourite': full['notification.favourite'] || '',
'notification.follow': full['notification.follow'] || '',
'notification.follow_request': full['notification.follow_request'] || '',
- 'notification.mention': full['notification.mention'] || '',
+ 'notification.mention': full[messages.mentioned_you.id] || '',
'notification.reblog': full['notification.reblog'] || '',
'notification.poll': full['notification.poll'] || '',
'notification.status': full['notification.status'] || '',
diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss
index 0712a0d3f..c7b32a9c9 100644
--- a/app/javascript/styles/mastodon/admin.scss
+++ b/app/javascript/styles/mastodon/admin.scss
@@ -1029,6 +1029,12 @@ a.name-tag,
color: var(--user-role-accent);
}
+.applications-list {
+ .icon {
+ vertical-align: middle;
+ }
+}
+
.announcements-list,
.filters-list {
border: 1px solid var(--background-border-color);
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 5f410ead9..4ed05ead3 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -2077,7 +2077,6 @@ body > [data-popper-placement] {
display: block;
position: relative;
border-radius: var(--avatar-border-radius);
- background-color: var(--surface-background-color);
img {
width: 100%;
@@ -2087,7 +2086,11 @@ body > [data-popper-placement] {
display: inline-block; // to not show broken images
}
- &-inline {
+ &--loading {
+ background-color: var(--surface-background-color);
+ }
+
+ &--inline {
display: inline-block;
vertical-align: middle;
margin-inline-end: 5px;
@@ -10628,6 +10631,7 @@ noscript {
gap: 8px;
.logo {
+ width: 16px;
height: 16px;
color: $darker-text-color;
}
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 928803cd6..d04f7226a 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -199,7 +199,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
return if account.nil?
@mentions << Mention.new(account: account, silent: false)
- rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError
+ rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
@unresolved_mentions << tag['href']
end
@@ -250,7 +250,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
media_attachment.download_file!
media_attachment.download_thumbnail!
media_attachment.save
- rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError
+ rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id)
rescue Seahorse::Client::NetworkingError => e
Rails.logger.warn "Error storing media attachment: #{e}"
diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb
index 4c374f5d5..a20992dcb 100644
--- a/app/mailers/notification_mailer.rb
+++ b/app/mailers/notification_mailer.rb
@@ -86,7 +86,7 @@ class NotificationMailer < ApplicationMailer
end
def thread_by_conversation!
- return if @status.conversation.nil?
+ return if @status&.conversation.nil?
conversation_message_id = ""
diff --git a/app/models/account.rb b/app/models/account.rb
index e4ec955ad..007a2b480 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -89,6 +89,7 @@ class Account < ApplicationRecord
include Account::Merging
include Account::Search
include Account::StatusesSearch
+ include Account::Suspensions
include Account::AttributionDomains
include DomainMaterializable
include DomainNormalizable
@@ -127,9 +128,7 @@ class Account < ApplicationRecord
scope :local, -> { where(domain: nil) }
scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) }
scope :silenced, -> { where.not(silenced_at: nil) }
- scope :suspended, -> { where.not(suspended_at: nil) }
scope :sensitized, -> { where.not(sensitized_at: nil) }
- scope :without_suspended, -> { where(suspended_at: nil) }
scope :without_silenced, -> { where(silenced_at: nil) }
scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) }
scope :recent, -> { reorder(id: :desc) }
@@ -255,41 +254,6 @@ class Account < ApplicationRecord
update!(silenced_at: nil)
end
- def suspended?
- suspended_at.present? && !instance_actor?
- end
-
- def suspended_locally?
- suspended? && suspension_origin_local?
- end
-
- def suspended_permanently?
- suspended? && deletion_request.nil?
- end
-
- def suspended_temporarily?
- suspended? && deletion_request.present?
- end
-
- alias unavailable? suspended?
- alias permanently_unavailable? suspended_permanently?
-
- def suspend!(date: Time.now.utc, origin: :local, block_email: true)
- transaction do
- create_deletion_request!
- update!(suspended_at: date, suspension_origin: origin)
- create_canonical_email_block! if block_email
- end
- end
-
- def unsuspend!
- transaction do
- deletion_request&.destroy!
- update!(suspended_at: nil, suspension_origin: nil)
- destroy_canonical_email_block!
- end
- end
-
def sensitized?
sensitized_at.present?
end
diff --git a/app/models/account_alias.rb b/app/models/account_alias.rb
index 3b75919af..41623dded 100644
--- a/app/models/account_alias.rb
+++ b/app/models/account_alias.rb
@@ -35,7 +35,7 @@ class AccountAlias < ApplicationRecord
def set_uri
target_account = ResolveAccountService.new.call(acct)
self.uri = ActivityPub::TagManager.instance.uri_for(target_account) unless target_account.nil?
- rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error
+ rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::Error
# Validation will take care of it
end
diff --git a/app/models/account_migration.rb b/app/models/account_migration.rb
index 7a01e250e..7bda388f2 100644
--- a/app/models/account_migration.rb
+++ b/app/models/account_migration.rb
@@ -61,7 +61,7 @@ class AccountMigration < ApplicationRecord
def set_target_account
self.target_account = ResolveAccountService.new.call(acct, skip_cache: true)
- rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error, Addressable::URI::InvalidURIError
+ rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::Error, Addressable::URI::InvalidURIError
# Validation will take care of it
end
diff --git a/app/models/concerns/account/suspensions.rb b/app/models/concerns/account/suspensions.rb
new file mode 100644
index 000000000..c981fb5a2
--- /dev/null
+++ b/app/models/concerns/account/suspensions.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+module Account::Suspensions
+ extend ActiveSupport::Concern
+
+ included do
+ scope :suspended, -> { where.not(suspended_at: nil) }
+ scope :without_suspended, -> { where(suspended_at: nil) }
+ end
+
+ def suspended?
+ suspended_at.present? && !instance_actor?
+ end
+ alias unavailable? suspended?
+
+ def suspended_locally?
+ suspended? && suspension_origin_local?
+ end
+
+ def suspended_permanently?
+ suspended? && deletion_request.nil?
+ end
+ alias permanently_unavailable? suspended_permanently?
+
+ def suspended_temporarily?
+ suspended? && deletion_request.present?
+ end
+
+ def suspend!(date: Time.now.utc, origin: :local, block_email: true)
+ transaction do
+ create_deletion_request!
+ update!(suspended_at: date, suspension_origin: origin)
+ create_canonical_email_block! if block_email
+ end
+ end
+
+ def unsuspend!
+ transaction do
+ deletion_request&.destroy!
+ update!(suspended_at: nil, suspension_origin: nil)
+ destroy_canonical_email_block!
+ end
+ end
+end
diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb
index 8382c9159..15133e7bd 100644
--- a/app/models/concerns/remotable.rb
+++ b/app/models/concerns/remotable.rb
@@ -26,7 +26,7 @@ module Remotable
public_send(:"#{attachment_name}=", ResponseWithLimit.new(response, limit))
end
- rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError => e
+ rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS => e
Rails.logger.debug { "Error fetching remote #{attachment_name}: #{e}" }
public_send(:"#{attachment_name}=", nil) if public_send(:"#{attachment_name}_file_name").present?
raise e unless suppress_errors
diff --git a/app/models/form/redirect.rb b/app/models/form/redirect.rb
index 3cd5731e6..c5b3c1f8f 100644
--- a/app/models/form/redirect.rb
+++ b/app/models/form/redirect.rb
@@ -32,7 +32,7 @@ class Form::Redirect
def set_target_account
@target_account = ResolveAccountService.new.call(acct, skip_cache: true)
- rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::Error, Addressable::URI::InvalidURIError
+ rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::Error, Addressable::URI::InvalidURIError
# Validation will take care of it
end
diff --git a/app/models/remote_follow.rb b/app/models/remote_follow.rb
index fa0586f57..f9719b867 100644
--- a/app/models/remote_follow.rb
+++ b/app/models/remote_follow.rb
@@ -66,7 +66,7 @@ class RemoteFollow
def acct_resource
@acct_resource ||= Webfinger.new("acct:#{acct}").perform
- rescue Webfinger::Error, HTTP::ConnectionError
+ rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS
nil
end
diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb
index cf0164c24..3496f329f 100644
--- a/app/serializers/manifest_serializer.rb
+++ b/app/serializers/manifest_serializer.rb
@@ -8,7 +8,8 @@ class ManifestSerializer < ActiveModel::Serializer
attributes :id, :name, :short_name,
:icons, :theme_color, :background_color,
:display, :start_url, :scope,
- :share_target, :shortcuts
+ :share_target, :shortcuts,
+ :prefer_related_applications, :related_applications
def id
# This is set to `/home` because that was the old value of `start_url` and
@@ -89,4 +90,28 @@ class ManifestSerializer < ActiveModel::Serializer
},
]
end
+
+ def prefer_related_applications
+ true
+ end
+
+ def related_applications
+ [
+ {
+ platform: 'play',
+ url: 'https://play.google.com/store/apps/details?id=org.joinmastodon.android',
+ id: 'org.joinmastodon.android',
+ },
+ {
+ platform: 'itunes',
+ url: 'https://apps.apple.com/us/app/mastodon-for-iphone/id1571998974',
+ id: 'id1571998974',
+ },
+ {
+ platform: 'f-droid',
+ url: 'https://f-droid.org/en/packages/org.joinmastodon.android/',
+ id: 'org.joinmastodon.android',
+ },
+ ]
+ end
end
diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb
index a7422b5d0..df6f23c02 100644
--- a/app/services/activitypub/process_account_service.rb
+++ b/app/services/activitypub/process_account_service.rb
@@ -127,13 +127,13 @@ class ActivityPub::ProcessAccountService < BaseService
begin
@account.avatar_remote_url = image_url('icon') || '' unless skip_download?
@account.avatar = nil if @account.avatar_remote_url.blank?
- rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError
+ rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
RedownloadAvatarWorker.perform_in(rand(30..600).seconds, @account.id)
end
begin
@account.header_remote_url = image_url('image') || '' unless skip_download?
@account.header = nil if @account.header_remote_url.blank?
- rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError
+ rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
RedownloadHeaderWorker.perform_in(rand(30..600).seconds, @account.id)
end
@account.statuses_count = outbox_total_items if outbox_total_items.present?
@@ -276,7 +276,7 @@ class ActivityPub::ProcessAccountService < BaseService
total_items = collection.is_a?(Hash) && collection['totalItems'].present? && collection['totalItems'].is_a?(Numeric) ? collection['totalItems'] : nil
has_first_page = collection.is_a?(Hash) && collection['first'].present?
@collections[type] = [total_items, has_first_page]
- rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::LengthValidationError
+ rescue *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::LengthValidationError
@collections[type] = [nil, nil]
end
diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb
index 1dbed27f2..141ad24e9 100644
--- a/app/services/activitypub/process_status_update_service.rb
+++ b/app/services/activitypub/process_status_update_service.rb
@@ -109,7 +109,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
media_attachment.download_file! if media_attachment.remote_url_previously_changed?
media_attachment.download_thumbnail! if media_attachment.thumbnail_remote_url_previously_changed?
media_attachment.save
- rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError
+ rescue Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id)
rescue Seahorse::Client::NetworkingError => e
Rails.logger.warn "Error storing media attachment: #{e}"
diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb
index 7662fc1f2..4141fb43d 100644
--- a/app/services/fetch_link_card_service.rb
+++ b/app/services/fetch_link_card_service.rb
@@ -29,7 +29,7 @@ class FetchLinkCardService < BaseService
end
attach_card if @card&.persisted?
- rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Encoding::UndefinedConversionError, ActiveRecord::RecordInvalid => e
+ rescue *Mastodon::HTTP_CONNECTION_ERRORS, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, Encoding::UndefinedConversionError, ActiveRecord::RecordInvalid => e
Rails.logger.debug { "Error fetching link #{@original_url}: #{e}" }
nil
end
diff --git a/app/services/fetch_resource_service.rb b/app/services/fetch_resource_service.rb
index b69015a5e..911950ccc 100644
--- a/app/services/fetch_resource_service.rb
+++ b/app/services/fetch_resource_service.rb
@@ -12,7 +12,7 @@ class FetchResourceService < BaseService
return if url.blank?
process(url)
- rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e
+ rescue *Mastodon::HTTP_CONNECTION_ERRORS, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError => e
Rails.logger.debug { "Error fetching resource #{@url}: #{e}" }
nil
end
diff --git a/app/services/import_service.rb b/app/services/import_service.rb
index 6dafb5a0b..a695df2fc 100644
--- a/app/services/import_service.rb
+++ b/app/services/import_service.rb
@@ -115,7 +115,7 @@ class ImportService < BaseService
next if status.nil? && ActivityPub::TagManager.instance.local_uri?(uri)
status || ActivityPub::FetchRemoteStatusService.new.call(uri)
- rescue HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError
+ rescue *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::UnexpectedResponseError
nil
rescue => e
Rails.logger.warn "Unexpected error when importing bookmark: #{e}"
diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb
index 1c4c7805f..3839eb4df 100644
--- a/app/services/process_mentions_service.rb
+++ b/app/services/process_mentions_service.rb
@@ -44,7 +44,7 @@ class ProcessMentionsService < BaseService
if mention_undeliverable?(mentioned_account)
begin
mentioned_account = ResolveAccountService.new.call(Regexp.last_match(1))
- rescue Webfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError, Mastodon::UnexpectedResponseError
+ rescue Webfinger::Error, *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::UnexpectedResponseError
mentioned_account = nil
end
end
diff --git a/app/services/software_update_check_service.rb b/app/services/software_update_check_service.rb
index c8ce1753f..24a6955b8 100644
--- a/app/services/software_update_check_service.rb
+++ b/app/services/software_update_check_service.rb
@@ -22,7 +22,7 @@ class SoftwareUpdateCheckService < BaseService
Request.new(:get, "#{api_url}?version=#{version}").add_headers('Accept' => 'application/json', 'User-Agent' => 'Mastodon update checker').perform do |res|
return Oj.load(res.body_with_limit, mode: :strict) if res.code == 200
end
- rescue HTTP::Error, OpenSSL::SSL::SSLError, Oj::ParseError
+ rescue *Mastodon::HTTP_CONNECTION_ERRORS, Oj::ParseError
nil
end
diff --git a/app/services/verify_link_service.rb b/app/services/verify_link_service.rb
index c4f4191e1..17c86426b 100644
--- a/app/services/verify_link_service.rb
+++ b/app/services/verify_link_service.rb
@@ -10,7 +10,7 @@ class VerifyLinkService < BaseService
return unless link_back_present?
field.mark_verified!
- rescue OpenSSL::SSL::SSLError, HTTP::Error, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, IPAddr::AddressFamilyError => e
+ rescue *Mastodon::HTTP_CONNECTION_ERRORS, Addressable::URI::InvalidURIError, Mastodon::HostValidationError, Mastodon::LengthValidationError, IPAddr::AddressFamilyError => e
Rails.logger.debug { "Error fetching link #{@url}: #{e}" }
nil
end
diff --git a/app/workers/refollow_worker.rb b/app/workers/refollow_worker.rb
index 4b712d3aa..7b26e4a06 100644
--- a/app/workers/refollow_worker.rb
+++ b/app/workers/refollow_worker.rb
@@ -21,7 +21,7 @@ class RefollowWorker
# Schedule re-follow
begin
FollowService.new.call(follower, target_account, reblogs: reblogs, notify: notify, languages: languages, bypass_limit: true)
- rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError
+ rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
next
end
end
diff --git a/config/application.rb b/config/application.rb
index 0013c7885..5e2f44453 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -96,10 +96,6 @@ module Mastodon
config.middleware.use Rack::Attack
config.middleware.use Mastodon::RackMiddleware
- initializer :deprecator do |app|
- app.deprecators[:mastodon] = ActiveSupport::Deprecation.new('4.3', 'mastodon/mastodon')
- end
-
config.before_configuration do
require 'mastodon/redis_configuration'
::REDIS_CONFIGURATION = Mastodon::RedisConfiguration.new
diff --git a/config/locales/activerecord.fy.yml b/config/locales/activerecord.fy.yml
index b571ab60d..69139eba1 100644
--- a/config/locales/activerecord.fy.yml
+++ b/config/locales/activerecord.fy.yml
@@ -15,6 +15,12 @@ fy:
user/invite_request:
text: Reden
errors:
+ attributes:
+ domain:
+ invalid: is in ûnjildige domeinnamme
+ messages:
+ invalid_domain_on_line: "%{value} is in ûnjildige domeinnamme"
+ too_many_lines: giet oer de limyt fan %{limit} rigels
models:
account:
attributes:
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 829855776..1a6f0da8c 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -1394,20 +1394,6 @@ ar:
merge_long: الإبقاء علي التسجيلات الحالية وإضافة الجديدة
overwrite: إعادة الكتابة
overwrite_long: استبدال التسجيلات الحالية بالجديدة
- overwrite_preambles:
- blocking_html: أنت على وشك استبدال قائمة الحظر بما يصل إلى %{total_items} من الحسابات من %{filename}.
- bookmarks_html: أنت على وشك استبدال إشاراتك المرجعية بما يصل إلى %{total_items} من المشاركات من %{filename}.
- domain_blocking_html: أنت على وشك إرشاداتك المرجعية بما يصل إلى %{total_items} من المشاركات من %{filename}.
- following_html: أنت على وشك متابعة ما يصل إلى %{total_items} من الحسابات من %{filename} والتوقف عن متابعة أي شخص آخر.
- lists_html: إنّك بصدد استبدال قوائمك بمحتوى مِلَفّ %{filename}. ما يُقارِب %{total_items} حسابًا سوف تُضاف إلى قوائم جديدة.
- muting_html: أنت على وشك استبدال قائمة الحسابات الصامتة بما يصل إلى %{total_items} من الحسابات من %{filename}.
- preambles:
- blocking_html: أنت على وشك حظر ما يصل إلى %{total_items} من الحسابات من %{filename}.
- bookmarks_html: أنت على وشك إضافة ما يصل إلى %{total_items} من المشاركات من %{filename} إلى إشاراتك المرجعية.
- domain_blocking_html: أنت على وشك حظر ما يصل إلى %{total_items} من النطاقات من %{filename}.
- following_html: أنت على وشك متابعة ما يصل إلى %{total_items} من الحسابات من %{filename}.
- lists_html: أنت على وشك إضافة ما يصل إلى %{total_items} حسابات من %{filename} إلى قوائمك. سيتم إنشاء قوائم جديدة في حالة عدم وجود قائمة للإضافة إليها.
- muting_html: أنت على وشك تجاهل ما يصل إلى %{total_items} من الحسابات من %{filename}.
preface: بإمكانك استيراد بيانات قد قُمتَ بتصديرها مِن مثيل خادم آخَر، كقوائم المستخدِمين الذين كنتَ تتابِعهم أو قُمتَ بحظرهم.
recent_imports: الاستيرادات الحديثة
states:
diff --git a/config/locales/be.yml b/config/locales/be.yml
index d1d3e1767..b627672b2 100644
--- a/config/locales/be.yml
+++ b/config/locales/be.yml
@@ -1391,20 +1391,6 @@ be:
merge_long: Захаваць існуючыя запісы і дадаць новыя
overwrite: Перазапісаць
overwrite_long: Замяніць бягучыя запісы на новыя
- overwrite_preambles:
- blocking_html: Вы збіраецеся замяніць свой спіс блакіровак на %{total_items} уліковых запісаў з файла %{filename}.
- bookmarks_html: Вы збіраецеся замяніць свае закладкі на %{total_items} допісаў з файла %{filename}.
- domain_blocking_html: Вы збіраецеся замяніць свой спіс блакіроўкі даменаў на %{total_items} даменаў з файла %{filename}.
- following_html: Вы збіраецеся падпісацца на %{total_items} уліковых запісаў з файла %{filename} і адпісацца ад усіх іншых карыстальнікаў.
- lists_html: Вы збіраецеся замяніць свае спісы змесцівам з %{filename}. Да %{total_items} уліковых запісаў будуць дададзены ў новыя спісы.
- muting_html: Вы збіраецеся замяніць свой спіс ігнараваных уліковых запісаў на %{total_items} уліковых запісаў з файла %{filename}.
- preambles:
- blocking_html: Вы збіраецеся заблакіраваць да %{total_items} уліковых запісаў з файла%{filename}.
- bookmarks_html: Вы збіраецеся дадаць да %{total_items} паведамленняў з файла %{filename} у вашы закладкі.
- domain_blocking_html: Вы збіраецеся заблакіраваць да %{total_items} даменаў з файла %{filename}.
- following_html: Вы збіраецеся падпісацца на%{total_items} уліковых запісаў з файла %{filename}.
- lists_html: Вы збіраецеся дадаць да %{total_items} уліковых запісаў з %{filename} у вашы спісы. Новыя спісы будуць створаны, калі іх няма.
- muting_html: Вы збіраецеся ігнараваць да %{total_items} уліковых запісаў з файла %{filename}.
preface: Вы можаце імпартаваць даныя, экспартаваныя вамі з іншага сервера, напрыклад, спіс людзей, на якіх вы падпісаны або якіх блакуеце.
recent_imports: Нядаўнія імпарты
states:
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 00b3a4116..1fdd0e353 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -1300,20 +1300,6 @@ bg:
merge_long: Пази текущите записи и добавя нови
overwrite: Презаписване
overwrite_long: Заменя текущите записи с новите
- overwrite_preambles:
- blocking_html: На път сте да замените списъка си с блокирани с до %{total_items} акаунта от %{filename}.
- bookmarks_html: На път сте да замените списъка си с отметки с до %{total_items} публикации от %{filename}.
- domain_blocking_html: На път сте да замените списъка си с блокирани домейни с до %{total_items} домейна от %{filename}.
- following_html: На път сте да последвате до %{total_items} акаунта от %{filename} и да спрете да следвате някой друг.
- lists_html: На път сте да замените списъците си със съдържание от %{filename}. До %{total_items} акаунта ще се добавят към новите списъци.
- muting_html: На път сте да замените списъка си със заглушени акаунти с до %{total_items} акаунта от %{filename}.
- preambles:
- blocking_html: На път сте да блокирате до %{total_items} акаунта от %{filename}.
- bookmarks_html: На път сте да добавите до %{total_items} публикации от %{filename} в отметките си.
- domain_blocking_html: На път сте да блокирате до %{total_items} домейна от %{filename}.
- following_html: На път сте да последвате до %{total_items} акаунта от %{filename}.
- lists_html: На път сте да добавите до %{total_items} акаунта от %{filename} към вашите списъци. Нови списъци ще се сътворят, ако няма списъци за добавяне.
- muting_html: На път сте да заглушите до %{total_items} акаунта от %{filename}.
preface: Можеш да импортираш някои данни, като например всички хора, които следваш или блокираш в акаунта си на тази инстанция, от файлове, създадени чрез експорт в друга инстанция.
recent_imports: Скорошни внасяния
states:
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index ced8de4ef..cc2da496a 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -21,6 +21,7 @@ ca:
one: Tut
other: Tuts
posts_tab_heading: Tuts
+ self_follow_error: No es permet seguir el compte propi
admin:
account_actions:
action: Realitza l'acció
@@ -1365,20 +1366,6 @@ ca:
merge_long: Mantenir els registres existents i afegir-ne de nous
overwrite: Sobreescriu
overwrite_long: Reemplaça els registres actuals amb els nous
- overwrite_preambles:
- blocking_html: Ets a punt per a reemplaçar la teva llista de bloquejos de fins a %{total_items} comptes des de %{filename}.
- bookmarks_html: Ets a punt de reemplaçar els teus marcadors de fins a %{total_items} tuts des de %{filename}.
- domain_blocking_html: Ets a punt de reemplaçar la teva llista de dominis bloquejats de fins a %{total_items} dominis des de %{filename}.
- following_html: Ets a punt de seguir fins a %{total_items} comptes des de %{filename} i deixar de seguir a la resta.
- lists_html: Estàs a punt de reemplaçar les teves llistes amb contactes de %{filename}. S'afegiran fins a %{total_items} comptes a les noves llistes.
- muting_html: Ets a punt de reemplaçar la teva llista de comptes silenciats de fins a %{total_items} comptes des de %{filename}.
- preambles:
- blocking_html: Ets a punt de bloquejar fins a %{total_items} comptes des de %{filename}.
- bookmarks_html: Ets a punt d'afegir fins a %{total_items} tuts des de %{filename} als teus marcadors.
- domain_blocking_html: Ets a punt de bloquejar fins a %{total_items} dominis des de %{filename}.
- following_html: Ets a punt de seguir fins a %{total_items} comptes des de %{filename}.
- lists_html: Estàs a punt d'afegir %{total_items} comptes de %{filename} a les teves llistes. Es crearan noves llistes si no hi ha cap llista on afegir-los.
- muting_html: Ets a punt de silenciar fins a %{total_items} comptes des de %{filename}.
preface: Pots importar algunes les dades que has exportat des d'un altre servidor, com ara el llistat de les persones que estàs seguint o bloquejant.
recent_imports: Importacions recents
states:
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 91fa51794..15211b928 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -1348,20 +1348,6 @@ cs:
merge_long: Ponechat existující záznamy a přidat nové
overwrite: Přepsat
overwrite_long: Nahradit aktuální záznamy novými
- overwrite_preambles:
- blocking_html: Chystáte se nahradit váš seznam bloků s %{total_items} účtami od %{filename}.
- bookmarks_html: Chystáte se nahradit své záložky s %{total_items} příspěvků z %{filename}.
- domain_blocking_html: Chystáte se nahradit seznam stránek s %{total_items} stránek z %{filename}.
- following_html: Chystáte se sledovat až %{total_items} účtů z %{filename} a přestanete sledovat všechny ostatní.
- lists_html: Chystáte se nahradit své seznamy obsahem %{filename}. Až %{total_items} účtů budou přidány do nových seznamů.
- muting_html: Chystáte se nahradit seznam skrytých účtů s %{total_items} účtami z %{filename}.
- preambles:
- blocking_html: Chystáte se blokovat až %{total_items} účtů z %{filename}.
- bookmarks_html: Chystáte se přidat až %{total_items} příspěvků z %{filename} do vašich záložek.
- domain_blocking_html: Chystáte se blokovat až %{total_items} stránek z %{filename}.
- following_html: Chystáte se sledovat až %{total_items} účtů z %{filename}.
- lists_html: Chystáte se přidat %{total_items} účtů z %{filename} do vaších seznamů. Nové seznamy budou vytvořeny, pokud neexistuje žádný seznam, do kterého by bylo možné přidat.
- muting_html: Chystáte se skrýt až %{total_items} účtů z %{filename}.
preface: Můžete importovat data, která jste exportovali z jiného serveru, jako například seznam lidí, které sledujete či blokujete.
recent_imports: Nedávné importy
states:
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index a70d08ed8..d57ef3869 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -1465,20 +1465,6 @@ cy:
merge_long: Cadw'r cofnodion presennol ac ychwanegu rhai newydd
overwrite: Trosysgrifio
overwrite_long: Amnewid y cofnodion cyfredol gyda'r rhai newydd
- overwrite_preambles:
- blocking_html: Rydych ar fin amnewid eich rhestr rhwystro gyda hyd at %{total_items} o gyfrifon o %{filename} .
- bookmarks_html: Rydych ar fin amnewid eich nodau tudalen gyda hyd at %{total_items} o bostiadau gan %{filename} .
- domain_blocking_html: Rydych ar fin amnewid eich rhestr rhwystro parth gyda hyd at %{total_items} parth o %{filename} .
- following_html: Rydych ar fin dilyn hyd at %{total_items} o gyfrifon o %{filename} a pheidio a ddilyn unrhyw un arall .
- lists_html: Rydych ar fin amnewid eich rhestrau gyda chynnwys %{filename} . Bydd hyd at %{total_items} o gyfrifon yn cael eu hychwanegu at restrau newydd.
- muting_html: Rydych ar fin amnewid eich rhestr o gyfrifon tawel gyda hyd at %{total_items} o gyfrifon o %{filename} .
- preambles:
- blocking_html: Rydych ar fin rhwystro hyd at %{total_items} o gyfrifon o %{filename} .
- bookmarks_html: Rydych ar fin ychwanegu hyd at %{total_items} o bostiadau o %{filename} at eich nodau tudalen .
- domain_blocking_html: Rydych ar fin rhwystro hyd at %{total_items} parth o %{filename} .
- following_html: Rydych ar fin dilyn hyd at %{total_items} cyfrif gan %{filename} .
- lists_html: Rydych ar fin ychwanegu hyd at %{total_items} o gyfrifon o %{filename} at eich rhestrau . Bydd rhestrau newydd yn cael eu creu os nad oes rhestr i ychwanegu ati.
- muting_html: Rydych ar fin anwybyddu hyd at %{total_items} cyfrif o %{filename}.
preface: Gallwch fewnforio data rydych chi wedi'i allforio o weinydd arall, fel rhestr o'r bobl rydych chi'n eu dilyn neu'n eu blocio.
recent_imports: Mewnforion diweddar
states:
diff --git a/config/locales/da.yml b/config/locales/da.yml
index 0da901d4a..923102c11 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -21,6 +21,7 @@ da:
one: Indlæg
other: Indlæg
posts_tab_heading: Indlæg
+ self_follow_error: Det er ikke tilladt at følge sin egen konto
admin:
account_actions:
action: Udfør handling
@@ -1366,19 +1367,43 @@ da:
overwrite: Overskriv
overwrite_long: Erstat aktuelle poster med de nye
overwrite_preambles:
- blocking_html: Du er ved at erstatte bloklisten med op til %{total_items} konti fra %{filename}.
- bookmarks_html: Du er ved at erstatte bogmærkelisten med op til %{total_items} emner fra %{filename}.
- domain_blocking_html: Du er ved at erstatte domæneblokeringslisten med op til %{total_items} domæner fra %{filename}.
- following_html: Du er ved at følge op til %{total_items} konti fra %{filename} og stoppe med at følge alle andre.
- lists_html: Du er ved at erstatte dine lister med indholdet af %{filename}. Op til %{total_items} konti tilføjes nye lister.
- muting_html: Du er ved at erstatte listen over tavsgjorte konti med op til %{total_items} konti fra %{filename}.
+ blocking_html:
+ one: Man er ved at erstatte sin sortliste med %{count} konto fra %{filename}.
+ other: Man er ved at erstatte sin sortliste med optil %{count} konti fra %{filename}.
+ bookmarks_html:
+ one: Man er ved at erstatte sine bogmærker med %{count} post fra %{filename}.
+ other: Man er ved at erstatte sine bogmærker med op til %{count} poster fra %{filename}.
+ domain_blocking_html:
+ one: Man er ved at erstatte sin domænesortliste med %{count} domæne fra %{filename}.
+ other: Man er ved at erstatte sin domænesortliste med op til %{count} domæner fra %{filename}.
+ following_html:
+ one: Man er ved at følge%{count} konto fra %{filename} og stoppe med at følge andre.
+ other: Man er ved at følge%{count} konti fra %{filename} og stoppe med at følge andre.
+ lists_html:
+ one: Man er ved at erstatte sine lister med indhold fra %{filename}. %{count} konto føjes til nye lister.
+ other: Man er ved at erstatte sine lister med indhold fra %{filename}. Op til %{count} konti føjes til nye lister.
+ muting_html:
+ one: Man er ved at sin liste over en tavsgjort konto med %{count} konto fra %{filename}.
+ other: Man er ved at sin liste over tavsgjorte konti med op til %{count} konti fra %{filename}.
preambles:
- blocking_html: Du er ved at blokere op til %{total_items} konti fra %{filename}.
- bookmarks_html: Du er ved at føje op til %{total_items} indlæg fra %{filename} til bogmærkelisten.
- domain_blocking_html: Du er ved at blokere op til %{total_items} domæner fra %{filename}.
- following_html: Du er ved at følge op til %{total_items} konti fra %{filename}.
- lists_html: Du er ved at tilføje op til %{total_items} konti fra %{filename} til dine lister. Nye lister oprettes, hvis der ikke er nogen liste at føje konti til.
- muting_html: Du er ved at tavsgøre op til %{total_items} konti fra %{filename}.
+ blocking_html:
+ one: Man er ved at blokere%{count} konto fra %{filename}.
+ other: Man er ved at blokere op til %{count} konti fra %{filename}.
+ bookmarks_html:
+ one: Man er ved at tilføje %{count} post fra %{filename} til sine bogmærker.
+ other: Man er ved at tilføje %{count} poster fra %{filename} til sine bogmærker.
+ domain_blocking_html:
+ one: Man er ved at blokere%{count} domæne fra %{filename}.
+ other: Man er ved at blokere op til %{count} domæner fra %{filename}.
+ following_html:
+ one: Man er ved at følge%{count} konto fra %{filename}.
+ other: Man er ved at følge op til%{count} konti fra %{filename}.
+ lists_html:
+ one: Man er ved at tilføje %{count} konto fra %{filename} til sine lister. Nye lister oprettes, hvis der ikke findes nogen liste at tilføje til.
+ other: Man er ved at tilføje %{count} konti fra %{filename} til sine lister. Nye lister oprettes, hvis der ikke findes nogen liste at tilføje til.
+ muting_html:
+ one: Man er ved at tavsgøre%{count} konto fra %{filename}.
+ other: Man er ved at tavsgøre op til %{count} konto fra %{filename}.
preface: Du kan importere data, du har eksporteret fra en anden server, såsom en liste over folk du følger eller blokerer.
recent_imports: Seneste importer
states:
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 7a8469df6..cfd0d6510 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -21,6 +21,7 @@ de:
one: Beitrag
other: Beiträge
posts_tab_heading: Beiträge
+ self_follow_error: Es ist nicht erlaubt, deinem eigenen Konto zu folgen
admin:
account_actions:
action: Aktion ausführen
@@ -1366,19 +1367,43 @@ de:
overwrite: Überschreiben
overwrite_long: Bestehende Datensätze durch neue ersetzen
overwrite_preambles:
- blocking_html: Du bist dabei, deine Liste blockierter Konten durch bis zu %{total_items} Konten aus %{filename} zu ersetzen.
- bookmarks_html: Du bist dabei, deine Lesezeichen durch bis zu %{total_items} Beiträge aus %{filename} zu ersetzen.
- domain_blocking_html: Du bist dabei, deine Liste blockierter Domains durch bis zu %{total_items} Domains aus %{filename} zu ersetzen.
- following_html: Du bist dabei, bis zu %{total_items} Konten aus %{filename} zu folgen und niemand anderes zu folgen.
- lists_html: Du bist dabei, deine Listen durch den Inhalt aus %{filename} zu ersetzen. Es werden bis zu %{total_items} Konten zu neuen Listen hinzugefügt.
- muting_html: Du bist dabei, deine Liste stummgeschalteter Konten durch bis zu %{total_items} Konten aus %{filename} zu ersetzen.
+ blocking_html:
+ one: Du bist dabei, deine Liste blockierter Konten aus %{filename} durch bis zu %{count} Konto zu ersetzen.
+ other: Du bist dabei, deine Liste blockierter Konten aus %{filename} durch bis zu %{count} Konten zu ersetzen.
+ bookmarks_html:
+ one: Du bist dabei, deine Lesezeichen aus %{filename} durch bis zu %{count} Beitrag zu ersetzen.
+ other: Du bist dabei, deine Lesezeichen aus %{filename} durch bis zu %{count} Beiträge zu ersetzen.
+ domain_blocking_html:
+ one: Du bist dabei, deine Liste blockierter Domains aus %{filename} durch bis zu %{count} Domain zu ersetzen.
+ other: Du bist dabei, deine Liste blockierter Domains aus %{filename} durch bis zu %{count} Domains zu ersetzen.
+ following_html:
+ one: Du bist dabei, bis zu %{count} Konto aus %{filename} zu folgen und allen anderen zu entfolgen.
+ other: Du bist dabei, bis zu %{count} Konten aus %{filename} zu folgen und allen anderen zu entfolgen.
+ lists_html:
+ one: Du bist dabei, deine Listen mit dem Inhalt aus %{filename} zu ersetzen. Bis zu %{count} Konto wird zu neuen Listen hinzugefügt.
+ other: Du bist dabei, deine Listen mit dem Inhalt aus %{filename} zu ersetzen. Bis zu %{count} Konten wird zu neuen Listen hinzugefügt.
+ muting_html:
+ one: Du bist dabei, deine Liste mit einem stummgeschalteten Konto aus %{filename} durch bis zu %{count} Konto zu ersetzen.
+ other: Du bist dabei, deine Liste stummgeschalteter Konten aus %{filename} durch bis zu %{count} Konten zu ersetzen.
preambles:
- blocking_html: Du bist dabei, bis zu %{total_items}%{total_items} Konten aus %{filename} zu blockieren.
- bookmarks_html: Du bist dabei, bis zu %{total_items} Beiträge aus %{filename} zu deinen Lesezeichen hinzuzufügen.
- domain_blocking_html: Du bist dabei, bis zu %{total_items} Domains aus %{filename} zu blockieren.
- following_html: Du bist dabei, bis zu %{total_items} Konten aus %{filename} zu folgen.
- lists_html: Du bist dabei, bis zu %{total_items} Konten aus %{filename} zu deinen Listen hinzuzufügen. Wenn es keine Liste gibt, zu der etwas hinzugefügt werden kann, dann werden neue Listen erstellt.
- muting_html: Du bist dabei, bis zu %{total_items} Konten aus %{filename} stummzuschalten.
+ blocking_html:
+ one: Du bist dabei, bis zu %{count} Konto aus %{filename} zu blockieren.
+ other: Du bist dabei, bis zu %{count} Konten aus %{filename} zu blockieren.
+ bookmarks_html:
+ one: Du bist dabei, bis zu %{count} Beitrag aus %{filename} zu deinen Lesezeichen hinzuzufügen.
+ other: Du bist dabei, bis zu %{count} Beiträge aus %{filename} zu deinen Lesezeichen hinzuzufügen.
+ domain_blocking_html:
+ one: Du bist dabei, bis zu %{count} Domain aus %{filename} zu blockieren.
+ other: Du bist dabei, bis zu %{count} Domains aus %{filename} zu blockieren.
+ following_html:
+ one: Du bist dabei, bis zu %{count} Konto aus %{filename} zu folgen.
+ other: Du bist dabei, bis zu %{count} Konten aus %{filename} zu folgen.
+ lists_html:
+ one: Du bist dabei, bis zu %{count} Konto aus %{filename} zu deinen Listen hinzuzufügen. Wenn es keine Listen gibt, zu denen etwas hinzugefügt werden kann, dann werden neue Listen erstellt.
+ other: Du bist dabei, bis zu %{count} Konten aus %{filename} zu deinen Listen hinzuzufügen. Wenn es keine Listen gibt, zu denen etwas hinzugefügt werden kann, dann werden neue Listen erstellt.
+ muting_html:
+ one: Du bist dabei, bis zu %{count} Konto aus %{filename} stummzuschalten.
+ other: Du bist dabei, bis zu %{count} Konten aus %{filename} stummzuschalten.
preface: Daten, die du von einem Mastodon-Server exportiert hast, kannst du hierher importieren. Das betrifft beispielsweise die Listen von Profilen, denen du folgst oder die du blockiert hast.
recent_imports: Zuletzt importiert
states:
diff --git a/config/locales/devise.eo.yml b/config/locales/devise.eo.yml
index 9d946967e..43aef271f 100644
--- a/config/locales/devise.eo.yml
+++ b/config/locales/devise.eo.yml
@@ -73,9 +73,11 @@ eo:
title: Unu el viaj sekurecaj ŝlosiloj estis forigita
webauthn_disabled:
explanation: Aŭtentigo per sekurecaj ŝlosiloj estas malŝaltita por via konto.
+ extra: Ensaluto nun eblas uzante nur la ĵetonon generitan de la parigita tempbazita unufoja pasvorta aplikaĵo.
subject: 'Mastodon: sekureca-ŝlosila aŭtentigo malebligita'
title: Sekurecaj ŝlosiloj malaktivigitaj
webauthn_enabled:
+ explanation: Sekurecŝlosila aŭtentigo estas ebligita por via konto.
extra: Via sekureca ŝlosilo nun povas esti uzata por ensaluto.
subject: 'Mastodon: sekureca-ŝlosila aŭtentigo ebligita'
title: Sekurecaj ŝlosiloj aktivigitaj
diff --git a/config/locales/doorkeeper.fy.yml b/config/locales/doorkeeper.fy.yml
index 94e67d17a..180c7e733 100644
--- a/config/locales/doorkeeper.fy.yml
+++ b/config/locales/doorkeeper.fy.yml
@@ -60,6 +60,7 @@ fy:
error:
title: Der is in flater bard
new:
+ prompt_html: "%{client_name} freget om tagong ta jo account. Keur dit fersyk allinnich goed as jo dizze boarne werkenne en fertrouwe."
review_permissions: Tastimmingen beoardiele
title: Autorisaasje fereaske
show:
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 4496ec51a..0df31b246 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -1322,20 +1322,6 @@ el:
merge_long: Διατήρηση των εγγράφων που υπάρχουν και προσθήκη των νέων
overwrite: Αντικατάσταση
overwrite_long: Αντικατάσταση των υπαρχόντων εγγράφων με τις καινούργιες
- overwrite_preambles:
- blocking_html: Πρόκειται να αντικαταστήσεις τη λίστα αποκλεισμών με έως και %{total_items} λογαριασμούς από το %{filename}.
- bookmarks_html: Πρόκειται να αντικαταστήσεις τους σελιδοδείκτες σου με έως και %{total_items} αναρτήσεις από το %{filename}.
- domain_blocking_html: Πρόκειται να αντικαταστήσεις τη λίστα αποκλεισμών τομέων με έως και %{total_items} τομείς από το %{filename}.
- following_html: Πρόκειται να ακολουθήσεις μέχρι %{total_items} λογαριασμούς από το %{filename} και να σταματήσεις να ακολουθείς οποιονδήποτε άλλο.
- lists_html: Πρόκειται να αντικαταστήσεις τις λίστες σου με περιεχόμενο του %{filename}. Μέχρι %{total_items} λογαριασμοί θα προστεθούν σε νέες λίστες.
- muting_html: Πρόκειται να αντικαταστήσεις τη λίστα λογαριασμών σε σίγαση με έως και %{total_items} λογαριασμούς από το %{filename}.
- preambles:
- blocking_html: Πρόκειται να αποκλείσεις έως και %{total_items} λογαριασμούς από το %{filename}.
- bookmarks_html: Πρόκειται να προσθέσεις μέχρι και %{total_items} αναρτήσεις από το %{filename} στους σελιδοδείκτες σου.
- domain_blocking_html: Πρόκειται να αποκλείσεις έως και %{total_items} τομείς από το %{filename}.
- following_html: Πρόκειται να ακολουθήσεις έως και %{total_items} λογαριασμούς από το %{filename}.
- lists_html: Πρόκειται να προσθέσεις μέχρι και %{total_items} λογαριασμούς από το %{filename} στις λίστες σου. Θα δημιουργηθούν νέες λίστες αν δεν υπάρχει λίστα για προσθήκη.
- muting_html: Πρόκειται να κάνεις σίγαση σε έως και %{total_items} λογαριασμούς από το %{filename}.
preface: Μπορείς να εισάγεις τα δεδομένα που έχεις εξάγει από άλλο διακομιστή, όπως τη λίστα των ατόμων που ακολουθείς ή έχεις αποκλείσει.
recent_imports: Πρόσφατες Εισαγωγές
states:
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index fbd48d1c3..65b2e6f71 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -875,6 +875,9 @@ en-GB:
message_html: You haven't defined any server rules.
sidekiq_process_check:
message_html: No Sidekiq process running for the %{value} queue(s). Please review your Sidekiq configuration
+ software_version_check:
+ action: See available updates
+ message_html: A Mastodon update is available.
software_version_critical_check:
action: See available updates
message_html: A critical Mastodon update is available, please update as quickly as possible.
@@ -1363,19 +1366,43 @@ en-GB:
overwrite: Overwrite
overwrite_long: Replace current records with the new ones
overwrite_preambles:
- blocking_html: You are about to replace your block list with up to %{total_items} accounts from %{filename}.
- bookmarks_html: You are about to replace your bookmarks with up to %{total_items} posts from %{filename}.
- domain_blocking_html: You are about to replace your domain block list with up to %{total_items} domains from %{filename}.
- following_html: You are about to follow up to %{total_items} accounts from %{filename} and stop following anyone else.
- lists_html: You are about to replace your lists with contents of %{filename}. Up to %{total_items} accounts will be added to new lists.
- muting_html: You are about to replace your list of muted accounts with up to %{total_items} accounts from %{filename}.
+ blocking_html:
+ one: You are about to replace your block list with up to %{count} account from %{filename}.
+ other: You are about to replace your block list with up to %{count} accounts from %{filename}.
+ bookmarks_html:
+ one: You are about to replace your bookmarks with up to %{count} post from %{filename}.
+ other: You are about to replace your bookmarks with up to %{count} posts from %{filename}.
+ domain_blocking_html:
+ one: You are about to replace your domain block list with up to %{count} domain from %{filename}.
+ other: You are about to replace your domain block list with up to %{count} domains from %{filename}.
+ following_html:
+ one: You are about to follow up to %{count} account from %{filename} and stop following anyone else.
+ other: You are about to follow up to %{count} accounts from %{filename} and stop following anyone else.
+ lists_html:
+ one: You are about to replace your lists with contents of %{filename}. Up to %{count} account will be added to new lists.
+ other: You are about to replace your lists with contents of %{filename}. Up to %{count} accounts will be added to new lists.
+ muting_html:
+ one: You are about to replace your list of muted account with up to %{count} account from %{filename}.
+ other: You are about to replace your list of muted accounts with up to %{count} accounts from %{filename}.
preambles:
- blocking_html: You are about to block up to %{total_items} accounts from %{filename}.
- bookmarks_html: You are about to add up to %{total_items} posts from %{filename} to your bookmarks.
- domain_blocking_html: You are about to block up to %{total_items} domains from %{filename}.
- following_html: You are about to follow up to %{total_items} accounts from %{filename}.
- lists_html: You are about to add up to %{total_items} accounts from %{filename} to your lists. New lists will be created if there is no list to add to.
- muting_html: You are about to mute up to %{total_items} accounts from %{filename}.
+ blocking_html:
+ one: You are about to block up to %{count} account from %{filename}.
+ other: You are about to block up to %{count} accounts from %{filename}.
+ bookmarks_html:
+ one: You are about to add up to %{count} post from %{filename} to your bookmarks.
+ other: You are about to add up to %{count} posts from %{filename} to your bookmarks.
+ domain_blocking_html:
+ one: You are about to block up to %{count} domain from %{filename}.
+ other: You are about to block up to %{count} domains from %{filename}.
+ following_html:
+ one: You are about to follow up to %{count} account from %{filename}.
+ other: You are about to follow up to %{count} accounts from %{filename}.
+ lists_html:
+ one: You are about to add up to %{count} account from %{filename} to your lists. New lists will be created if there is no list to add to.
+ other: You are about to add up to %{count} accounts from %{filename} to your lists. New lists will be created if there is no list to add to.
+ muting_html:
+ one: You are about to mute up to %{count} account from %{filename}.
+ other: You are about to mute up to %{count} accounts from %{filename}.
preface: You can import data that you have exported from another server, such as a list of the people you are following or blocking.
recent_imports: Recent imports
states:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index d81f72657..2365de5f1 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -21,6 +21,7 @@ en:
one: Post
other: Posts
posts_tab_heading: Posts
+ self_follow_error: Following your own account is not allowed
admin:
account_actions:
action: Perform action
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 10b297f1a..1e683b172 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -21,6 +21,7 @@ eo:
one: Afiŝo
other: Mesaĝoj
posts_tab_heading: Afiŝoj
+ self_follow_error: Sekvi vian propran konton ne estas permesita
admin:
account_actions:
action: Plenumi agon
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index 49b8f288f..04ff7880a 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -21,6 +21,7 @@ es-AR:
one: Mensaje
other: Mensajes
posts_tab_heading: Mensajes
+ self_follow_error: No está permitido seguir tu propia cuenta
admin:
account_actions:
action: Ejecutar acción
@@ -1366,19 +1367,43 @@ es-AR:
overwrite: Sobrescribir
overwrite_long: Reemplazar registros actuales con los nuevos
overwrite_preambles:
- blocking_html: Estás a punto de reemplazar tu lista de bloqueos por hasta %{total_items} cuentas provenientes de %{filename}.
- bookmarks_html: Estás a punto de reemplazar tus marcadores por hasta %{total_items} mensajes provenientes de %{filename}.
- domain_blocking_html: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{total_items} dominios provenientes de %{filename}.
- following_html: Estás a punto de seguir hasta %{total_items} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta.
- lists_html: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se agregarán hasta %{total_items} cuentas a listas nuevas.
- muting_html: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{total_items} cuentas provenientes de %{filename}.
+ blocking_html:
+ one: Estás a punto de reemplazar tu lista de bloqueos por hasta %{count} cuenta provenientes de %{filename}.
+ other: Estás a punto de reemplazar tu lista de bloqueos por hasta %{count} cuentas provenientes de %{filename}.
+ bookmarks_html:
+ one: Estás a punto de reemplazar tus marcadores por hasta %{count} mensaje provenientes de %{filename}.
+ other: Estás a punto de reemplazar tus marcadores por hasta %{count} mensajes provenientes de %{filename}.
+ domain_blocking_html:
+ one: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{count} dominio provenientes de %{filename}.
+ other: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{count} dominios provenientes de %{filename}.
+ following_html:
+ one: Estás a punto de seguir hasta %{count} cuenta provenientes de %{filename} y dejar de seguir a cualquier otra cuenta.
+ other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta.
+ lists_html:
+ one: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se agregarán hasta %{count} cuenta a listas nuevas.
+ other: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se agregarán hasta %{count} cuentas a listas nuevas.
+ muting_html:
+ one: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{count} cuenta provenientes de %{filename}.
+ other: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{count} cuentas provenientes de %{filename}.
preambles:
- blocking_html: Estás a punto de bloquear hasta %{total_items} cuentas provenientes de %{filename}.
- bookmarks_html: Está a punto de agregar hasta %{total_items} mensajes provenientes de %{filename} a tus marcadores.
- domain_blocking_html: Estás a punto de bloquear hasta %{total_items} dominios provenientes de %{filename}.
- following_html: Estás a punto de seguir hasta cuentas%{total_items} provenientes de %{filename}.
- lists_html: Estás a punto de agregar hasta %{total_items} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay lista a cual agregar.
- muting_html: Estás a punto de silenciar hasta %{total_items} cuentas provenientes de %{filename}.
+ blocking_html:
+ one: Estás a punto de bloquear hasta %{count} cuenta provenientes de %{filename}.
+ other: Estás a punto de bloquear hasta %{count} cuentas provenientes de %{filename}.
+ bookmarks_html:
+ one: Está a punto de agregar hasta %{count} mensaje provenientes de %{filename} a tus marcadores.
+ other: Está a punto de agregar hasta %{count} mensajes provenientes de %{filename} a tus marcadores.
+ domain_blocking_html:
+ one: Estás a punto de bloquear hasta %{count} dominio provenientes de %{filename}.
+ other: Estás a punto de bloquear hasta %{count} dominios provenientes de %{filename}.
+ following_html:
+ one: Estás a punto de seguir hasta %{count} cuenta provenientes de %{filename}.
+ other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename}.
+ lists_html:
+ one: Estás a punto de agregar hasta %{count} cuenta desde %{filename} a tus listas. Se crearán nuevas listas si no hay lista a cuál agregar.
+ other: Estás a punto de agregar hasta %{count} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay lista a cuál agregar.
+ muting_html:
+ one: Estás a punto de silenciar hasta %{count} cuenta provenientes de %{filename}.
+ other: Estás a punto de silenciar hasta %{count} cuentas provenientes de %{filename}.
preface: Podés importar ciertos datos que exportaste desde otro servidor, como una lista de las cuentas que estás siguiendo o bloqueando.
recent_imports: Importaciones recientes
states:
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index 0f4c8452c..2c18465a2 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -21,6 +21,7 @@ es-MX:
one: Toot
other: Toots
posts_tab_heading: Toots
+ self_follow_error: No se permite seguir tu propia cuenta
admin:
account_actions:
action: Realizar acción
@@ -180,21 +181,21 @@ es-MX:
confirm_user: Confirmar Usuario
create_account_warning: Crear Advertencia
create_announcement: Crear Anuncio
- create_canonical_email_block: Crear Bloqueo de Correo Electrónico
+ create_canonical_email_block: Crear bloqueo de correo electrónico
create_custom_emoji: Crear Emoji Personalizado
create_domain_allow: Crear Permiso de Dominio
create_domain_block: Crear Bloqueo de Dominio
- create_email_domain_block: Crear Bloqueo de Dominio de Correo Electrónico
+ create_email_domain_block: Crear bloqueo de dominio de correo electrónico
create_ip_block: Crear regla IP
create_unavailable_domain: Crear Dominio No Disponible
create_user_role: Crear rol
demote_user: Degradar Usuario
destroy_announcement: Eliminar Anuncio
- destroy_canonical_email_block: Eliminar Bloqueo de Correo Electrónico
+ destroy_canonical_email_block: Eliminar bloqueo de correo electrónico
destroy_custom_emoji: Eliminar Emoji Personalizado
destroy_domain_allow: Eliminar Permiso de Dominio
destroy_domain_block: Eliminar Bloqueo de Dominio
- destroy_email_domain_block: Eliminar Bloqueo de Dominio de Correo Electrónico
+ destroy_email_domain_block: Eliminar bloqueo de dominio de correo electrónico
destroy_instance: Purgar dominio
destroy_ip_block: Eliminar regla IP
destroy_status: Eliminar Estado
@@ -876,8 +877,8 @@ es-MX:
sidekiq_process_check:
message_html: No hay ningún proceso Sidekiq en ejecución para la(s) cola(s) %{value}. Por favor, revise su configuración de Sidekiq
software_version_check:
- action: Ver actualizaciones disponibles
- message_html: Hay disponible una actualización de Mastodon.
+ action: Ver las actualizaciones disponibles
+ message_html: Ya está disponible una actualización de Mastodon.
software_version_critical_check:
action: Ver actualizaciones disponibles
message_html: Una actualización crítica de Mastodon está disponible, por favor actualice lo antes posible.
@@ -1366,19 +1367,43 @@ es-MX:
overwrite: Sobrescribir
overwrite_long: Reemplazar registros actuales con los nuevos
overwrite_preambles:
- blocking_html: Estás a punto de reemplazar tu lista de bloqueos por hasta %{total_items} cuentas provenientes de %{filename}.
- bookmarks_html: Estás a punto de reemplazar tus marcadores por hasta %{total_items} publicaciones provenientes de %{filename}.
- domain_blocking_html: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{total_items} dominios provenientes de %{filename}.
- following_html: Estás a punto de seguir hasta %{total_items} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta.
- lists_html: Estás a punto de reemplazar tus listas con contenidos de %{filename}. %{total_items} cuentas se añadirán a listas nuevas.
- muting_html: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{total_items} cuentas proveninetes de %{filename}.
+ blocking_html:
+ one: Estás a punto de reemplazar tu lista de bloqueos por %{count} cuenta proveniente de %{filename}.
+ other: Estás a punto de reemplazar tu lista de bloqueos por hasta %{count} cuentas provenientes de %{filename}.
+ bookmarks_html:
+ one: Estás a punto de reemplazar tus marcadores por %{count} publicación proveniente de %{filename}.
+ other: Estás a punto de reemplazar tus marcadores por hasta %{count} publicaciones provenientes de %{filename}.
+ domain_blocking_html:
+ one: Estás a punto de reemplazar tu lista de bloqueos de dominio por %{count} dominio proveniente de %{filename}.
+ other: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{count} dominios provenientes de %{filename}.
+ following_html:
+ one: Estás a punto de seguir a %{count} cuenta proveniente de %{filename} y dejar de seguir a cualquier otra cuenta.
+ other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta.
+ lists_html:
+ one: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se añadirá %{count} cuenta a una nueva lista.
+ other: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se añadirán %{count} cuentas a nuevas listas.
+ muting_html:
+ one: Estás a punto de reemplazar tu lista de cuentas silenciadas con %{count} cuenta proveninete de %{filename}.
+ other: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{count} cuentas provenientes de %{filename}.
preambles:
- blocking_html: Estás a punto de bloquear hasta %{total_items} cuentas proveninetes de %{filename}.
- bookmarks_html: Estás a punto de añadir hasta %{total_items} publicaciones proveninetes de %{filename} a tus marcadores.
- domain_blocking_html: Estás a punto de bloquear hasta %{total_items} dominios provenientes de %{filename}.
- following_html: Estás a punto de seguir hasta cuentas%{total_items} provenientes de %{filename}.
- lists_html: Estás a punto de añadir %{total_items} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas para añadirlas.
- muting_html: Estás a punto de silenciar hasta %{total_items} cuentas provenientes de %{filename}.
+ blocking_html:
+ one: Estás a punto de bloquear a %{count} cuenta proveninete de %{filename}.
+ other: Estás a punto de bloquear hasta %{count} cuentas provenientes de %{filename}.
+ bookmarks_html:
+ one: Está a punto de añadir %{count} publicación proveniente de %{filename} a tus marcadores.
+ other: Está a punto de añadir hasta %{count} publicaciones provenientes de %{filename} a tus marcadores.
+ domain_blocking_html:
+ one: Estás a punto de bloquear%{count} dominio proveniente de %{filename}.
+ other: Estás a punto de bloquear hasta %{count} dominios provenientes de %{filename}.
+ following_html:
+ one: Estás a punto de seguir a %{count} cuenta proveniente de %{filename}.
+ other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename}.
+ lists_html:
+ one: Estás a punto de añadir %{count} cuenta desde %{filename} a tus listas. Se creará una nueva listas si no hay listas donde añadirla.
+ other: Estás a punto de añadir %{count} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas donde añadirlas.
+ muting_html:
+ one: Estás a punto de silenciar a %{count} cuenta proveniente de %{filename}.
+ other: Estás a punto de silenciar hasta %{count} cuentas provenientes de %{filename}.
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.
recent_imports: Importaciones recientes
states:
@@ -1453,8 +1478,8 @@ es-MX:
emails:
notification_emails:
favourite: correos de notificación de favoritos
- follow: correos de notificación de nuevos seguidores
- follow_request: correos de notificación de solicitud de seguidor
+ follow: correos electrónicos de notificación de seguimiento
+ follow_request: correos electrónicos de solicitud de seguimiento
mention: correos de notificación de menciones
reblog: correos de notificación de impulsos
resubscribe_html: Si te has dado de baja por error, puedes volver a darte de alta desde tus ajustes de notificaciones por correo.
diff --git a/config/locales/es.yml b/config/locales/es.yml
index aa18e7b52..47d32c62c 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -21,6 +21,7 @@ es:
one: Publicación
other: Publicaciones
posts_tab_heading: Publicaciones
+ self_follow_error: No está permitido seguir tu propia cuenta
admin:
account_actions:
action: Realizar acción
@@ -1366,19 +1367,43 @@ es:
overwrite: Sobrescribir
overwrite_long: Reemplazar registros actuales con los nuevos
overwrite_preambles:
- blocking_html: Estás a punto de reemplazar tu lista de bloqueos por hasta %{total_items} cuentas provenientes de %{filename}.
- bookmarks_html: Estás a punto de reemplazar tus marcadores por hasta %{total_items} publicaciones provenientes de %{filename}.
- domain_blocking_html: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{total_items} dominios provenientes de %{filename}.
- following_html: Estás a punto de seguir hasta %{total_items} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta.
- lists_html: Estás a punto de reemplazar tus listas con contenidos de %{filename}. Se añadirán %{total_items} cuentas a nuevas listas.
- muting_html: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{total_items} cuentas proveninetes de %{filename}.
+ blocking_html:
+ one: Estás a punto de reemplazar tu lista de bloqueos por %{count} cuenta proveniente de %{filename}.
+ other: Estás a punto de reemplazar tu lista de bloqueos por hasta %{count} cuentas provenientes de %{filename}.
+ bookmarks_html:
+ one: Estás a punto de reemplazar tus marcadores por %{count} publicación proveniente de %{filename}.
+ other: Estás a punto de reemplazar tus marcadores por hasta %{count} publicaciones provenientes de %{filename}.
+ domain_blocking_html:
+ one: Estás a punto de reemplazar tu lista de bloqueos de dominio por %{count} dominio proveniente de %{filename}.
+ other: Estás a punto de reemplazar tu lista de bloqueos de dominio por hasta %{count} dominios provenientes de %{filename}.
+ following_html:
+ one: Estás a punto de seguir a %{count} cuenta proveniente de %{filename} y dejar de seguir a cualquier otra cuenta.
+ other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename} y dejar de seguir a cualquier otra cuenta.
+ lists_html:
+ one: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se añadirá %{count} cuenta a una nueva lista.
+ other: Estás a punto de reemplazar tus listas con el contenido de %{filename}. Se añadirán %{count} cuentas a nuevas listas.
+ muting_html:
+ one: Estás a punto de reemplazar tu lista de cuentas silenciadas con %{count} cuenta proveninete de %{filename}.
+ other: Estás a punto de reemplazar tu lista de cuentas silenciadas con hasta %{count} cuentas provenientes de %{filename}.
preambles:
- blocking_html: Estás a punto de bloquear hasta %{total_items} cuentas proveninetes de %{filename}.
- bookmarks_html: Está a punto de añadir hasta %{total_items} publicaciones proveninetes de %{filename} a tus marcadores.
- domain_blocking_html: Estás a punto de bloquear hasta %{total_items} dominios provenientes de %{filename}.
- following_html: Estás a punto de seguir hasta cuentas%{total_items} provenientes de %{filename}.
- lists_html: Estás a punto de añadir %{total_items} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas para añadirlas.
- muting_html: Estás a punto de silenciar hasta %{total_items} cuentas provenientes de %{filename}.
+ blocking_html:
+ one: Estás a punto de bloquear a %{count} cuenta proveninete de %{filename}.
+ other: Estás a punto de bloquear hasta %{count} cuentas provenientes de %{filename}.
+ bookmarks_html:
+ one: Está a punto de añadir %{count} publicación proveniente de %{filename} a tus marcadores.
+ other: Está a punto de añadir hasta %{count} publicaciones provenientes de %{filename} a tus marcadores.
+ domain_blocking_html:
+ one: Estás a punto de bloquear%{count} dominio proveniente de %{filename}.
+ other: Estás a punto de bloquear hasta %{count} dominios provenientes de %{filename}.
+ following_html:
+ one: Estás a punto de seguir a %{count} cuenta proveniente de %{filename}.
+ other: Estás a punto de seguir hasta %{count} cuentas provenientes de %{filename}.
+ lists_html:
+ one: Estás a punto de añadir %{count} cuenta desde %{filename} a tus listas. Se creará una nueva listas si no hay listas donde añadirla.
+ other: Estás a punto de añadir %{count} cuentas desde %{filename} a tus listas. Se crearán nuevas listas si no hay listas donde añadirlas.
+ muting_html:
+ one: Estás a punto de silenciar a %{count} cuenta proveniente de %{filename}.
+ other: Estás a punto de silenciar hasta %{count} cuentas provenientes de %{filename}.
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.
recent_imports: Importaciones recientes
states:
diff --git a/config/locales/et.yml b/config/locales/et.yml
index b71e3ccb6..4372a9284 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -1362,20 +1362,6 @@ et:
merge_long: Hoia olemasolevad andmed ja lisa uusi
overwrite: Kirjuta üle
overwrite_long: Vaheta praegused andmed uute vastu
- overwrite_preambles:
- blocking_html: Oled asendamas oma blokeeringute loetelu kuni %{total_items} kontoga kohast %{filename}.
- bookmarks_html: Oled asendamas oma järjehoidjaid kuni %{total_items} postitusega kohast %{filename}.
- domain_blocking_html: Oled asendamas oma domeenide blokeeringute loetelu kuni %{total_items} domeeniga kohast %{filename}.
- following_html: Oled jälgima hakkamas kuni %{total_items} kontot kohast %{filename} ja lõpetad kõigi teiste jälgimise.
- lists_html: Oled asendamas oma loetelusid faili %{filename} sisuga. Uutesse loeteludesse lisatakse kuni %{total_items} kontot.
- muting_html: Oled asendamas oma vaigistatud kontode loetelu kuni %{total_items} kontoga kohast %{filename}.
- preambles:
- blocking_html: Oled blokeerimas kuni %{total_items} kontoga kohast %{filename}.
- bookmarks_html: Oled lisamas kuni %{total_items} postitust kohast %{filename} to your bookmarks.
- domain_blocking_html: Oled blokeerimas kuni %{total_items} domeeni kohast %{filename}.
- following_html: Oled jälgima hakkamas kuni %{total_items} kontot kohast %{filename}.
- lists_html: Oled lisamas oma loeteludesse failist %{filename} kuni %{total_items} kontot. Kui pole loetelusi, kuhu lisada, luuakse uued loetelud.
- muting_html: Oled vaigistamas kuni %{total_items} kontot kohast %{filename}.
preface: Saad importida mistahes andmeid, mis on eksporditud teisest serverist. Näiteks nimekirja inimestest, keda jälgid ja keda blokeerid.
recent_imports: Viimati imporditud
states:
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index e80207d46..e9c3be2d2 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -1276,20 +1276,6 @@ eu:
merge_long: Mantendu dauden erregistroak eta gehitu berriak
overwrite: Gainidatzi
overwrite_long: Ordeztu oraingo erregistroak berriekin
- overwrite_preambles:
- blocking_html: "Blokeatutakoen zerrenda%{filename} fitxategiak dituen %{total_items} kontuekin ordeztear zaude."
- bookmarks_html: "Laster-markak%{filename} fitxategiak dituen %{total_items} argitalpenekin ordeztear zaude."
- domain_blocking_html: "Blokeatutako domeinuen zerrenda%{filename} fitxategiak dituen %{total_items} domeinuekin ordeztear zaude."
- following_html: "%{filename} fitxategiak dituen %{total_items} kontuei jarraitzear zaude; gainontzekoak jarraitzeari utziko diozu."
- lists_html: "Zerrendak%{filename} fitxategiak duen edukiarekin ordeztear zaude. %{total_items} kontu gehituko dira zerrenda berrietara."
- muting_html: "Mutututako kontuen zerrenda%{filename} fitxategiak dituen %{total_items} kontuekin ordeztear zaude."
- preambles:
- blocking_html: "%{filename} fitxategiak dituen %{total_items} kontuak blokeatzear zaude."
- bookmarks_html: "%{filename} fitxategiak dituen %{total_items} argitalpenei laster-marka jartzear zaude."
- domain_blocking_html: "%{filename} fitxategiak dituen %{total_items} domeinuak blokeatzear zaude."
- following_html: "%{filename} fitxategiak dituen %{total_items} konturi jarraitzear zaude."
- lists_html: "%{filename} fitxategiak dituen %{total_items} kontuzerrendetan gehitzear zaude. Zerrenda berriak sortuko dira zerrendarik ez badago."
- muting_html: "%{filename} fitxategiak dituen %{total_items} kontuak mututzear zaude."
preface: Beste zerbitzari bateko datuak inportatu ditzakezu, esaterako jarraitzen duzun edo blokeatu duzun jendearen zerrenda.
recent_imports: Azken inportazioak
states:
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 22ccc7116..52ea0b374 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -21,6 +21,7 @@ fi:
one: Julkaisu
other: viestiä
posts_tab_heading: Julkaisut
+ self_follow_error: Oman tilisi seuraaminen ei ole sallittua
admin:
account_actions:
action: Suorita toimi
@@ -1366,19 +1367,43 @@ fi:
overwrite: Korvaa
overwrite_long: Korvaa nykyiset tietueet uusilla
overwrite_preambles:
- blocking_html: Olet aikeissa korvata estoluettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}.
- bookmarks_html: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{total_items} julkaisulla tiedostosta %{filename}.
- domain_blocking_html: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{total_items} verkkotunnuksella tiedostosta %{filename}.
- following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen.
- lists_html: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{total_items} tiliä.
- muting_html: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{total_items} tilillä tiedostosta %{filename}.
+ blocking_html:
+ one: Olet aikeissa korvata estoluettelosi kaikkiaan %{count} tilillä tiedostosta %{filename}.
+ other: Olet aikeissa korvata estoluettelosi kaikkiaan %{count} tilillä tiedostosta %{filename}.
+ bookmarks_html:
+ one: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{count} julkaisulla tiedostosta %{filename}.
+ other: Olet aikeissa korvata kirjanmerkkisi kaikkiaan %{count} julkaisulla tiedostosta %{filename}.
+ domain_blocking_html:
+ one: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{count} verkkotunnuksella tiedostosta %{filename}.
+ other: Olet aikeissa korvata verkkotunnusten estoluettelosi kaikkiaan %{count} verkkotunnuksella tiedostosta %{filename}.
+ following_html:
+ one: Olet aikeissa seurata kaikkiaan %{count} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen.
+ other: Olet aikeissa seurata kaikkiaan %{count} tiliä tiedostosta %{filename} ja lopettaa kaikkien muiden seuraamisen.
+ lists_html:
+ one: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{count} tili.
+ other: Olet aikeissa korvata listojasi tiedoston %{filename} sisällöllä. Uusiin listoihin lisätään kaikkiaan %{count} tiliä.
+ muting_html:
+ one: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{count} tilillä tiedostosta %{filename}.
+ other: Olet aikeissa korvata mykistettyjen tilien luettelosi kaikkiaan %{count} tilillä tiedostosta %{filename}.
preambles:
- blocking_html: Olet aikeissa estää kaikkiaan %{total_items} tiliä tiedostosta %{filename}.
- bookmarks_html: Olet aikeissa lisätä kaikkiaan %{total_items} julkaisua tiedostosta %{filename}kirjanmerkkeihisi.
- domain_blocking_html: Olet aikeissa estää kaikkiaan %{total_items} verkkotunnusta tiedostosta %{filename}.
- following_html: Olet aikeissa seurata kaikkiaan %{total_items} tiliä tiedostosta %{filename}.
- lists_html: Olet aikeissa lisätä listoihisi kaikkiaan %{total_items} tiliä tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa.
- muting_html: Olet aikeissa mykistää kaikkiaan %{total_items} tiliä tiedostosta %{filename}.
+ blocking_html:
+ one: Olet aikeissa estää kaikkiaan %{count} tilin tiedostosta %{filename}.
+ other: Olet aikeissa estää kaikkiaan %{count} tiliä tiedostosta %{filename}.
+ bookmarks_html:
+ one: Olet aikeissa lisätä kaikkiaan %{count} julkaisun tiedostosta %{filename}kirjanmerkkeihisi.
+ other: Olet aikeissa lisätä kaikkiaan %{count} julkaisua tiedostosta %{filename}kirjanmerkkeihisi.
+ domain_blocking_html:
+ one: Olet aikeissa estää kaikkiaan %{count} verkkotunnuksen tiedostosta %{filename}.
+ other: Olet aikeissa estää kaikkiaan %{count} verkkotunnusta tiedostosta %{filename}.
+ following_html:
+ one: Olet aikeissa seurata kaikkiaan %{count} tiliä tiedostosta %{filename}.
+ other: Olet aikeissa seurata kaikkiaan %{count} tiliä tiedostosta %{filename}.
+ lists_html:
+ one: Olet aikeissa lisätä listoihisi kaikkiaan %{count} tilin tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa.
+ other: Olet aikeissa lisätä listoihisi kaikkiaan %{count} tiliä tiedostosta %{filename}. Uusia listoja luodaan, jos sopivaa kohdelistaa ei ole olemassa.
+ muting_html:
+ one: Olet aikeissa mykistää kaikkiaan %{count} tilin tiedostosta %{filename}.
+ other: Olet aikeissa mykistää kaikkiaan %{count} tiliä tiedostosta %{filename}.
preface: Voit tuoda toiselta palvelimelta viemiäsi tietoja, kuten seuraamiesi tai estämiesi käyttäjien luettelon.
recent_imports: Viimeksi tuotu
states:
diff --git a/config/locales/fo.yml b/config/locales/fo.yml
index 31eb67b3b..fcf3eb031 100644
--- a/config/locales/fo.yml
+++ b/config/locales/fo.yml
@@ -21,6 +21,7 @@ fo:
one: Uppslag
other: Uppsløg
posts_tab_heading: Uppsløg
+ self_follow_error: Tað er ikki loyvt at fylgja tíni egnu kontu
admin:
account_actions:
action: Frem atgerð
@@ -1365,20 +1366,6 @@ fo:
merge_long: Varðveit verandi teigarøð og legg nýggjar afturat
overwrite: Skriva omaná
overwrite_long: Legg nýggj teigarøð inn fyri tey verandi
- overwrite_preambles:
- blocking_html: Tú ert í ferð við at útskifta blokeringslistan hjá tær við upp til %{total_items} kontum frá %{filename}.
- bookmarks_html: Tú ert í ferð við at útskifta tíni bókamerki við upp til %{total_items} postum frá %{filename}.
- domain_blocking_html: Tú ert í ferð við at útskifta navnaøkisblokeringslistan hjá tær við upp til %{total_items} navnaøkjum frá %{filename}.
- following_html: Tú ert í ferð við at fylgja upp til %{total_items} kontum frá %{filename} og at gevast at fylgja øðrum.
- lists_html: Tú ert í ferð við at skifta listarnar hjá tær út við tað, sum er í %{filename}. Upp til %{total_items} kontur verða lagdar afturat nýggjum listum.
- muting_html: Tú ert í ferð við at útskifta listan hjá tær við doyvdum kontum við upp til %{total_items} kontum frá %{filename}.
- preambles:
- blocking_html: Tú ert í ferð við at blokera upp til %{total_items} kontur frá %{filename}.
- bookmarks_html: Tú ert í ferð við at leggja upp til %{total_items} postar frá %{filename} afturat tínum bókamerkjum.
- domain_blocking_html: Tú ert í ferð við at blokera upp til %{total_items} navnaøki frá %{filename}.
- following_html: Tú ert í ferð við at fylgja upp til %{total_items} kontur frá %{filename}.
- lists_html: Tú ert í ferð við at leggja upp til %{total_items} kontur frá %{filename} afturat tínum listum. Nýggir listar verða stovnaðir, um eingin listi er at leggja afturat.
- muting_html: Tú ert í ferð við at doyva upp til %{total_items} kontur frá %{filename}.
preface: Tú kanst innlesa dátur, sum tú hevur útlisið frá einum øðrum ambætara, so sum listar av fólki, sum tú fylgir ella blokerar.
recent_imports: Feskar innflytingar
states:
diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml
index 16cdb7931..01463edac 100644
--- a/config/locales/fr-CA.yml
+++ b/config/locales/fr-CA.yml
@@ -1368,20 +1368,6 @@ fr-CA:
merge_long: Garder les enregistrements existants et ajouter les nouveaux
overwrite: Écraser
overwrite_long: Remplacer les enregistrements actuels par les nouveaux
- overwrite_preambles:
- blocking_html: Vous allez remplacer votre liste de blocages par jusqu'à %{total_items} comptes tirés de %{filename}.
- bookmarks_html: Vous allez remplacer vos signets par jusqu'à %{total_items} posts tirés de %{filename}.
- domain_blocking_html: Vous allez remplacer votre liste de blocages de domaines par jusqu'à %{total_items} domaines tirés de %{filename}.
- following_html: Vous allez suivre jusqu’à %{total_items} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre.
- lists_html: Vous allez remplacer vos listes par le contenu de %{filename}. Jusqu'à %{total_items} comptes seront ajoutés à de nouvelles listes.
- muting_html: Vous allez remplacer votre liste de comptes masqués par jusqu'à %{total_items} comptes tirés de %{filename}.
- preambles:
- blocking_html: Vous allez bloquer jusqu'à %{total_items} comptes tirés de %{filename}.
- bookmarks_html: Vous allez ajouter jusqu'à %{total_items} messages de %{filename} à vos signets.
- domain_blocking_html: Vous allez bloquer jusqu'à %{total_items} domaines tirés de %{filename}.
- following_html: Vous allez suivre jusqu'à %{total_items} comptes tirés de %{filename}.
- lists_html: Vous allez ajouter jusqu'à %{total_items} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées s'il n'y a aucune liste à laquelle les ajouter.
- muting_html: Vous allez masquer jusqu'à %{total_items} comptes tirés de %{filename}.
preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte.
recent_imports: Importations récentes
states:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index bc57d00e6..c3ce66c39 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -1368,20 +1368,6 @@ fr:
merge_long: Garder les enregistrements existants et ajouter les nouveaux
overwrite: Écraser
overwrite_long: Remplacer les enregistrements actuels par les nouveaux
- overwrite_preambles:
- blocking_html: Vous allez remplacer votre liste de blocage par près de %{total_items} comptes tirés de %{filename}.
- bookmarks_html: Vous allez remplacer vos signets par près de %{total_items} posts tirés de %{filename}.
- domain_blocking_html: Vous allez remplacer votre liste de blocage de domaines par près de %{total_items} domaines tirés de %{filename}.
- following_html: Vous allez suivre jusqu’à %{total_items} comptes depuis %{filename} et arrêter de suivre n’importe qui d’autre.
- lists_html: Vous allez remplacer vos listes par le contenu de %{filename}. Près de %{total_items} comptes seront ajoutés à de nouvelles listes.
- muting_html: Vous allez remplacer votre liste de comptes masqués par près de %{total_items} comptes tirés de %{filename}.
- preambles:
- blocking_html: Vous allez bloquer près de %{total_items} comptes tirés de %{filename}.
- bookmarks_html: Vous allez ajouter près de %{total_items} messages de %{filename} à vos signets.
- domain_blocking_html: Vous allez bloquer près de %{total_items} domaines tirés de %{filename}.
- following_html: Vous allez suivre près de %{total_items} comptes tirés de %{filename}.
- lists_html: Vous allez ajouter près de %{total_items} comptes depuis %{filename} à vos listes. De nouvelles listes seront créées si besoin.
- muting_html: Vous allez masquer près de %{total_items} comptes tirés de %{filename}.
preface: Vous pouvez importer certaines données que vous avez exporté d’un autre serveur, comme une liste des personnes que vous suivez ou bloquez sur votre compte.
recent_imports: Récents imports
states:
diff --git a/config/locales/fy.yml b/config/locales/fy.yml
index 0379af34e..d63d2ac2a 100644
--- a/config/locales/fy.yml
+++ b/config/locales/fy.yml
@@ -24,6 +24,8 @@ fy:
admin:
account_actions:
action: Aksje útfiere
+ already_silenced: Dizze account is al beheind.
+ already_suspended: Dizze account is al opskort.
title: Moderaasjemaatregelen tsjin %{acct} nimme
account_moderation_notes:
create: Lit in opmerking efter
@@ -45,6 +47,7 @@ fy:
title: E-mailadres foar %{username} wizigje
change_role:
changed_msg: Rol mei sukses wizige!
+ edit_roles: Brûkersrollen beheare
label: Rol wizigje
no_role: Gjin rol
title: Rol fan %{username} wizigje
@@ -601,6 +604,7 @@ fy:
suspend_description_html: De account en alle ynhâld sil net tagonklik wêze en úteinlik fuortsmiten wurde, en ynteraksje hjirmei sil net mooglik wêze. Binnen 30 dagen werom te draaien. Dit slút alle rapportaazjes oer dizze account.
actions_description_html: Beslis hokker maatregel nommen wurde moat om dizze rapportaazje op te lossen. Wannear’t jo in (straf)maatregel tsjin it rapportearre account nimme, kriget de account in e-mailmelding, behalve wannear’t de spam-kategory keazen is.
actions_description_remote_html: Beslút hokker aksje nommen wurde moat om dizze rapportaazje ôf te hanneljen. Dit hat allinnich ynfloed op hoe’t jo server kommunisearret mei dizze eksterne account en omgiet mei de ynhâld.
+ actions_no_posts: Dit rapport hat gjin byhearrende berjochten om fuort te smiten
add_to_report: Mear oan de rapportaazje tafoegje
already_suspended_badges:
local: Al opskoarte op dizze server
@@ -871,6 +875,9 @@ fy:
message_html: Jo hawwe foar dizze server gjin regels opsteld.
sidekiq_process_check:
message_html: Der draait gjin Sidekiq-proses foar de wachtrige(n) %{value}. Kontrolearje jo Sidekiq-konfiguraasje
+ software_version_check:
+ action: Beskikbere fernijingen besjen
+ message_html: Der is in Mastodon-fernijing beskikber.
software_version_critical_check:
action: Beskikbere fernijingen besjen
message_html: Der is in kritike fernijing foar Mastodon beskikber. Wurkje sa gau as mooglik by.
@@ -1156,6 +1163,12 @@ fy:
view_strikes: Besjoch de earder troch moderatoaren fêststelde skeiningen dy’t jo makke hawwe
too_fast: Formulier is te fluch yntsjinne. Probearje it nochris.
use_security_key: Befeiligingskaai brûke
+ author_attribution:
+ example_title: Faorbyldtekst
+ hint_html: Bepaal hoe’t wy jo fermelde, wannear’t jo keppelingen op Mastodon dield wurde.
+ more_from_html: Mear fan %{name}
+ s_blog: Weblog fan %{name}
+ title: Auteur-attribúsje
challenge:
confirm: Trochgean
hint_html: "Tip: Wy freegje jo it kommende oere net mear nei jo wachtwurd."
@@ -1353,19 +1366,43 @@ fy:
overwrite: Oerskriuwe
overwrite_long: Aktuele gegevens mei de nije gegevens ferfange
overwrite_preambles:
- blocking_html: Jo steane op it punt om jo blokkearlist mei mear as %{total_items} accounts fan %{filename} te ferfangen.
- bookmarks_html: Jo steane op it punt om jo blêdwizers mei mear as %{total_items} artikelen fan %{filename} te ferfangen.
- domain_blocking_html: Jo steane op it punt om jo domeinblokkearlist mei mear as %{total_items} domeinen fan %{filename} te ferfangen.
- following_html: Jo steane op it punt om %{total_items} accounts út %{filename}te folgjen en te stopjen mei folgjen fan alle oaren.
- lists_html: Jo steane op it punt jo listen te ferfangen troch ynhâld fan %{filename}. Oant %{total_items} accounts sille oan nije listen tafoege wurde.
- muting_html: Jo steane op it punt om jo list mei negearre accounts mei mear as %{total_items} accounts fan %{filename} út te ferfangen.
+ blocking_html:
+ one: Jo steane op it punt om jo blokkearlist mei mear as %{count} account fan %{filename} te ferfangen.
+ other: Jo steane op it punt om jo blokkearlist mei mear as %{count} accounts fan %{filename} te ferfangen.
+ bookmarks_html:
+ one: Jo steane op it punt om jo blêdwizers mei mear as %{count} artikel fan %{filename} te ferfangen.
+ other: Jo steane op it punt om jo blêdwizers mei mear as %{count} artikelen fan %{filename} te ferfangen.
+ domain_blocking_html:
+ one: Jo steane op it punt om jo domeinblokkearlist mei mear as %{count} domein fan %{filename} te ferfangen.
+ other: Jo steane op it punt om jo domeinblokkearlist mei mear as %{count} domeinen fan %{filename} te ferfangen.
+ following_html:
+ one: Jo steane op it punt om %{count} account út %{filename}te folgjen en te stopjen mei folgjen fan alle oaren.
+ other: Jo steane op it punt om %{count} accounts út %{filename}te folgjen en te stopjen mei folgjen fan alle oaren.
+ lists_html:
+ one: Jo steane op it punt jo listen te ferfangen troch ynhâld fan %{filename}. Oant %{count} account sille oan nije listen tafoege wurde.
+ other: Jo steane op it punt jo listen te ferfangen troch ynhâld fan %{filename}. Oant %{count} accounts sille oan nije listen tafoege wurde.
+ muting_html:
+ one: Jo steane op it punt om jo list mei negearre accounts mei mear as %{count} account fan %{filename} út te ferfangen.
+ other: Jo steane op it punt om jo list mei negearre accounts mei mear as %{count} accounts fan %{filename} út te ferfangen.
preambles:
- blocking_html: Jo steane op it punt om %{total_items} accounts fan %{filename} út te blokkearjen.
- bookmarks_html: Jo steane op it punt om %{total_items} berjochten fan %{filename} út oan jo blêdwizers ta te foegjen.
- domain_blocking_html: Jo steane op it punt om %{total_items} domeinen fan %{filename} út te blokkearjen.
- following_html: Jo steane op it punt om %{total_items} accounts fan %{filename} út te folgjen.
- lists_html: Jo steane op it punt om oant %{total_items} accounts fan %{filename} ta te foegjen oan jo listen. Nije listen wurde oanmakke as der gjin list is om oan ta te foegjen.
- muting_html: Jo steane op it punt om %{total_items} accounts fan %{filename} út te negearjen.
+ blocking_html:
+ one: Jo steane op it punt om %{count} account fan %{filename} út te blokkearjen.
+ other: Jo steane op it punt om %{count} accounts fan %{filename} út te blokkearjen.
+ bookmarks_html:
+ one: Jo steane op it punt om %{count} berjocht fan %{filename} út oan jo blêdwizers ta te foegjen.
+ other: Jo steane op it punt om %{count} berjochten fan %{filename} út oan jo blêdwizers ta te foegjen.
+ domain_blocking_html:
+ one: Jo steane op it punt om %{count} domein fan %{filename} út te blokkearjen.
+ other: Jo steane op it punt om %{count} domeinen fan %{filename} út te blokkearjen.
+ following_html:
+ one: Jo steane op it punt om %{count} account fan %{filename} út te folgjen.
+ other: Jo steane op it punt om %{count} accounts fan %{filename} út te folgjen.
+ lists_html:
+ one: Jo steane op it punt om oant %{count} account fan %{filename} ta te foegjen oan jo listen. Nije listen wurde oanmakke as der gjin list is om oan ta te foegjen.
+ other: Jo steane op it punt om oant %{count} accounts fan %{filename} ta te foegjen oan jo listen. Nije listen wurde oanmakke as der gjin list is om oan ta te foegjen.
+ muting_html:
+ one: Jo steane op it punt om %{count} account fan %{filename} út te negearjen.
+ other: Jo steane op it punt om %{count} accounts fan %{filename} út te negearjen.
preface: Jo kinne bepaalde gegevens, lykas de minsken dy’t jo folgje of blokkearre hawwe, nei jo account op dizze server ymportearje. Jo moatte dizze gegevens wol earst op de oarspronklike server eksportearje.
recent_imports: Resinte ymports
states:
@@ -1682,6 +1719,7 @@ fy:
delete: Account fuortsmite
development: Untwikkelers
edit_profile: Profyl bewurkje
+ export: Eksportearje
featured_tags: Utljochte hashtags
import: Ymportearje
import_and_export: Ymportearje en eksportearje
@@ -1931,6 +1969,7 @@ fy:
instructions_html: Kopiearje en plak de ûndersteande koade yn de HTML fan jo website. Foegje dernei it adres fan jo website ta oan ien fan de ekstra fjilden op jo profyl op it ljepblêd ‘Profyl bewurkje’ en bewarje de wizigingen.
verification: Ferifikaasje
verified_links: Jo ferifiearre keppelingen
+ website_verification: Website-ferifikaasje
webauthn_credentials:
add: Nije befeiligingskaai tafoegje
create:
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index e25865903..a201b7332 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -1440,20 +1440,6 @@ ga:
merge_long: Coinnigh taifid atá ann cheana féin agus cuir cinn nua leis
overwrite: Forscríobh
overwrite_long: Cuir na cinn nua in ionad na dtaifead reatha
- overwrite_preambles:
- blocking_html: Tá tú ar tí do liosta bloc a chur in ionad suas le %{total_items} cuntas ó %{filename}.
- bookmarks_html: Tá tú ar tí do leabharmharcanna a chur in ionad suas le %{total_items} postáil ó %{filename}.
- domain_blocking_html: Tá tú ar tí do liosta bloc fearainn a chur in ionad suas le %{total_items} fearainn ó %{filename}.
- following_html: Tá tú ar tí leanúint suas go dtí %{total_items} cuntas ó %{filename} agus stop a leanúint aon duine eile.
- lists_html: Tá tú ar tí do liostaí a chur in ionad inneachair %{filename}. Cuirfear suas le %{total_items} cuntas le liostaí nua.
- muting_html: Tá tú ar tí do liosta cuntas balbhaithe a chur in ionad suas le %{total_items} cuntas ó %{filename}.
- preambles:
- blocking_html: Tá tú ar tí bloc suas le %{total_items} cuntas ó %{filename}.
- bookmarks_html: Tá tú ar tí %{total_items} postáil ó %{filename} a chur le do leabharmharcanna.
- domain_blocking_html: Tá tú ar tí bloc suas le %{total_items} fearainn ó %{filename}.
- following_html: Tá tú ar tí leanúint suas go dtí %{total_items} cuntas ó %{filename}.
- lists_html: Tá tú ar tí %{total_items} cuntas ó %{filename} a chur le do liostaí. Cruthófar liostaí nua mura bhfuil aon liosta le cur leis.
- muting_html: Tá tú ar tí balbhú suas le %{total_items} cuntas ó %{filename}.
preface: Is féidir leat sonraí a d’easpórtáil tú a allmhairiú ó fhreastalaí eile, mar shampla liosta de na daoine a bhfuil tú ag leanúint nó ag cur bac orthu.
recent_imports: Allmhairí le déanaí
states:
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index a030b0d18..cb7c6254b 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -1415,20 +1415,6 @@ gd:
merge_long: Cùm na reacordan a tha ann is cuir feadhainn ùr ris
overwrite: Sgrìobh thairis air
overwrite_long: Cuir na reacordan ùra an àite na feadhna a tha ann
- overwrite_preambles:
- blocking_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a chur an àite liosta nam bacaidhean agad.
- bookmarks_html: Tha thu an impis suas ri %{total_items} post(aichean) o %{filename} a chur an àite nan comharra-lìn agad.
- domain_blocking_html: Tha thu an impis suas ri %{total_items} àrainn(ean) o %{filename} a chur an àite liosta nam bacaidhean àrainne agad.
- following_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename}a leantainn agus sguiridh tu a leantainn duine sam bith eile.
- lists_html: Tha thu an impis susbaint %{filename} a chur an àite nan liostaichean agad. Thèid suas ri %{total_items}cunntas(an) a chur ri liostaichean ùra.
- muting_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a chur an àite liosta nan cunntasan mùchte agad.
- preambles:
- blocking_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a bhacadh.
- bookmarks_html: Tha thu an impis suas ri %{total_items} post(aichean) o %{filename} a chur ris na h-annsachdan agad.
- domain_blocking_html: Tha thu an impis suas ri %{total_items} àrainn(ean) o %{filename} a bhacadh.
- following_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a leantainn.
- lists_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a chur ris na liostaichean agad. Thèid liostaichean ùra a chruthachadh mur eil liostaichean ann airson nan cunntasan a chur ris.
- muting_html: Tha thu an impis suas ri %{total_items} cunntas(an) o %{filename} a mhùchadh.
preface: "’S urrainn dhut dàta ion-phortadh a dh’às-phortaich thu o fhrithealaiche eile, can liosta nan daoine a leanas tu no a tha thu a’ bacadh."
recent_imports: Ion-phortaidhean o chionn goirid
states:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index e396761f7..cdc942132 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -21,6 +21,7 @@ gl:
one: Publicación
other: Publicacións
posts_tab_heading: Publicacións
+ self_follow_error: Non está permitido seguir a túa propia conta
admin:
account_actions:
action: Executar acción
@@ -1366,19 +1367,43 @@ gl:
overwrite: Sobreescribir
overwrite_long: Sustituír rexistros actuais cos novos
overwrite_preambles:
- blocking_html: Vas substituír a lista de bloqueos por %{total_items} contas desde %{filename}.
- bookmarks_html: Vas substituír os marcadores por %{total_items} publicacións desde %{filename}.
- domain_blocking_html: Vas substituír a lista de dominios bloqueados por %{total_items} dominios desde %{filename}.
- following_html: Vas seguir estas %{total_items} contas desde %{filename} e deixar de seguir a todas as outras contas.
- lists_html: Vas substituír as túas listas co contido de %{filename}. Vanse engadir %{total_items} contas ás novas listas.
- muting_html: Vas substituír a lista de contas acaladas por %{total_items} contas desde %{filename}.
+ blocking_html:
+ one: Vas substituír a lista de bloqueos por %{count} conta desde %{filename}.
+ other: Vas substituír a lista de bloqueos por %{count} contas desde %{filename}.
+ bookmarks_html:
+ one: Vas substituír os marcadores por %{count} publicación desde %{filename}.
+ other: Vas substituír os marcadores por %{count} publicacións desde %{filename}.
+ domain_blocking_html:
+ one: Vas substituír a lista de dominios bloqueados por %{count} dominio desde %{filename}.
+ other: Vas substituír a lista de dominios bloqueados por %{count} dominios desde %{filename}.
+ following_html:
+ one: Vas seguir a %{count} conta desde %{filename} e deixar de seguir a todas as outras contas.
+ other: Vas seguir a %{count} contas desde %{filename} e deixar de seguir a todas as outras contas.
+ lists_html:
+ one: Vas substituír as túas listas co contido de %{filename}. Vaise engadir %{count} conta ás novas listas.
+ other: Vas substituír as túas listas co contido de %{filename}. Vanse engadir %{count} contas ás novas listas.
+ muting_html:
+ one: Vas substituír a lista de contas acaladas por %{count} conta desde %{filename}.
+ other: Vas substituír a lista de contas acaladas por %{count} contas desde %{filename}.
preambles:
- blocking_html: Vas bloquear estas %{total_items} contas desde %{filename}.
- bookmarks_html: Vas engadir %{total_items} publicacións desde %{filename} aos teus marcadores.
- domain_blocking_html: Vas bloquear estes %{total_items} dominios desde %{filename}.
- following_html: Vas seguir estas %{total_items} contas desde %{filename}.
- lists_html: Vas engadir %{total_items} contas desde %{filename} ás túas listas. Crearánse novas listas se non hai listas ás que engadilas.
- muting_html: Vas acalar estas %{total_items} contas desde %{filename}.
+ blocking_html:
+ one: Vas bloquear a %{count} conta desde %{filename}.
+ other: Vas bloquear a %{count} contas desde %{filename}.
+ bookmarks_html:
+ one: Vas engadir %{count} publicación desde %{filename} aos teus marcadores.
+ other: Vas engadir %{count} publicacións desde %{filename} aos teus marcadores.
+ domain_blocking_html:
+ one: Vas bloquear a %{count} dominio desde %{filename}.
+ other: Vas bloquear a %{count} dominios desde %{filename}.
+ following_html:
+ one: Vas seguir a %{count} conta desde %{filename}.
+ other: Vas seguir a %{count} contas desde %{filename}.
+ lists_html:
+ one: Vas engadir %{count} conta desde %{filename} ás túas listas. Crearánse novas listas se non hai listas ás que engadilas.
+ other: Vas engadir %{count} contas desde %{filename} ás túas listas. Crearánse novas listas se non hai listas ás que engadilas.
+ muting_html:
+ one: Vas acalar a %{count} conta desde %{filename}.
+ other: Vas acalar a %{count} contas desde %{filename}.
preface: Podes importar os datos que exportaches doutro servidor, tales como a lista de usuarias que estás a seguir ou bloquear.
recent_imports: Importacións recentes
states:
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 846b0d14a..54b6b6f38 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -25,6 +25,7 @@ he:
other: הודעות
two: הודעותיים
posts_tab_heading: הודעות
+ self_follow_error: בלתי אפשרי לך לעקוב אחרי חשבונך
admin:
account_actions:
action: בצע/י פעולה
@@ -1416,19 +1417,67 @@ he:
overwrite: דריסה
overwrite_long: החלף רשומות נוכחיות בחדשות
overwrite_preambles:
- blocking_html: אתם עומדים להחליף את רשימת החסימות עד כדי %{total_items} חשבונות מהקובץ %{filename}.
- bookmarks_html: אתם עומדים להחליף את רשימת הסימניות עד כדי %{total_items} הודעות מהקובץ %{filename}.
- domain_blocking_html: אתם עומדים להחליף את רשימת חסימות השרתים עד כדי %{total_items} שרתים מהקובץ %{filename}.
- following_html: אתם עומדים לעקוב עד כדי %{total_items} חשבונות מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר.
- lists_html: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד %{total_items} חשבונות יתווספו לרשימות חדשות.
- muting_html: אתם עומדים להחליף את רשימת ההשתקות עד כדי %{total_items} חשבונות מהקובץ %{filename}.
+ blocking_html:
+ many: אתם עומדים להחליף את רשימת החסימות עד כדי %{count} חשבונות מהקובץ %{filename}.
+ one: אתם עומדים להחליף את רשימת החסימות%{count} בחשבון אחד מהקובץ %{filename}.
+ other: אתם עומדים להחליף את רשימת החסימות עד כדי %{count} חשבונות מהקובץ %{filename}.
+ two: אתם עומדים להחליף את רשימת החסימות בעד שני חשבונות מהקובץ %{filename}.
+ bookmarks_html:
+ many: אתם עומדים להחליף את רשימת הסימניות עד כדי %{count} הודעות מהקובץ %{filename}.
+ one: אתם עומדים להחליף את רשימת הסימניות בהודעה אחת מהקובץ %{filename}.
+ other: אתם עומדים להחליף את רשימת הסימניות עד כדי %{count} הודעות מהקובץ %{filename}.
+ two: אתם עומדים להחליף את רשימת הסימניות עד כדי שתי הודעות מהקובץ %{filename}.
+ domain_blocking_html:
+ many: אתם עומדים להחליף את רשימת חסימות השרתים עד כדי %{count} שרתים מהקובץ %{filename}.
+ one: אתם עומדים להחליף את רשימת חסימות השרתיםבשרת אחד מהקובץ %{filename}.
+ other: אתם עומדים להחליף את רשימת חסימות השרתים עד כדי %{count} שרתים מהקובץ %{filename}.
+ two: אתם עומדים להחליף את רשימת חסימות השרתים עד כדי שני שרתים מהקובץ %{filename}.
+ following_html:
+ many: אתם עומדים לעקוב אחרי עד כדי %{count} חשבונות מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר.
+ one: אתם עומדים לעקוב אחרי חשבון אחד מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר.
+ other: אתם עומדים לעקוב אחרי עד כדי %{count} חשבונות מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר.
+ two: אתם עומדים לעקוב אחרי עד כדי שני חשבונות מהקובץ %{filename} ובמקביל להפסיק מעקב אחרי כל משתמש אחר.
+ lists_html:
+ many: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד %{count} חשבונות יתווספו לרשימות חדשות.
+ one: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד חשבון אחד יתווסף לרשימות חדשות.
+ other: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד %{count} חשבונות יתווספו לרשימות חדשות.
+ two: הפעולה הבאה תחליף את רשימותיך בתוכן של %{filename}. עד שני חשבונות יתווספו לרשימות חדשות.
+ muting_html:
+ many: אתם עומדים להחליף את רשימת ההשתקות בעד כדי %{count} חשבונות מהקובץ %{filename}.
+ one: אתם עומדים להחליף את רשימת ההשתקות בחשבון אחד מהקובץ %{filename}.
+ other: אתם עומדים להחליף את רשימת ההשתקות בעד כדי %{count} חשבונות מהקובץ %{filename}.
+ two: אתם עומדים להחליף את רשימת ההשתקות בעד כדי שני חשבונות מהקובץ %{filename}.
preambles:
- blocking_html: אתם עומדים לחסום עד %{total_items} חשבונות מהקובץ %{filename}.
- bookmarks_html: אתם עומדים להוסיף עד %{total_items} הודעות מהקובץ %{filename} לרשימת הסימניות שלכם.
- domain_blocking_html: אתם עומדים לחסום עד כדי %{total_items} שרתים מהקובץ %{filename}.
- following_html: אתם עומדים לעקוב אחרי עד %{total_items} חשבונות מהקובץ %{filename}.
- lists_html: הפעולה הבאה תוסיף עד %{total_items} חשבונות מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה.
- muting_html: אתם עומדים להשתיק עד %{total_items} חשבונות מהקובץ %{filename}.
+ blocking_html:
+ many: אתם עומדים לחסום עד %{count} חשבונות מהקובץ %{filename}.
+ one: אתם עומדים לחסוםחשבון אחד מהקובץ %{filename}.
+ other: אתם עומדים לחסום עד %{count} חשבונות מהקובץ %{filename}.
+ two: אתם עומדים לחסום עד שני חשבונות מהקובץ %{filename}.
+ bookmarks_html:
+ many: אתם עומדים להוסיף עד %{count} הודעות מהקובץ %{filename} לרשימת הסימניות שלכם.
+ one: אתם עומדים להוסיףהודעה אחת מהקובץ %{filename} לרשימת הסימניות שלכם.
+ other: אתם עומדים להוסיף עד %{count} הודעות מהקובץ %{filename} לרשימת הסימניות שלכם.
+ two: אתם עומדים להוסיף עד שתי הודעות מהקובץ %{filename} לרשימת הסימניות שלכם.
+ domain_blocking_html:
+ many: אתם עומדים לחסום עד כדי %{count} שרתים מהקובץ %{filename}.
+ one: אתם עומדים לחסום עד שרת אחד מהקובץ %{filename}.
+ other: אתם עומדים לחסום עד כדי %{count} שרתים מהקובץ %{filename}.
+ two: אתם עומדים לחסום עד כדי שני שרתים מהקובץ %{filename}.
+ following_html:
+ many: אתם עומדים לעקוב אחרי עד %{count} חשבונות מהקובץ %{filename}.
+ one: אתם עומדים לעקוב אחרי עד חשבון אחד מהקובץ %{filename}.
+ other: אתם עומדים לעקוב אחרי עד %{count} חשבונות מהקובץ %{filename}.
+ two: אתם עומדים לעקוב אחרי עד שני חשבונות מהקובץ %{filename}.
+ lists_html:
+ many: הפעולה הבאה תוסיף עד %{count} חשבונות מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה.
+ one: הפעולה הבאה תוסיף עד חשבון אחד מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה.
+ other: הפעולה הבאה תוסיף עד %{count} חשבונות מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה.
+ two: הפעולה הבאה תוסיף עד שני חשבונות מהקובץ %{filename} אל הרשימות שלך. רשימות חדשות יווצרו אם עוד לא קיימת רשימה להוסיף אליה.
+ muting_html:
+ many: אתם עומדים להשתיק עד %{count} חשבונות מהקובץ %{filename}.
+ one: אתם עומדים להשתיק עד חשבון אחד מהקובץ %{filename}.
+ other: אתם עומדים להשתיק עד %{count} חשבונות מהקובץ %{filename}.
+ two: אתם עומדים להשתיק עד שני חשבונות מהקובץ %{filename}.
preface: ניתן ליבא מידע מסויים כגון כל הנעקבים או המשתמשים החסומים לתוך חשבונך על שרת זה, מתוך קבצים שנוצרו על ידי יצוא משרת אחר כגון רשימת הנעקבים והחסומים שלך.
recent_imports: ייבואים אחרונים
states:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index 5a00db954..15c632adc 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -1366,19 +1366,43 @@ hu:
overwrite: Felülírás
overwrite_long: Lecseréljük újakkal a jelenlegi bejegyzéseket
overwrite_preambles:
- blocking_html: 'Arra készülsz, hogy lecseréld a letiltási listát legfeljebb %{total_items} fiókra a következőből: %{filename}.'
- bookmarks_html: 'Arra készülsz, hogy lecseréld a könyvjelzőket legfeljebb %{total_items} bejegyzésre a következőből: %{filename}.'
- domain_blocking_html: 'Arra készülsz, hogy lecseréld a domain letiltási listát legfeljebb %{total_items} domainre a következőből: %{filename}.'
- following_html: 'Arra készülsz, hogy legfeljebb %{total_items} fiókotkövess a következőből: %{filename}, és abbahagyd mindenki más követését.'
- lists_html: Arra készülsz, hogy a listákat lecseréld a %{filename} tartalmával. Legfeljebb %{total_items} fiók kerül fel az új listákra.
- muting_html: 'Arra készülsz, hogy lecseréld a némított fiókok listáját legfeljebb %{total_items} fiókra a következőből: %{filename}.'
+ blocking_html:
+ one: 'Arra készülsz, hogy lecseréld a letiltási listát legfeljebb %{count} fiókra a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy lecseréld a letiltási listát legfeljebb %{count} fiókra a következőből: %{filename}.'
+ bookmarks_html:
+ one: 'Arra készülsz, hogy lecseréld a könyvjelzőket legfeljebb %{count} bejegyzésre a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy lecseréld a könyvjelzőket legfeljebb %{count} bejegyzésre a következőből: %{filename}.'
+ domain_blocking_html:
+ one: 'Arra készülsz, hogy lecseréld a domain letiltási listát legfeljebb %{count} domainre a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy lecseréld a domain letiltási listát legfeljebb %{count} domainre a következőből: %{filename}.'
+ following_html:
+ one: 'Arra készülsz, hogy legfeljebb %{count} fiókotkövess a következőből: %{filename}, és abbahagyd mindenki más követését.'
+ other: 'Arra készülsz, hogy legfeljebb %{count} fiókotkövess a következőből: %{filename}, és abbahagyd mindenki más követését.'
+ lists_html:
+ one: Arra készülsz, hogy a listákat lecseréld a %{filename} tartalmával. Legfeljebb %{count} fiók kerül fel az új listákra.
+ other: Arra készülsz, hogy a listákat lecseréld a %{filename} tartalmával. Legfeljebb %{count} fiók kerül fel az új listákra.
+ muting_html:
+ one: 'Arra készülsz, hogy lecseréld a némított fiókok listáját legfeljebb %{count} fiókra a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy lecseréld a némított fiókok listáját legfeljebb %{count} fiókra a következőből: %{filename}.'
preambles:
- blocking_html: 'Arra készülsz, hogy legfeljebb %{total_items} fiókotletilts a következőből: %{filename}.'
- bookmarks_html: 'Arra készülsz, hogy legfeljebb %{total_items} bejegyzést adj hozzá a könyvjelzőkhöz a következőből: %{filename}.'
- domain_blocking_html: 'Arra készülsz, hogy legfeljebb %{total_items} domaintletilts a következőből: %{filename}.'
- following_html: 'Arra készülsz, hogy legfeljebb %{total_items} fiókotkövess a következőből: %{filename}.'
- lists_html: Arra készülsz, hogy legfeljebb %{total_items} fiókot hozzáadj a %{filename} fájlból a listákhoz. Új listák jönnek létre, ha nincs hozzáadható lista.
- muting_html: 'Arra készülsz, hogy legfeljebb %{total_items} fiókotnémíts a következőből: %{filename}.'
+ blocking_html:
+ one: 'Arra készülsz, hogy legfeljebb %{count} fiókotletilts a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy legfeljebb %{count} fiókotletilts a következőből: %{filename}.'
+ bookmarks_html:
+ one: 'Arra készülsz, hogy legfeljebb %{count} bejegyzést adj hozzá a könyvjelzőkhöz a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy legfeljebb %{count} bejegyzést adj hozzá a könyvjelzőkhöz a következőből: %{filename}.'
+ domain_blocking_html:
+ one: 'Arra készülsz, hogy legfeljebb %{count} domaintletilts a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy legfeljebb %{count} domaintletilts a következőből: %{filename}.'
+ following_html:
+ one: 'Arra készülsz, hogy legfeljebb %{count} fiókotkövess a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy legfeljebb %{count} fiókotkövess a következőből: %{filename}.'
+ lists_html:
+ one: Arra készülsz, hogy legfeljebb %{count} fiókot hozzáadj a %{filename} fájlból a listákhoz. Új listák jönnek létre, ha nincs hozzáadható lista.
+ other: Arra készülsz, hogy legfeljebb %{count} fiókot hozzáadj a %{filename} fájlból a listákhoz. Új listák jönnek létre, ha nincs hozzáadható lista.
+ muting_html:
+ one: 'Arra készülsz, hogy legfeljebb %{count} fiókotnémíts a következőből: %{filename}.'
+ other: 'Arra készülsz, hogy legfeljebb %{count} fiókotnémíts a következőből: %{filename}.'
preface: Itt importálhatod egy másik kiszolgálóról lementett adataidat, például követettjeid és letiltott felhasználóid listáját.
recent_imports: Legutóbbi importálások
states:
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index a8bc48b30..4d9148674 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -1346,20 +1346,6 @@ ia:
merge_long: Conservar le registros existente e adder noves
overwrite: Superscriber
overwrite_long: Reimplaciar registros actual con le noves
- overwrite_preambles:
- blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas per usque a %{total_items} contos proveniente de %{filename}.
- bookmarks_html: Tu es sur le puncto de reimplaciar tu marcapaginas per usque a %{total_items} messages desde %{filename}.
- domain_blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas de dominio per usque a %{total_items} dominios proveniente de %{filename}.
- following_html: Tu es sur le puncto de sequer usque a %{total_items} contos de %{filename} e cessar de sequer tote le alteres.
- lists_html: Tu es sur le puncto de reimplaciar tu listas per le contento de %{filename}. Usque a %{total_items} contos essera addite a nove listas.
- muting_html: Tu es sur le puncto de reimplaciar tu lista de contos silentiate con usque a %{total_items} contos desde %{filename}.
- preambles:
- blocking_html: Tu es sur le puncto de blocar usque a %{total_items} contos a partir de %{filename}.
- bookmarks_html: Tu es sur le puncto de adder usque a %{total_items} messages desde %{filename} a tu marcapaginas.
- domain_blocking_html: Tu es sur le puncto de blocar usque a %{total_items} dominios a partir de %{filename}.
- following_html: Tu es sur le puncto de sequer usque a %{total_items} contos desde %{filename}.
- lists_html: Tu es sur le puncto de adder usque %{total_items} contos desde %{filename} a tu listas. Nove listas essera create si il non ha un lista al qual adder los.
- muting_html: Tu es sur le puncto de silentiar usque a %{total_items} contos desde %{filename}.
preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca.
recent_imports: Importationes recente
states:
diff --git a/config/locales/ie.yml b/config/locales/ie.yml
index 7e8140a37..94c4b7f4f 100644
--- a/config/locales/ie.yml
+++ b/config/locales/ie.yml
@@ -1274,20 +1274,6 @@ ie:
merge_long: Conservar existent registres e adjunter li novis
overwrite: Remplazzar
overwrite_long: Remplazzar existent registres per li novis
- overwrite_preambles:
- blocking_html: Tu va remplazzar tui liste de bloccat contos per til %{total_items} contos de %{filename}.
- bookmarks_html: Tu va remplazzar tui marcatores per til %{total_items} postas de %{filename}.
- domain_blocking_html: Tu va remplazzar tui liste de bloccat dominias per til %{total_items} dominias de %{filename}.
- following_html: Tu va sequer til %{total_items} contos de %{filename} e dessequer omni altri contos.
- lists_html: Tu va remplazzar tui listes per li contenete de %{filename}. Til %{total_items} contos va esser adjuntet a nov listes.
- muting_html: Tu va remplazzar tui liste de silentiat contos per til %{total_items} contos de %{filename}.
- preambles:
- blocking_html: Tu va bloccar til %{total_items} contos de %{filename}.
- bookmarks_html: Tu va adjunter til %{total_items} postas de %{filename} a tui marcatores.
- domain_blocking_html: Tu va bloccar til %{total_items} dominias de %{filename}.
- following_html: Tu va sequer til %{total_items} contos de %{filename}.
- lists_html: Tu va adjunter til %{total_items} contos de %{filename} a tui listes. Nov listes va esser creat si ne hay un liste a quel adjunter.
- muting_html: Tu va silentiar til %{total_items} contos de %{filename}.
preface: Tu posse importar data quel tu ha exportat de un altri servitor, quam un liste del gente quem tu seque o blocca.
recent_imports: Recent importationes
states:
diff --git a/config/locales/io.yml b/config/locales/io.yml
index dfb583450..8ce5f3403 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -1247,20 +1247,6 @@ io:
merge_long: Retenez displonebla rekordi e insertez novi
overwrite: Remplasez
overwrite_long: Remplasez nuna rekordi per novi
- overwrite_preambles:
- blocking_html: Vu substitucos vua blokusolisto per til %{total_items} konti de %{filename}.
- bookmarks_html: Vu substitucos vua libromarki per til %{total_items} posti de %{filename}.
- domain_blocking_html: Vu substitucos vua domenoblokusolisto per til %{total_items} domeni de %{filename}.
- following_html: Vu sequos til %{total_items} konti de %{filename} e haltar sequar irga altra konto.
- lists_html: Vu substitucos vua listi kun la kontenaji di %{filename}. Til %{total_items} konti adjuntesos a nova listi.
- muting_html: Vu substitucos vua listo di konti silencigita per til %{total_items} konti de %{filename}.
- preambles:
- blocking_html: Vu blokusos til %{total_items} konti de %{filename}.
- bookmarks_html: Vu adjuntos %{total_items} posti de %{filename} a vua libromarki.
- domain_blocking_html: Vu blokusos til %{total_items} domeni de %{filename}.
- following_html: Vu sequos til %{total_items} konti de %{filename}.
- lists_html: Vu adjuntos til %{total_items} konti de %{filename} a vua listi. Nova listi kreesos se ne existas listo a quo adjuntar.
- muting_html: Vu silencigos til %{total_items} konti en %{filename}.
preface: Tu povas importacar kelka datumi, tal quala listi de omna homi quin tu sequas o blokusas, a tua konto di ca instaluro, per dosiero exportacita de altra instaluro.
recent_imports: Importacaji recenta
states:
diff --git a/config/locales/is.yml b/config/locales/is.yml
index 4af26eea0..f181470e4 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -21,6 +21,7 @@ is:
one: Færsla
other: Færslur
posts_tab_heading: Færslur
+ self_follow_error: Ekki er leyft að fylgjast með eigin aðgangi
admin:
account_actions:
action: Framkvæma aðgerð
@@ -877,6 +878,9 @@ is:
message_html: Þú hefur ekki skilgreint neinar reglur fyrir netþjón.
sidekiq_process_check:
message_html: Ekkert Sidekiq-ferli er í gangi fyrir %{value} biðröð/biðraðir. Endilega athugaðu Sidekiq-uppsetninguna þína
+ software_version_check:
+ action: Skoða tiltækar uppfærslur
+ message_html: Uppfærsla er tiltæk fyrir Mastodon.
software_version_critical_check:
action: Skoða tiltækar uppfærslur
message_html: Áríðandi uppfærsla Mastodon er tiltæk, uppfærðu eins fljótt og auðið er.
@@ -1366,20 +1370,6 @@ is:
merge_long: Halda fyrirliggjandi færslum og bæta við nýjum
overwrite: Skrifa yfir
overwrite_long: Skipta út fyrirliggjandi færslum með þeim nýju
- overwrite_preambles:
- blocking_html: Þú er í þann mund að fara að skipta út útilokanalistanum þínum með allt að %{total_items} aðgöngum úr %{filename}.
- bookmarks_html: Þú er í þann mund að fara að skipta út bókamerkjunum þínum með allt að %{total_items} færslum úr %{filename}.
- domain_blocking_html: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokuð lén með allt að %{total_items} lénum úr %{filename}.
- following_html: Þú er í þann mund að fara að fylgjast með allt að %{total_items} aðgöngum úr %{filename} og hætta að fylgjast með öllum öðrum.
- lists_html: Þú ert í þann mund að fara að skipta út listunum þínum með efninu úr %{filename}. Allt að %{total_items} aðgöngum verður bætt við nýju listana.
- muting_html: Þú er í þann mund að fara að skipta út listanum þínum yfir útilokaða aðganga með allt að %{total_items} aðgöngum úr %{filename}.
- preambles:
- blocking_html: Þú er í þann mund að fara að útiloka allt að %{total_items} aðganga úr %{filename}.
- bookmarks_html: Þú er í þann mund að fara að bæta við allt að %{total_items} færslum úr %{filename} við bókamerkin þín.
- domain_blocking_html: Þú er í þann mund að fara að útiloka allt að %{total_items} lén úr %{filename}.
- following_html: Þú er í þann mund að fara að fylgjast með allt að %{total_items} aðgöngum úr %{filename}.
- lists_html: Þú ert í þann mund að fara að bæta við allt að %{total_items} aðgöngum úr %{filename} við listana þína. Nýir listar verða útbúnir ef ekki finnst neinn listi til að bæta í.
- muting_html: Þú er í þann mund að fara að þagga allt að %{total_items} aðganga úr %{filename}.
preface: Þú getur flutt inn gögn sem þú hefur flutt út frá öðrum vefþjóni, svo sem lista yfir fólk sem þú fylgist með eða útilokar.
recent_imports: Nýlega flutt inn
states:
@@ -1696,6 +1686,7 @@ is:
delete: Eyðing notandaaðgangs
development: Þróun
edit_profile: Breyta notandasniði
+ export: Flytja út
featured_tags: Myllumerki með aukið vægi
import: Flytja inn
import_and_export: Inn- og útflutningur
diff --git a/config/locales/it.yml b/config/locales/it.yml
index a89fa0a53..91b67c2b4 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -1368,19 +1368,43 @@ it:
overwrite: Sovrascrivi
overwrite_long: Sostituisci record attuali con quelli nuovi
overwrite_preambles:
- blocking_html: Stai per sostituire la tua lista di blocchi con un massimo di %{total_items} account da %{filename}.
- bookmarks_html: Stai per sostituire i tuoi segnalibri con un massimo di %{total_items} post da %{filename}.
- domain_blocking_html: Stai per sostituire la tua lista di domini bloccati con un massimo di %{total_items} domini da %{filename}.
- following_html: Stai per seguire fino a %{total_items} account da %{filename} e smettere di seguire chiunque altro.
- lists_html: Stai per sostituire le tue liste con i contenuti di %{filename}. Fino a %{total_items} profili verranno aggiunti a nuove liste.
- muting_html: Stai per sostituire la tua lista di account silenziati con un massimo di %{total_items} account da %{filename}.
+ blocking_html:
+ one: Stai per sostituire la tua lista di blocchi con %{count} account da %{filename}.
+ other: Stai per sostituire la tua lista di blocchi con %{count} account da %{filename}.
+ bookmarks_html:
+ one: Stai per sostituire i tuoi segnalibri con %{count} post da %{filename}.
+ other: Stai per sostituire i tuoi segnalibri con %{count} post da %{filename}.
+ domain_blocking_html:
+ one: Stai per sostituire la tua lista di domini bloccati con %{count} dominio da %{filename}.
+ other: Stai per sostituire la tua lista di domini bloccati con %{count} domini da %{filename}.
+ following_html:
+ one: Stai per seguire%{count} account da %{filename} e smettere di seguire chiunque altro.
+ other: Stai per seguire%{count} account da %{filename} e smettere di seguire chiunque altro.
+ lists_html:
+ one: Stai per sostituire le tue liste con il contenuto di %{filename}. Verrà aggiunto %{count} account alle nuove liste.
+ other: Stai per sostituire le tue liste con il contenuto di %{filename}. Verranno aggiunti %{count} account alle nuove liste.
+ muting_html:
+ one: Stai per sostituire la lista degli account silenziati con %{count} account da %{filename}.
+ other: Stai per sostituire la lista degli account silenziati con %{count} account da %{filename}.
preambles:
- blocking_html: Stai per bloccare fino a %{total_items} account da %{filename}.
- bookmarks_html: Stai per aggiungere fino a %{total_items} post da %{filename} ai tuoi segnalibri.
- domain_blocking_html: Stai per bloccare fino a %{total_items} domini da %{filename}.
- following_html: Stai per seguire fino a %{total_items} account da %{filename}.
- lists_html: Stai per aggiungere fino a %{total_items} profili da %{filename} alla tue liste. Le nuove liste saranno create se non c'è una lista a cui aggiungere.
- muting_html: Stai per silenziare fino a %{total_items} account da %{filename}.
+ blocking_html:
+ one: Stai per bloccare%{count} account da %{filename}.
+ other: Stai per bloccare%{count} account da %{filename}.
+ bookmarks_html:
+ one: Stai per aggiungere %{count} post da %{filename} ai tuoi segnalibri.
+ other: Stai per aggiungere %{count} post da %{filename} ai tuoi segnalibri.
+ domain_blocking_html:
+ one: Stai per bloccare%{count} dominio da %{filename}.
+ other: Stai per bloccare%{count} domini da %{filename}.
+ following_html:
+ one: Stai per seguire%{count} account da %{filename}.
+ other: Stai per seguire%{count} account da %{filename}.
+ lists_html:
+ one: Stai per aggiungere %{count} account da %{filename} alle tue liste. Saranno create nuove liste, se non ce ne sono altre da aggiungere.
+ other: Stai per aggiungere %{count} account da %{filename} alle tue liste. Saranno create nuove liste, se non ce ne sono altre da aggiungere.
+ muting_html:
+ one: Stai per silenziare%{count} account da %{filename}.
+ other: Stai per silenziare%{count} account da %{filename}.
preface: Puoi importare alcune informazioni, come le persone che segui o hai bloccato su questo server, da file creati da un'esportazione su un altro server.
recent_imports: Importazioni recenti
states:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 41f93397d..bda5b2d8f 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -19,6 +19,7 @@ ja:
posts:
other: 投稿
posts_tab_heading: 投稿
+ self_follow_error: 自分のアカウントをフォローすることはできません
admin:
account_actions:
action: アクションを実行
@@ -1141,6 +1142,9 @@ ja:
view_strikes: 過去のストライクを表示
too_fast: フォームの送信が速すぎます。もう一度やり直してください。
use_security_key: セキュリティキーを使用
+ author_attribution:
+ example_title: サンプルテキスト
+ s_blog: "%{name} のブログ"
challenge:
confirm: 続ける
hint_html: 以後1時間はパスワードの再入力を求めません
@@ -1330,20 +1334,6 @@ ja:
merge_long: 現在のレコードを保持したまま新しいものを追加します
overwrite: 上書き
overwrite_long: 現在のレコードを新しいもので置き換えます
- overwrite_preambles:
- blocking_html: "%{filename}の%{total_items}個のアカウントでブロックしたアカウントリストを置き換えます。"
- bookmarks_html: "%{filename}の%{total_items}件の投稿でブックマークの一覧を置き換えます。"
- domain_blocking_html: "%{filename}の%{total_items}個のドメインで非表示にしたドメインリストを置き換えます。"
- following_html: "%{filename}の%{total_items}個のアカウントをフォローします。また、この中に含まれていないアカウントのフォローを解除します。"
- lists_html: "作成済みのリストを%{filename}の内容で置き換えます。%{total_items}個のアカウントが新しいリストに追加されます。"
- muting_html: "%{filename}の%{total_items}個のアカウントでミュートしたアカウントリストを置き換えます。"
- preambles:
- blocking_html: "%{filename}の%{total_items}個のアカウントをブロックします。"
- bookmarks_html: "%{filename}の%{total_items}件の投稿をブックマークに追加します。"
- domain_blocking_html: "%{filename}の%{total_items}個のドメインを非表示にします。"
- following_html: "%{filename}の%{total_items}個のアカウントをフォローします。"
- lists_html: "%{filename}の%{total_items}個のアカウントをリストに追加します。追加先のリストがない場合は新しく作成されます。"
- muting_html: "%{filename}の%{total_items}個のアカウントをミュートします。"
preface: 他のサーバーでエクスポートされたファイルから、フォロー/ブロックした情報をこのサーバー上のアカウントにインポートできます。
recent_imports: 最近のインポート
states:
@@ -1659,6 +1649,7 @@ ja:
delete: アカウントの削除
development: 開発
edit_profile: プロフィールを編集
+ export: エクスポート
featured_tags: 注目のハッシュタグ
import: データのインポート
import_and_export: インポート・エクスポート
@@ -1903,6 +1894,7 @@ ja:
instructions_html: 以下のコードをコピーしてwebサイトのHTMLに貼り付けます。次に「プロフィールを編集」タブから、「プロフィール補足情報」のいずれかの欄にwebサイトのURLを記入し、「変更を保存」をクリックしてください。
verification: 認証
verified_links: 確認済みリンク
+ website_verification: ウェブサイトの認証
webauthn_credentials:
add: セキュリティキーを追加
create:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index fc2b0c8ca..1335d4506 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -19,6 +19,7 @@ ko:
posts:
other: 게시물
posts_tab_heading: 게시물
+ self_follow_error: 본인의 계정을 팔로우할 수는 없습니다
admin:
account_actions:
action: 조치 취하기
@@ -1343,19 +1344,31 @@ ko:
overwrite: 덮어쓰기
overwrite_long: 기존 것을 모두 지우고 새로 추가
overwrite_preambles:
- blocking_html: 나의 차단 목록을 %{filename}에서 가져온 %{total_items} 개의 계정으로 덮어 씌우려고 합니다.
- bookmarks_html: 나의 북마크를 %{filename}에서 가져온 %{total_items} 개의 게시물로 덮어 씌우려고 합니다.
- domain_blocking_html: 나의 도메인 차단 목록을 %{filename}에서 가져온 %{total_items} 개의 도메인으로 덮어 씌우려고 합니다.
- following_html: "%{filename}에서 가져온 %{total_items} 개의 계정을 팔로우하고 나머지 계정을 팔로우 해제하려고 합니다."
- lists_html: 나의 리스트를 %{filename}에서 가져온 %{total_items} 개의 계정으로 덮어 씌우려고 합니다.
- muting_html: 나의 뮤트한 계정 목록을 %{filename}에서 가져온 %{total_items} 개의 계정으로 덮어 씌우려고 합니다.
+ blocking_html:
+ other: 나의 차단 목록을 %{filename}에서 가져온 %{count} 개의 계정으로 덮어 씌우려고 합니다.
+ bookmarks_html:
+ other: 나의 북마크를 %{filename}에서 가져온 %{count} 개의 게시물로 덮어 씌우려고 합니다.
+ domain_blocking_html:
+ other: 나의 도메인 차단 목록을 %{filename}에서 가져온 %{count} 개의 도메인으로 덮어 씌우려고 합니다.
+ following_html:
+ other: "%{filename}에서 가져온 %{count} 개의 계정을 팔로우하고 나머지 계정을 팔로우 해제하려고 합니다."
+ lists_html:
+ other: 나의 리스트를 %{filename}에서 가져온 %{count} 개의 계정으로 덮어 씌우려고 합니다.
+ muting_html:
+ other: 나의 뮤트한 계정 목록을 %{filename}에서 가져온 %{count} 개의 계정으로 덮어 씌우려고 합니다.
preambles:
- blocking_html: "%{filename}에서 가져온 %{total_items}개의 계정을 차단하려고 합니다."
- bookmarks_html: "%{filename}에서 가져온 %{total_items}개의 게시물을 북마크에 추가하려고 합니다."
- domain_blocking_html: "%{filename}에서 가져온 %{total_items}개의 도메인을 차단하려고 합니다."
- following_html: "%{filename}에서 가져온 %{total_items}개의 계정을 팔로우하려고 합니다."
- lists_html: "%{filename}에서 가져온 %{total_items}개의 계정을 내 리스트에 추가하려고 합니다. 추가할 리스트가 존재하지 않으면 새로 생성될 것입니다."
- muting_html: "%{filename}에서 가져온 %{total_items}개의 계정을 뮤트하려고 합니다."
+ blocking_html:
+ other: "%{filename}에서 가져온 %{count}개의 계정을 차단하려고 합니다."
+ bookmarks_html:
+ other: "%{filename}에서 가져온 %{count}개의 게시물을 북마크에 추가하려고 합니다."
+ domain_blocking_html:
+ other: "%{filename}에서 가져온 %{count}개의 도메인을 차단하려고 합니다."
+ following_html:
+ other: "%{filename}에서 가져온 %{count}개의 계정을 팔로우하려고 합니다."
+ lists_html:
+ other: "%{filename}에서 가져온 %{count}개의 계정을 내 리스트에 추가하려고 합니다. 추가할 리스트가 존재하지 않으면 새로 생성될 것입니다."
+ muting_html:
+ other: "%{filename}에서 가져온 %{count}개의 계정을 뮤트하려고 합니다."
preface: 다른 서버에서 내보내기 한 파일에서 팔로우 / 차단 정보를 이 계정으로 불러올 수 있습니다.
recent_imports: 최근의 가져오기
states:
diff --git a/config/locales/lad.yml b/config/locales/lad.yml
index 275bdab86..97fcf7518 100644
--- a/config/locales/lad.yml
+++ b/config/locales/lad.yml
@@ -1323,20 +1323,6 @@ lad:
merge_long: Manten rejistros egzistentes i adjusta muevos
overwrite: Sobreskrive
overwrite_long: Mete muevos rejistros en vez de los aktuales
- overwrite_preambles:
- blocking_html: Estas a punto de substituyir tu lista de blokos por asta %{total_items} kuentos de %{filename}.
- bookmarks_html: Estas a punto de substituyir tus markadores por asta %{total_items} publikasyones ke vinyeron de %{filename}.
- domain_blocking_html: Estas a punto de substituyir tu lista de blokos de domeno por asta %{total_items} domenos de %{filename}.
- following_html: Estas a punto de segir asta %{total_items} kuentos de %{filename} i deshar de segir todos los otros kuentos.
- lists_html: Estas a punto de sustituyir tus listas con el kontenido de %{filename}. Asta %{total_items} kuentos seran adjustados a muevas listas.
- muting_html: Estas a punto de substituyir tu lista de kuentos silensyados por asta %{total_items} kuentos de %{filename}.
- preambles:
- blocking_html: Estas a punto de blokar asta %{total_items} kuentos de %{filename}.
- bookmarks_html: Estas a punto de adjustar asta %{total_items} publikasyones de %{filename} a tus markadores.
- domain_blocking_html: Estas a punto de blokar asta %{total_items} domenos de %{filename}.
- following_html: Estas a punto de segir asta %{total_items} kuentos de %{filename}.
- lists_html: Estas a punto de adjustar %{total_items} kuentos dizde %{filename} a tus listas. Se kriyaran muevas listas si no ay listas para adjustarlas.
- muting_html: Estas a punto de silensyar asta %{total_items} kuentos de %{filename}.
preface: Puedes importar siertos datos, komo todas las personas a las kualas estas sigiendo o blokando en tu kuento en esta instansya, dizde dosyas eksportadas de otra instansya.
recent_imports: Importasyones resyentes
states:
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index 2cc8ff6a4..5f90b575e 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -1344,20 +1344,6 @@ lv:
merge_long: Saglabāt esošos ierakstus un pievienot jaunus
overwrite: Pārrakstīt
overwrite_long: Nomainīt pašreizējos ierakstus ar jauniem
- overwrite_preambles:
- blocking_html: Tu gatavojies aizstāt savu bloķēto sarakstu ar līdz pat %{total_items} kontiem no %{filename}.
- bookmarks_html: Tu gatavojies aizstāt savas bloķētās izlases ar līdz pat %{total_items} ziņām no %{filename}.
- domain_blocking_html: Tu gatavojies aizstāt savu bloķēto domēnu sarakstu ar līdz pat %{total_items} domēniem no %{filename}.
- following_html: Tu gatavojies sekot līdz pat %{total_items} kontiem no %{filename} un pārtrauksi sekot citiem.
- lists_html: Tu gatavojies aizstāt savus sarakstus ar %{filename} saturu. Līdz %{total_items} kontiem tiks pievienoti jauni saraksti.
- muting_html: Tu gatavojies aizstāt savu noklusināto kontu sarakstu ar līdz pat %{total_items} kontiem no %{filename}.
- preambles:
- blocking_html: Tu gatavojies bloķēt līdz pat %{total_items} kontiem no %{filename}.
- bookmarks_html: Tu gatavojies pievienot līdz pat %{total_items} ziņām no %{filename} savām grāmatzīmēm.
- domain_blocking_html: Tu gatavojies bloķēt līdz pat %{total_items} domēniem no %{filename}.
- following_html: Tu gatavojies sekot līdz pat %{total_items} kontiem no %{filename}.
- lists_html: Tu gatavojies pievienot līdz pat %{total_items} kontiem no %{filename} saviem sarakstiem. Jauni saraksti tiks izveidoti, ja nav saraksta, ko pievienot.
- muting_html: Tu gatavojies noklusināt līdz pat %{total_items} kontiem no %{filename}.
preface: Tu vari ievietot datus, kurus esi izguvis no cita servera, kā, piemēram, cilvēku sarakstu, kuriem Tu seko vai kurus bloķē.
recent_imports: Nesen importēts
states:
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index 9994a34bb..90493a30b 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -1223,20 +1223,6 @@ ms:
merge_long: Simpan rekod sedia ada dan tambah rekod baharu
overwrite: Tulis ganti
overwrite_long: Gantikan rekod semasa dengan yang baharu
- overwrite_preambles:
- blocking_html: Anda akan menggantikan senarai blok anda dengan sehingga %{total_items} akaun daripada %{filename}.
- bookmarks_html: Anda akan menggantikan penanda halaman anda dengan sehingga %{total_items} siaran daripada %{filename}.
- domain_blocking_html: Anda akan menggantikan senarai blok domain anda dengan sehingga %{total_items} domain daripada %{filename}.
- following_html: Anda akan mengikuti sehingga %{total_items} akaun daripada %{filename} dan berhenti mengikuti orang lain.
- lists_html: Anda akan menggantikan senarai anda dengan kandungan %{filename}. Sehingga %{total_items} akaun akan ditambahkan pada senarai baharu.
- muting_html: Anda akan menggantikan senarai akaun yang diredamkan dengan sehingga %{total_items} akaun daripada %{filename}.
- preambles:
- blocking_html: Anda akan menyekat sehingga %{total_items} akaun daripada %{filename}.
- bookmarks_html: Anda akan menambah sehingga %{total_items} pos daripada %{filename} ke penanda halaman anda.
- domain_blocking_html: Anda akan menyekat sehingga %{total_items} domain daripada %{filename}.
- following_html: Anda akan mengikuti sehingga %{total_items} akaun daripada %{filename}.
- lists_html: Anda akan menambah sehingga %{total_items} akaun daripada %{filename} ke senarai anda. Senarai baharu akan dibuat jika tiada senarai untuk ditambah.
- muting_html: Anda akan membisukan sehingga %{total_items} akaun daripada %{filename}.
preface: Anda boleh mengimport data yang telah anda eksport dari server lain, seperti senarai orang yang anda ikuti atau sekat.
recent_imports: Import terkini
states:
diff --git a/config/locales/my.yml b/config/locales/my.yml
index 598915fad..6a330a16c 100644
--- a/config/locales/my.yml
+++ b/config/locales/my.yml
@@ -1222,20 +1222,6 @@ my:
merge_long: ရှိပြီးသားမှတ်တမ်းများ သိမ်းဆည်းပြီး အသစ်များ ထပ်ထည့်ပါ
overwrite: ထပ်ရေးရန်
overwrite_long: လက်ရှိမှတ်တမ်းများကို အသစ်များဖြင့် အစားထိုးပါ
- overwrite_preambles:
- blocking_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ သင့်ပိတ်ဆို့စာရင်းကို အစားထိုးပါတော့မည်။
- bookmarks_html: သင်သည် %{filename} မှ %{total_items} ပို့စ်များ အထိ သင့် bookmark များကို အစားထိုးပါတော့မည်။
- domain_blocking_html: သင်သည် %{filename} မှ %{total_items} ဒိုမိန်းများ ဖြင့် သင်၏ ဒိုမိန်းပိတ်ဆို့စာရင်းကို အစားထိုးပါတော့မည်။
- following_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ စောင့်ကြည့် ပြီး အခြားမည်သူ့ကိုမျှ စောင့်မကြည့်တော့ပါ ။
- lists_html: သင်သည် %{filename} ၏ အကြောင်းအရာများဖြင့် သင့်စာရင်းများကို အစားထိုး ပါတော့မည်။ %{total_items} အကောင့်များအထိ စာရင်းအသစ်များသို့ ပေါင်းထည့်ပါမည်။
- muting_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ ဖြင့် အသံပိတ်ထားသော သင့်အကောင့်များစာရင်းကို အစားထိုးပါတော့မည်။
- preambles:
- blocking_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ ပိတ်ဆို့ပါတော့မည်။
- bookmarks_html: သင်သည် %{filename} မှ %{total_items} ပို့စ်များ အထိ သင့် Bookmark များ သို့ ပေါင်းထည့်တော့မည်။
- domain_blocking_html: သင်သည် %{filename} မှ %{total_items} ဒိုမိန်းများ အထိ ပိတ်ဆို့ပါတော့မည်။
- following_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ စောင့်ကြည့် ပါတော့မည်။
- lists_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ ကို သင့် စာရင်းများ သို့ ပေါင်းထည့်ပါတော့မည်။ ထည့်ရန်စာရင်းမရှိပါက စာရင်းအသစ်များကို ဖန်တီးပါမည်။
- muting_html: သင်သည် %{filename} မှ %{total_items} အကောင့်များ အထိ အသံတိတ်ပါတော့မည်။
preface: သင်စောင့်ကြည့်နေသည့်လူများစာရင်း သို့မဟုတ် ပိတ်ပင်ထားသည့်စာရင်းကဲ့သို့သော အခြားဆာဗာတစ်ခုမှ သင်ထုတ်ယူထားသည့်အချက်အလက်များကို ပြန်လည်ထည့်သွင်းနိုင်သည်။
recent_imports: လတ်တလောထည့်သွင်းမှုများ
states:
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index 7681a04ea..968dcc3e7 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -21,6 +21,7 @@ nl:
one: Toot
other: Berichten
posts_tab_heading: Berichten
+ self_follow_error: Het volgen van je eigen account is niet toegestaan
admin:
account_actions:
action: Actie uitvoeren
@@ -1366,19 +1367,43 @@ nl:
overwrite: Overschrijven
overwrite_long: Huidige gegevens met de nieuwe gegevens vervangen
overwrite_preambles:
- blocking_html: Je staat op het punt jouw lijst met geblokkeerde accounts te vervangen door %{total_items} accounts vanuit %{filename}.
- bookmarks_html: Je staat op het punt jouw bladwijzers te vervangen door %{total_items} berichten vanuit %{filename}.
- domain_blocking_html: Je staat op het punt jouw lijst met geblokkeerde domeinen te vervangen door %{total_items} domeinen vanuit %{filename}.
- following_html: Je staat op het punt om %{total_items} accountste volgen vanuit %{filename} en te stoppen met het volgen van alle andere accounts.
- lists_html: Je staat op het punt je lijsten te vervangen door inhoud van %{filename}. Er worden totaal %{total_items} accounts aan nieuwe lijsten toegevoegd.
- muting_html: Je staat op het punt jouw lijst met genegeerde accounts te vervangen door %{total_items} accounts vanuit %{filename}.
+ blocking_html:
+ one: Je staat op het punt om vanuit %{filename} je blokkeerlijst te vervangen met in het totaal %{count} account.
+ other: Je staat op het punt om vanuit %{filename} je blokkeerlijst te vervangen met in het totaal %{count} accounts.
+ bookmarks_html:
+ one: Je staat op het punt om vanuit %{filename} je bladwijzers te vervangen met in het totaal %{count} bericht.
+ other: Je staat op het punt om vanuit %{filename} je bladwijzers te vervangen met in het totaal %{count} berichten.
+ domain_blocking_html:
+ one: Je staat op het punt om vanuit %{filename} je lijst met geblokkeerde domeinen te vervangen met in het totaal %{count} domein.
+ other: Je staat op het punt om vanuit %{filename} je lijst met geblokkeerde domeinen te vervangen met in het totaal %{count} domeinen.
+ following_html:
+ one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account te volgen en de rest te ontvolgen.
+ other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts te volgen en de rest te ontvolgen.
+ lists_html:
+ one: Je staat op het punt om met de inhoud van %{filename} je lijsten te vervangen. In het totaal wordt %{count} account aan de nieuwe lijst(en) toegevoegd.
+ other: Je staat op het punt om met de inhoud van %{filename} je lijsten te vervangen. In het totaal worden %{count} accounts aan de nieuwe lijst(en) toegevoegd.
+ muting_html:
+ one: Je staat op het punt om vanuit %{filename} je negeerlijst te vervangen met in het totaal %{count} account.
+ other: Je staat op het punt om vanuit %{filename} je blokkeerlijst te vervangen met in het totaal %{count} accounts.
preambles:
- blocking_html: Je staat op het punt om %{total_items} accounts te blokkeren vanuit %{filename}.
- bookmarks_html: Je staat op het punt om %{total_items} berichten aan je bladwijzers toe te voegen vanuit %{filename}.
- domain_blocking_html: Je staat op het punt om %{total_items} accounts te negeren vanuit %{filename}.
- following_html: Je staat op het punt om %{total_items} accounts te volgen vanuit %{filename}.
- lists_html: Je staat op het punt om tot %{total_items} accounts van %{filename} toe te voegen aan je lijsten. Nieuwe lijsten worden aangemaakt als er geen lijst is om aan toe te voegen.
- muting_html: Je staat op het punt om %{total_items} accounts te negeren vanuit %{filename}.
+ blocking_html:
+ one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account te blokkeren.
+ other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts te blokkeren.
+ bookmarks_html:
+ one: Je staat op het punt om vanuit %{filename} in het totaal %{count} bericht aan je bladwijzers toe te voegen.
+ other: Je staat op het punt om vanuit %{filename} in het totaal %{count} berichten aan je bladwijzers toe te voegen.
+ domain_blocking_html:
+ one: Je staat op het punt om vanuit %{filename} in het totaal %{count} domein te blokkeren.
+ other: Je staat op het punt om vanuit %{filename} in het totaal %{count} domeinen te blokkeren.
+ following_html:
+ one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account te volgen.
+ other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts te volgen.
+ lists_html:
+ one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account aan je lijsten toe te voegen. Er wordt een nieuwe lijst aangemaakt wanneer er geen lijst is om het aan toe te voegen.
+ other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts aan je lijsten toe te voegen. Er worden nieuwe lijsten aangemaakt wanneer er geen lijsten zijn om ze aan toe te voegen.
+ muting_html:
+ one: Je staat op het punt om vanuit %{filename} in het totaal %{count} account te negeren.
+ other: Je staat op het punt om vanuit %{filename} in het totaal %{count} accounts te negeren.
preface: Je kunt bepaalde gegevens, zoals de mensen die jij volgt of hebt geblokkeerd, naar jouw account op deze server importeren. Je moet deze gegevens wel eerst op de oorspronkelijke server exporteren.
recent_imports: Recent geïmporteerd
states:
@@ -1526,8 +1551,8 @@ nl:
title: Nieuw volgverzoek
mention:
action: Reageren
- body: 'Jij bent door %{name} vermeld in:'
- subject: Jij bent vermeld door %{name}
+ body: 'Je bent door %{name} vermeld in:'
+ subject: Je bent vermeld door %{name}
title: Nieuwe vermelding
poll:
subject: Een peiling van %{name} is beëindigd
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index ca5e34ee5..b28cf3016 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -21,6 +21,7 @@ nn:
one: Tut
other: Tut
posts_tab_heading: Tut
+ self_follow_error: Det er ikkje tillate å følgje din eigen konto
admin:
account_actions:
action: Utfør
@@ -1366,19 +1367,9 @@ nn:
overwrite: Skriv over
overwrite_long: Byt ut dei noverande oppføringane med dei nye
overwrite_preambles:
- blocking_html: Du skal til å byta ut blokkeringslista di med opp til %{total_items} brukarkontoar frå %{filename}.
- bookmarks_html: Du skal til å byta ut bokmerka dine med opp til %{total_items} innlegg frå %{filename}.
- domain_blocking_html: Du skal til å byta ut domeneblokkeringslista di med opp til %{total_items} domene frå %{filename}.
- following_html: Du skal til å fylgja opp til %{total_items} brukarkontoar frå %{filename} og slutta å fylgja alle andre.
- lists_html: Du er i ferd med å erstatta listene dine med innhaldet i %{filename}. Opptil %{total_items} kontoar vil bli lagt til i nye lister.
- muting_html: Du skal til å byta ut lista di over dempa brukarkontoar med opp til %{total_items} brukarkontoar frå %{filename}.
- preambles:
- blocking_html: Du skal til å blokkera opp til %{total_items} brukarkontoar frå %{filename}.
- bookmarks_html: Du skal til å leggja til opp til %{total_items} innlegg frå %{filename} til bokmerka dine.
- domain_blocking_html: Du skal til å blokkera opp til %{total_items} domene frå %{filename}.
- following_html: Du skal til å fylgja opp til %{total_items} brukarkontoar frå %{filename}.
- lists_html: Du er i ferd med å leggja til opptil %{total_items} kontoar frå %{filename} til i listene dine. Nye lister vil blir oppretta om ingen lister finst frå før.
- muting_html: Du skal til å dempa opp til %{total_items} brukarkontoar frå %{filename}.
+ blocking_html:
+ one: Du skal til å byta ut blokkeringslista di med opp til %{count} brukarkonto frå %{filename}.
+ other: Du skal til å byta ut blokkeringslista di med opp til %{count} brukarkontoar frå %{filename}.
preface: Du kan henta inn data som du har eksportert frå ein annan tenar, som t.d. ei liste over folka du fylgjer eller blokkerer.
recent_imports: Siste importar
states:
diff --git a/config/locales/no.yml b/config/locales/no.yml
index ec0b14d5a..94986f4ca 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -1268,20 +1268,6 @@
merge_long: Behold eksisterende og legg til nye
overwrite: Overskriv
overwrite_long: Erstatt gjeldende med de nye
- overwrite_preambles:
- blocking_html: Du er i ferd med å erstatte din blokkeringsliste med inntil %{total_items} kontoer fra %{filename}.
- bookmarks_html: Du er i ferd med å erstatte dine bokmerker med inntil %{total_items} innlegg fra %{filename}.
- domain_blocking_html: Du er i ferd med å erstatte din domene-blokkeringsliste med inntil %{total_items} domener fra %{filename}.
- following_html: Du er i ferd med å følge inntil %{total_items} kontoer fra %{filename} og slutte å følge alle andre.
- lists_html: Du er i ferd med å erstatte dine lister med innholdet i %{filename}. Inntil %{total_items} kontoer legges til i nye lister.
- muting_html: Du er i ferd med å erstatte listen over dempede kontoer med inntil %{total_items} kontoer fra %{filename}.
- preambles:
- blocking_html: Du er i ferd med å blokkere inntil %{total_items} kontoer fra %{filename}.
- bookmarks_html: Du er i ferd med å legge til inntil %{total_items} innlegg fra %{filename} til dine bokmerker.
- domain_blocking_html: Du er i ferd med å blokkere inntil %{total_items} domener fra %{filename}.
- following_html: Du er i ferd med å følge inntil %{total_items} kontoer fra %{filename}.
- lists_html: Du er i ferd med å legge inntil %{total_items} kontoer fra %{filename} til dine lister. Nye lister vil bli opprettet hvis det ikke finnes noen liste å legge til.
- muting_html: Du er i ferd med å dempe inntil %{total_items} kontoer fra %{filename}.
preface: Du kan importere data om brukere du følger eller blokkerer til kontoen din på denne instansen med eksportfiler fra andre instanser.
recent_imports: Siste importer
states:
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index 3aaf7a5a5..ba1f4812e 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -25,6 +25,7 @@ pl:
one: wpis
other: Wpisów
posts_tab_heading: Wpisy
+ self_follow_error: Nie możesz obserwować swojego konta
admin:
account_actions:
action: Wykonaj działanie
@@ -1415,20 +1416,6 @@ pl:
merge_long: Zachowaj obecne wpisy i dodaj nowe
overwrite: Nadpisz
overwrite_long: Zastąp obecne wpisy nowymi
- overwrite_preambles:
- blocking_html: Zamierzasz zastąpić swoją listę bloków maksymalnie %{total_items} kont z %{filename}.
- bookmarks_html: Zamierzasz zastąpić swoje zakładki maksymalnie %{total_items} wpisami z %{filename}.
- domain_blocking_html: Zamierzasz zastąpić swoją listę bloków domen maksymalnie %{total_items} domenami z %{filename}.
- following_html: Zamierzasz zaobserwować maksymalnie %{total_items} kont z %{filename} i przestać obserwować kogokolwiek innego.
- lists_html: Zamierzasz zastąpić swoje listy maksymalnie %{total_items} kontami z %{filename}.
- muting_html: Zamierzasz zastąpić swoją wyciszonych maksymalnie %{total_items} kontami z %{filename}.
- preambles:
- blocking_html: Zamierzasz zablokować maksymalnie %{total_items} kont z %{filename}.
- bookmarks_html: Zamierzasz dodać maksymalnie %{total_items} wpisów do twoich zakładek z %{filename}.
- domain_blocking_html: Zamierzasz zablokować maksymalnie %{total_items} domen z %{filename}.
- following_html: Zamierzasz zaobserwować maksymalnie %{total_items} kont z %{filename}.
- lists_html: Zamierzasz dodać maksymalnie %{total_items} kont do twoich list z %{filename}. Jeżeli nie ma list, nowe zostaną utworzone.
- muting_html: Zamierzasz wyciszyć maksymalnie %{total_items} kont z %{filename}.
preface: Możesz zaimportować pewne dane (np. lista kont, które obserwujesz lub blokujesz) do swojego konta na tym serwerze, korzystając z danych wyeksportowanych z innego serwera.
recent_imports: Ostatnie importy
states:
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 6451e7c60..8e806f670 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -21,6 +21,7 @@ pt-BR:
one: Publicação
other: Publicações
posts_tab_heading: Publicações
+ self_follow_error: Seguir sua conta não é permitido
admin:
account_actions:
action: Tomar uma atitude
@@ -1365,20 +1366,6 @@ pt-BR:
merge_long: Manter os registros existentes e adicionar novos
overwrite: Sobrescrever
overwrite_long: Substituir os registros atuais com os novos
- overwrite_preambles:
- blocking_html: Você está prestes a substituir sua lista de bloqueios com até contas%{total_items} de %{filename}.
- bookmarks_html: Você está prestes a substituir seus favoritos por até %{total_items} posts de %{filename}.
- domain_blocking_html: Você está prestes a substituir sua lista de bloqueio de domínio com até domínios%{total_items} de %{filename}.
- following_html: Você está prestes a seguir até %{total_items} contas de %{filename} e parar de seguir todos os outros.
- lists_html: Você está prestes a substituir sua lista pelo conteúdo de %{filename}. Até %{total_items} contas serão adicionadas a novas listas.
- muting_html: Você está prestes a substituir sua lista de contas silenciadas com até %{total_items} contas de %{filename}.
- preambles:
- blocking_html: Você está prestes a bloquear até %{total_items} contas de %{filename}.
- bookmarks_html: Você está prestes a adicionar até %{total_items} posts de %{filename} para seus favoritos.
- domain_blocking_html: Você está prestes a bloquear até %{total_items} domínios de %{filename}.
- following_html: Você está prestes a seguir até %{total_items} contas de %{filename}.
- lists_html: Você está prestes a adicionar até %{total_items} contas a partir de %{filename} para suas listas. Novas listas serão criadas se não houver uma para a qual adicionar.
- muting_html: Você está prestes a silenciar até contas%{total_items} de %{filename}.
preface: Você pode importar dados que você exportou de outro servidor, como a lista de pessoas que você segue ou bloqueou.
recent_imports: Importações recentes
states:
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index 6b48e8de2..68217113d 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -1362,20 +1362,6 @@ pt-PT:
merge_long: Manter os registos existentes e adicionar novos registos
overwrite: Escrever por cima
overwrite_long: Substituir os registos atuais pelos novos
- overwrite_preambles:
- blocking_html: Está prestes a substituir a sua lista de bloqueios com até %{total_items} contas de %{filename}.
- bookmarks_html: Está prestes a substituir os seus marcadores com até %{total_items} publicações de %{filename}.
- domain_blocking_html: Está prestes a substituir a sua lista de bloqueios de domínio com até %{total_items} domínios de %{filename}.
- following_html: Está prestes a seguir até %{total_items} contas de %{filename} e parar de seguir quaisquer outras contas.
- lists_html: Está prestes a substituir as suas listas pelo conteúdo de %{filename}. Até %{total_items} contas serão adicionadas a novas listas.
- muting_html: Está prestes a substituir a sua lista de contas silenciadas com até %{total_items} contas de %{filename}.
- preambles:
- blocking_html: Está prestes a bloquear até %{total_items} contas de %{filename}.
- bookmarks_html: Está prestes a adicionar até %{total_items} publicações de %{filename} aos seus marcadores.
- domain_blocking_html: Está prestes a bloquear até %{total_items} domínios de %{filename}.
- following_html: Está prestes a seguir até %{total_items} contas de %{filename}.
- lists_html: Está prestes a adicionar até %{total_items} contas do ficheiro %{filename} para as suas listas. Novas listas serão criadas se não existir uma lista onde as adicionar.
- muting_html: Está prestes a silenciar até %{total_items} contas de %{filename}.
preface: Podes importar dados que tenhas exportado de outra instância, como a lista de pessoas que segues ou bloqueadas.
recent_imports: Importações recentes
states:
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index c61c7f459..25ca70373 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -1410,20 +1410,6 @@ ru:
merge_long: Сохранить имеющиеся данные и добавить новые.
overwrite: Перезаписать
overwrite_long: Перезаписать имеющиеся данные новыми.
- overwrite_preambles:
- blocking_html: Вы собираетесь заменить свой блок-лист на %{total_items} аккаунтов из %{filename}.
- bookmarks_html: Вы собираетесь заменить свои закладки на %{total_items} постов из %{filename}.
- domain_blocking_html: Вы собираетесь заменить ваш список блокировки доменов на %{total_items} доменов из %{filename}.
- following_html: Вы собираетесь следить за %{total_items} аккаунтами из %{filename} и прекратить следить за всеми остальными.
- lists_html: Вы собираетесь заменить ваши списки содержимым %{filename}. До %{total_items} аккаунты будут добавлены в новые списки.
- muting_html: Вы собираетесь заменить список отключенных аккаунтов на %{total_items} аккаунтов из %{filename}.
- preambles:
- blocking_html: Вы собираетесь заблокировать до %{total_items} аккаунтов из %{filename}.
- bookmarks_html: Вы собираетесь добавить до %{total_items} постов из %{filename} в свои закладки.
- domain_blocking_html: Вы собираетесь блокировать до %{total_items} доменов от %{filename}.
- following_html: Вы собираетесь следовать за %{total_items} аккаунтами из %{filename}.
- lists_html: Вы собираетесь добавить до %{total_items} аккаунтов от %{filename} к вашим спискам. Новые списки будут созданы, если нет списка для добавления.
- muting_html: Вы собираетесь отключить до %{total_items} аккаунтов из %{filename}.
preface: Вы можете загрузить некоторые данные, например, списки людей, на которых Вы подписаны или которых блокируете, в Вашу учётную запись на этом узле из файлов, экспортированных с другого узла.
recent_imports: Недавно импортированное
states:
diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml
index e7deca946..11b56bd50 100644
--- a/config/locales/simple_form.fy.yml
+++ b/config/locales/simple_form.fy.yml
@@ -3,6 +3,7 @@ fy:
simple_form:
hints:
account:
+ attribution_domains_as_text: Beskermet tsjin net korrekte attribúsjes.
discoverable: Jo iepenbiere berjochten kinne útljochte wurde op ferskate plakken binnen Mastodon en jo account kin oanrekommandearre wurde oan oare brûkers.
display_name: Jo folsleine namme of in aardige bynamme.
fields: Jo website, persoanlike foarnammewurden, leeftiid, alles wat jo mar kwyt wolle.
@@ -130,6 +131,7 @@ fy:
name: Jo kinne elk wurd mei in haadletter begjinne, om sa bygelyks de tekst mear lêsber te meitsjen
user:
chosen_languages: Allinnich berjochten yn de selektearre talen wurde op de iepenbiere tiidline toand
+ role: De rol bepaalt hokker rjochten in brûker hat.
user_role:
color: Kleur dy’t brûkt wurdt foar de rol yn de UI, as RGB yn heksadesimaal formaat
highlighted: Dit makket de rol iepenbier sichtber
@@ -142,6 +144,7 @@ fy:
url: Wêr’t eveneminten nei ta stjoerd wurde
labels:
account:
+ attribution_domains_as_text: Allinnich bepaalde websites tastean
discoverable: Profyl en bydragen yn sykalgoritmen opnimme litte
fields:
name: Label
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index 7f8aaa01d..bf30cdb1b 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -295,7 +295,7 @@ nl:
favourite: Wanneer iemand jouw bericht als favoriet markeert
follow: Wanneer iemand jou is gaan volgen
follow_request: Wanneer iemand jou wil volgen
- mention: Wanneer iemand jou heeft vermeld
+ mention: Je bent door iemand vermeld
pending_account: Wanneer een nieuw account moet worden beoordeeld
reblog: Wanneer iemand jouw bericht heeft geboost
report: Nieuwe rapportage is ingediend
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index 286bece87..e9c06bcaa 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -1398,20 +1398,6 @@ sl:
merge_long: Ohrani obstoječe zapise in dodaj nove
overwrite: Prepiši
overwrite_long: Zamenjaj trenutne zapise z novimi
- overwrite_preambles:
- blocking_html: Svoj seznam blokiranih računov boste nadomestili z največ %{total_items} računi iz %{filename}.
- bookmarks_html: Svoje zaznamke boste nadomestili z največ %{total_items} objavami iz %{filename}.
- domain_blocking_html: Svoj seznam blokiranih domen boste nadomestili z največ %{total_items} domenami iz %{filename}.
- following_html: "Začeli boste slediti največ %{total_items} računom iz %{filename} in prenehali slediti vsem ostalim."
- lists_html: Svoje sezname boste nadomestili z vsebino datoteke %{filename}. Največ %{total_items} računov bo dodanih na nove sezname.
- muting_html: Svoj seznam utišanih računov boste nadomestili z največ %{total_items} računi iz %{filename}.
- preambles:
- blocking_html: "Blokirali boste največ %{total_items} računov iz %{filename}."
- bookmarks_html: "Med zaznamke boste dodali boste največ %{total_items} objav iz %{filename}."
- domain_blocking_html: "Blokirali boste največ %{total_items} domen iz %{filename}."
- following_html: "Začeli boste slediti največ %{total_items} računom iz %{filename}."
- lists_html: Dodali boste največ %{total_items} računov iz %{filename} na svoje sezname. Po potrebi bodo ustvarjeni novi seznami.
- muting_html: "Utišali boste največ %{total_items} računov iz %{filename}."
preface: Podatke, ki ste jih izvozili iz drugega strežnika, lahko uvozite. Na primer seznam oseb, ki jih spremljate ali blokirate.
recent_imports: Nedavni uvozi
states:
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index 2f05d7860..0b276393a 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -1359,19 +1359,43 @@ sq:
overwrite: Mbishkruaje
overwrite_long: Zëvendësoji zërat ekzistues me të rinjtë
overwrite_preambles:
- blocking_html: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve me %{total_items} llogari nga %{filename}.
- bookmarks_html: Ju ndan një hap nga zëvendësimi i faqerojtësve tuaj me %{total_items} postime nga %{filename}.
- domain_blocking_html: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimit të përkatësive me %{total_items} përkatësi nga %{filename}.
- following_html: Ju ndan një hap nga ndjekja e %{total_items} llogarive nga %{filename} dhe reshtja së ndjekuri këdo tjetër.
- lists_html: Ju ndan një hap nga zëvendësimi i listave tuaja me lëndë nga %{filename}. Te listat e reja do të shtohen deri në %{total_items} llogari.
- muting_html: Ju ndan një hpa nga zëvendësimi i listës suaj të llogarive të heshtuara me %{total_items} llogari nga %{filename}.
+ blocking_html:
+ one: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve, me %{count} llogari nga %{filename}.
+ other: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve, me %{count} llogari nga %{filename}.
+ bookmarks_html:
+ one: Ju ndan një hap nga zëvendësimi i faqerojtësve tuaj, me %{count} postim nga %{filename}.
+ other: Ju ndan një hap nga zëvendësimi i faqerojtësve tuaj, me %{count} postime nga %{filename}.
+ domain_blocking_html:
+ one: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve të përkatësive, me %{count} përkatësi nga %{filename}.
+ other: Ju ndan një hap nga zëvendësimi i listës tuaj të bllokimeve të përkatësive, me %{count} përkatësi nga %{filename}.
+ following_html:
+ one: Ju ndan një hap nga ndjekja e %{count} llogarie nga %{filename} dhe reshtja e ndjekjes së gjithkujt tjetër.
+ other: Ju ndan një hap nga ndjekja e deri %{count} llogarish nga %{filename} dhe reshtja e ndjekjes së gjithkujt tjetër.
+ lists_html:
+ one: Ju ndan një hap nga zëvendësimi i listave tuaja me lëndën e %{filename}. Te listat e reja do të shtohet deri %{count} llogari.
+ other: Ju ndan një hap nga zëvendësimi i listave tuaja me lëndën e %{filename}. Te listat e reja do të shtohet deri %{count} llogari.
+ muting_html:
+ one: Ju ndan një hap nga zëvendësimi i listës tuaj të llogarisë së heshtuar me %{count} llogari nga from %{filename}.
+ other: Ju ndan një hap nga zëvendësimi i listës tuaj të llogarive të heshtuara me %{count} llogari nga from %{filename}.
preambles:
- blocking_html: Ju ndan një hap nga bllokimi i %{total_items} llogarive nga %{filename}.
- bookmarks_html: Ju ndan një hap nga shtimi te faqerojtësit tuaj i %{total_items} postimeve nga %{filename}.
- domain_blocking_html: Ju ndan një hap nga bllokimi i %{total_items} përkatësive nga %{filename}.
- following_html: Ju ndan një hap nga ndjekja e %{total_items} llogarive nga %{filename}.
- lists_html: Jui nda një hap nga shtimi te listat tuaja i deri %{total_items} llogarive nga %{filename}. Nëse s’ka listë ku të shtohen, do të krijohen lista të reja.
- muting_html: Ju ndan një hap nga heshtimi i %{total_items} llogarive nga %{filename}.
+ blocking_html:
+ one: Ju ndan një hap nga bllokimi i deri %{count} llogarie nga %{filename}.
+ other: Ju ndan një hap nga bllokimi i deri %{count} llogarive nga %{filename}.
+ bookmarks_html:
+ one: Ju ndan një hap nga shtimi te faqerojtësit tuaj i deri %{count} postimi nga %{filename}.
+ other: Ju ndan një hap nga shtimi te faqerojtësit tuaj i deri %{count} postimeve nga %{filename}.
+ domain_blocking_html:
+ one: Ju ndan një hap nga bllokimi i deri %{count} përkatësie nga %{filename}.
+ other: Ju ndan një hap nga bllokimi i deri %{count} përkatësive nga %{filename}.
+ following_html:
+ one: Ju ndan një hap nga ndjekja e deri %{count} llogarie nga %{filename}.
+ other: Ju ndan një hap nga ndjekja e deri %{count} llogarive nga %{filename}.
+ lists_html:
+ one: Ju ndan një hap nga shtimi i deri %{count} llogarie nga %{filename} te listat tuaja. Nëse s’ka listë ku të shtohen, do të krijohen lista të reja.
+ other: Ju ndan një hap nga shtimi i deri %{count} llogarive nga %{filename} te listat tuaja. Nëse s’ka listë ku të shtohen, do të krijohen lista të reja.
+ muting_html:
+ one: Ju ndan një hap nga heshtimi i deri %{count} llogarie nga %{filename}.
+ other: Ju ndan një hap nga heshtimi i deri %{count} llogarive nga %{filename}.
preface: Mund të importoni të dhëna që keni eksportuar nga një shërbyes tjetër, bie fjala, një listë të personave që ndiqni ose bllokoni.
recent_imports: Importime së fundi
states:
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index ad14d9d13..f56cdb9cb 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -1302,20 +1302,6 @@ sr-Latn:
merge_long: Zadržite postojeće zapise i dodajte nove
overwrite: Zameni
overwrite_long: Zameni trenutne zapise novima
- overwrite_preambles:
- blocking_html: Upravo ćete zameniti svoju listu blokiranih sa do %{total_items} naloga iz %{filename}.
- bookmarks_html: Upravo ćete zameniti svoje obeleživače sa do %{total_items} objava iz %{filename}.
- domain_blocking_html: Upravo ćete zameniti svoju listu blokiranih domena sa do %{total_items} domena iz %{filename}.
- following_html: Upravo ćete pratiti do %{total_items} naloga iz %{filename} and i prestati sa praćenjem bilo koga drugog.
- lists_html: Spremate se da zamenite svoje liste sadržajem od %{filename}. Do %{total_items} naloga će biti dodato na nove liste.
- muting_html: Upravo ćete zameniti svoju listu ignorisanih naloga sa do %{total_items} naloga iz %{filename}.
- preambles:
- blocking_html: Upravo ćete blokirati do %{total_items} naloga iz %{filename}.
- bookmarks_html: Upravo ćete dodati do %{total_items} objava iz %{filename} u vaše obeleživače.
- domain_blocking_html: Upravo ćete blokirati do %{total_items} domena iz %{filename}.
- following_html: Upravo ćete pratiti do %{total_items} naloga iz %{filename}.
- lists_html: Spremate se da dodate do %{total_items} naloga od %{filename} na svoje liste. Nove liste će biti kreirane ako ne postoji lista za dodavanje.
- muting_html: Upravo ćete ignorisati do %{total_items} naloga iz %{filename}.
preface: Možete uvesti podatke koje ste izvezli sa druge instance, kao što su liste ljudi koje ste pratili ili blokirali.
recent_imports: Nedavni uvozi
states:
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index fc92b9817..45feb0b5f 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -1332,20 +1332,6 @@ sr:
merge_long: Задржите постојеће записе и додајте нове
overwrite: Замени
overwrite_long: Замени тренутне записе новима
- overwrite_preambles:
- blocking_html: Управо ћете заменити своју листу блокираних са до %{total_items} налога из %{filename}.
- bookmarks_html: Управо ћете заменити своје обележиваче са до %{total_items} објава из %{filename}.
- domain_blocking_html: Управо ћете заменити своју листу блокираних домена са до %{total_items} домена из %{filename}.
- following_html: Управо ћете пратити до %{total_items} налога из %{filename} and и престати са праћењем било кога другог.
- lists_html: Спремате се да замените своје листе садржајем од %{filename}. До %{total_items} налога ће бити додато на нове листе.
- muting_html: Управо ћете заменити своју листу игнорисаних налога са до %{total_items} налога из %{filename}.
- preambles:
- blocking_html: Управо ћете блокирати до %{total_items} налога из %{filename}.
- bookmarks_html: Управо ћете додати до %{total_items} објава из %{filename} у ваше обележиваче.
- domain_blocking_html: Управо ћете блокирати до %{total_items} домена из %{filename}.
- following_html: Управо ћете пратити до %{total_items} налога из %{filename}.
- lists_html: Спремате се да додате до %{total_items} налога од %{filename} на своје листе. Нове листе ће бити креиране ако не постоји листа за додавање.
- muting_html: Управо ћете игнорисати до %{total_items} налога из %{filename}.
preface: Можете увести податке које сте извезли са друге инстанце, као што су листе људи које сте пратили или блокирали.
recent_imports: Недавни увози
states:
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index dadd5f160..0d19d17c3 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -1318,20 +1318,6 @@ sv:
merge_long: Behåll befintliga uppgifter och lägg till nya
overwrite: Skriv över
overwrite_long: Ersätt de nuvarande uppgifterna med de nya
- overwrite_preambles:
- blocking_html: Du är på väg att ersätta din blockeringslista med upp till %{total_items} konton från %{filename}.
- bookmarks_html: Du är på väg att ersätta din blockeringslista med upp till %{total_items} inlägg från %{filename}.
- domain_blocking_html: Du är på väg att ersätta din blockeringslista med upp till %{total_items} domäner från %{filename}.
- following_html: Du är på väg till följ upp till %{total_items} konton från %{filename} och sluta följa någon annan.
- lists_html: Du är på väg att ersätta dina listor med innehållet i %{filename}. Upp till %{total_items} konton kommer att läggas till i nya listor.
- muting_html: Du är på väg att ersätta din lista med tystade konton med upp till %{total_items} konton från %{filename}.
- preambles:
- blocking_html: Du är på väg att blockera med upp till %{total_items} konton från %{filename}.
- bookmarks_html: Du håller på att lägga upp till %{total_items} inlägg från %{filename} till dina bokmärken.
- domain_blocking_html: Du är på väg att blockera upp till %{total_items} domäner från %{filename}.
- following_html: Du är på väg att följa upp till %{total_items} konton från %{filename}.
- lists_html: Du håller på att lägga upp till %{total_items} konton från %{filename} till dina listor. Nya listor kommer att skapas om det inte finns någon lista att lägga till.
- muting_html: Du är på väg att tysta upp till %{total_items} konton från %{filename}.
preface: Du kan importera data som du exporterat från en annan instans, till exempel en lista över personer du följer eller blockerar.
recent_imports: Nyligen importerade
states:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 3cb802afe..c6ba60736 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -1340,20 +1340,6 @@ th:
merge_long: เก็บระเบียนที่มีอยู่และเพิ่มระเบียนใหม่
overwrite: เขียนทับ
overwrite_long: แทนที่ระเบียนปัจจุบันด้วยระเบียนใหม่
- overwrite_preambles:
- blocking_html: คุณกำลังจะ แทนที่รายการการปิดกั้นของคุณ ด้วยมากถึง %{total_items} บัญชี จาก %{filename}
- bookmarks_html: คุณกำลังจะ แทนที่ที่คั่นหน้าของคุณ ด้วยมากถึง %{total_items} โพสต์ จาก %{filename}
- domain_blocking_html: คุณกำลังจะ แทนที่รายการการปิดกั้นโดเมนของคุณ ด้วยมากถึง %{total_items} โดเมน จาก %{filename}
- following_html: คุณกำลังจะ ติดตาม มากถึง %{total_items} บัญชี จาก %{filename} และ หยุดการติดตามคนอื่นใด
- lists_html: คุณกำลังจะ แทนที่รายการของคุณ ด้วยเนื้อหาของ %{filename} จะเพิ่มมากถึง %{total_items} บัญชี ไปยังรายการใหม่
- muting_html: คุณกำลังจะ แทนที่รายการบัญชีที่ซ่อนอยู่ของคุณ ด้วยมากถึง %{total_items} บัญชี จาก %{filename}
- preambles:
- blocking_html: คุณกำลังจะ ปิดกั้น มากถึง %{total_items} บัญชี จาก %{filename}
- bookmarks_html: คุณกำลังจะเพิ่มมากถึง %{total_items} โพสต์ จาก %{filename} ไปยัง ที่คั่นหน้า ของคุณ
- domain_blocking_html: คุณกำลังจะ ปิดกั้น มากถึง %{total_items} โดเมน จาก %{filename}
- following_html: คุณกำลังจะ ติดตาม มากถึง %{total_items} บัญชี จาก %{filename}
- lists_html: คุณกำลังจะเพิ่มมากถึง %{total_items} บัญชี จาก %{filename} ไปยัง รายการ ของคุณ จะสร้างรายการใหม่หากไม่มีรายการที่จะเพิ่มไปยัง
- muting_html: คุณกำลังจะ ซ่อน มากถึง %{total_items} บัญชี จาก %{filename}
preface: คุณสามารถนำเข้าข้อมูลที่คุณได้ส่งออกจากเซิร์ฟเวอร์อื่น เช่น รายการผู้คนที่คุณกำลังติดตามหรือกำลังปิดกั้น
recent_imports: การนำเข้าล่าสุด
states:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index f1e098370..ee74f237e 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -21,6 +21,7 @@ tr:
one: Gönderi
other: Gönderiler
posts_tab_heading: Gönderiler
+ self_follow_error: Kendi hesabınızı takip etmenize izin yok
admin:
account_actions:
action: Eylemi gerçekleştir
@@ -1366,19 +1367,43 @@ tr:
overwrite: Üzerine yaz
overwrite_long: Mevcut kayıtları yenileriyle değiştir
overwrite_preambles:
- blocking_html: "Engel listenizi, %{filename} dosyasından, %{total_items} hesapla değiştirmek üzeresiniz."
- bookmarks_html: "Yerimlerinizi, %{filename} dosyasından, %{total_items} gönderiyle değiştirmek üzeresiniz."
- domain_blocking_html: "Alan adı engel listenizi, %{filename} dosyasından, %{total_items} alan adıyla değiştirmek üzeresiniz."
- following_html: "%{filename} dosyasından %{total_items} hesabıtakip etmeye başlamak ve diğer herkesi takipten çıkmak üzeresiniz."
- lists_html: Listelerinizi %{filename} içeriğiyle değiştirmek üzeresiniz. Yeni listelere en fazla %{total_items} hesap eklenecek.
- muting_html: "Sessize alınmış hesaplar listenizi, %{filename} dosyasından, %{total_items} hesapla değiştirmek üzeresiniz."
+ blocking_html:
+ one: "Engelleme listenizi, %{filename} dosyasından %{count} hesap ile değiştirmek üzeresiniz."
+ other: "Engelleme listenizi, %{filename} dosyasından %{count} hesap ile değiştirmek üzeresiniz."
+ bookmarks_html:
+ one: "Yerimlerinizi, %{filename} dosyasından %{count} gönderi ile değiştirmek üzeresiniz."
+ other: "Yerimlerinizi, %{filename} dosyasından %{count} gönderi ile değiştirmek üzeresiniz."
+ domain_blocking_html:
+ one: "Alan adı engelleme listenizi, %{filename} dosyasından %{count} alan adı ile değiştirmek üzeresiniz."
+ other: "Alan adı engelleme listenizi, %{filename} dosyasından %{count} alan adı ile değiştirmek üzeresiniz."
+ following_html:
+ one: "%{filename} dosyasından %{count} hesabıtakip etmek ve diğer herkesin takibini bırakmak üzeresiniz."
+ other: "%{filename} dosyasından %{count} hesabıtakip etmek ve diğer herkesin takibini bırakmak üzeresiniz."
+ lists_html:
+ one: "Listelerinizi, %{filename} dosya içeriğiyle değiştirmek üzeresiniz. %{count} hesap yeni listelere eklenecektir."
+ other: "Listelerinizi, %{filename} dosya içeriğiyle değiştirmek üzeresiniz. %{count} hesap yeni listelere eklenecektir."
+ muting_html:
+ one: "Sessize alınmış hesap listenizi, %{filename} dosyasından %{count} hesap ile değiştirmek üzeresiniz."
+ other: "Sessize alınmış hesap listenizi, %{filename} dosyasından %{count} hesap ile değiştirmek üzeresiniz."
preambles:
- blocking_html: "%{filename} dosyasından %{total_items} hesabıengellemek üzeresiniz."
- bookmarks_html: "%{filename} dosyasından %{total_items} gönderiyiyerimlerinize eklemek üzeresiniz."
- domain_blocking_html: "%{filename} dosyasından %{total_items} alan adınıengellemek üzeresiniz."
- following_html: "%{filename} dosyasından %{total_items} hesabıtakip etmek üzeresiniz."
- lists_html: "Listelerinize%{filename} dosyasından en fazla %{total_items} hesap eklemek üzeresiniz. Eklenecek bir liste olmaması durumunda yeni listeler oluşturulacaktır."
- muting_html: "%{filename} dosyasından %{total_items} hesabısessize almak üzeresiniz."
+ blocking_html:
+ one: "%{filename} dosyasından %{count} hesapengellemek üzeresiniz."
+ other: "%{filename} dosyasından %{count} hesapengellemek üzeresiniz."
+ bookmarks_html:
+ one: "Yerimlerinize, %{filename} dosyasından %{count} gönderi eklemek üzeresiniz."
+ other: "Yerimlerinize, %{filename} dosyasından %{count} gönderi eklemek üzeresiniz."
+ domain_blocking_html:
+ one: "%{filename} dosyasından %{count} alan adıengellemek üzeresiniz."
+ other: "%{filename} dosyasından %{count} alan adıengellemek üzeresiniz."
+ following_html:
+ one: "%{filename} dosyasından %{count} hesaptakip etmek üzeresiniz."
+ other: "%{filename} dosyasından %{count} hesaptakip etmek üzeresiniz."
+ lists_html:
+ one: "Listelerinize, %{filename}%{count} hesap eklemek üzeresiniz. Eklenecek liste yoksa yeni listeler oluşturulacaktır."
+ other: "Listelerinize, %{filename}%{count} hesap eklemek üzeresiniz. Eklenecek liste yoksa yeni listeler oluşturulacaktır."
+ muting_html:
+ one: "%{filename} dosyasından %{count} hesabısessize almak üzeresiniz."
+ other: "%{filename} dosyasından %{count} hesabısessize almak üzeresiniz."
preface: Diğer sunucudan alarak oluşturduğunuz dosyalar sayesinde, bu sunucudaki hesabınıza takipçilerinizi aktarabilir veya istemediğiniz kişileri otomatik olarak engelleyebilirsiniz.
recent_imports: Son içe aktarmalar
states:
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index de1847a74..dec4299fb 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -25,6 +25,7 @@ uk:
one: Допис
other: Дописів
posts_tab_heading: Дописів
+ self_follow_error: Ви не можете стежити за власним обліковим записом
admin:
account_actions:
action: Виконати дію
@@ -1415,20 +1416,6 @@ uk:
merge_long: Зберегти наявні записи та додати нові
overwrite: Перезаписувати
overwrite_long: Замінити наявні записи новими
- overwrite_preambles:
- blocking_html: Ви збираєтеся замінити ваш список блокування з %{total_items} обліковими записами з %{filename}.
- bookmarks_html: Ви збираєтеся замінити ваші закладки з %{total_items} дописами з %{filename}.
- domain_blocking_html: Ви збираєтеся замінити ваш список блокування доменів з %{total_items} доменами з %{filename}.
- following_html: Ви збираєтеся слідкувати за %{total_items} обліковими записами з %{filename} і перестати слідкувати за всіма іншими.
- lists_html: Ви збираєтеся замінити ваші списки вмістом з %{filename}. До нових списків буде додано до %{total_items} облікових записів.
- muting_html: Ви збираєтеся замінити ваш список ігнорованих облікових записів з %{total_items} обліковими записами з %{filename}.
- preambles:
- blocking_html: Ви збираєтеся заблокувати%{total_items} облікових записів з %{filename}.
- bookmarks_html: Ви збираєтеся додати %{total_items} дописів з %{filename} до ваших закладок.
- domain_blocking_html: Ви збираєтеся заблокувати%{total_items} доменів з %{filename}.
- following_html: Ви збираєтеся слідкувати за %{total_items} обліковими записами з %{filename}.
- lists_html: Ви збираєтеся додати до %{total_items} облікових записів з %{filename} до ваших списків. Нові списки будуть створені, якщо немає списку для додавання.
- muting_html: Ви збираєтеся ігнорувати%{total_items} облікових записів з %{filename}.
preface: Ви можете імпортувати дані, які ви експортували з іншого сервера, наприклад, список людей, яких ви відстежуєте або блокуєте.
recent_imports: Останні імпорти
states:
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 7e44e76e4..7c30c5b12 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -19,6 +19,7 @@ vi:
posts:
other: Tút
posts_tab_heading: Tút
+ self_follow_error: Bạn không thể tự theo dõi chính bạn
admin:
account_actions:
action: Thực hiện hành động
@@ -1341,19 +1342,31 @@ vi:
overwrite: Ghi đè
overwrite_long: Thay thế các bản ghi hiện tại bằng các bản ghi mới
overwrite_preambles:
- blocking_html: Bạn sắp thay thế danh sách chặn với %{total_items} tài khoản từ %{filename}.
- bookmarks_html: Bạn sắp thay thế lượt lưu với %{total_items} tút từ %{filename}.
- domain_blocking_html: Bạn sắp thay thế danh sách máy chủ chặn với %{total_items} máy chủ từ %{filename}.
- following_html: Bạn sắp theo dõi với %{total_items} người từ %{filename} và ngừng theo dõi bất kỳ ai.
- lists_html: Bạn sắp thay thế các danh sách bằng nội dung từ %{filename}. Hơn %{total_items} tài khoản sẽ được thêm vào những danh sách mới.
- muting_html: Bạn sắp thay thế danh sách ẩn với %{total_items} người từ %{filename}.
+ blocking_html:
+ other: Bạn sắp thay thế danh sách chặn với %{count} người từ %{filename}.
+ bookmarks_html:
+ other: Bạn sắp thay thế danh sách tút đã lưu với %{count} tút từ %{filename}.
+ domain_blocking_html:
+ other: Bạn sắp thay thế danh sách máy chủ chặn với %{count} máy chủ từ %{filename}.
+ following_html:
+ other: Bạn sắp theo dõi tới %{count} người từ %{filename} và ngừng theo dõi mọi người khác.
+ lists_html:
+ other: Bạn sắp thay thế danh sách với nội dung của %{filename}. Có %{count} người sẽ được thêm vào những danh sách mới.
+ muting_html:
+ other: Bạn sắp they thế danh sách người bạn chặn với %{count} người từ %{filename}.
preambles:
- blocking_html: Bạn sắp chặn tới %{total_items} người từ %{filename}.
- bookmarks_html: Bạn sắp thêm vào %{total_items} tút từ %{filename} vào lượt lưu.
- domain_blocking_html: Bạn sắp chặn tới %{total_items} máy chủ từ %{filename}.
- following_html: Bạn sắp theo dõi tới %{total_items} người từ %{filename}.
- lists_html: Bạn sắp thêm %{total_items} tài khoản từ %{filename} vào danh sách của bạn. Những danh sách mới sẽ được tạo nếu bạn chưa có danh sách nào.
- muting_html: Bạn sắp ẩn lên tới %{total_items} người từ %{filename}.
+ blocking_html:
+ other: Bạn sắp chặn tới %{count} người từ %{filename}.
+ bookmarks_html:
+ other: Bạn sắp thêm tới %{count} tút từ %{filename} vào danh sách tút đã lưu.
+ domain_blocking_html:
+ other: Bạn sắp chặn tới %{count} máy chủ từ %{filename}.
+ following_html:
+ other: Bạn sắp theo dõi tới %{count} người từ %{filename}.
+ lists_html:
+ other: Bạn sắp thêm tới %{count} người từ %{filename} vào danh sách của bạn. Những danh sách mới sẽ được tạo nếu không có danh sách để thêm.
+ muting_html:
+ other: Bạn sắp ẩn tới %{count} người từ %{filename}.
preface: Bạn có thể nhập dữ liệu mà bạn đã xuất từ một máy chủ khác, chẳng hạn danh sách những người đang theo dõi hoặc chặn.
recent_imports: Đã nhập gần đây
states:
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index a73871115..265480469 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -19,6 +19,7 @@ zh-CN:
posts:
other: 嘟文
posts_tab_heading: 嘟文
+ self_follow_error: 不可以关注自己
admin:
account_actions:
action: 执行操作
@@ -1341,19 +1342,31 @@ zh-CN:
overwrite: 覆盖
overwrite_long: 将当前记录替换为新记录
overwrite_preambles:
- blocking_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个账户替换你的屏蔽列表。
- bookmarks_html: 你即将使用来自 %{filename} 的 %{total_items} 篇嘟文替换你的书签。
- domain_blocking_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个域名替换你的域名屏蔽列表。
- following_html: 你即将从 %{filename} 关注 %{total_items} 个账户,并停止关注其他任何人。
- lists_html: 你即将用 %{filename} 的内容替换你的列表。新列表中将添加 %{total_items} 个账户。
- muting_html: 你即将使用来自 %{filename} 的最多 %{total_items} 个账户替换你已隐藏的账户列表。
+ blocking_html:
+ other: 你即将使用来自 %{filename} 的最多 %{count} 个帐户替换你的屏蔽列表。
+ bookmarks_html:
+ other: 你即将使用来自 %{filename} 的最多 %{count} 条嘟文替换你的书签。
+ domain_blocking_html:
+ other: 你即将使用来自 %{filename} 的最多 %{count} 个域名替换你的域名屏蔽列表。
+ following_html:
+ other: 你即将关注来自 %{filename} 的最多 %{count} 个账户,并停止关注其他所有人。
+ lists_html:
+ other: 你即将使用来自 %{filename} 的内容替换你的列表。最多将会有 %{count} 个账户 被添加到新列表。
+ muting_html:
+ other: 你即将使用来自 %{filename} 的最多 %{count} 个帐户替换你的已隐藏账户列表。
preambles:
- blocking_html: 你即将从 %{filename} 中封锁多达 %{total_items} 个账户。
- bookmarks_html: 你即将把来自 %{filename} 的 %{total_items} 篇嘟文添加到你的书签中。
- domain_blocking_html: 你即将从 %{filename} 中屏蔽 %{total_items} 个域名。
- following_html: 你即将从 %{filename} 关注最多 %{total_items} 个账户。
- lists_html: 你即将从 %{filename} 中添加最多 %{total_items} 个账户到你的列表中。如果没有可用列表,将创建新的列表。
- muting_html: 你即将从 %{filename} 中隐藏 %{total_items} 个账户。
+ blocking_html:
+ other: 你即将屏蔽来自 %{filename} 的最多 %{count} 个账号。
+ bookmarks_html:
+ other: 你即将把来自 %{filename} 的 %{count} 篇嘟文添加到你的书签中。
+ domain_blocking_html:
+ other: 你即将屏蔽来自 %{filename} 的最多 %{count} 个域名。
+ following_html:
+ other: 你即将关注来自 %{filename} 的最多 %{count} 个账号。
+ lists_html:
+ other: 你即将从 %{filename} 中添加最多 %{count} 个账户到你的列表中。如果没有可用列表,将创建新的列表。
+ muting_html:
+ other: 你即将隐藏来自 %{filename} 的最多 %{count} 个账号。
preface: 你可以在此导入你在其他实例导出的数据,比如你所关注或屏蔽的用户列表。
recent_imports: 最近导入
states:
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index c0726fc2f..e33ebeadb 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -1249,20 +1249,6 @@ zh-HK:
merge_long: 留下舊有記錄並添加新的資訊
overwrite: 覆蓋
overwrite_long: 用新記錄覆蓋當前記錄
- overwrite_preambles:
- blocking_html: 你將以%{filename}的最多%{total_items}個帳號,來取代你現有的封鎖列表。
- bookmarks_html: 你將以%{filename}的最多%{total_items}個帳號,來取代你現有的書籤。
- domain_blocking_html: 你將以%{filename}的最多%{total_items} 個帳號,來取代你現有的網域封鎖列表。
- following_html: 你將從%{filename}追蹤最多%{total_items} 個帳號,並取消追蹤其他人。
- lists_html: 你將根據%{filename}的內容取代的你列表。最多新增 %{total_items} 個帳號 到新列表。
- muting_html: 你將根據%{filename}中最多 %{total_items} 個帳號取代你的靜音帳號列表。
- preambles:
- blocking_html: 你將根據%{filename}封鎖最多 %{total_items} 個帳號。
- bookmarks_html: 你將加入 %{filename} 中最多 %{total_items} 篇帖文到你的書籤中。
- domain_blocking_html: 你將封鎖來自%{filename}的最多 %{total_items} 個網域。
- following_html: 你將追蹤 來自 %{filename} 最多 %{total_items} 個帳號。
- lists_html: 你將加入來自%{filename}最多 %{total_items} 個帳號到你的列表中。如果現時沒有列表,將會建立新列表。
- muting_html: 你將靜音來自%{filename}的最多 %{total_items} 個帳號。
preface: 你可以在此匯入你在其他服務站所匯出的資料檔,包括︰你所關注的用戶,被你封鎖的用戶。
recent_imports: 最近的匯入
states:
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 4079f68a5..c461aabcd 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -19,6 +19,7 @@ zh-TW:
posts:
other: 嘟文
posts_tab_heading: 嘟文
+ self_follow_error: 無法跟隨您自己的帳號
admin:
account_actions:
action: 執行動作
@@ -1343,19 +1344,31 @@ zh-TW:
overwrite: 覆蓋
overwrite_long: 以新的紀錄覆蓋目前紀錄
overwrite_preambles:
- blocking_html: 您將要自 %{filename} 中之 %{total_items} 個帳號 以 取代您的封鎖帳號列表。
- bookmarks_html: 您將要自 %{filename} 中之 %{total_items} 個嘟文 以 取代您的書籤。
- domain_blocking_html: 您將要自 %{filename} 中之 %{total_items} 個網域 以 取代您的封鎖網域列表。
- following_html: 您將要 跟隨 自 %{filename} 中之 %{total_items} 個帳號 並且 取消跟隨其他所有人。
- lists_html: 您將以 %{filename} 之內容取代您的列表。這將會新增 %{total_items} 個帳號至新列表。
- muting_html: 您將要自 %{filename} 中之 %{total_items} 個帳號 以 取代您的靜音帳號列表。
+ blocking_html:
+ other: 您將要自 %{filename} 中之 %{count} 個帳號 以 取代您的封鎖帳號列表。
+ bookmarks_html:
+ other: 您將要自 %{filename} 中之 %{count} 個嘟文 以 取代您的書籤。
+ domain_blocking_html:
+ other: 您將要自 %{filename} 中之 %{count} 個網域 以 取代您的封鎖網域列表。
+ following_html:
+ other: 您將要 跟隨 自 %{filename} 中之 %{count} 個帳號 並且 取消跟隨其他所有人。
+ lists_html:
+ other: 您將以 %{filename} 之內容取代您的列表。這將會新增 %{count} 個帳號至新列表。
+ muting_html:
+ other: 您將要自 %{filename} 中之 %{count} 個帳號 以 取代您的靜音帳號列表。
preambles:
- blocking_html: 您將要 封鎖 自 %{filename} 中之 %{total_items} 個帳號。
- bookmarks_html: 您將要自 %{filename} 中之 %{total_items} 個嘟文 以 加入至您的書籤。
- domain_blocking_html: 您將要 封鎖 自 %{filename} 中之 %{total_items} 個網域。
- following_html: 您將要 跟隨 自 %{filename} 中之 %{total_items} 個帳號。
- lists_html: 您將自 %{filename} 新增 %{total_items} 個帳號至您的列表。若不存在列表用以新增帳號,則會建立新列表。
- muting_html: 您將要 靜音 自 %{filename} 中之 %{total_items} 個帳號。
+ blocking_html:
+ other: 您將要 封鎖 自 %{filename} 中之 %{count} 個帳號。
+ bookmarks_html:
+ other: 您將要自 %{filename} 中之 %{count} 個嘟文 以 加入至您的書籤。
+ domain_blocking_html:
+ other: 您將要 封鎖 自 %{filename} 中之 %{count} 個網域。
+ following_html:
+ other: 您將要 跟隨 自 %{filename} 中之 %{count} 個帳號。
+ lists_html:
+ other: 您將自 %{filename} 新增 %{count} 個帳號至您的列表。若不存在列表用以新增帳號,則會建立新列表。
+ muting_html:
+ other: 您將要 靜音 自 %{filename} 中之 %{count} 個帳號。
preface: 您能於此匯入您於其他伺服器所匯出的資料檔,包括跟隨中的使用者、封鎖的使用者名單等。
recent_imports: 最近匯入的
states:
diff --git a/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb b/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb
new file mode 100644
index 000000000..11b82de8a
--- /dev/null
+++ b/db/migrate/20241007071624_fix_notification_permission_foreign_keys.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+class FixNotificationPermissionForeignKeys < ActiveRecord::Migration[7.1]
+ def up
+ safety_assured do
+ execute <<~SQL.squish
+ ALTER TABLE notification_permissions
+ DROP CONSTRAINT fk_rails_7c0bed08df,
+ ADD CONSTRAINT fk_rails_7c0bed08df
+ FOREIGN KEY (account_id)
+ REFERENCES accounts(id)
+ ON DELETE CASCADE,
+
+ DROP CONSTRAINT fk_rails_e3e0aaad70,
+ ADD CONSTRAINT fk_rails_e3e0aaad70
+ FOREIGN KEY (from_account_id)
+ REFERENCES accounts(id)
+ ON DELETE CASCADE
+ SQL
+ end
+ end
+
+ def down
+ safety_assured do
+ execute <<~SQL.squish
+ ALTER TABLE notification_permissions
+ DROP CONSTRAINT fk_rails_7c0bed08df,
+ ADD CONSTRAINT fk_rails_7c0bed08df
+ FOREIGN KEY (account_id)
+ REFERENCES accounts(id),
+
+ DROP CONSTRAINT fk_rails_e3e0aaad70,
+ ADD CONSTRAINT fk_rails_e3e0aaad70
+ FOREIGN KEY (from_account_id)
+ REFERENCES accounts(id)
+ SQL
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index f9f2d9739..68067841e 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[7.1].define(version: 2024_09_16_190140) do
+ActiveRecord::Schema[7.1].define(version: 2024_10_07_071624) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -1291,8 +1291,8 @@ ActiveRecord::Schema[7.1].define(version: 2024_09_16_190140) do
add_foreign_key "mentions", "statuses", on_delete: :cascade
add_foreign_key "mutes", "accounts", column: "target_account_id", name: "fk_eecff219ea", on_delete: :cascade
add_foreign_key "mutes", "accounts", name: "fk_b8d8daf315", on_delete: :cascade
- add_foreign_key "notification_permissions", "accounts"
- add_foreign_key "notification_permissions", "accounts", column: "from_account_id"
+ add_foreign_key "notification_permissions", "accounts", column: "from_account_id", on_delete: :cascade
+ add_foreign_key "notification_permissions", "accounts", on_delete: :cascade
add_foreign_key "notification_policies", "accounts", on_delete: :cascade
add_foreign_key "notification_requests", "accounts", column: "from_account_id", on_delete: :cascade
add_foreign_key "notification_requests", "accounts", on_delete: :cascade
diff --git a/docker-compose.yml b/docker-compose.yml
index 41876d26f..37cb16497 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -59,7 +59,7 @@ services:
web:
# You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# build: .
- image: ghcr.io/mastodon/mastodon:v4.3.0-rc.1
+ image: ghcr.io/mastodon/mastodon:v4.3.0
restart: always
env_file: .env.production
command: bundle exec puma -C config/puma.rb
@@ -83,7 +83,7 @@ services:
# build:
# dockerfile: ./streaming/Dockerfile
# context: .
- image: ghcr.io/mastodon/mastodon-streaming:v4.3.0-rc.1
+ image: ghcr.io/mastodon/mastodon-streaming:v4.3.0
restart: always
env_file: .env.production
command: node ./streaming/index.js
@@ -101,7 +101,7 @@ services:
sidekiq:
build: .
- image: ghcr.io/mastodon/mastodon:v4.3.0-rc.1
+ image: ghcr.io/mastodon/mastodon:v4.3.0
restart: always
env_file: .env.production
command: bundle exec sidekiq
diff --git a/lib/exceptions.rb b/lib/exceptions.rb
index c2ff162a6..1910d37a1 100644
--- a/lib/exceptions.rb
+++ b/lib/exceptions.rb
@@ -36,4 +36,11 @@ module Mastodon
super()
end
end
+
+ HTTP_CONNECTION_ERRORS = [
+ HTTP::ConnectionError,
+ HTTP::Error,
+ HTTP::TimeoutError,
+ OpenSSL::SSL::SSLError,
+ ].freeze
end
diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb
index 08a28e5f5..e76735298 100644
--- a/lib/mastodon/cli/accounts.rb
+++ b/lib/mastodon/cli/accounts.rb
@@ -305,7 +305,7 @@ module Mastodon::CLI
begin
code = Request.new(:head, account.uri).perform(&:code)
- rescue HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError, Mastodon::PrivateNetworkAddressError
+ rescue *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::PrivateNetworkAddressError
skip_domains << account.domain
end
diff --git a/lib/mastodon/cli/ip_blocks.rb b/lib/mastodon/cli/ip_blocks.rb
index 3c5fdb275..ef24f2e04 100644
--- a/lib/mastodon/cli/ip_blocks.rb
+++ b/lib/mastodon/cli/ip_blocks.rb
@@ -5,7 +5,7 @@ require_relative 'base'
module Mastodon::CLI
class IpBlocks < Base
- option :severity, required: true, enum: %w(no_access sign_up_requires_approval sign_up_block), desc: 'Severity of the block'
+ option :severity, required: true, enum: IpBlock.severities.keys, desc: 'Severity of the block'
option :comment, aliases: [:c], desc: 'Optional comment'
option :duration, aliases: [:d], type: :numeric, desc: 'Duration of the block in seconds'
option :force, type: :boolean, aliases: [:f], desc: 'Overwrite existing blocks'
diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb
index 4c6107d9f..d97c01858 100644
--- a/spec/mailers/notification_mailer_spec.rb
+++ b/spec/mailers/notification_mailer_spec.rb
@@ -14,6 +14,17 @@ RSpec.describe NotificationMailer do
end
end
+ shared_examples 'delivery without status' do
+ context 'when notification target_status is missing' do
+ before { allow(notification).to receive(:target_status).and_return(nil) }
+
+ it 'does not deliver mail' do
+ emails = capture_emails { mail.deliver_now }
+ expect(emails).to be_empty
+ end
+ end
+ end
+
let(:receiver) { Fabricate(:user, account_attributes: { username: 'alice' }) }
let(:sender) { Fabricate(:account, username: 'bob') }
let(:foreign_status) { Fabricate(:status, account: sender, text: 'The body of the foreign status') }
@@ -37,6 +48,7 @@ RSpec.describe NotificationMailer do
end
include_examples 'delivery to non functional user'
+ include_examples 'delivery without status'
end
describe 'follow' do
@@ -75,6 +87,7 @@ RSpec.describe NotificationMailer do
end
include_examples 'delivery to non functional user'
+ include_examples 'delivery without status'
end
describe 'reblog' do
@@ -95,6 +108,7 @@ RSpec.describe NotificationMailer do
end
include_examples 'delivery to non functional user'
+ include_examples 'delivery without status'
end
describe 'follow_request' do
diff --git a/spec/requests/api/v1/accounts_spec.rb b/spec/requests/api/v1/accounts_spec.rb
index 45e66f074..16010ae2e 100644
--- a/spec/requests/api/v1/accounts_spec.rb
+++ b/spec/requests/api/v1/accounts_spec.rb
@@ -163,6 +163,26 @@ RSpec.describe '/api/v1/accounts' do
end
end
+ context 'when user tries to follow their own account' do
+ subject do
+ post "/api/v1/accounts/#{other_account.id}/follow", headers: headers
+ end
+
+ let(:locked) { false }
+ let(:other_account) { user.account }
+
+ it 'returns http forbidden and error message' do
+ subject
+
+ error_msg = I18n.t('accounts.self_follow_error')
+
+ expect(response).to have_http_status(403)
+ expect(response.parsed_body[:error]).to eq(error_msg)
+ end
+
+ it_behaves_like 'forbidden for wrong scope', 'read:accounts'
+ end
+
context 'when modifying follow options' do
let(:locked) { false }
diff --git a/spec/services/account_statuses_cleanup_service_spec.rb b/spec/services/account_statuses_cleanup_service_spec.rb
index 857bd4fda..553d20029 100644
--- a/spec/services/account_statuses_cleanup_service_spec.rb
+++ b/spec/services/account_statuses_cleanup_service_spec.rb
@@ -27,39 +27,35 @@ RSpec.describe AccountStatusesCleanupService do
end
context 'when given a normal budget of 10' do
- it 'reports 3 deleted statuses' do
- expect(subject.call(account_policy, 10)).to eq 3
- end
+ it 'reports 3 deleted statuses and records last deleted id, deletes statuses, preserves recent unrelated statuses' do
+ expect(subject.call(account_policy, 10))
+ .to eq(3)
- it 'records the last deleted id' do
- subject.call(account_policy, 10)
- expect(account_policy.last_inspected).to eq [old_status.id, another_old_status.id].max
- end
+ expect(account_policy.last_inspected)
+ .to eq [old_status.id, another_old_status.id].max
- it 'actually deletes the statuses' do
- subject.call(account_policy, 10)
- expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])).to be_nil
- expect { recent_status.reload }.to_not raise_error
- end
-
- it 'preserves recent and unrelated statuses' do
- subject.call(account_policy, 10)
- expect { unrelated_status.reload }.to_not raise_error
- expect { recent_status.reload }.to_not raise_error
+ expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id]))
+ .to be_nil
+ expect { recent_status.reload }
+ .to_not raise_error
+ expect { unrelated_status.reload }
+ .to_not raise_error
+ expect { recent_status.reload }
+ .to_not raise_error
end
end
context 'when called repeatedly with a budget of 2' do
- it 'reports 2 then 1 deleted statuses' do
- expect(subject.call(account_policy, 2)).to eq 2
- expect(subject.call(account_policy, 2)).to eq 1
- end
+ it 'reports 2 then 1 deleted statuses and deletes in expected order' do
+ expect(subject.call(account_policy, 2))
+ .to eq(2)
+ expect(Status.find_by(id: very_old_status.id))
+ .to be_nil
- it 'actually deletes the statuses in the expected order' do
- subject.call(account_policy, 2)
- expect(Status.find_by(id: very_old_status.id)).to be_nil
- subject.call(account_policy, 2)
- expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id])).to be_nil
+ expect(subject.call(account_policy, 2))
+ .to eq(1)
+ expect(Status.find_by(id: [very_old_status.id, old_status.id, another_old_status.id]))
+ .to be_nil
end
end
@@ -90,19 +86,24 @@ RSpec.describe AccountStatusesCleanupService do
end
end
- it 'reports 0 deleted statuses then 0 then 3 then 0 again' do
- expect(subject.call(account_policy, 10)).to eq 0
- expect(subject.call(account_policy, 10)).to eq 0
- expect(subject.call(account_policy, 10)).to eq 3
- expect(subject.call(account_policy, 10)).to eq 0
+ it 'reports 0 deleted statuses then 0 then 3 then 0 again, and keeps id under oldest deletable record' do
+ expect(subject.call(account_policy, 10))
+ .to eq(0)
+ expect(subject.call(account_policy, 10))
+ .to eq(0)
+ expect(subject.call(account_policy, 10))
+ .to eq(3)
+ expect(subject.call(account_policy, 10))
+ .to eq(0)
+ expect(account_policy.last_inspected)
+ .to be < oldest_deletable_record_id
end
- it 'never causes the recorded id to get higher than oldest deletable toot' do
- subject.call(account_policy, 10)
- subject.call(account_policy, 10)
- subject.call(account_policy, 10)
- subject.call(account_policy, 10)
- expect(account_policy.last_inspected).to be < Mastodon::Snowflake.id_at(account_policy.min_status_age.seconds.ago, with_random: false)
+ def oldest_deletable_record_id
+ Mastodon::Snowflake.id_at(
+ account_policy.min_status_age.seconds.ago,
+ with_random: false
+ )
end
end
end
diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb
index a97e84080..b6ceba374 100644
--- a/spec/services/activitypub/process_status_update_service_spec.rb
+++ b/spec/services/activitypub/process_status_update_service_spec.rb
@@ -2,10 +2,6 @@
require 'rails_helper'
-def poll_option_json(name, votes)
- { type: 'Note', name: name, replies: { type: 'Collection', totalItems: votes } }
-end
-
RSpec.describe ActivityPub::ProcessStatusUpdateService do
subject { described_class.new }
@@ -294,7 +290,6 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
context 'when originally without media attachments' do
before do
stub_request(:get, 'https://example.com/foo.png').to_return(body: attachment_fixture('emojo.png'))
- subject.call(status, json, json)
end
let(:payload) do
@@ -310,19 +305,18 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
}
end
- it 'updates media attachments' do
- media_attachment = status.reload.ordered_media_attachments.first
+ it 'updates media attachments, fetches attachment, records media change in edit' do
+ subject.call(status, json, json)
- expect(media_attachment).to_not be_nil
- expect(media_attachment.remote_url).to eq 'https://example.com/foo.png'
- end
+ expect(status.reload.ordered_media_attachments.first)
+ .to be_present
+ .and(have_attributes(remote_url: 'https://example.com/foo.png'))
- it 'fetches the attachment' do
- expect(a_request(:get, 'https://example.com/foo.png')).to have_been_made
- end
+ expect(a_request(:get, 'https://example.com/foo.png'))
+ .to have_been_made
- it 'records media change in edit' do
- expect(status.edits.reload.last.ordered_media_attachment_ids).to_not be_empty
+ expect(status.edits.reload.last.ordered_media_attachment_ids)
+ .to_not be_empty
end
end
@@ -344,27 +338,26 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
before do
allow(RedownloadMediaWorker).to receive(:perform_async)
+ end
+
+ it 'updates the existing media attachment in-place, does not queue redownload, updates media, records media change' do
subject.call(status, json, json)
- end
- it 'updates the existing media attachment in-place' do
- media_attachment = status.media_attachments.ordered.reload.first
+ expect(status.media_attachments.ordered.reload.first)
+ .to be_present
+ .and have_attributes(
+ remote_url: 'https://example.com/foo.png',
+ description: 'A picture'
+ )
- expect(media_attachment).to_not be_nil
- expect(media_attachment.remote_url).to eq 'https://example.com/foo.png'
- expect(media_attachment.description).to eq 'A picture'
- end
+ expect(RedownloadMediaWorker)
+ .to_not have_received(:perform_async)
- it 'does not queue redownload for the existing media attachment' do
- expect(RedownloadMediaWorker).to_not have_received(:perform_async)
- end
+ expect(status.ordered_media_attachments.map(&:remote_url))
+ .to eq %w(https://example.com/foo.png)
- it 'updates media attachments' do
- expect(status.ordered_media_attachments.map(&:remote_url)).to eq %w(https://example.com/foo.png)
- end
-
- it 'records media change in edit' do
- expect(status.edits.reload.last.ordered_media_attachment_ids).to_not be_empty
+ expect(status.edits.reload.last.ordered_media_attachment_ids)
+ .to_not be_empty
end
end
@@ -372,10 +365,11 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
before do
poll = Fabricate(:poll, status: status)
status.update(preloadable_poll: poll)
- subject.call(status, json, json)
end
it 'removes poll and records media change in edit' do
+ subject.call(status, json, json)
+
expect(status.reload.poll).to be_nil
expect(status.edits.reload.last.poll_options).to be_nil
end
@@ -398,15 +392,13 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
}
end
- before do
- subject.call(status, json, json)
- end
-
it 'creates a poll and records media change in edit' do
- poll = status.reload.poll
+ subject.call(status, json, json)
+
+ expect(status.reload.poll)
+ .to be_present
+ .and have_attributes(options: %w(Foo Bar Baz))
- expect(poll).to_not be_nil
- expect(poll.options).to eq %w(Foo Bar Baz)
expect(status.edits.reload.last.poll_options).to eq %w(Foo Bar Baz)
end
end
@@ -419,4 +411,8 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService do
.to eq '2021-09-08 22:39:25 UTC'
end
end
+
+ def poll_option_json(name, votes)
+ { type: 'Note', name: name, replies: { type: 'Collection', totalItems: votes } }
+ end
end
diff --git a/spec/services/authorize_follow_service_spec.rb b/spec/services/authorize_follow_service_spec.rb
index 533b791fb..de2857280 100644
--- a/spec/services/authorize_follow_service_spec.rb
+++ b/spec/services/authorize_follow_service_spec.rb
@@ -12,15 +12,15 @@ RSpec.describe AuthorizeFollowService do
before do
FollowRequest.create(account: bob, target_account: sender)
+ end
+
+ it 'removes follow request and creates follow relation' do
subject.call(bob, sender)
- end
- it 'removes follow request' do
- expect(bob.requested?(sender)).to be false
- end
-
- it 'creates follow relation' do
- expect(bob.following?(sender)).to be true
+ expect(bob)
+ .to_not be_requested(sender)
+ expect(bob)
+ .to be_following(sender)
end
end
@@ -30,19 +30,17 @@ RSpec.describe AuthorizeFollowService do
before do
FollowRequest.create(account: bob, target_account: sender)
stub_request(:post, bob.inbox_url).to_return(status: 200)
+ end
+
+ it 'removes follow request, creates follow relation, send accept activity', :inline_jobs do
subject.call(bob, sender)
- end
- it 'removes follow request' do
- expect(bob.requested?(sender)).to be false
- end
-
- it 'creates follow relation' do
- expect(bob.following?(sender)).to be true
- end
-
- it 'sends an accept activity', :inline_jobs do
- expect(a_request(:post, bob.inbox_url)).to have_been_made.once
+ expect(bob)
+ .to_not be_requested(sender)
+ expect(bob)
+ .to be_following(sender)
+ expect(a_request(:post, bob.inbox_url))
+ .to have_been_made.once
end
end
end
diff --git a/spec/services/batched_remove_status_service_spec.rb b/spec/services/batched_remove_status_service_spec.rb
index 628bb198e..1ff73a633 100644
--- a/spec/services/batched_remove_status_service_spec.rb
+++ b/spec/services/batched_remove_status_service_spec.rb
@@ -24,32 +24,38 @@ RSpec.describe BatchedRemoveStatusService, :inline_jobs do
status_alice_hello
status_alice_other
+ end
+ it 'removes status records, removes from author and local follower feeds, notifies stream, sends delete' do
subject.call([status_alice_hello, status_alice_other])
+
+ expect { Status.find(status_alice_hello.id) }
+ .to raise_error ActiveRecord::RecordNotFound
+ expect { Status.find(status_alice_other.id) }
+ .to raise_error ActiveRecord::RecordNotFound
+
+ expect(feed_ids_for(alice))
+ .to_not include(status_alice_hello.id, status_alice_other.id)
+
+ expect(feed_ids_for(jeff))
+ .to_not include(status_alice_hello.id, status_alice_other.id)
+
+ expect(redis)
+ .to have_received(:publish)
+ .with("timeline:#{jeff.id}", any_args).at_least(:once)
+
+ expect(redis)
+ .to have_received(:publish)
+ .with('timeline:public', any_args).at_least(:once)
+
+ expect(a_request(:post, 'http://example.com/inbox'))
+ .to have_been_made.at_least_once
end
- it 'removes statuses' do
- expect { Status.find(status_alice_hello.id) }.to raise_error ActiveRecord::RecordNotFound
- expect { Status.find(status_alice_other.id) }.to raise_error ActiveRecord::RecordNotFound
- end
-
- it 'removes statuses from author\'s home feed' do
- expect(HomeFeed.new(alice).get(10).pluck(:id)).to_not include(status_alice_hello.id, status_alice_other.id)
- end
-
- it 'removes statuses from local follower\'s home feed' do
- expect(HomeFeed.new(jeff).get(10).pluck(:id)).to_not include(status_alice_hello.id, status_alice_other.id)
- end
-
- it 'notifies streaming API of followers' do
- expect(redis).to have_received(:publish).with("timeline:#{jeff.id}", any_args).at_least(:once)
- end
-
- it 'notifies streaming API of public timeline' do
- expect(redis).to have_received(:publish).with('timeline:public', any_args).at_least(:once)
- end
-
- it 'sends delete activity to followers' do
- expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.at_least_once
+ def feed_ids_for(account)
+ HomeFeed
+ .new(account)
+ .get(10)
+ .pluck(:id)
end
end
diff --git a/spec/services/block_service_spec.rb b/spec/services/block_service_spec.rb
index 46dd69198..d9687a540 100644
--- a/spec/services/block_service_spec.rb
+++ b/spec/services/block_service_spec.rb
@@ -26,15 +26,16 @@ RSpec.describe BlockService do
before do
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
+ end
+
+ it 'creates a blocking relation and send block activity', :inline_jobs do
subject.call(sender, bob)
- end
- it 'creates a blocking relation' do
- expect(sender.blocking?(bob)).to be true
- end
+ expect(sender)
+ .to be_blocking(bob)
- it 'sends a block activity', :inline_jobs do
- expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
+ expect(a_request(:post, 'http://example.com/inbox'))
+ .to have_been_made.once
end
end
end
diff --git a/spec/services/bulk_import_service_spec.rb b/spec/services/bulk_import_service_spec.rb
index 0197f81a4..f52fc4d7d 100644
--- a/spec/services/bulk_import_service_spec.rb
+++ b/spec/services/bulk_import_service_spec.rb
@@ -24,30 +24,19 @@ RSpec.describe BulkImportService do
].map { |data| import.rows.create!(data: data) }
end
- before do
- account.follow!(Fabricate(:account))
- end
+ before { account.follow!(Fabricate(:account)) }
- it 'does not immediately change who the account follows' do
- expect { subject.call(import) }.to_not(change { account.reload.active_relationships.to_a })
- end
+ it 'does not immediately change who the account follows, enqueues workers, sends follow requests after worker run' do
+ expect { subject.call(import) }
+ .to_not(change { account.reload.active_relationships.to_a })
- it 'enqueues workers for the expected rows' do
- subject.call(import)
- expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id))
- end
+ expect(row_worker_job_args)
+ .to match_array(rows.map(&:id))
- it 'requests to follow all the listed users once the workers have run' do
- subject.call(import)
+ stub_resolve_account_and_drain_workers
- resolve_account_service_double = instance_double(ResolveAccountService)
- allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double)
- allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) }
- allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) }
-
- Import::RowWorker.drain
-
- expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }).to contain_exactly('user@foo.bar', 'unknown@unknown.bar')
+ expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct })
+ .to contain_exactly('user@foo.bar', 'unknown@unknown.bar')
end
end
@@ -71,31 +60,20 @@ RSpec.describe BulkImportService do
account.follow!(to_be_unfollowed)
end
- it 'unfollows user not present on list' do
- subject.call(import)
- expect(account.following?(to_be_unfollowed)).to be false
- end
+ it 'updates the existing follow relationship as expected and unfollows user not on list, enqueues workers, sends follow reqs after worker run' do
+ expect { subject.call(import) }
+ .to change { Follow.where(account: account, target_account: followed).pick(:show_reblogs, :notify, :languages) }.from([true, false, nil]).to([false, true, ['en']])
- it 'updates the existing follow relationship as expected' do
- expect { subject.call(import) }.to change { Follow.where(account: account, target_account: followed).pick(:show_reblogs, :notify, :languages) }.from([true, false, nil]).to([false, true, ['en']])
- end
+ expect(account)
+ .to_not be_following(to_be_unfollowed)
- it 'enqueues workers for the expected rows' do
- subject.call(import)
- expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id))
- end
+ expect(row_worker_job_args)
+ .to match_array(rows[1..].map(&:id))
- it 'requests to follow all the expected users once the workers have run' do
- subject.call(import)
+ stub_resolve_account_and_drain_workers
- resolve_account_service_double = instance_double(ResolveAccountService)
- allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double)
- allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) }
- allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) }
-
- Import::RowWorker.drain
-
- expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct }).to contain_exactly('user@foo.bar', 'unknown@unknown.bar')
+ expect(FollowRequest.includes(:target_account).where(account: account).map { |follow_request| follow_request.target_account.acct })
+ .to contain_exactly('user@foo.bar', 'unknown@unknown.bar')
end
end
@@ -110,30 +88,19 @@ RSpec.describe BulkImportService do
].map { |data| import.rows.create!(data: data) }
end
- before do
- account.block!(Fabricate(:account, username: 'already_blocked', domain: 'remote.org'))
- end
+ before { account.block!(Fabricate(:account, username: 'already_blocked', domain: 'remote.org')) }
- it 'does not immediately change who the account blocks' do
- expect { subject.call(import) }.to_not(change { account.reload.blocking.to_a })
- end
+ it 'does not immediately change who the account blocks, enqueues worker, blocks after run' do
+ expect { subject.call(import) }
+ .to_not(change { account.reload.blocking.to_a })
- it 'enqueues workers for the expected rows' do
- subject.call(import)
- expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id))
- end
+ expect(row_worker_job_args)
+ .to match_array(rows.map(&:id))
- it 'blocks all the listed users once the workers have run' do
- subject.call(import)
+ stub_resolve_account_and_drain_workers
- resolve_account_service_double = instance_double(ResolveAccountService)
- allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double)
- allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) }
- allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) }
-
- Import::RowWorker.drain
-
- expect(account.blocking.map(&:acct)).to contain_exactly('already_blocked@remote.org', 'user@foo.bar', 'unknown@unknown.bar')
+ expect(account.reload.blocking.map(&:acct))
+ .to contain_exactly('already_blocked@remote.org', 'user@foo.bar', 'unknown@unknown.bar')
end
end
@@ -157,27 +124,18 @@ RSpec.describe BulkImportService do
account.block!(to_be_unblocked)
end
- it 'unblocks user not present on list' do
+ it 'unblocks user not present on list, enqueues worker, requests follow after run' do
subject.call(import)
+
expect(account.blocking?(to_be_unblocked)).to be false
- end
- it 'enqueues workers for the expected rows' do
- subject.call(import)
- expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id))
- end
+ expect(row_worker_job_args)
+ .to match_array(rows[1..].map(&:id))
- it 'requests to follow all the expected users once the workers have run' do
- subject.call(import)
+ stub_resolve_account_and_drain_workers
- resolve_account_service_double = instance_double(ResolveAccountService)
- allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double)
- allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) }
- allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) }
-
- Import::RowWorker.drain
-
- expect(account.blocking.map(&:acct)).to contain_exactly('blocked@foo.bar', 'user@foo.bar', 'unknown@unknown.bar')
+ expect(account.blocking.map(&:acct))
+ .to contain_exactly('blocked@foo.bar', 'user@foo.bar', 'unknown@unknown.bar')
end
end
@@ -192,30 +150,19 @@ RSpec.describe BulkImportService do
].map { |data| import.rows.create!(data: data) }
end
- before do
- account.mute!(Fabricate(:account, username: 'already_muted', domain: 'remote.org'))
- end
+ before { account.mute!(Fabricate(:account, username: 'already_muted', domain: 'remote.org')) }
- it 'does not immediately change who the account blocks' do
- expect { subject.call(import) }.to_not(change { account.reload.muting.to_a })
- end
+ it 'does not immediately change who the account blocks, enqueures worker, mutes users after worker run' do
+ expect { subject.call(import) }
+ .to_not(change { account.reload.muting.to_a })
- it 'enqueues workers for the expected rows' do
- subject.call(import)
- expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id))
- end
+ expect(row_worker_job_args)
+ .to match_array(rows.map(&:id))
- it 'mutes all the listed users once the workers have run' do
- subject.call(import)
+ stub_resolve_account_and_drain_workers
- resolve_account_service_double = instance_double(ResolveAccountService)
- allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double)
- allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) }
- allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) }
-
- Import::RowWorker.drain
-
- expect(account.muting.map(&:acct)).to contain_exactly('already_muted@remote.org', 'user@foo.bar', 'unknown@unknown.bar')
+ expect(account.reload.muting.map(&:acct))
+ .to contain_exactly('already_muted@remote.org', 'user@foo.bar', 'unknown@unknown.bar')
end
end
@@ -239,31 +186,19 @@ RSpec.describe BulkImportService do
account.mute!(to_be_unmuted)
end
- it 'updates the existing mute as expected' do
- expect { subject.call(import) }.to change { Mute.where(account: account, target_account: muted).pick(:hide_notifications) }.from(false).to(true)
- end
+ it 'updates the existing mute as expected and unblocks user not on list, and enqueues worker, and requests follow after worker run' do
+ expect { subject.call(import) }
+ .to change { Mute.where(account: account, target_account: muted).pick(:hide_notifications) }.from(false).to(true)
- it 'unblocks user not present on list' do
- subject.call(import)
expect(account.muting?(to_be_unmuted)).to be false
- end
- it 'enqueues workers for the expected rows' do
- subject.call(import)
- expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows[1..].map(&:id))
- end
+ expect(row_worker_job_args)
+ .to match_array(rows[1..].map(&:id))
- it 'requests to follow all the expected users once the workers have run' do
- subject.call(import)
+ stub_resolve_account_and_drain_workers
- resolve_account_service_double = instance_double(ResolveAccountService)
- allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service_double)
- allow(resolve_account_service_double).to receive(:call).with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) }
- allow(resolve_account_service_double).to receive(:call).with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) }
-
- Import::RowWorker.drain
-
- expect(account.muting.map(&:acct)).to contain_exactly('muted@foo.bar', 'user@foo.bar', 'unknown@unknown.bar')
+ expect(account.muting.map(&:acct))
+ .to contain_exactly('muted@foo.bar', 'user@foo.bar', 'unknown@unknown.bar')
end
end
@@ -284,13 +219,11 @@ RSpec.describe BulkImportService do
account.block_domain!('blocked.com')
end
- it 'blocks all the new domains' do
+ it 'blocks all the new domains and marks import finished' do
subject.call(import)
- expect(account.domain_blocks.pluck(:domain)).to contain_exactly('alreadyblocked.com', 'blocked.com', 'to-block.com')
- end
- it 'marks the import as finished' do
- subject.call(import)
+ expect(account.domain_blocks.pluck(:domain))
+ .to contain_exactly('alreadyblocked.com', 'blocked.com', 'to-block.com')
expect(import.reload.state_finished?).to be true
end
end
@@ -312,14 +245,13 @@ RSpec.describe BulkImportService do
account.block_domain!('blocked.com')
end
- it 'blocks all the new domains' do
+ it 'blocks all the new domains and marks import finished' do
subject.call(import)
- expect(account.domain_blocks.pluck(:domain)).to contain_exactly('blocked.com', 'to-block.com')
- end
- it 'marks the import as finished' do
- subject.call(import)
- expect(import.reload.state_finished?).to be true
+ expect(account.domain_blocks.pluck(:domain))
+ .to contain_exactly('blocked.com', 'to-block.com')
+ expect(import.reload.state_finished?)
+ .to be true
end
end
@@ -347,22 +279,16 @@ RSpec.describe BulkImportService do
account.bookmarks.create!(status: bookmarked)
end
- it 'enqueues workers for the expected rows' do
- subject.call(import)
- expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id))
- end
-
- it 'updates the bookmarks as expected once the workers have run' do
+ it 'enqueues workers for the expected rows and updates bookmarks after worker run' do
subject.call(import)
- service_double = instance_double(ActivityPub::FetchRemoteStatusService)
- allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double)
- allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') }
- allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) }
+ expect(row_worker_job_args)
+ .to match_array(rows.map(&:id))
- Import::RowWorker.drain
+ stub_fetch_remote_and_drain_workers
- expect(account.bookmarks.map { |bookmark| bookmark.status.uri }).to contain_exactly(already_bookmarked.uri, status.uri, bookmarked.uri, 'https://domain.unknown/foo')
+ expect(account.bookmarks.map { |bookmark| bookmark.status.uri })
+ .to contain_exactly(already_bookmarked.uri, status.uri, bookmarked.uri, 'https://domain.unknown/foo')
end
end
@@ -390,23 +316,48 @@ RSpec.describe BulkImportService do
account.bookmarks.create!(status: bookmarked)
end
- it 'enqueues workers for the expected rows' do
- subject.call(import)
- expect(Import::RowWorker.jobs.pluck('args').flatten).to match_array(rows.map(&:id))
- end
-
- it 'updates the bookmarks as expected once the workers have run' do
+ it 'enqueues workers for the expected rows and updates bookmarks' do
subject.call(import)
- service_double = instance_double(ActivityPub::FetchRemoteStatusService)
- allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double)
- allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') }
- allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) }
+ expect(row_worker_job_args)
+ .to match_array(rows.map(&:id))
- Import::RowWorker.drain
+ stub_fetch_remote_and_drain_workers
- expect(account.bookmarks.map { |bookmark| bookmark.status.uri }).to contain_exactly(status.uri, bookmarked.uri, 'https://domain.unknown/foo')
+ expect(account.bookmarks.map { |bookmark| bookmark.status.uri })
+ .to contain_exactly(status.uri, bookmarked.uri, 'https://domain.unknown/foo')
end
end
+
+ def row_worker_job_args
+ Import::RowWorker
+ .jobs
+ .pluck('args')
+ .flatten
+ end
+
+ def stub_resolve_account_and_drain_workers
+ resolve_account_service_double = instance_double(ResolveAccountService)
+ allow(ResolveAccountService)
+ .to receive(:new)
+ .and_return(resolve_account_service_double)
+ allow(resolve_account_service_double)
+ .to receive(:call)
+ .with('user@foo.bar', any_args) { Fabricate(:account, username: 'user', domain: 'foo.bar', protocol: :activitypub) }
+ allow(resolve_account_service_double)
+ .to receive(:call)
+ .with('unknown@unknown.bar', any_args) { Fabricate(:account, username: 'unknown', domain: 'unknown.bar', protocol: :activitypub) }
+
+ Import::RowWorker.drain
+ end
+
+ def stub_fetch_remote_and_drain_workers
+ service_double = instance_double(ActivityPub::FetchRemoteStatusService)
+ allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service_double)
+ allow(service_double).to receive(:call).with('https://domain.unknown/foo') { Fabricate(:status, uri: 'https://domain.unknown/foo') }
+ allow(service_double).to receive(:call).with('https://domain.unknown/private') { Fabricate(:status, uri: 'https://domain.unknown/private', visibility: :direct) }
+
+ Import::RowWorker.drain
+ end
end
end
diff --git a/spec/services/favourite_service_spec.rb b/spec/services/favourite_service_spec.rb
index c39362def..123e8699c 100644
--- a/spec/services/favourite_service_spec.rb
+++ b/spec/services/favourite_service_spec.rb
@@ -11,11 +11,9 @@ RSpec.describe FavouriteService do
let(:bob) { Fabricate(:account) }
let(:status) { Fabricate(:status, account: bob) }
- before do
- subject.call(sender, status)
- end
-
it 'creates a favourite' do
+ subject.call(sender, status)
+
expect(status.favourites.first).to_not be_nil
end
end
@@ -26,15 +24,16 @@ RSpec.describe FavouriteService do
before do
stub_request(:post, 'http://example.com/inbox').to_return(status: 200, body: '', headers: {})
+ end
+
+ it 'creates a favourite and sends like activity', :inline_jobs do
subject.call(sender, status)
- end
- it 'creates a favourite' do
- expect(status.favourites.first).to_not be_nil
- end
+ expect(status.favourites.first)
+ .to_not be_nil
- it 'sends a like activity', :inline_jobs do
- expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
+ expect(a_request(:post, 'http://example.com/inbox'))
+ .to have_been_made.once
end
end
end
diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb
index 0c4cd6004..bbd8a6f99 100644
--- a/spec/services/follow_service_spec.rb
+++ b/spec/services/follow_service_spec.rb
@@ -143,15 +143,16 @@ RSpec.describe FollowService do
before do
stub_request(:post, 'http://example.com/inbox').to_return(status: 200, body: '', headers: {})
+ end
+
+ it 'creates follow request and sends an activity to inbox', :inline_jobs do
subject.call(sender, bob)
- end
- it 'creates follow request' do
- expect(FollowRequest.find_by(account: sender, target_account: bob)).to_not be_nil
- end
+ expect(FollowRequest.find_by(account: sender, target_account: bob))
+ .to_not be_nil
- it 'sends a follow activity to the inbox', :inline_jobs do
- expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
+ expect(a_request(:post, 'http://example.com/inbox'))
+ .to have_been_made.once
end
end
end
diff --git a/spec/services/process_mentions_service_spec.rb b/spec/services/process_mentions_service_spec.rb
index 2c202d3e5..3cc83d82f 100644
--- a/spec/services/process_mentions_service_spec.rb
+++ b/spec/services/process_mentions_service_spec.rb
@@ -16,20 +16,25 @@ RSpec.describe ProcessMentionsService do
before do
account.block!(individually_blocked_account)
account.domain_blocks.create!(domain: domain_blocked_account.domain)
-
- subject.call(status)
end
- it 'creates a mention to the non-blocked account' do
- expect(non_blocked_account.mentions.where(status: status).count).to eq 1
+ it 'creates a mention to the non-blocked account but not the individually or domain blocked accounts' do
+ expect { subject.call(status) }
+ .to create_mention_for_non_blocked
+ .and skip_mention_for_individual
+ .and skip_mention_for_domain_blocked
end
- it 'does not create a mention to the individually blocked account' do
- expect(individually_blocked_account.mentions.where(status: status).count).to eq 0
+ def create_mention_for_non_blocked
+ change { non_blocked_account.mentions.where(status: status).count }.to(1)
end
- it 'does not create a mention to the domain-blocked account' do
- expect(domain_blocked_account.mentions.where(status: status).count).to eq 0
+ def skip_mention_for_individual
+ not_change { individually_blocked_account.mentions.where(status: status).count }.from(0)
+ end
+
+ def skip_mention_for_domain_blocked
+ not_change { domain_blocked_account.mentions.where(status: status).count }.from(0)
end
end
@@ -40,11 +45,9 @@ RSpec.describe ProcessMentionsService do
context 'with a valid remote user' do
let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
- before do
- subject.call(status)
- end
-
it 'creates a mention' do
+ subject.call(status)
+
expect(remote_user.mentions.where(status: status).count).to eq 1
end
end
@@ -53,11 +56,9 @@ RSpec.describe ProcessMentionsService do
let!(:remote_user) { Fabricate(:account, username: 'remote_user', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox') }
let(:status) { Fabricate(:status, account: account, text: "Hello @#{remote_user.acct} @#{remote_user.acct} @#{remote_user.acct}", visibility: :public) }
- before do
- subject.call(status, save_records: false)
- end
-
it 'creates exactly one mention' do
+ subject.call(status, save_records: false)
+
expect(status.mentions.size).to eq 1
end
end
@@ -66,11 +67,9 @@ RSpec.describe ProcessMentionsService do
let!(:remote_user) { Fabricate(:account, username: 'sneak', protocol: :activitypub, domain: 'xn--hresiar-mxa.ch', inbox_url: 'http://example.com/inbox') }
let!(:status) { Fabricate(:status, account: account, text: 'Hello @sneak@hæresiar.ch') }
- before do
- subject.call(status)
- end
-
it 'creates a mention' do
+ subject.call(status)
+
expect(remote_user.mentions.where(status: status).count).to eq 1
end
end
@@ -79,11 +78,9 @@ RSpec.describe ProcessMentionsService do
let!(:remote_user) { Fabricate(:account, username: 'foo', protocol: :activitypub, domain: 'xn--y9a3aq.xn--y9a3aq', inbox_url: 'http://example.com/inbox') }
let!(:status) { Fabricate(:status, account: account, text: 'Hello @foo@հայ.հայ') }
- before do
- subject.call(status)
- end
-
it 'creates a mention' do
+ subject.call(status)
+
expect(remote_user.mentions.where(status: status).count).to eq 1
end
end
@@ -95,10 +92,11 @@ RSpec.describe ProcessMentionsService do
before do
stub_request(:get, 'https://example.com/.well-known/host-meta').to_return(status: 404)
stub_request(:get, 'https://example.com/.well-known/webfinger?resource=acct:remote_user@example.com').to_return(status: 500)
- subject.call(status)
end
it 'creates a mention' do
+ subject.call(status)
+
expect(remote_user.mentions.where(status: status).count).to eq 1
end
end
diff --git a/spec/services/reject_follow_service_spec.rb b/spec/services/reject_follow_service_spec.rb
index d2c7a0020..eec0d6c1e 100644
--- a/spec/services/reject_follow_service_spec.rb
+++ b/spec/services/reject_follow_service_spec.rb
@@ -10,17 +10,15 @@ RSpec.describe RejectFollowService do
describe 'local' do
let(:bob) { Fabricate(:account) }
- before do
- FollowRequest.create(account: bob, target_account: sender)
+ before { FollowRequest.create(account: bob, target_account: sender) }
+
+ it 'removes follow request and does not create relation' do
subject.call(bob, sender)
- end
- it 'removes follow request' do
- expect(bob.requested?(sender)).to be false
- end
-
- it 'does not create follow relation' do
- expect(bob.following?(sender)).to be false
+ expect(bob)
+ .to_not be_requested(sender)
+ expect(bob)
+ .to_not be_following(sender)
end
end
@@ -30,19 +28,17 @@ RSpec.describe RejectFollowService do
before do
FollowRequest.create(account: bob, target_account: sender)
stub_request(:post, bob.inbox_url).to_return(status: 200)
+ end
+
+ it 'removes follow request, does not create relation, sends reject activity', :inline_jobs do
subject.call(bob, sender)
- end
- it 'removes follow request' do
- expect(bob.requested?(sender)).to be false
- end
-
- it 'does not create follow relation' do
- expect(bob.following?(sender)).to be false
- end
-
- it 'sends a reject activity', :inline_jobs do
- expect(a_request(:post, bob.inbox_url)).to have_been_made.once
+ expect(bob)
+ .to_not be_requested(sender)
+ expect(bob)
+ .to_not be_following(sender)
+ expect(a_request(:post, bob.inbox_url))
+ .to have_been_made.once
end
end
end
diff --git a/spec/services/remove_from_followers_service_spec.rb b/spec/services/remove_from_followers_service_spec.rb
index 515600096..381daf1a5 100644
--- a/spec/services/remove_from_followers_service_spec.rb
+++ b/spec/services/remove_from_followers_service_spec.rb
@@ -10,13 +10,13 @@ RSpec.describe RemoveFromFollowersService do
describe 'local' do
let(:sender) { Fabricate(:account, username: 'alice') }
- before do
- Follow.create(account: sender, target_account: bob)
- subject.call(bob, sender)
- end
+ before { Follow.create(account: sender, target_account: bob) }
it 'does not create follow relation' do
- expect(bob.followed_by?(sender)).to be false
+ subject.call(bob, sender)
+
+ expect(bob)
+ .to_not be_followed_by(sender)
end
end
@@ -26,15 +26,16 @@ RSpec.describe RemoveFromFollowersService do
before do
Follow.create(account: sender, target_account: bob)
stub_request(:post, sender.inbox_url).to_return(status: 200)
+ end
+
+ it 'does not create follow relation and sends reject activity', :inline_jobs do
subject.call(bob, sender)
- end
- it 'does not create follow relation' do
- expect(bob.followed_by?(sender)).to be false
- end
+ expect(bob)
+ .to_not be_followed_by(sender)
- it 'sends a reject activity', :inline_jobs do
- expect(a_request(:post, sender.inbox_url)).to have_been_made.once
+ expect(a_request(:post, sender.inbox_url))
+ .to have_been_made.once
end
end
end
diff --git a/spec/services/remove_status_service_spec.rb b/spec/services/remove_status_service_spec.rb
index 08f519b53..f2b46f05b 100644
--- a/spec/services/remove_status_service_spec.rb
+++ b/spec/services/remove_status_service_spec.rb
@@ -28,42 +28,38 @@ RSpec.describe RemoveStatusService, :inline_jobs do
Fabricate(:status, account: bill, reblog: status, uri: 'hoge')
end
- it 'removes status from author\'s home feed' do
- subject.call(status)
- expect(HomeFeed.new(alice).get(10).pluck(:id)).to_not include(status.id)
- end
-
- it 'removes status from local follower\'s home feed' do
- subject.call(status)
- expect(HomeFeed.new(jeff).get(10).pluck(:id)).to_not include(status.id)
- end
-
- it 'publishes to public media timeline' do
+ it 'removes status from notifications and from author and local follower home feeds, publishes to media timeline, sends delete activities' do
allow(redis).to receive(:publish).with(any_args)
- subject.call(status)
+ expect { subject.call(status) }
+ .to remove_status_from_notifications
- expect(redis).to have_received(:publish).with('timeline:public:media', Oj.dump(event: :delete, payload: status.id.to_s))
- end
+ expect(home_feed_ids(alice))
+ .to_not include(status.id)
+ expect(home_feed_ids(jeff))
+ .to_not include(status.id)
- it 'sends Delete activity to followers' do
- subject.call(status)
+ expect(redis)
+ .to have_received(:publish).with('timeline:public:media', Oj.dump(event: :delete, payload: status.id.to_s))
expect(delete_delivery(hank, status))
.to have_been_made.once
- end
-
- it 'sends Delete activity to rebloggers' do
- subject.call(status)
expect(delete_delivery(bill, status))
.to have_been_made.once
end
- it 'remove status from notifications' do
- expect { subject.call(status) }.to change {
- Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count
- }.from(1).to(0)
+ def home_feed_ids(personage)
+ HomeFeed
+ .new(personage)
+ .get(10)
+ .pluck(:id)
+ end
+
+ def remove_status_from_notifications
+ change { Notification.where(activity_type: 'Favourite', from_account: jeff, account: alice).count }
+ .from(1)
+ .to(0)
end
def delete_delivery(target, status)
diff --git a/spec/services/report_service_spec.rb b/spec/services/report_service_spec.rb
index 6518c5c27..4659e1c7a 100644
--- a/spec/services/report_service_spec.rb
+++ b/spec/services/report_service_spec.rb
@@ -31,14 +31,13 @@ RSpec.describe ReportService do
context 'when forward is true', :inline_jobs do
let(:forward) { true }
- it 'sends ActivityPub payload when forward is true' do
- subject.call(source_account, remote_account, forward: forward)
- expect(a_request(:post, 'http://example.com/inbox')).to have_been_made
- end
-
- it 'has an uri' do
+ it 'has a URI and sends ActivityPub payload' do
report = subject.call(source_account, remote_account, forward: forward)
- expect(report.uri).to_not be_nil
+
+ expect(report.uri)
+ .to_not be_nil
+ expect(a_request(:post, 'http://example.com/inbox'))
+ .to have_been_made
end
context 'when reporting a reply on a different remote server' do
@@ -122,13 +121,12 @@ RSpec.describe ReportService do
status.mentions.create(account: source_account)
end
- it 'creates a report' do
- expect { subject.call }.to change { target_account.targeted_reports.count }.from(0).to(1)
- end
+ it 'creates a report and attaches the DM to the report' do
+ expect { subject.call }
+ .to change { target_account.targeted_reports.count }.from(0).to(1)
- it 'attaches the DM to the report' do
- subject.call
- expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[status.id]]
+ expect(target_account.targeted_reports.pluck(:status_ids))
+ .to eq [[status.id]]
end
end
@@ -146,13 +144,12 @@ RSpec.describe ReportService do
status.mentions.create(account: source_account)
end
- it 'creates a report' do
- expect { subject.call }.to change { target_account.targeted_reports.count }.from(0).to(1)
- end
+ it 'creates a report and attaches DM to report' do
+ expect { subject.call }
+ .to change { target_account.targeted_reports.count }.from(0).to(1)
- it 'attaches the DM to the report' do
- subject.call
- expect(target_account.targeted_reports.pluck(:status_ids)).to eq [[status.id]]
+ expect(target_account.targeted_reports.pluck(:status_ids))
+ .to eq [[status.id]]
end
end
diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb
index a856e019a..1bd4e9a8e 100644
--- a/spec/services/resolve_account_service_spec.rb
+++ b/spec/services/resolve_account_service_spec.rb
@@ -22,37 +22,38 @@ RSpec.describe ResolveAccountService do
context 'when domain is banned' do
before { Fabricate(:domain_block, domain: 'ap.example.com', severity: :suspend) }
- it 'does not return an account' do
- expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to be_nil
- end
-
- it 'does not make a webfinger query' do
- subject.call('foo@ap.example.com', skip_webfinger: true)
- expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made
+ it 'does not return an account or make a webfinger query' do
+ expect(subject.call('foo@ap.example.com', skip_webfinger: true))
+ .to be_nil
+ expect(webfinger_discovery_request)
+ .to_not have_been_made
end
end
context 'when domain is not banned' do
- it 'returns the expected account' do
- expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to eq remote_account
- end
-
- it 'does not make a webfinger query' do
- subject.call('foo@ap.example.com', skip_webfinger: true)
- expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made
+ it 'returns the expected account and does not make a webfinger query' do
+ expect(subject.call('foo@ap.example.com', skip_webfinger: true))
+ .to eq remote_account
+ expect(webfinger_discovery_request)
+ .to_not have_been_made
end
end
end
context 'when account is not known' do
- it 'does not return an account' do
- expect(subject.call('foo@ap.example.com', skip_webfinger: true)).to be_nil
+ it 'does not return an account and does not make webfinger query' do
+ expect(subject.call('foo@ap.example.com', skip_webfinger: true))
+ .to be_nil
+ expect(webfinger_discovery_request)
+ .to_not have_been_made
end
+ end
- it 'does not make a webfinger query' do
- subject.call('foo@ap.example.com', skip_webfinger: true)
- expect(a_request(:get, 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com')).to_not have_been_made
- end
+ def webfinger_discovery_request
+ a_request(
+ :get,
+ 'https://ap.example.com/.well-known/webfinger?resource=acct:foo@ap.example.com'
+ )
end
end
@@ -84,13 +85,11 @@ RSpec.describe ResolveAccountService do
allow(AccountDeletionWorker).to receive(:perform_async)
end
- it 'returns nil' do
- expect(subject.call('hoge@example.com')).to be_nil
- end
-
- it 'queues account deletion worker' do
- subject.call('hoge@example.com')
- expect(AccountDeletionWorker).to have_received(:perform_async)
+ it 'returns nil and queues deletion worker' do
+ expect(subject.call('hoge@example.com'))
+ .to be_nil
+ expect(AccountDeletionWorker)
+ .to have_received(:perform_async)
end
end
@@ -110,9 +109,12 @@ RSpec.describe ResolveAccountService do
it 'returns new remote account' do
account = subject.call('Foo@redirected.example.com')
- expect(account.activitypub?).to be true
- expect(account.acct).to eq 'foo@ap.example.com'
- expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox'
+ expect(account)
+ .to have_attributes(
+ activitypub?: true,
+ acct: 'foo@ap.example.com',
+ inbox_url: 'https://ap.example.com/users/foo/inbox'
+ )
end
end
@@ -125,9 +127,12 @@ RSpec.describe ResolveAccountService do
it 'returns new remote account' do
account = subject.call('Foo@redirected.example.com')
- expect(account.activitypub?).to be true
- expect(account.acct).to eq 'foo@ap.example.com'
- expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox'
+ expect(account)
+ .to have_attributes(
+ activitypub?: true,
+ acct: 'foo@ap.example.com',
+ inbox_url: 'https://ap.example.com/users/foo/inbox'
+ )
end
end
@@ -161,9 +166,12 @@ RSpec.describe ResolveAccountService do
it 'returns new remote account' do
account = subject.call('foo@ap.example.com')
- expect(account.activitypub?).to be true
- expect(account.domain).to eq 'ap.example.com'
- expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox'
+ expect(account)
+ .to have_attributes(
+ activitypub?: true,
+ domain: 'ap.example.com',
+ inbox_url: 'https://ap.example.com/users/foo/inbox'
+ )
end
context 'with multiple types' do
@@ -174,10 +182,13 @@ RSpec.describe ResolveAccountService do
it 'returns new remote account' do
account = subject.call('foo@ap.example.com')
- expect(account.activitypub?).to be true
- expect(account.domain).to eq 'ap.example.com'
- expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox'
- expect(account.actor_type).to eq 'Person'
+ expect(account)
+ .to have_attributes(
+ activitypub?: true,
+ domain: 'ap.example.com',
+ inbox_url: 'https://ap.example.com/users/foo/inbox',
+ actor_type: 'Person'
+ )
end
end
end
@@ -186,20 +197,21 @@ RSpec.describe ResolveAccountService do
let!(:duplicate) { Fabricate(:account, username: 'foo', domain: 'old.example.com', uri: 'https://ap.example.com/users/foo') }
let!(:status) { Fabricate(:status, account: duplicate, text: 'foo') }
- it 'returns new remote account' do
+ it 'returns new remote account and merges accounts', :inline_jobs do
account = subject.call('foo@ap.example.com')
- expect(account.activitypub?).to be true
- expect(account.domain).to eq 'ap.example.com'
- expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox'
- expect(account.uri).to eq 'https://ap.example.com/users/foo'
- end
+ expect(account)
+ .to have_attributes(
+ activitypub?: true,
+ domain: 'ap.example.com',
+ inbox_url: 'https://ap.example.com/users/foo/inbox',
+ uri: 'https://ap.example.com/users/foo'
+ )
- it 'merges accounts', :inline_jobs do
- account = subject.call('foo@ap.example.com')
-
- expect(status.reload.account_id).to eq account.id
- expect(Account.where(uri: account.uri).count).to eq 1
+ expect(status.reload.account_id)
+ .to eq account.id
+ expect(Account.where(uri: account.uri).count)
+ .to eq 1
end
end
@@ -210,11 +222,15 @@ RSpec.describe ResolveAccountService do
it 'returns new remote account' do
account = subject.call('foo@ap.example.com')
- expect(account.activitypub?).to be true
- expect(account.domain).to eq 'ap.example.com'
- expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox'
- expect(account.uri).to eq 'https://ap.example.com/users/foo'
- expect(status.reload.account).to eq(account)
+ expect(account)
+ .to have_attributes(
+ activitypub?: true,
+ domain: 'ap.example.com',
+ inbox_url: 'https://ap.example.com/users/foo/inbox',
+ uri: 'https://ap.example.com/users/foo'
+ )
+ expect(status.reload.account)
+ .to eq(account)
end
end
diff --git a/spec/services/resolve_url_service_spec.rb b/spec/services/resolve_url_service_spec.rb
index 80f2a5a4b..eaf00c1ed 100644
--- a/spec/services/resolve_url_service_spec.rb
+++ b/spec/services/resolve_url_service_spec.rb
@@ -51,12 +51,11 @@ RSpec.describe ResolveURLService do
let(:url) { 'https://example.com/@foo/42' }
let(:uri) { 'https://example.com/users/foo/statuses/42' }
- it 'returns status by url' do
- expect(subject.call(url, on_behalf_of: account)).to eq(status)
- end
-
- it 'returns status by uri' do
- expect(subject.call(uri, on_behalf_of: account)).to eq(status)
+ it 'returns status by URL or URI' do
+ expect(subject.call(url, on_behalf_of: account))
+ .to eq(status)
+ expect(subject.call(uri, on_behalf_of: account))
+ .to eq(status)
end
end
@@ -75,12 +74,11 @@ RSpec.describe ResolveURLService do
let(:url) { 'https://example.com/@foo/42' }
let(:uri) { 'https://example.com/users/foo/statuses/42' }
- it 'does not return the status by url' do
- expect(subject.call(url, on_behalf_of: account)).to be_nil
- end
-
- it 'does not return the status by uri' do
- expect(subject.call(uri, on_behalf_of: account)).to be_nil
+ it 'does not return the status by URL or URI' do
+ expect(subject.call(url, on_behalf_of: account))
+ .to be_nil
+ expect(subject.call(uri, on_behalf_of: account))
+ .to be_nil
end
end
@@ -107,22 +105,20 @@ RSpec.describe ResolveURLService do
account.follow!(poster)
end
- it 'returns status by url' do
- expect(subject.call(url, on_behalf_of: account)).to eq(status)
- end
-
- it 'returns status by uri' do
- expect(subject.call(uri, on_behalf_of: account)).to eq(status)
+ it 'returns status by URL or URI' do
+ expect(subject.call(url, on_behalf_of: account))
+ .to eq(status)
+ expect(subject.call(uri, on_behalf_of: account))
+ .to eq(status)
end
end
context 'when the account does not follow the poster' do
- it 'does not return the status by url' do
- expect(subject.call(url, on_behalf_of: account)).to be_nil
- end
-
- it 'does not return the status by uri' do
- expect(subject.call(uri, on_behalf_of: account)).to be_nil
+ it 'does not return the status by URL or URI' do
+ expect(subject.call(url, on_behalf_of: account))
+ .to be_nil
+ expect(subject.call(uri, on_behalf_of: account))
+ .to be_nil
end
end
end
diff --git a/spec/services/translate_status_service_spec.rb b/spec/services/translate_status_service_spec.rb
index 0779fbbe6..cd92fb8d1 100644
--- a/spec/services/translate_status_service_spec.rb
+++ b/spec/services/translate_status_service_spec.rb
@@ -32,20 +32,14 @@ RSpec.describe TranslateStatusService do
allow(TranslationService).to receive_messages(configured?: true, configured: translation_service)
end
- it 'returns translated status content' do
- expect(service.call(status, 'es').content).to eq '
Hola
'
- end
-
- it 'returns source language' do
- expect(service.call(status, 'es').detected_source_language).to eq 'en'
- end
-
- it 'returns translation provider' do
- expect(service.call(status, 'es').provider).to eq 'Dummy'
- end
-
- it 'returns original status' do
- expect(service.call(status, 'es').status).to eq status
+ it 'returns translated status content and source language and provider and original status' do
+ expect(service.call(status, 'es'))
+ .to have_attributes(
+ content: '
Hola
',
+ detected_source_language: 'en',
+ provider: 'Dummy',
+ status: status
+ )
end
describe 'status has content with custom emoji' do
@@ -155,26 +149,16 @@ RSpec.describe TranslateStatusService do
let!(:source_texts) { service.send(:source_texts) }
it 'returns formatted poll options' do
- expect(source_texts.size).to eq 3
- expect(source_texts.values).to eq %w(
Hello
Blue Green)
- end
-
- it 'has a first key with content' do
- expect(source_texts.keys.first).to eq :content
- end
-
- it 'has the first option in the second key with correct options' do
- option1 = source_texts.keys.second
- expect(option1).to be_a Poll::Option
- expect(option1.id).to eq '0'
- expect(option1.title).to eq 'Blue'
- end
-
- it 'has the second option in the third key with correct options' do
- option2 = source_texts.keys.third
- expect(option2).to be_a Poll::Option
- expect(option2.id).to eq '1'
- expect(option2.title).to eq 'Green'
+ expect(source_texts)
+ .to have_attributes(
+ size: 3,
+ values: %w(
Hello
Blue Green),
+ keys: contain_exactly(
+ eq(:content),
+ be_a(Poll::Option).and(have_attributes(id: '0', title: 'Blue')),
+ be_a(Poll::Option).and(have_attributes(id: '1', title: 'Green'))
+ )
+ )
end
end
end
diff --git a/spec/services/unblock_domain_service_spec.rb b/spec/services/unblock_domain_service_spec.rb
index 405fe1cfd..daa1d480a 100644
--- a/spec/services/unblock_domain_service_spec.rb
+++ b/spec/services/unblock_domain_service_spec.rb
@@ -12,26 +12,32 @@ RSpec.describe UnblockDomainService do
let!(:silenced) { Fabricate(:account, domain: 'example.com', silenced_at: domain_block.created_at) }
let!(:suspended) { Fabricate(:account, domain: 'example.com', suspended_at: domain_block.created_at) }
- it 'unsilences accounts and removes block' do
- domain_block.update(severity: :silence)
+ context 'with severity of silence' do
+ before { domain_block.update(severity: :silence) }
- subject.call(domain_block)
- expect_deleted_domain_block
- expect(silenced.reload.silenced?).to be false
- expect(suspended.reload.suspended?).to be true
- expect(independently_suspended.reload.suspended?).to be true
- expect(independently_silenced.reload.silenced?).to be true
+ it 'unsilences accounts and removes block' do
+ subject.call(domain_block)
+
+ expect_deleted_domain_block
+ expect(silenced.reload.silenced?).to be false
+ expect(suspended.reload.suspended?).to be true
+ expect(independently_suspended.reload.suspended?).to be true
+ expect(independently_silenced.reload.silenced?).to be true
+ end
end
- it 'unsuspends accounts and removes block' do
- domain_block.update(severity: :suspend)
+ context 'with severity of suspend' do
+ before { domain_block.update(severity: :suspend) }
- subject.call(domain_block)
- expect_deleted_domain_block
- expect(suspended.reload.suspended?).to be false
- expect(silenced.reload.silenced?).to be false
- expect(independently_suspended.reload.suspended?).to be true
- expect(independently_silenced.reload.silenced?).to be true
+ it 'unsuspends accounts and removes block' do
+ subject.call(domain_block)
+
+ expect_deleted_domain_block
+ expect(suspended.reload.suspended?).to be false
+ expect(silenced.reload.silenced?).to be false
+ expect(independently_suspended.reload.suspended?).to be true
+ expect(independently_silenced.reload.silenced?).to be true
+ end
end
end
diff --git a/spec/services/unblock_service_spec.rb b/spec/services/unblock_service_spec.rb
index 6132e7441..a2c5188f0 100644
--- a/spec/services/unblock_service_spec.rb
+++ b/spec/services/unblock_service_spec.rb
@@ -10,13 +10,13 @@ RSpec.describe UnblockService do
describe 'local' do
let(:bob) { Fabricate(:account) }
- before do
- sender.block!(bob)
- subject.call(sender, bob)
- end
+ before { sender.block!(bob) }
it 'destroys the blocking relation' do
- expect(sender.blocking?(bob)).to be false
+ subject.call(sender, bob)
+
+ expect(sender)
+ .to_not be_blocking(bob)
end
end
@@ -26,15 +26,15 @@ RSpec.describe UnblockService do
before do
sender.block!(bob)
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
+ end
+
+ it 'destroys the blocking relation and sends unblock activity', :inline_jobs do
subject.call(sender, bob)
- end
- it 'destroys the blocking relation' do
- expect(sender.blocking?(bob)).to be false
- end
-
- it 'sends an unblock activity', :inline_jobs do
- expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
+ expect(sender)
+ .to_not be_blocking(bob)
+ expect(a_request(:post, 'http://example.com/inbox'))
+ .to have_been_made.once
end
end
end
diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb
index 0c206c4b9..6cf24ca5e 100644
--- a/spec/services/unfollow_service_spec.rb
+++ b/spec/services/unfollow_service_spec.rb
@@ -10,13 +10,13 @@ RSpec.describe UnfollowService do
describe 'local' do
let(:bob) { Fabricate(:account, username: 'bob') }
- before do
- sender.follow!(bob)
- subject.call(sender, bob)
- end
+ before { sender.follow!(bob) }
it 'destroys the following relation' do
- expect(sender.following?(bob)).to be false
+ subject.call(sender, bob)
+
+ expect(sender)
+ .to_not be_following(bob)
end
end
@@ -26,15 +26,15 @@ RSpec.describe UnfollowService do
before do
sender.follow!(bob)
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
+ end
+
+ it 'destroys the following relation and sends unfollow activity' do
subject.call(sender, bob)
- end
- it 'destroys the following relation' do
- expect(sender.following?(bob)).to be false
- end
-
- it 'sends an unfollow activity' do
- expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
+ expect(sender)
+ .to_not be_following(bob)
+ expect(a_request(:post, 'http://example.com/inbox'))
+ .to have_been_made.once
end
end
@@ -44,15 +44,15 @@ RSpec.describe UnfollowService do
before do
bob.follow!(sender)
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
+ end
+
+ it 'destroys the following relation and sends a reject activity' do
subject.call(bob, sender)
- end
- it 'destroys the following relation' do
- expect(bob.following?(sender)).to be false
- end
-
- it 'sends a reject activity' do
- expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
+ expect(sender)
+ .to_not be_following(bob)
+ expect(a_request(:post, 'http://example.com/inbox'))
+ .to have_been_made.once
end
end
end
diff --git a/spec/services/update_account_service_spec.rb b/spec/services/update_account_service_spec.rb
index d066db481..f9059af07 100644
--- a/spec/services/update_account_service_spec.rb
+++ b/spec/services/update_account_service_spec.rb
@@ -18,23 +18,19 @@ RSpec.describe UpdateAccountService do
FollowService.new.call(alice, account)
FollowService.new.call(bob, account)
FollowService.new.call(eve, account)
+ end
+ it 'auto accepts pending follow requests from appropriate accounts' do
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
+ expect(alice).to be_following(account)
+ expect(alice).to_not be_requested(account)
- 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
+ expect(bob).to_not be_following(account)
+ expect(bob).to be_requested(account)
- 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
+ expect(eve).to be_following(account)
+ expect(eve).to_not be_requested(account)
end
end
end
diff --git a/spec/services/update_status_service_spec.rb b/spec/services/update_status_service_spec.rb
index de06fb13c..7c92adeff 100644
--- a/spec/services/update_status_service_spec.rb
+++ b/spec/services/update_status_service_spec.rb
@@ -10,15 +10,15 @@ RSpec.describe UpdateStatusService do
before do
allow(ActivityPub::DistributionWorker).to receive(:perform_async)
+ end
+
+ it 'does not create an edit or notify anyone' do
subject.call(status, status.account_id, text: 'Foo')
- end
- it 'does not create an edit' do
- expect(status.reload.edits).to be_empty
- end
-
- it 'does not notify anyone' do
- expect(ActivityPub::DistributionWorker).to_not have_received(:perform_async)
+ expect(status.reload.edits)
+ .to be_empty
+ expect(ActivityPub::DistributionWorker)
+ .to_not have_received(:perform_async)
end
end
@@ -28,18 +28,16 @@ RSpec.describe UpdateStatusService do
before do
PreviewCardsStatus.create(status: status, preview_card: preview_card)
+ end
+
+ it 'updates text, resets card, saves edit history' do
subject.call(status, status.account_id, text: 'Bar')
- end
- it 'updates text' do
- expect(status.reload.text).to eq 'Bar'
- end
-
- it 'resets preview card' do
- expect(status.reload.preview_card).to be_nil
- end
-
- it 'saves edit history' do
+ expect(status.reload)
+ .to have_attributes(
+ text: 'Bar',
+ preview_card: be_nil
+ )
expect(status.edits.ordered.pluck(:text)).to eq %w(Foo Bar)
end
end
@@ -50,15 +48,15 @@ RSpec.describe UpdateStatusService do
before do
PreviewCardsStatus.create(status: status, preview_card: preview_card)
+ end
+
+ it 'updates content warning and saves history' do
subject.call(status, status.account_id, text: 'Foo', spoiler_text: 'Bar')
- end
- it 'updates content warning' do
- expect(status.reload.spoiler_text).to eq 'Bar'
- end
-
- it 'saves edit history' do
- expect(status.edits.ordered.pluck(:text, :spoiler_text)).to eq [['Foo', ''], ['Foo', 'Bar']]
+ expect(status.reload.spoiler_text)
+ .to eq 'Bar'
+ expect(status.edits.ordered.pluck(:text, :spoiler_text))
+ .to eq [['Foo', ''], ['Foo', 'Bar']]
end
end
@@ -69,23 +67,19 @@ RSpec.describe UpdateStatusService do
before do
status.media_attachments << detached_media_attachment
+ end
+
+ it 'updates media attachments, handles attachments, saves history' do
subject.call(status, status.account_id, text: 'Foo', media_ids: [attached_media_attachment.id.to_s])
- end
- it 'updates media attachments' do
- expect(status.ordered_media_attachments).to eq [attached_media_attachment]
- end
-
- it 'does not detach detached media attachments' do
- expect(detached_media_attachment.reload.status_id).to eq status.id
- end
-
- it 'attaches attached media attachments' do
- expect(attached_media_attachment.reload.status_id).to eq status.id
- end
-
- it 'saves edit history' do
- expect(status.edits.ordered.pluck(:ordered_media_attachment_ids)).to eq [[detached_media_attachment.id], [attached_media_attachment.id]]
+ expect(status.ordered_media_attachments)
+ .to eq [attached_media_attachment]
+ expect(detached_media_attachment.reload.status_id)
+ .to eq status.id
+ expect(attached_media_attachment.reload.status_id)
+ .to eq status.id
+ expect(status.edits.ordered.pluck(:ordered_media_attachment_ids))
+ .to eq [[detached_media_attachment.id], [attached_media_attachment.id]]
end
end
@@ -95,19 +89,18 @@ RSpec.describe UpdateStatusService do
before do
status.media_attachments << media_attachment
+ end
+
+ it 'does not detach media attachment, updates description, and saves history' do
subject.call(status, status.account_id, text: 'Foo', media_ids: [media_attachment.id.to_s], media_attributes: [{ id: media_attachment.id, description: 'New description' }])
- end
- it 'does not detach media attachment' do
- expect(media_attachment.reload.status_id).to eq status.id
- end
-
- it 'updates the media attachment description' do
- expect(media_attachment.reload.description).to eq 'New description'
- end
-
- it 'saves edit history' do
- expect(status.edits.ordered.map { |edit| edit.ordered_media_attachments.map(&:description) }).to eq [['Old description'], ['New description']]
+ expect(media_attachment.reload)
+ .to have_attributes(
+ status_id: status.id,
+ description: 'New description'
+ )
+ expect(status.edits.ordered.map { |edit| edit.ordered_media_attachments.map(&:description) })
+ .to eq [['Old description'], ['New description']]
end
end
@@ -120,28 +113,27 @@ RSpec.describe UpdateStatusService do
before do
status.update(poll: poll)
VoteService.new.call(voter, poll, [0])
+ end
+
+ it 'updates poll, resets votes, saves history, requeues notifications' do
subject.call(status, status.account_id, text: 'Foo', poll: { options: %w(Bar Baz Foo), expires_in: 5.days.to_i })
- end
- it 'updates poll' do
poll = status.poll.reload
- expect(poll.options).to eq %w(Bar Baz Foo)
- end
- it 'resets votes' do
- poll = status.poll.reload
- expect(poll.votes_count).to eq 0
- expect(poll.votes.count).to eq 0
- expect(poll.cached_tallies).to eq [0, 0, 0]
- end
+ expect(poll)
+ .to have_attributes(
+ options: %w(Bar Baz Foo),
+ votes_count: 0,
+ cached_tallies: [0, 0, 0]
+ )
+ expect(poll.votes.count)
+ .to eq(0)
- it 'saves edit history' do
- expect(status.edits.ordered.pluck(:poll_options)).to eq [%w(Foo Bar), %w(Bar Baz Foo)]
- end
+ expect(status.edits.ordered.pluck(:poll_options))
+ .to eq [%w(Foo Bar), %w(Bar Baz Foo)]
- it 'requeues expiration notification' do
- poll = status.poll.reload
- expect(PollExpirationNotifyWorker).to have_enqueued_sidekiq_job(poll.id).at(poll.expires_at + 5.minutes)
+ expect(PollExpirationNotifyWorker)
+ .to have_enqueued_sidekiq_job(poll.id).at(poll.expires_at + 5.minutes)
end
end
@@ -151,16 +143,13 @@ RSpec.describe UpdateStatusService do
let!(:bob) { Fabricate(:account, username: 'bob') }
let!(:status) { PostStatusService.new.call(account, text: 'Hello @alice') }
- before do
+ it 'changes mentions and keeps old as silent' do
subject.call(status, status.account_id, text: 'Hello @bob')
- end
- it 'changes mentions' do
- expect(status.active_mentions.pluck(:account_id)).to eq [bob.id]
- end
-
- it 'keeps old mentions as silent mentions' do
- expect(status.mentions.pluck(:account_id)).to contain_exactly(alice.id, bob.id)
+ expect(status.active_mentions.pluck(:account_id))
+ .to eq [bob.id]
+ expect(status.mentions.pluck(:account_id))
+ .to contain_exactly(alice.id, bob.id)
end
end
@@ -168,11 +157,9 @@ RSpec.describe UpdateStatusService do
let!(:account) { Fabricate(:account) }
let!(:status) { PostStatusService.new.call(account, text: 'Hello #foo') }
- before do
- subject.call(status, status.account_id, text: 'Hello #bar')
- end
-
it 'changes tags' do
+ subject.call(status, status.account_id, text: 'Hello #bar')
+
expect(status.tags.pluck(:name)).to eq %w(bar)
end
end
diff --git a/spec/system/oauth_spec.rb b/spec/system/oauth_spec.rb
index 64ac75879..14ffc163f 100644
--- a/spec/system/oauth_spec.rb
+++ b/spec/system/oauth_spec.rb
@@ -24,28 +24,28 @@ RSpec.describe 'Using OAuth from an external app' do
subject
# It presents the user with an authorization page
- expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize'))
-
- # Upon authorizing, it redirects to the apps' callback URL
- click_on I18n.t('doorkeeper.authorizations.buttons.authorize')
- expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true)
+ expect(page).to have_content(oauth_authorize_text)
# It grants the app access to the account
- expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be true
+ expect { click_on oauth_authorize_text }
+ .to change { user_has_grant_with_client_app? }.to(true)
+
+ # Upon authorizing, it redirects to the apps' callback URL
+ expect(page).to redirect_to_callback_url
end
it 'when rejecting the authorization request' do
subject
# It presents the user with an authorization page
- expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.deny'))
-
- # Upon denying, it redirects to the apps' callback URL
- click_on I18n.t('doorkeeper.authorizations.buttons.deny')
- expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true)
+ expect(page).to have_content(oauth_deny_text)
# It does not grant the app access to the account
- expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be false
+ expect { click_on oauth_deny_text }
+ .to_not change { user_has_grant_with_client_app? }.from(false)
+
+ # Upon denying, it redirects to the apps' callback URL
+ expect(page).to redirect_to_callback_url
end
# The tests in this context ensures that requests without PKCE parameters
@@ -133,7 +133,6 @@ RSpec.describe 'Using OAuth from an external app' do
end
it 'when accepting the authorization request' do
- params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' }
visit "/oauth/authorize?#{params.to_query}"
# It presents the user with a log-in page
@@ -145,18 +144,17 @@ RSpec.describe 'Using OAuth from an external app' do
# Logging in redirects to an authorization page
fill_in_auth_details(email, password)
- expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize'))
-
- # Upon authorizing, it redirects to the apps' callback URL
- click_on I18n.t('doorkeeper.authorizations.buttons.authorize')
- expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true)
+ expect(page).to have_content(oauth_authorize_text)
# It grants the app access to the account
- expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be true
+ expect { click_on oauth_authorize_text }
+ .to change { user_has_grant_with_client_app? }.to(true)
+
+ # Upon authorizing, it redirects to the apps' callback URL
+ expect(page).to redirect_to_callback_url
end
it 'when rejecting the authorization request' do
- params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' }
visit "/oauth/authorize?#{params.to_query}"
# It presents the user with a log-in page
@@ -168,21 +166,20 @@ RSpec.describe 'Using OAuth from an external app' do
# Logging in redirects to an authorization page
fill_in_auth_details(email, password)
- expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize'))
-
- # Upon denying, it redirects to the apps' callback URL
- click_on I18n.t('doorkeeper.authorizations.buttons.deny')
- expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true)
+ expect(page).to have_content(oauth_authorize_text)
# It does not grant the app access to the account
- expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be false
+ expect { click_on oauth_deny_text }
+ .to_not change { user_has_grant_with_client_app? }.from(false)
+
+ # Upon denying, it redirects to the apps' callback URL
+ expect(page).to redirect_to_callback_url
end
context 'when the user has set up TOTP' do
let(:user) { Fabricate(:user, email: email, password: password, otp_required_for_login: true, otp_secret: User.generate_otp_secret) }
it 'when accepting the authorization request' do
- params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' }
visit "/oauth/authorize?#{params.to_query}"
# It presents the user with a log-in page
@@ -202,18 +199,17 @@ RSpec.describe 'Using OAuth from an external app' do
# Filling in the correct TOTP code redirects to an app authorization page
fill_in_otp_details(user.current_otp)
- expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize'))
-
- # Upon authorizing, it redirects to the apps' callback URL
- click_on I18n.t('doorkeeper.authorizations.buttons.authorize')
- expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true)
+ expect(page).to have_content(oauth_authorize_text)
# It grants the app access to the account
- expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be true
+ expect { click_on oauth_authorize_text }
+ .to change { user_has_grant_with_client_app? }.to(true)
+
+ # Upon authorizing, it redirects to the apps' callback URL
+ expect(page).to redirect_to_callback_url
end
it 'when rejecting the authorization request' do
- params = { client_id: client_app.uid, response_type: 'code', redirect_uri: client_app.redirect_uri, scope: 'read' }
visit "/oauth/authorize?#{params.to_query}"
# It presents the user with a log-in page
@@ -233,14 +229,14 @@ RSpec.describe 'Using OAuth from an external app' do
# Filling in the correct TOTP code redirects to an app authorization page
fill_in_otp_details(user.current_otp)
- expect(page).to have_content(I18n.t('doorkeeper.authorizations.buttons.authorize'))
-
- # Upon denying, it redirects to the apps' callback URL
- click_on I18n.t('doorkeeper.authorizations.buttons.deny')
- expect(page).to have_current_path(/\A#{client_app.redirect_uri}/, url: true)
+ expect(page).to have_content(oauth_authorize_text)
# It does not grant the app access to the account
- expect(Doorkeeper::AccessGrant.exists?(application: client_app, resource_owner_id: user.id)).to be false
+ expect { click_on oauth_deny_text }
+ .to_not change { user_has_grant_with_client_app? }.from(false)
+
+ # Upon denying, it redirects to the apps' callback URL
+ expect(page).to redirect_to_callback_url
end
end
# TODO: external auth
@@ -252,4 +248,24 @@ RSpec.describe 'Using OAuth from an external app' do
fill_in 'user_otp_attempt', with: value
click_on I18n.t('auth.login')
end
+
+ def oauth_authorize_text
+ I18n.t('doorkeeper.authorizations.buttons.authorize')
+ end
+
+ def oauth_deny_text
+ I18n.t('doorkeeper.authorizations.buttons.deny')
+ end
+
+ def redirect_to_callback_url
+ have_current_path(/\A#{client_app.redirect_uri}/, url: true)
+ end
+
+ def user_has_grant_with_client_app?
+ Doorkeeper::AccessGrant
+ .exists?(
+ application: client_app,
+ resource_owner_id: user.id
+ )
+ end
end
diff --git a/yarn.lock b/yarn.lock
index 9aeb2b02a..5fc15f27e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3110,8 +3110,8 @@ __metadata:
linkType: hard
"@reduxjs/toolkit@npm:^2.0.1":
- version: 2.2.7
- resolution: "@reduxjs/toolkit@npm:2.2.7"
+ version: 2.2.8
+ resolution: "@reduxjs/toolkit@npm:2.2.8"
dependencies:
immer: "npm:^10.0.3"
redux: "npm:^5.0.1"
@@ -3125,7 +3125,7 @@ __metadata:
optional: true
react-redux:
optional: true
- checksum: 10c0/7761a91adac2b5e1d50a8163ba5441480bb86a3a80b7583037c27a88463394b132dd7592862fc2be03aa7ab98a6e1710549889986dc0d3f033c169a3ba2cb02e
+ checksum: 10c0/bf1356d71bfb82e5a181692c79c19b7bc19355260a9966f6562604c995f0cd0ce1154177ccd14095e8b319e73f64cfe86a4e46a83d24edba7876d4ae71fd5ae0
languageName: node
linkType: hard
@@ -13417,9 +13417,9 @@ __metadata:
languageName: node
linkType: hard
-"postcss-custom-media@npm:^11.0.1":
- version: 11.0.1
- resolution: "postcss-custom-media@npm:11.0.1"
+"postcss-custom-media@npm:^11.0.2":
+ version: 11.0.2
+ resolution: "postcss-custom-media@npm:11.0.2"
dependencies:
"@csstools/cascade-layer-name-parser": "npm:^2.0.1"
"@csstools/css-parser-algorithms": "npm:^3.0.1"
@@ -13427,7 +13427,7 @@ __metadata:
"@csstools/media-query-list-parser": "npm:^3.0.1"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/771b281a28f105370ede7c4a86f9e3dd8d9ec3bf2d2883d4f2cfe9c42b5ec1bf88f713458b356870315d0ba3a285fbeb7bb514a1203d1c4fb113bd9044369bf2
+ checksum: 10c0/7bec2b1e0b5d786c33c5715b611ffc8b9737252ee6bf77ca59255ac16f91ce614406923f43250e5c88b04f1bb050f155dc5ed4d9350dbd704c45fbd72e5a9a04
languageName: node
linkType: hard
@@ -13906,8 +13906,8 @@ __metadata:
linkType: hard
"postcss-preset-env@npm:^10.0.0":
- version: 10.0.5
- resolution: "postcss-preset-env@npm:10.0.5"
+ version: 10.0.6
+ resolution: "postcss-preset-env@npm:10.0.6"
dependencies:
"@csstools/postcss-cascade-layers": "npm:^5.0.0"
"@csstools/postcss-color-function": "npm:^4.0.2"
@@ -13950,7 +13950,7 @@ __metadata:
postcss-color-functional-notation: "npm:^7.0.2"
postcss-color-hex-alpha: "npm:^10.0.0"
postcss-color-rebeccapurple: "npm:^10.0.0"
- postcss-custom-media: "npm:^11.0.1"
+ postcss-custom-media: "npm:^11.0.2"
postcss-custom-properties: "npm:^14.0.1"
postcss-custom-selectors: "npm:^8.0.1"
postcss-dir-pseudo-class: "npm:^9.0.0"
@@ -13972,7 +13972,7 @@ __metadata:
postcss-selector-not: "npm:^8.0.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/db5eb1175cb26bed3f1a4c47acc67935ffc784520321470520e59de366ac6f91be1e609fe36056af707ed20f7910721287cff0fae416c437dd3e944de13ffd05
+ checksum: 10c0/01660acf3b9ddf4d612a31819e9a5de9fe5383e9eddd2c130180f66ae90c5a881eb408e73454fd50e1839eae71678d738bf72073de08f9013c183b0bd9950fe5
languageName: node
linkType: hard