From 28c4eca0af696ff039b90b8af57aa818df442edf Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 25 Sep 2024 18:36:19 +0200 Subject: [PATCH 01/68] Change responsive break points on navigation panel in web UI (#32034) --- .../mastodon/components/navigation_portal.tsx | 32 +++--- .../mastodon/features/account/navigation.jsx | 5 +- .../features/ui/components/column_link.jsx | 7 +- .../ui/components/navigation_panel.jsx | 105 ++++++++++-------- .../styles/mastodon/components.scss | 54 +++++---- 5 files changed, 112 insertions(+), 91 deletions(-) diff --git a/app/javascript/mastodon/components/navigation_portal.tsx b/app/javascript/mastodon/components/navigation_portal.tsx index 46f2c0bfac..08f91ce18a 100644 --- a/app/javascript/mastodon/components/navigation_portal.tsx +++ b/app/javascript/mastodon/components/navigation_portal.tsx @@ -4,22 +4,22 @@ import AccountNavigation from 'mastodon/features/account/navigation'; import Trends from 'mastodon/features/getting_started/containers/trends_container'; import { showTrends } from 'mastodon/initial_state'; -const DefaultNavigation: React.FC = () => - showTrends ? ( - <> -
- - - ) : null; +const DefaultNavigation: React.FC = () => (showTrends ? : null); export const NavigationPortal: React.FC = () => ( - - - - - - - - - +
+ + + + + + + + + +
); diff --git a/app/javascript/mastodon/features/account/navigation.jsx b/app/javascript/mastodon/features/account/navigation.jsx index ccebe9043a..aa78135de2 100644 --- a/app/javascript/mastodon/features/account/navigation.jsx +++ b/app/javascript/mastodon/features/account/navigation.jsx @@ -43,10 +43,7 @@ class AccountNavigation extends PureComponent { } return ( - <> -
- - + ); } diff --git a/app/javascript/mastodon/features/ui/components/column_link.jsx b/app/javascript/mastodon/features/ui/components/column_link.jsx index 6ef122c07b..3386c17f07 100644 --- a/app/javascript/mastodon/features/ui/components/column_link.jsx +++ b/app/javascript/mastodon/features/ui/components/column_link.jsx @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useRouteMatch, NavLink } from 'react-router-dom'; -import { Icon } from 'mastodon/components/icon'; +import { Icon } from 'mastodon/components/icon'; -const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, href, method, badge, transparent, ...other }) => { +const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, href, method, badge, transparent, optional, ...other }) => { const match = useRouteMatch(to); - const className = classNames('column-link', { 'column-link--transparent': transparent }); + const className = classNames('column-link', { 'column-link--transparent': transparent, 'column-link--optional': optional }); const badgeElement = typeof badge !== 'undefined' ? {badge} : null; const iconElement = (typeof icon === 'string' || iconComponent) ? : icon; const activeIconElement = activeIcon ?? (activeIconComponent ? : iconElement); @@ -43,6 +43,7 @@ ColumnLink.propTypes = { method: PropTypes.string, badge: PropTypes.node, transparent: PropTypes.bool, + optional: PropTypes.bool, }; export default ColumnLink; diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 0ca21e8976..8fa20a554d 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -120,14 +120,17 @@ class NavigationPanel extends Component { let banner = undefined; - if(transientSingleColumn) - banner = (
- {intl.formatMessage(messages.openedInClassicInterface)} - {" "} - - {intl.formatMessage(messages.advancedInterface)} - -
); + if (transientSingleColumn) { + banner = ( +
+ {intl.formatMessage(messages.openedInClassicInterface)} + {" "} + + {intl.formatMessage(messages.advancedInterface)} + +
+ ); + } return (
@@ -141,54 +144,58 @@ class NavigationPanel extends Component {
} - {signedIn && ( - <> - - - - - )} +
+ {signedIn && ( + <> + + + + + )} - {trendsEnabled ? ( - - ) : ( - - )} + {trendsEnabled ? ( + + ) : ( + + )} - {(signedIn || timelinePreview) && ( - - )} + {(signedIn || timelinePreview) && ( + + )} - {!signedIn && ( -
+ {!signedIn && ( +
+
+ { disabledAccountId ? : } +
+ )} + + {signedIn && ( + <> + + + + + + + +
+ + + + {canManageReports(permissions) && } + {canViewAdminDashboard(permissions) && } + + )} + +

- { disabledAccountId ? : } +
- )} - - {signedIn && ( - <> - - - - - - - -
- - - - {canManageReports(permissions) && } - {canViewAdminDashboard(permissions) && } - - )} - -
-
-
+
+
); diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index ea163ff9bf..847c594ae5 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3490,12 +3490,14 @@ $ui-header-logo-wordmark-width: 99px; margin-top: 10px; margin-bottom: 10px; height: calc(100% - 20px); - overflow-y: auto; + overflow: hidden; display: flex; flex-direction: column; - & > a { - flex: 0 0 auto; + &__menu { + flex: 1 1 auto; + min-height: 0; + overflow-y: auto; } .logo { @@ -3506,6 +3508,36 @@ $ui-header-logo-wordmark-width: 99px; &__logo { margin-bottom: 12px; } + + @media screen and (height <= 710px) { + &__portal { + display: none; + } + } + + @media screen and (height <= 765px) { + &__portal .trends__item:nth-child(n + 3) { + display: none; + } + } + + @media screen and (height <= 820px) { + &__portal .trends__item:nth-child(n + 4) { + display: none; + } + } + + @media screen and (height <= 920px) { + .column-link.column-link--optional { + display: none; + } + } + + @media screen and (height <= 1040px) { + .list-panel { + display: none; + } + } } .navigation-panel, @@ -3869,22 +3901,6 @@ $ui-header-logo-wordmark-width: 99px; } } - @media screen and (height <= 810px) { - .trends__item:nth-of-type(3) { - display: none; - } - } - - @media screen and (height <= 720px) { - .trends__item:nth-of-type(2) { - display: none; - } - } - - @media screen and (height <= 670px) { - display: none; - } - .trends__item { border-bottom: 0; padding: 10px; From 3426ea2912d1cd69ebdfa4e43a119dc6e7374c49 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 25 Sep 2024 20:13:36 +0200 Subject: [PATCH 02/68] Add preview of followers removed in domain block modal in web UI (#32032) --- .../v1/domain_blocks/previews_controller.rb | 27 +++ app/javascript/mastodon/api.ts | 1 + app/javascript/mastodon/components/button.tsx | 3 + .../features/ui/components/block_modal.jsx | 2 +- .../ui/components/domain_block_modal.jsx | 106 --------- .../ui/components/domain_block_modal.tsx | 204 ++++++++++++++++++ app/javascript/mastodon/locales/en.json | 2 +- .../styles/mastodon/components.scss | 20 ++ app/javascript/styles/mastodon/variables.scss | 3 + .../domain_block_preview_presenter.rb | 5 + .../rest/domain_block_preview_serializer.rb | 5 + config/routes/api.rb | 4 + 12 files changed, 274 insertions(+), 108 deletions(-) create mode 100644 app/controllers/api/v1/domain_blocks/previews_controller.rb delete mode 100644 app/javascript/mastodon/features/ui/components/domain_block_modal.jsx create mode 100644 app/javascript/mastodon/features/ui/components/domain_block_modal.tsx create mode 100644 app/presenters/domain_block_preview_presenter.rb create mode 100644 app/serializers/rest/domain_block_preview_serializer.rb diff --git a/app/controllers/api/v1/domain_blocks/previews_controller.rb b/app/controllers/api/v1/domain_blocks/previews_controller.rb new file mode 100644 index 0000000000..a917bddd98 --- /dev/null +++ b/app/controllers/api/v1/domain_blocks/previews_controller.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class Api::V1::DomainBlocks::PreviewsController < Api::BaseController + before_action -> { doorkeeper_authorize! :follow, :write, :'write:blocks' } + before_action :require_user! + before_action :set_domain + before_action :set_domain_block_preview + + def show + render json: @domain_block_preview, serializer: REST::DomainBlockPreviewSerializer + end + + private + + def set_domain + @domain = TagManager.instance.normalize_domain(params[:domain]) + end + + def set_domain_block_preview + @domain_block_preview = with_read_replica do + DomainBlockPreviewPresenter.new( + following_count: current_account.following.where(domain: @domain).count, + followers_count: current_account.followers.where(domain: @domain).count + ) + end + end +end diff --git a/app/javascript/mastodon/api.ts b/app/javascript/mastodon/api.ts index 25bb25547c..51cbe0b695 100644 --- a/app/javascript/mastodon/api.ts +++ b/app/javascript/mastodon/api.ts @@ -70,6 +70,7 @@ export async function apiRequest( args: { params?: RequestParamsOrData; data?: RequestParamsOrData; + timeout?: number; } = {}, ) { const { data } = await api().request({ diff --git a/app/javascript/mastodon/components/button.tsx b/app/javascript/mastodon/components/button.tsx index c76aaea42f..3e720f7cee 100644 --- a/app/javascript/mastodon/components/button.tsx +++ b/app/javascript/mastodon/components/button.tsx @@ -7,6 +7,7 @@ interface BaseProps extends Omit, 'children'> { block?: boolean; secondary?: boolean; + dangerous?: boolean; } interface PropsChildren extends PropsWithChildren { @@ -26,6 +27,7 @@ export const Button: React.FC = ({ disabled, block, secondary, + dangerous, className, title, text, @@ -46,6 +48,7 @@ export const Button: React.FC = ({ className={classNames('button', className, { 'button-secondary': secondary, 'button--block': block, + 'button--dangerous': dangerous, })} disabled={disabled} onClick={handleClick} diff --git a/app/javascript/mastodon/features/ui/components/block_modal.jsx b/app/javascript/mastodon/features/ui/components/block_modal.jsx index d6fc6c4154..21a984f97f 100644 --- a/app/javascript/mastodon/features/ui/components/block_modal.jsx +++ b/app/javascript/mastodon/features/ui/components/block_modal.jsx @@ -99,7 +99,7 @@ export const BlockModal = ({ accountId, acct }) => { -
diff --git a/app/javascript/mastodon/features/ui/components/domain_block_modal.jsx b/app/javascript/mastodon/features/ui/components/domain_block_modal.jsx deleted file mode 100644 index 78d5cbb130..0000000000 --- a/app/javascript/mastodon/features/ui/components/domain_block_modal.jsx +++ /dev/null @@ -1,106 +0,0 @@ -import PropTypes from 'prop-types'; -import { useCallback } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import { useDispatch } from 'react-redux'; - -import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; -import DomainDisabledIcon from '@/material-icons/400-24px/domain_disabled.svg?react'; -import HistoryIcon from '@/material-icons/400-24px/history.svg?react'; -import PersonRemoveIcon from '@/material-icons/400-24px/person_remove.svg?react'; -import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; -import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; -import { blockAccount } from 'mastodon/actions/accounts'; -import { blockDomain } from 'mastodon/actions/domain_blocks'; -import { closeModal } from 'mastodon/actions/modal'; -import { Button } from 'mastodon/components/button'; -import { Icon } from 'mastodon/components/icon'; - -export const DomainBlockModal = ({ domain, accountId, acct }) => { - const dispatch = useDispatch(); - - const handleClick = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - dispatch(blockDomain(domain)); - }, [dispatch, domain]); - - const handleSecondaryClick = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - dispatch(blockAccount(accountId)); - }, [dispatch, accountId]); - - const handleCancel = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - }, [dispatch]); - - return ( -
-
-
-
- -
- -
-

-
{domain}
-
-
- -
-
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
-
-
- -
-
- - -
- - - - -
-
-
- ); -}; - -DomainBlockModal.propTypes = { - domain: PropTypes.string.isRequired, - accountId: PropTypes.string.isRequired, - acct: PropTypes.string.isRequired, -}; - -export default DomainBlockModal; diff --git a/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx b/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx new file mode 100644 index 0000000000..7e6715990e --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/domain_block_modal.tsx @@ -0,0 +1,204 @@ +import { useCallback, useEffect, useState } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; +import DomainDisabledIcon from '@/material-icons/400-24px/domain_disabled.svg?react'; +import HistoryIcon from '@/material-icons/400-24px/history.svg?react'; +import PersonRemoveIcon from '@/material-icons/400-24px/person_remove.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; +import { blockAccount } from 'mastodon/actions/accounts'; +import { blockDomain } from 'mastodon/actions/domain_blocks'; +import { closeModal } from 'mastodon/actions/modal'; +import { apiRequest } from 'mastodon/api'; +import { Button } from 'mastodon/components/button'; +import { Icon } from 'mastodon/components/icon'; +import { LoadingIndicator } from 'mastodon/components/loading_indicator'; +import { ShortNumber } from 'mastodon/components/short_number'; +import { useAppDispatch } from 'mastodon/store'; + +interface DomainBlockPreviewResponse { + following_count: number; + followers_count: number; +} + +export const DomainBlockModal: React.FC<{ + domain: string; + accountId: string; + acct: string; +}> = ({ domain, accountId, acct }) => { + const dispatch = useAppDispatch(); + const [loading, setLoading] = useState(true); + const [preview, setPreview] = useState( + null, + ); + + const handleClick = useCallback(() => { + if (loading) { + return; // Prevent destructive action before the preview finishes loading or times out + } + + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + dispatch(blockDomain(domain)); + }, [dispatch, loading, domain]); + + const handleSecondaryClick = useCallback(() => { + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + dispatch(blockAccount(accountId)); + }, [dispatch, accountId]); + + const handleCancel = useCallback(() => { + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + }, [dispatch]); + + useEffect(() => { + setLoading(true); + + apiRequest('GET', 'v1/domain_blocks/preview', { + params: { domain }, + timeout: 5000, + }) + .then((data) => { + setPreview(data); + setLoading(false); + return ''; + }) + .catch(() => { + setLoading(false); + }); + }, [setPreview, setLoading, domain]); + + return ( +
+
+
+
+ +
+ +
+

+ +

+
{domain}
+
+
+ +
+ {preview && preview.followers_count + preview.following_count > 0 && ( +
+
+ +
+
+ + + ), + followingCount: preview.following_count, + followingCountDisplay: ( + + ), + }} + /> + +
+
+ )} + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ + +
+ + + + +
+
+
+ ); +}; + +// eslint-disable-next-line import/no-default-export +export default DomainBlockModal; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index d0563bb1b2..0dc4ccee80 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nobody from this server can follow you.", "domain_block_modal.they_wont_know": "They won't know they've been blocked.", "domain_block_modal.title": "Block domain?", - "domain_block_modal.you_will_lose_followers": "All your followers from this server will be removed.", + "domain_block_modal.you_will_lose_num_followers": "You will lose {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} followers}} and {followingCount, plural, one {{followingCountDisplay} person you follow} other {{followingCountDisplay} people you follow}}.", "domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.", "domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.", "domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 847c594ae5..1d710546ca 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -81,6 +81,18 @@ outline: $ui-button-icon-focus-outline; } + &--dangerous { + background-color: var(--error-background-color); + color: var(--on-error-color); + + &:active, + &:focus, + &:hover { + background-color: var(--error-active-background-color); + transition: none; + } + } + &--destructive { &:active, &:focus, @@ -6237,6 +6249,14 @@ a.status-card { display: flex; gap: 16px; align-items: center; + + strong { + font-weight: 700; + } + } + + &--deemphasized { + color: $secondary-text-color; } &__icon { diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index c477e7a750..2601113d32 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -111,4 +111,7 @@ $font-monospace: 'mastodon-font-monospace' !default; --surface-variant-active-background-color: #{lighten($ui-base-color, 4%)}; --on-surface-color: #{transparentize($ui-base-color, 0.5)}; --avatar-border-radius: 8px; + --error-background-color: #{darken($error-red, 16%)}; + --error-active-background-color: #{darken($error-red, 12%)}; + --on-error-color: #fff; } diff --git a/app/presenters/domain_block_preview_presenter.rb b/app/presenters/domain_block_preview_presenter.rb new file mode 100644 index 0000000000..601f76273d --- /dev/null +++ b/app/presenters/domain_block_preview_presenter.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class DomainBlockPreviewPresenter < ActiveModelSerializers::Model + attributes :followers_count, :following_count +end diff --git a/app/serializers/rest/domain_block_preview_serializer.rb b/app/serializers/rest/domain_block_preview_serializer.rb new file mode 100644 index 0000000000..fea8c2f1ee --- /dev/null +++ b/app/serializers/rest/domain_block_preview_serializer.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class REST::DomainBlockPreviewSerializer < ActiveModel::Serializer + attributes :following_count, :followers_count +end diff --git a/config/routes/api.rb b/config/routes/api.rb index 93698381cb..46907a1ce2 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -125,6 +125,10 @@ namespace :api, format: false do get :search, to: 'search#index' end + namespace :domain_blocks do + resource :preview, only: [:show] + end + resource :domain_blocks, only: [:show, :create, :destroy] resource :directory, only: [:show] From db332553c96152302223e6c8c5df61832fab7a08 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Wed, 25 Sep 2024 21:54:28 +0200 Subject: [PATCH 03/68] Rename "Data export" menu item (#32099) --- config/locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 625f53f2e5..9c3bab6baa 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1693,7 +1693,7 @@ en: delete: Account deletion development: Development edit_profile: Edit profile - export: Data export + export: Export featured_tags: Featured hashtags import: Import import_and_export: Import and export From 886baa5e3543a983b82a9efd15b9e41f7f38227d Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 26 Sep 2024 09:40:59 +0200 Subject: [PATCH 04/68] Fix typo causing incorrect error being raised in blurhash processing failure (#32104) --- lib/paperclip/blurhash_transcoder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/paperclip/blurhash_transcoder.rb b/lib/paperclip/blurhash_transcoder.rb index 150275bc9e..b4ff4a12a0 100644 --- a/lib/paperclip/blurhash_transcoder.rb +++ b/lib/paperclip/blurhash_transcoder.rb @@ -7,7 +7,7 @@ module Paperclip width, height, data = blurhash_params # Guard against segfaults if data has unexpected size - raise RangeError("Invalid image data size (expected #{width * height * 3}, got #{data.size})") if data.size != width * height * 3 # TODO: should probably be another exception type + raise RangeError, "Invalid image data size (expected #{width * height * 3}, got #{data.size})" if data.size != width * height * 3 # TODO: should probably be another exception type attachment.instance.blurhash = Blurhash.encode(width, height, data, **(options[:blurhash] || {})) From 278a075b22204b72e7acb43266388c81aedfc402 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 10:47:38 +0200 Subject: [PATCH 05/68] New Crowdin Translations (automated) (#32103) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ar.json | 1 - app/javascript/mastodon/locales/be.json | 1 - app/javascript/mastodon/locales/bg.json | 1 - app/javascript/mastodon/locales/ca.json | 2 +- app/javascript/mastodon/locales/cs.json | 1 - app/javascript/mastodon/locales/cy.json | 4 ++- app/javascript/mastodon/locales/da.json | 2 +- app/javascript/mastodon/locales/de.json | 2 +- app/javascript/mastodon/locales/el.json | 1 - app/javascript/mastodon/locales/en-GB.json | 1 - app/javascript/mastodon/locales/eo.json | 2 +- app/javascript/mastodon/locales/es-AR.json | 2 +- app/javascript/mastodon/locales/es-MX.json | 2 +- app/javascript/mastodon/locales/es.json | 2 +- app/javascript/mastodon/locales/et.json | 1 - app/javascript/mastodon/locales/eu.json | 1 - app/javascript/mastodon/locales/fa.json | 1 - app/javascript/mastodon/locales/fi.json | 1 - app/javascript/mastodon/locales/fil.json | 1 - app/javascript/mastodon/locales/fo.json | 2 +- app/javascript/mastodon/locales/fr-CA.json | 1 - app/javascript/mastodon/locales/fr.json | 1 - app/javascript/mastodon/locales/fy.json | 1 - app/javascript/mastodon/locales/ga.json | 1 - app/javascript/mastodon/locales/gd.json | 1 - app/javascript/mastodon/locales/gl.json | 4 +-- app/javascript/mastodon/locales/he.json | 1 - app/javascript/mastodon/locales/hu.json | 1 - app/javascript/mastodon/locales/ia.json | 1 - app/javascript/mastodon/locales/id.json | 1 - app/javascript/mastodon/locales/ie.json | 1 - app/javascript/mastodon/locales/is.json | 1 - app/javascript/mastodon/locales/it.json | 1 - app/javascript/mastodon/locales/ja.json | 1 - app/javascript/mastodon/locales/ko.json | 1 - app/javascript/mastodon/locales/la.json | 1 - app/javascript/mastodon/locales/lad.json | 1 - app/javascript/mastodon/locales/lt.json | 1 - app/javascript/mastodon/locales/lv.json | 1 - app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/nn.json | 1 - app/javascript/mastodon/locales/no.json | 1 - app/javascript/mastodon/locales/pl.json | 2 +- app/javascript/mastodon/locales/pt-BR.json | 1 - app/javascript/mastodon/locales/pt-PT.json | 1 - app/javascript/mastodon/locales/ru.json | 1 - app/javascript/mastodon/locales/sk.json | 5 +++- app/javascript/mastodon/locales/sl.json | 1 - app/javascript/mastodon/locales/sq.json | 4 ++- app/javascript/mastodon/locales/sr-Latn.json | 1 - app/javascript/mastodon/locales/sr.json | 1 - app/javascript/mastodon/locales/sv.json | 1 - app/javascript/mastodon/locales/th.json | 1 - app/javascript/mastodon/locales/tok.json | 1 - app/javascript/mastodon/locales/tr.json | 2 +- app/javascript/mastodon/locales/uk.json | 1 - app/javascript/mastodon/locales/vi.json | 2 +- app/javascript/mastodon/locales/zh-CN.json | 1 - app/javascript/mastodon/locales/zh-HK.json | 1 - app/javascript/mastodon/locales/zh-TW.json | 2 +- config/locales/activerecord.sk.yml | 5 ++++ config/locales/an.yml | 1 - config/locales/ar.yml | 1 - config/locales/ast.yml | 1 - config/locales/be.yml | 1 - config/locales/bg.yml | 1 - config/locales/ca.yml | 2 +- config/locales/ckb.yml | 1 - config/locales/co.yml | 1 - config/locales/cs.yml | 1 - config/locales/cy.yml | 1 - config/locales/da.yml | 2 +- config/locales/de.yml | 1 - config/locales/doorkeeper.cy.yml | 1 + config/locales/doorkeeper.sq.yml | 1 + config/locales/el.yml | 1 - config/locales/en-GB.yml | 1 - config/locales/eo.yml | 29 +++++++++++++++++++- config/locales/es-AR.yml | 1 - config/locales/es-MX.yml | 1 - config/locales/es.yml | 1 - config/locales/et.yml | 1 - config/locales/eu.yml | 1 - config/locales/fa.yml | 1 - config/locales/fi.yml | 1 - config/locales/fo.yml | 1 - config/locales/fr-CA.yml | 1 - config/locales/fr.yml | 1 - config/locales/fy.yml | 1 - config/locales/ga.yml | 1 - config/locales/gd.yml | 1 - config/locales/gl.yml | 2 +- config/locales/he.yml | 1 - config/locales/hr.yml | 1 - config/locales/hu.yml | 1 - config/locales/hy.yml | 1 - config/locales/ia.yml | 1 - config/locales/id.yml | 1 - config/locales/ie.yml | 1 - config/locales/io.yml | 1 - config/locales/is.yml | 1 - config/locales/it.yml | 1 - config/locales/ja.yml | 1 - config/locales/ka.yml | 1 - config/locales/kab.yml | 1 - config/locales/kk.yml | 1 - config/locales/ko.yml | 2 +- config/locales/ku.yml | 1 - config/locales/lad.yml | 1 - config/locales/lt.yml | 1 - config/locales/lv.yml | 9 +++++- config/locales/ms.yml | 1 - config/locales/my.yml | 1 - config/locales/nn.yml | 1 - config/locales/no.yml | 1 - config/locales/oc.yml | 1 - config/locales/pl.yml | 1 - config/locales/pt-BR.yml | 1 - config/locales/pt-PT.yml | 1 - config/locales/ru.yml | 1 - config/locales/sc.yml | 1 - config/locales/sco.yml | 1 - config/locales/si.yml | 1 - config/locales/simple_form.es-MX.yml | 8 +++--- config/locales/simple_form.lv.yml | 1 + config/locales/simple_form.sk.yml | 2 +- config/locales/sk.yml | 7 +++-- config/locales/sl.yml | 1 - config/locales/sq.yml | 3 +- config/locales/sr-Latn.yml | 1 - config/locales/sr.yml | 1 - config/locales/sv.yml | 2 +- config/locales/th.yml | 1 - config/locales/tr.yml | 1 - config/locales/uk.yml | 1 - config/locales/vi.yml | 2 +- config/locales/zh-CN.yml | 1 - config/locales/zh-HK.yml | 1 - 138 files changed, 86 insertions(+), 140 deletions(-) diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 17b288723b..18830708db 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "لا أحد من هذا الخادم يمكنه متابعتك.", "domain_block_modal.they_wont_know": "لن يَعرف أنه قد تم حظره.", "domain_block_modal.title": "أتريد حظر النطاق؟", - "domain_block_modal.you_will_lose_followers": "سيتم إزالة جميع متابعيك من هذا الخادم.", "domain_block_modal.you_wont_see_posts": "لن ترى منشورات أو إشعارات من المستخدمين على هذا الخادم.", "domain_pill.activitypub_lets_connect": "يتيح لك التواصل والتفاعل مع الناس ليس فقط على ماستدون، ولكن عبر تطبيقات اجتماعية مختلفة أيضا.", "domain_pill.activitypub_like_language": "إنّ ActivityPub مثل لغة ماستدون التي يتحدث بها مع شبكات اجتماعية أخرى.", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 098c7a7e9d..797d8cc22e 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -219,7 +219,6 @@ "domain_block_modal.they_cant_follow": "Ніхто з гэтага сервера не зможа падпісацца на вас.", "domain_block_modal.they_wont_know": "Карыстальнік не будзе ведаць пра блакіроўку.", "domain_block_modal.title": "Заблакіраваць дамен?", - "domain_block_modal.you_will_lose_followers": "Усе падпісчыкі з гэтага сервера будуць выдаленыя.", "domain_block_modal.you_wont_see_posts": "Вы не ўбачыце допісаў і апавяшчэнняў ад карыстальнікаў з гэтага сервера.", "domain_pill.activitypub_lets_connect": "Ён дазваляе вам узаемадзейнічаць не толькі з карыстальнікамі Mastodon, але і розных іншых сацыяльных платформ.", "domain_pill.activitypub_like_language": "ActivityPub — гэта мова, на якой Mastodon размаўляе з іншымі сацыяльнымі сеткамі.", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index c8f8474e91..bf0b656f93 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "Никого от този сървър не може да ви последва.", "domain_block_modal.they_wont_know": "Няма да узнаят, че са били блокирани.", "domain_block_modal.title": "Блокирате ли домейн?", - "domain_block_modal.you_will_lose_followers": "Всичките ви последователи от този сървър ще се премахнат.", "domain_block_modal.you_wont_see_posts": "Няма да виждате публикации или известия от потребителите на този сървър.", "domain_pill.activitypub_lets_connect": "Позволява ви да се свързвате и взаимодействате с хора не само в Mastodon, но и през различни социални приложения.", "domain_pill.activitypub_like_language": "ActivityPub е като език на Mastodon, говорещ с други социални мрежи.", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 710ac594f5..2c6dcba469 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Ningú d'aquest servidor us pot seguir.", "domain_block_modal.they_wont_know": "No sabran que són blocats.", "domain_block_modal.title": "Bloquem el domini?", - "domain_block_modal.you_will_lose_followers": "S'eliminaran tots els vostres seguidors d'aquest servidor.", + "domain_block_modal.you_will_lose_num_followers": "Perdreu {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidors}} i {followingCount, plural, one {{followingCountDisplay} persona} other {{followingCountDisplay} persones}} que seguiu.", "domain_block_modal.you_wont_see_posts": "No veureu ni les publicacions ni les notificacions dels usuaris d'aquest servidor.", "domain_pill.activitypub_lets_connect": "Us permet connectar i interactuar amb persones a Mastodon i també a d'altres apps socials.", "domain_pill.activitypub_like_language": "ActivityPub és el llenguatge que Mastodon parla amb altres xarxes socials.", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index b70ff3ee2b..1f2804daa5 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "Nikdo z tohoto serveru vás nemůže sledovat.", "domain_block_modal.they_wont_know": "Nebude vědět, že je zablokován*a.", "domain_block_modal.title": "Blokovat doménu?", - "domain_block_modal.you_will_lose_followers": "Všichni vaši sledující z tohoto serveru budou odstraněni.", "domain_block_modal.you_wont_see_posts": "Neuvidíte příspěvky ani upozornění od uživatelů z tohoto serveru.", "domain_pill.activitypub_lets_connect": "Umožňuje vám spojit se a komunikovat s lidmi nejen na Mastodonu, ale i s dalšími sociálními aplikacemi.", "domain_pill.activitypub_like_language": "ActivityPub je jako jazyk, kterým Mastodon mluví s jinými sociálními sítěmi.", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index ec93a5b11b..f2d0708882 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ni all neb o'r gweinydd hwn eich dilyn.", "domain_block_modal.they_wont_know": "Fyddan nhw ddim yn gwybod eu bod wedi cael eu blocio.", "domain_block_modal.title": "Blocio parth?", - "domain_block_modal.you_will_lose_followers": "Bydd eich holl ddilynwyr o'r gweinydd hwn yn cael eu tynnu.", "domain_block_modal.you_wont_see_posts": "Fyddwch chi ddim yn gweld postiadau na hysbysiadau gan ddefnyddwyr ar y gweinydd hwn.", "domain_pill.activitypub_lets_connect": "Mae'n caniatáu ichi gysylltu a rhyngweithio â phobl nid yn unig ar Mastodon, ond ar draws gwahanol apiau cymdeithasol hefyd.", "domain_pill.activitypub_like_language": "Mae ActivityPub fel yr iaith y mae Mastodon yn ei siarad â rhwydweithiau cymdeithasol eraill.", @@ -434,6 +433,8 @@ "lightbox.close": "Cau", "lightbox.next": "Nesaf", "lightbox.previous": "Blaenorol", + "lightbox.zoom_in": "Chwyddo i faint gwirioneddol", + "lightbox.zoom_out": "Chwyddo i ffitio", "limited_account_hint.action": "Dangos y proffil beth bynnag", "limited_account_hint.title": "Mae'r proffil hwn wedi cael ei guddio gan gymedrolwyr {domain}.", "link_preview.author": "Gan {name}", @@ -785,6 +786,7 @@ "status.edit": "Golygu", "status.edited": "Golygwyd ddiwethaf {date}", "status.edited_x_times": "Golygwyd {count, plural, one {count} two {count} other {{count} gwaith}}", + "status.embed": "Cael y cod mewnblannu", "status.favourite": "Ffafrio", "status.favourites": "{count, plural, one {ffefryn} other {ffefryn}}", "status.filter": "Hidlo'r postiad hwn", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 76752802b0..e7d2bcaf80 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Ingen fra denne server kan følge dig.", "domain_block_modal.they_wont_know": "Vedkommende ser ikke den aktive blokering.", "domain_block_modal.title": "Blokér domæne?", - "domain_block_modal.you_will_lose_followers": "Alle følgerne fra denne server fjernes.", + "domain_block_modal.you_will_lose_num_followers": "Man vil miste {followersCount, plural, one {{followersCountDisplay} følger} other {{followersCountDisplay} følgere}} og {followingCount, plural, one {{followingCountDisplay} person, man følger} other {{followingCountDisplay} personer, man følger}}.", "domain_block_modal.you_wont_see_posts": "Indlæg eller notifikationer fra brugere på denne server vises ikke.", "domain_pill.activitypub_lets_connect": "Det muliggør at komme i forbindelse og interagere med folk ikke kun på Mastodon, men også på tværs af forskellige sociale apps.", "domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", Mastodon taler med andre sociale netværk.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 1931ce23f1..2f8c89961a 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Niemand von diesem Server wird dir folgen können.", "domain_block_modal.they_wont_know": "Es wird nicht erkennbar sein, dass diese Domain blockiert wurde.", "domain_block_modal.title": "Domain blockieren?", - "domain_block_modal.you_will_lose_followers": "Alle Follower von diesem Server werden entfernt.", + "domain_block_modal.you_will_lose_num_followers": "Du wirst {followersCount, plural, one {{followersCountDisplay} Follower} other {{followersCountDisplay} Follower}} verlieren und {followingCount, plural, one {{followingCountDisplay} Profil} other {{followingCountDisplay} Profilen}} entfolgen.", "domain_block_modal.you_wont_see_posts": "Du wirst keine Beiträge oder Benachrichtigungen von Profilen auf diesem Server sehen.", "domain_pill.activitypub_lets_connect": "Somit kannst du dich nicht nur auf Mastodon mit Leuten verbinden und mit ihnen interagieren, sondern über alle sozialen Apps hinweg.", "domain_pill.activitypub_like_language": "ActivityPub ist sozusagen die Sprache, die Mastodon mit anderen sozialen Netzwerken spricht.", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 83f0227a0a..85f893c63d 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Κανείς από αυτόν τον διακομιστή δεν μπορεί να σε ακολουθήσει.", "domain_block_modal.they_wont_know": "Δεν θα ξέρουν ότι έχουν αποκλειστεί.", "domain_block_modal.title": "Αποκλεισμός τομέα;", - "domain_block_modal.you_will_lose_followers": "Οι ακόλουθοί σου από αυτόν τον διακομιστή θα αφαιρεθούν.", "domain_block_modal.you_wont_see_posts": "Δεν θα βλέπεις αναρτήσεις ή ειδοποιήσεις από χρήστες σε αυτόν το διακομιστή.", "domain_pill.activitypub_lets_connect": "Σού επιτρέπει να συνδεθείς και να αλληλεπιδράσεις με τους ανθρώπους όχι μόνο στο Mastodon, αλλά και σε διαφορετικές κοινωνικές εφαρμογές.", "domain_pill.activitypub_like_language": "Το ActivityPub είναι σαν τη γλώσσα Mastodon μιλάει με άλλα κοινωνικά δίκτυα.", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index c0335dd6b2..ee38b77554 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Nobody from this server can follow you.", "domain_block_modal.they_wont_know": "They won't know they've been blocked.", "domain_block_modal.title": "Block domain?", - "domain_block_modal.you_will_lose_followers": "All your followers from this server will be removed.", "domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.", "domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.", "domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index fbf74e9efa..8139e8c76d 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Neniu el ĉi tiu servilo povas sekvi vin.", "domain_block_modal.they_wont_know": "Ili ne scios, ke ili estas blokitaj.", "domain_block_modal.title": "Ĉu bloki la domajnon?", - "domain_block_modal.you_will_lose_followers": "Ĉiuj viaj sekvantoj de ĉi tiu servilo estos forigitaj.", + "domain_block_modal.you_will_lose_num_followers": "Vi perdos {followersCount, plural, one {{followersCountDisplay} sekvanton} other {{followersCountDisplay} sekvantojn}} kaj {followingCount, plural, one {{followingCountDisplay} homon, kiu vi sekvas} other {{followingCountDisplay} homojn, kiuj vi sekvas}}.", "domain_block_modal.you_wont_see_posts": "Vi ne vidos afiŝojn aŭ sciigojn de uzantoj sur ĉi tiu servilo.", "domain_pill.activitypub_lets_connect": "Ĝi ebligas vin konekti kaj interagi kun homoj ne nur sur Mastodon, sed ankaŭ tra diversaj sociaj apoj.", "domain_pill.activitypub_like_language": "ActivityPub estas kiel la lingvo kiun Mastodon parolas kun aliaj sociaj retoj.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 8a37a33df2..26a37e76b3 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que fueron bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_followers": "Se eliminarán todos tus seguidores de este servidor.", + "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con cuentas no solo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 52ebf0ae18..dd3188c146 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_followers": "Todos tus seguidores de este servidor serán eliminados.", + "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", "domain_block_modal.you_wont_see_posts": "No verás publicaciones ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con personas no sólo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 5915c333c4..aa282b4c5b 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_followers": "Se eliminarán todos tus seguidores de este servidor.", + "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con personas no sólo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 287ffb9852..69df3c4140 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Sellest serverist ei saa keegi sind jälgida.", "domain_block_modal.they_wont_know": "Nad ei tea, et nad on blokeeritud.", "domain_block_modal.title": "Blokeerida domeen?", - "domain_block_modal.you_will_lose_followers": "Kõik sinu sellest serverist pärit jälgijad eemaldatakse.", "domain_block_modal.you_wont_see_posts": "Sa ei näe selle serveri kasutajate postitusi ega teavitusi.", "domain_pill.activitypub_lets_connect": "See võimaldab sul ühenduda inimestega ja nendega suhelda mitte ainult Mastodonis, vaid ka teistes suhtlusrakendustes.", "domain_pill.activitypub_like_language": "ActivityPub on nagu keel, mida Mastodon räägib teiste suhtlusvõrgustikega.", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index b3137bc21a..35b869486b 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Zerbitzari honetako inork ezin zaitu jarraitu.", "domain_block_modal.they_wont_know": "Ez dute jakingo blokeatuak izan direnik.", "domain_block_modal.title": "Domeinua blokeatu nahi duzu?", - "domain_block_modal.you_will_lose_followers": "Zerbitzari honetako jarraitzaile guztiak kenduko dira.", "domain_block_modal.you_wont_see_posts": "Ez dituzu zerbitzari honetako erabiltzaileen argitalpenik edota jakinarazpenik ikusiko.", "domain_pill.activitypub_lets_connect": "Mastodon-en ez ezik, beste sare sozialen aplikazioetako jendearekin konektatzea eta harremanetan jartzea uzten dizu.", "domain_pill.activitypub_like_language": "ActivityPub, Mastodon-ek beste sare sozialekin hitz egiteko erabiltzen duen hizkuntza bezalakoxea da.", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index fbc65ec207..583fd4ec5a 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "هیچ‌کسی از این کارساز نمی‌تواند پیتان بگیرد.", "domain_block_modal.they_wont_know": "نخواهند دانست که مسدود شده‌اند.", "domain_block_modal.title": "انسداد دامنه؟", - "domain_block_modal.you_will_lose_followers": "همهٔ پی‌گیرندگانتان از این کارساز برداشته خواهند شد.", "domain_block_modal.you_wont_see_posts": "فرسته‌ها یا آگاهی‌ها از کاربران روی این کارساز را نخواهید دید.", "domain_pill.server": "کارساز", "domain_pill.their_handle": "شناسه‌اش:", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index d4adef40f2..4caec3159f 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Kukaan tältä palvelimelta ei voi seurata sinua.", "domain_block_modal.they_wont_know": "Hän ei saa tietää tulleensa estetyksi.", "domain_block_modal.title": "Estetäänkö verkkotunnus?", - "domain_block_modal.you_will_lose_followers": "Kaikki seuraajasi tältä palvelimelta poistetaan.", "domain_block_modal.you_wont_see_posts": "Et enää näe julkaisuja etkä ilmoituksia tämän palvelimen käyttäjiltä.", "domain_pill.activitypub_lets_connect": "Sen avulla voit muodostaa yhteyden ja olla vuorovaikutuksessa ihmisten kanssa, ei vain Mastodonissa vaan myös muissa sosiaalisissa sovelluksissa.", "domain_pill.activitypub_like_language": "ActivityPub on kuin kieli, jota Mastodon puhuu muiden sosiaalisten verkostojen kanssa.", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 3100456091..952bc60882 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -134,7 +134,6 @@ "dismissable_banner.public_timeline": "Ito ang mga pinakamakailang nakapublikong post mula sa mga taong nasa social web na sinusundan ng mga tao sa {domain}.", "domain_block_modal.block": "Harangan ang serbiro", "domain_block_modal.title": "Harangan ang domain?", - "domain_block_modal.you_will_lose_followers": "Mabubura ang iyong mga tagasunod mula sa serbirong ito.", "domain_pill.server": "Serbiro", "embed.instructions": "I-embed ang post na ito sa iyong pook-sapot sa pamamagitan ng pagsipi ng kodigo sa ilalim.", "embed.preview": "Ito ang magiging itsura:", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 9b87f5c8d9..3165c10153 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Eingin frá hesum ambætara kann fylgja tær.", "domain_block_modal.they_wont_know": "Tey vita ikki, at tey eru bannað.", "domain_block_modal.title": "Banna økisnavni?", - "domain_block_modal.you_will_lose_followers": "Allir tínir fylgjarar á hesum ambætara hvørva.", + "domain_block_modal.you_will_lose_num_followers": "Tú missir {followersCount, plural, one {{followersCountDisplay} fylgjara} other {{followersCountDisplay} fylgjarar}} og {followingCount, plural, one {{followingCountDisplay} persón, sum tú fylgir} other {{followingCountDisplay} persónar, sum tú fylgir}}.", "domain_block_modal.you_wont_see_posts": "Tú sært ongar postar ella boð frá brúkarum á hesum ambætara.", "domain_pill.activitypub_lets_connect": "Tað letur teg fáa samband og samvirka við fólki ikki bara á Mastodon, men á øðrum sosialum appum eisini.", "domain_pill.activitypub_like_language": "ActivityPub er málið, sum Mastodon tosar við onnur sosial netverk.", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index ead016dec2..a92cd50c67 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", - "domain_block_modal.you_will_lose_followers": "Tous vos abonnés de ce serveur seront supprimés.", "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 9375eccc6f..a2bf4d5363 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Personne de ce serveur ne peut vous suivre.", "domain_block_modal.they_wont_know": "Il ne saura pas qu'il a été bloqué.", "domain_block_modal.title": "Bloquer le domaine ?", - "domain_block_modal.you_will_lose_followers": "Tous vos abonnés de ce serveur seront supprimés.", "domain_block_modal.you_wont_see_posts": "Vous ne verrez plus les publications ou les notifications des utilisateurs de ce serveur.", "domain_pill.activitypub_lets_connect": "Cela vous permet de vous connecter et d'interagir avec les autres non seulement sur Mastodon, mais également sur d'autres applications de réseaux sociaux.", "domain_pill.activitypub_like_language": "ActivityPub est comme une langue que Mastodon utilise pour communiquer avec les autres réseaux sociaux.", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index e7723c9533..1d71ef36c6 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -221,7 +221,6 @@ "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_followers": "Al jo folgers fan dizze server wurde ûntfolge.", "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.", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index e05adc2732..2161591dcd 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ní féidir le duine ar bith ón bhfreastalaí seo tú a leanúint.", "domain_block_modal.they_wont_know": "Ní bheidh a fhios acu go bhfuil bac orthu.", "domain_block_modal.title": "Blocáil fearann?", - "domain_block_modal.you_will_lose_followers": "Bainfear do leantóirí go léir ón bhfreastalaí seo.", "domain_block_modal.you_wont_see_posts": "Ní fheicfidh tú postálacha nó fógraí ó úsáideoirí ar an bhfreastalaí seo.", "domain_pill.activitypub_lets_connect": "Ligeann sé duit ceangal agus idirghníomhú le daoine, ní hamháin ar Mastodon, ach thar aipeanna sóisialta éagsúla freisin.", "domain_pill.activitypub_like_language": "Tá GníomhaíochtPub cosúil leis an teanga a labhraíonn Mastodon le líonraí sóisialta eile.", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 8f51d43ef8..ecbc11f3a2 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Chan urrainn do neach sam bith a th’ air an fhrithealaiche seo do leantainn.", "domain_block_modal.they_wont_know": "Cha bhi fios aca gun deach am bacadh.", "domain_block_modal.title": "A bheil thu airson an àrainn a bhacadh?", - "domain_block_modal.you_will_lose_followers": "Thèid a h-uile neach-leantainn agad a th’ air an fhrithealaiche seo a thoirt air falbh.", "domain_block_modal.you_wont_see_posts": "Chan fhaic thu postaichean no brathan o chleachdaichean a th’ air an fhrithealaiche seo.", "domain_pill.activitypub_lets_connect": "Leigidh e leat ceangal a dhèanamh ri daoine chan ann air Mastodon a-mhàin ach air feadh aplacaidean sòisealta eile cuideachd agus conaltradh leotha.", "domain_pill.activitypub_like_language": "Tha ActivityPub coltach ri cànan a bhruidhneas Mastodon ri lìonraidhean sòisealta eile.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index f2ea6ee900..aa3a78fce8 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Ninguén deste servidor pode seguirte.", "domain_block_modal.they_wont_know": "Non saberá que a bloqueaches.", "domain_block_modal.title": "Bloquear dominio?", - "domain_block_modal.you_will_lose_followers": "Vanse eliminar todas as túas seguidoras deste servidor.", + "domain_block_modal.you_will_lose_num_followers": "Vas perder {followersCount, plural, one {{followersCountDisplay} seguidora} other {{followersCountDisplay} seguidoras}} e {followingCount, plural, one {{followingCountDisplay} persoa que segues} other {{followingCountDisplay} persoas que segues}}.", "domain_block_modal.you_wont_see_posts": "Non verás publicacións ou notificacións das usuarias deste servidor.", "domain_pill.activitypub_lets_connect": "Permíteche conectar e interactuar con persoas non só de Mastodon, se non tamén con outras sociais.", "domain_pill.activitypub_like_language": "ActivityPub é algo así como o idioma que Mastodon fala con outras redes sociais.", @@ -527,7 +527,7 @@ "notification.poll": "Rematou a enquisa na que votaches", "notification.reblog": "{name} compartiu a túa publicación", "notification.reblog.name_and_others_with_link": "{name} e {count, plural, one {# máis} other {# máis}} promoveron a túa publicación", - "notification.relationships_severance_event": "Perdeuse a conexión con {name}", + "notification.relationships_severance_event": "Relacións perdidas con {name}", "notification.relationships_severance_event.account_suspension": "A administración de {from} suspendeu a {target}, o que significa que xa non vas recibir actualizacións de esa conta ou interactuar con ela.", "notification.relationships_severance_event.domain_block": "A administración de {from} bloqueou a {target}, que inclúe a {followersCount} das túas seguidoras e a {followingCount, plural, one {# conta} other {# contas}} que sigues.", "notification.relationships_severance_event.learn_more": "Saber máis", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 6503d870e5..4ce0d41620 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "משתמש משרת זה לא יכול לעקוב אחריך.", "domain_block_modal.they_wont_know": "הם לא ידעו כי נחסמו.", "domain_block_modal.title": "לחסום שרת?", - "domain_block_modal.you_will_lose_followers": "כל עוקביך משרת זה יוסרו.", "domain_block_modal.you_wont_see_posts": "לא תוכלו לראות הודעות ממשתמשים על שרת זה.", "domain_pill.activitypub_lets_connect": "מאפשר לך להתחבר ולהתרועע עם אחרים לא רק במסטודון, אלא גם ביישומים חברתיים שונים אחרים.", "domain_pill.activitypub_like_language": "אקטיביטיפאב היא למעשה השפה בה מסטודון מדבר עם רשתות חברתיות אחרות.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index cb3517e3a3..2e48cb626d 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Erről a kiszolgálóról senki sem követhet.", "domain_block_modal.they_wont_know": "Nem fogja tudni, hogy letiltották.", "domain_block_modal.title": "Letiltsuk a domaint?", - "domain_block_modal.you_will_lose_followers": "Az ezen a kiszolgálón lévő összes követődet törölni fogjuk.", "domain_block_modal.you_wont_see_posts": "Nem látsz majd bejegyzéseket vagy értesítéseket ennek a kiszolgálónak a felhasználóitól.", "domain_pill.activitypub_lets_connect": "Lehetővé teszi, hogy kapcsolatba lépj nem csak a Mastodonon, hanem a más közösségi alkalmazásokon lévő emberekkel is.", "domain_pill.activitypub_like_language": "Az ActivityPub olyan mint egy nyelv, amelyet a Mastodon a más közösségi hálózatokkal való kommunikációra használ.", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 93bee9ec79..35482297f0 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Necuno de iste servitor pote sequer te.", "domain_block_modal.they_wont_know": "Ille non sapera que ille ha essite blocate.", "domain_block_modal.title": "Blocar dominio?", - "domain_block_modal.you_will_lose_followers": "Tote tu sequitores de iste servitor essera removite.", "domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes de usatores sur iste servitor.", "domain_pill.activitypub_lets_connect": "Illo te permitte connecter e interager con personas non solmente sur Mastodon, ma tamben sur altere applicationes social.", "domain_pill.activitypub_like_language": "ActivityPub es como le linguage commun que Mastodon parla con altere retes social.", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index b6d01ec996..f5c71d4a36 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -219,7 +219,6 @@ "domain_block_modal.they_cant_follow": "Tidak ada seorangpun dari server ini yang dapat mengikuti anda.", "domain_block_modal.they_wont_know": "Mereka tidak akan tahu bahwa mereka diblokir.", "domain_block_modal.title": "Blokir domain?", - "domain_block_modal.you_will_lose_followers": "Semua pengikut anda dari server ini akan dihapus.", "domain_block_modal.you_wont_see_posts": "Anda tidak akan melihat postingan atau notifikasi dari pengguna di server ini.", "domain_pill.activitypub_lets_connect": "Ini memungkinkan anda terhubung dan berinteraksi dengan orang-orang tidak hanya di Mastodon, tetapi juga di berbagai aplikasi sosial.", "domain_pill.activitypub_like_language": "ActivityPub seperti bahasa yang digunakan Mastodon dengan jejaring sosial lainnya.", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index 1439b851d3..d91c49e83f 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -206,7 +206,6 @@ "domain_block_modal.they_cant_follow": "Nequi de ti-ci servitor posse sequer te.", "domain_block_modal.they_wont_know": "Ne va esser conscient pri li bloccada.", "domain_block_modal.title": "Bloccar dominia?", - "domain_block_modal.you_will_lose_followers": "Omni tui sequitores de ti-ci servitor va esser efaciat.", "domain_block_modal.you_wont_see_posts": "Tu ne va vider postas ni notificationes de usatores sur ti-ci servitor.", "domain_pill.activitypub_lets_connect": "It possibilisa tui conexiones e interactiones con persones ne solmen sur Mastodon, ma anc tra diferent social aplis.", "domain_pill.activitypub_like_language": "ActivityPub es li lingue usat de Mastodon por parlar con altri social retages.", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 5f32b438dd..c78c5d7842 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Enginn frá þessum netþjóni getur fylgst með þér.", "domain_block_modal.they_wont_know": "Viðkomandi mun ekki vita að hann hafi verið útilokaður.", "domain_block_modal.title": "Útiloka lén?", - "domain_block_modal.you_will_lose_followers": "Allir fylgjendur þínir af þessum netþjóni verða fjarlægðir.", "domain_block_modal.you_wont_see_posts": "Þú munt ekki sjá neinar færslur eða tilkynningar frá notendum á þessum netþjóni.", "domain_pill.activitypub_lets_connect": "Það gerir þér kleift að tengjast og eiga í samskiptum við fólk, ekki bara á Mastodon, heldur einnig á mörgum öðrum mismunandi samfélagsmiðlum.", "domain_pill.activitypub_like_language": "ActivityPub er eins og tungumál sem Mastodon notar til að tala við önnur samfélagsnet.", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index ec26d80be6..fdb56f542e 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Nessuno da questo server può seguirti.", "domain_block_modal.they_wont_know": "Non sapranno di essere stati bloccati.", "domain_block_modal.title": "Bloccare il dominio?", - "domain_block_modal.you_will_lose_followers": "Tutti i tuoi seguaci da questo server verranno rimossi.", "domain_block_modal.you_wont_see_posts": "Non vedrai post o notifiche dagli utenti su questo server.", "domain_pill.activitypub_lets_connect": "Ti consente di connetterti e interagire con le persone non solo su Mastodon, ma anche su diverse app social.", "domain_pill.activitypub_like_language": "ActivityPub è come la lingua che Mastodon parla con altri social network.", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index c3ddeed880..f5e7cc9c04 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "このサーバーのユーザーはあなたをフォローできなくなります。", "domain_block_modal.they_wont_know": "ドメインブロックは相手からはわかりません。", "domain_block_modal.title": "ドメインをブロックしますか?", - "domain_block_modal.you_will_lose_followers": "このサーバーのフォロワーはすべてフォロー解除されます。", "domain_block_modal.you_wont_see_posts": "このサーバーのユーザーからの投稿や通知が閲覧できなくなります。", "domain_pill.activitypub_lets_connect": "Mastodonからほかのソーシャルアプリのユーザーへ、そのまた別のアプリのユーザーへと、それぞれが互いにつながり関わり合うことをこのActivityPubの仕組みが実現しています。", "domain_pill.activitypub_like_language": "ActivityPubとは、Mastodonがほかのサーバーと会話をするときにしゃべる「言葉」のようなものです。", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index af1599572b..87ea3cfabf 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "이 서버의 누구도 나를 팔로우 할 수 없습니다.", "domain_block_modal.they_wont_know": "내가 차단했다는 사실을 모를 것입니다.", "domain_block_modal.title": "도메인을 차단할까요?", - "domain_block_modal.you_will_lose_followers": "이 서버에 있는 팔로워들이 모두 제거될 것입니다.", "domain_block_modal.you_wont_see_posts": "이 서버 사용자의 게시물이나 알림을 보지 않게 됩니다.", "domain_pill.activitypub_lets_connect": "이것은 마스토돈 뿐만이 아니라 다른 소셜 앱들을 넘나들며 사람들을 연결하고 상호작용 할 수 있게 합니다.", "domain_pill.activitypub_like_language": "액티비티펍은 마스토돈이 다른 소셜 네트워크와 대화할 때 쓰는 언어 같은 것입니다.", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index d894cc01c6..ac95b590e3 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -58,7 +58,6 @@ "disabled_account_banner.text": "Ratio tua {disabledAccount} debilitata est.", "dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.", "dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.", - "domain_block_modal.you_will_lose_followers": "Omnes sectatores tuī ex hoc servō removēbuntur.", "domain_block_modal.you_wont_see_posts": "Nuntios aut notificātiōnēs ab usoribus in hōc servō nōn vidēbis.", "domain_pill.activitypub_like_language": "ActivityPub est velut lingua quam Mastodon cum aliīs sociālibus rētibus loquitur.", "domain_pill.your_handle": "Tuus nominulus:", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 43da2ea16f..c5026fa33b 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -215,7 +215,6 @@ "domain_block_modal.they_cant_follow": "Dingun de este sirvidor puede segirte.", "domain_block_modal.they_wont_know": "No savra ke tiene sido blokado.", "domain_block_modal.title": "Bloka el domeno?", - "domain_block_modal.you_will_lose_followers": "Se efasaran todos tus suivantes de este sirvidor.", "domain_block_modal.you_wont_see_posts": "No veras publikasyones ni avizos de utilizadores en este sirvidor.", "domain_pill.server": "Sirvidor", "domain_pill.their_handle": "Su alias:", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 632c33129a..7dcc346802 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Niekas iš šio serverio negali tavęs sekti.", "domain_block_modal.they_wont_know": "Jie nežinos, kad buvo užblokuoti.", "domain_block_modal.title": "Blokuoti serverį?", - "domain_block_modal.you_will_lose_followers": "Visi tavo sekėjai iš šio serverio bus pašalinti.", "domain_block_modal.you_wont_see_posts": "Nematysi naudotojų įrašų ar pranešimų šiame serveryje.", "domain_pill.activitypub_lets_connect": "Tai leidžia tau prisijungti ir bendrauti su žmonėmis ne tik „Mastodon“ platformoje, bet ir įvairiose socialinėse programėlėse.", "domain_pill.activitypub_like_language": "„ActivityPub“ – tai tarsi kalba, kuria „Mastodon“ kalba su kitais socialiniais tinklais.", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 43fa8369f4..1e973ffd3e 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -215,7 +215,6 @@ "domain_block_modal.they_cant_follow": "Neviens šajā serverī nevar Tev sekot.", "domain_block_modal.they_wont_know": "Viņi nezinās, ka tikuši bloķēti.", "domain_block_modal.title": "Bloķēt domēnu?", - "domain_block_modal.you_will_lose_followers": "Tiks noņemti visi tavi sekotāji no šī servera.", "domain_pill.server": "Serveris", "domain_pill.username": "Lietotājvārds", "embed.instructions": "Iestrādā šo ziņu savā mājaslapā, kopējot zemāk redzamo kodu.", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index f5f4a0a137..f8e98e865b 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Niemand op deze server kan jou volgen.", "domain_block_modal.they_wont_know": "Ze krijgen niet te weten dat ze worden geblokkeerd.", "domain_block_modal.title": "Server blokkeren?", - "domain_block_modal.you_will_lose_followers": "Al jouw volgers van deze server worden ontvolgd.", + "domain_block_modal.you_will_lose_num_followers": "Je verliest {followersCount, plural, one {{followersCountDisplay} volger} other {{followersCountDisplay} volgers}} en {followingCount, plural, one {{followingCountDisplay} persoon die jij volgt} other {{followingCountDisplay} personen die jij volgt}}.", "domain_block_modal.you_wont_see_posts": "Je ziet geen berichten of meldingen meer van gebruikers op deze server.", "domain_pill.activitypub_lets_connect": "Het zorgt ervoor dat je niet alleen maar kunt verbinden en communiceren met mensen op Mastodon, maar ook met andere sociale apps.", "domain_pill.activitypub_like_language": "ActivityPub is de taal die Mastodon met andere sociale netwerken spreekt.", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 702154927d..9524dfd558 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ingen på denne tenaren kan fylgja deg.", "domain_block_modal.they_wont_know": "Dei veit ikkje at dei er blokkerte.", "domain_block_modal.title": "Blokker domenet?", - "domain_block_modal.you_will_lose_followers": "Alle fylgjarane dine frå denne tenaren blir fjerna.", "domain_block_modal.you_wont_see_posts": "Du vil ikkje sjå innlegg eller varslingar frå brukarar på denne tenaren.", "domain_pill.activitypub_lets_connect": "Den lar deg kople til og samhandle med folk ikkje berre på Mastodon, men òg på tvers av forskjellige sosiale appar.", "domain_pill.activitypub_like_language": "ActivityPub er som språket Mastodon snakkar med andre sosiale nettverk.", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 1d0294cd7c..8cd3387eaf 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ingen fra denne serveren kan følge deg.", "domain_block_modal.they_wont_know": "De kommer ikke til å få vite at du har valgt å blokkere dem.", "domain_block_modal.title": "Blokker domenet?", - "domain_block_modal.you_will_lose_followers": "Alle dine følgere fra denne serveren vil bli fjernet.", "domain_block_modal.you_wont_see_posts": "Du vil ikke se innlegg eller få varsler fra brukere på denne serveren.", "domain_pill.activitypub_lets_connect": "Den lar deg koble til og samhandle med folk ikke bare på Mastodon, men også på tvers av forskjellige sosiale apper.", "domain_pill.activitypub_like_language": "ActivityPub er liksom språket Mastodon snakker med andre sosiale nettverk.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index a4ee25250a..4528940797 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Nikt z tego serwera nie może Cię obserwować.", "domain_block_modal.they_wont_know": "Użytkownik nie dowie się, że został zablokowany.", "domain_block_modal.title": "Zablokować domenę?", - "domain_block_modal.you_will_lose_followers": "Wszyscy twoi obserwujący z tego serwera zostaną usunięci.", + "domain_block_modal.you_will_lose_num_followers": "Utracisz {followersCount, plural, one {jednego obserwującego} other {{followersCountDisplay} obserwujących}} i {followingCount, plural, one {jedną osobę którą obserwujesz} few {{followingCountDisplay} osoby które obserwujesz} other {{followingCountDisplay} osób które obserwujesz}}.", "domain_block_modal.you_wont_see_posts": "Nie zobaczysz postów ani powiadomień od użytkowników na tym serwerze.", "domain_pill.activitypub_lets_connect": "Pozwala połączyć się z ludźmi na Mastodonie, jak i na innych serwisach społecznościowych.", "domain_pill.activitypub_like_language": "ActivityPub jest językiem używanym przez Mastodon do wymiany danych z innymi serwisami społecznościowymi.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 1eca63ac15..402c0b38b5 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode lhe seguir.", "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", "domain_block_modal.title": "Dominio do bloco", - "domain_block_modal.you_will_lose_followers": "Todos os seus seguidores deste servidor serão removidos.", "domain_block_modal.you_wont_see_posts": "Você não verá postagens ou notificações de usuários neste servidor.", "domain_pill.activitypub_lets_connect": "Ele permite que você se conecte e interaja com pessoas não apenas no Mastodon, mas também em diferentes aplicativos sociais.", "domain_pill.activitypub_like_language": "ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 80f5f9f138..6be7e03b39 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode segui-lo.", "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", "domain_block_modal.title": "Bloquear domínio?", - "domain_block_modal.you_will_lose_followers": "Todos os seus seguidores deste servidor serão removidos.", "domain_block_modal.you_wont_see_posts": "Não verá publicações ou notificações de utilizadores neste servidor.", "domain_pill.activitypub_lets_connect": "Permite-lhe conectar e interagir com pessoas não só no Mastodon, mas também em diferentes aplicações sociais.", "domain_pill.activitypub_like_language": "O ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 1366114929..9bd2ed5b4e 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -220,7 +220,6 @@ "domain_block_modal.they_cant_follow": "Никто из этого сервера не может подписываться на вас.", "domain_block_modal.they_wont_know": "Он не будет знать, что его заблокировали.", "domain_block_modal.title": "Заблокировать домен?", - "domain_block_modal.you_will_lose_followers": "Все ваши подписчики с этого сервера будут удалены.", "domain_block_modal.you_wont_see_posts": "Вы не будете видеть записи или уведомления от пользователей на этом сервере.", "domain_pill.activitypub_lets_connect": "Это позволяет вам общаться и взаимодействовать с людьми не только на Mastodon, но и в различных социальных приложениях.", "domain_pill.activitypub_like_language": "ActivityPub как язык Mastodon говорит с другими социальными сетями.", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index c989a7314c..ddf341584c 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -34,7 +34,9 @@ "account.follow_back": "Sledovať späť", "account.followers": "Sledovatelia", "account.followers.empty": "Tento účet ešte nikto nesleduje.", + "account.followers_counter": "{count, plural, one {{counter} sledujúci} other {{counter} sledujúci}}", "account.following": "Sledovaný účet", + "account.following_counter": "{count, plural, one {{counter} sledovaných} other {{counter} sledovaných}}", "account.follows.empty": "Tento účet ešte nikoho nesleduje.", "account.go_to_profile": "Prejsť na profil", "account.hide_reblogs": "Skryť zdieľania od @{name}", @@ -60,6 +62,7 @@ "account.requested_follow": "{name} vás chce sledovať", "account.share": "Zdieľaj profil @{name}", "account.show_reblogs": "Zobrazovať zdieľania od @{name}", + "account.statuses_counter": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}", "account.unblock": "Odblokovať @{name}", "account.unblock_domain": "Odblokovať doménu {domain}", "account.unblock_short": "Odblokovať", @@ -215,7 +218,6 @@ "domain_block_modal.they_cant_follow": "Nikto z tohoto servera ťa nemôže nasledovať.", "domain_block_modal.they_wont_know": "Nebude vedieť, že bol/a zablokovaný/á.", "domain_block_modal.title": "Blokovať doménu?", - "domain_block_modal.you_will_lose_followers": "Všetci tvoji nasledovatelia z tohto servera budú odstránení.", "domain_block_modal.you_wont_see_posts": "Neuvidíš príspevky, ani oboznámenia od užívateľov na tomto serveri.", "domain_pill.activitypub_like_language": "ActivityPub je ako jazyk, ktorým Mastodon hovorí s ostatnými sociálnymi sieťami.", "domain_pill.server": "Server", @@ -418,6 +420,7 @@ "lists.subheading": "Vaše zoznamy", "load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položiek} other {# nových položiek}}", "loading_indicator.label": "Načítavanie…", + "media_gallery.hide": "Skryť", "moved_to_account_banner.text": "Váš účet {disabledAccount} je momentálne deaktivovaný, pretože ste sa presunuli na {movedToAccount}.", "mute_modal.hide_from_notifications": "Ukryť z upozornení", "mute_modal.hide_options": "Skryť možnosti", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 43042ca998..71bee6822b 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -217,7 +217,6 @@ "domain_block_modal.they_cant_follow": "Nihče s tega strežnika vam ne more slediti.", "domain_block_modal.they_wont_know": "Ne bodo vedeli, da so blokirani.", "domain_block_modal.title": "Blokiraj domeno?", - "domain_block_modal.you_will_lose_followers": "Vsi vaši sledilci s tega strežnika bodo odstranjeni.", "domain_block_modal.you_wont_see_posts": "Objav ali obvestil uporabnikov s tega strežnika ne boste videli.", "domain_pill.activitypub_lets_connect": "Omogoča vam povezovanje in interakcijo z ljudmi, ki niso samo na Mastodonu, ampak tudi na drugih družabnih platformah.", "domain_pill.activitypub_like_language": "Protokol ActivityPub je kot jezik, s katerim se Mastodon pogovarja z drugimi družabnimi omrežji.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index c5e42aae77..2195e6bf9a 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "S’mund t’ju ndjekë askush nga ky shërbyes.", "domain_block_modal.they_wont_know": "S’do ta dinë se janë bllokuar.", "domain_block_modal.title": "Të bllokohet përkatësia?", - "domain_block_modal.you_will_lose_followers": "Krejt ndjekësit tuaj nga ky shërbyes do të hiqen.", + "domain_block_modal.you_will_lose_num_followers": "Do të humbni {followersCount, plural, one {{followersCountDisplay} ndjekës} other {{followersCountDisplay} ndjekës}} dhe {followingCount, plural, one {{followingCountDisplay} person që ndiqni} other {{followingCountDisplay} vetë që ndiqni}}.", "domain_block_modal.you_wont_see_posts": "S’do të shihni postime, apo njoftime nga përdorues në këtë shërbyes.", "domain_pill.activitypub_lets_connect": "Ju lejon të lidheni dhe ndërveproni me persona jo thjesht në Mastodon, por edhe nëpër aplikacione të ndryshme shoqërore.", "domain_pill.activitypub_like_language": "ActivityPub është si gjuha me të cilën Mastodon-i komunikon me rrjete të tjerë shoqërorë.", @@ -434,6 +434,8 @@ "lightbox.close": "Mbylle", "lightbox.next": "Pasuesja", "lightbox.previous": "E mëparshmja", + "lightbox.zoom_in": "Ktheje në madhësinë origjinale", + "lightbox.zoom_out": "Zmadhoje të përshtatet", "limited_account_hint.action": "Shfaqe profilin sido qoftë", "limited_account_hint.title": "Ky profil është fshehur nga moderatorët e {domain}.", "link_preview.author": "Nga {name}", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index e701da6078..1053d581c3 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -209,7 +209,6 @@ "domain_block_modal.they_cant_follow": "Niko sa ovog servera ne može da vas prati.", "domain_block_modal.they_wont_know": "Neće znati da su blokirani.", "domain_block_modal.title": "Blokirati domen?", - "domain_block_modal.you_will_lose_followers": "Svi vaši pratioci sa ovog servera će biti uklonjeni.", "domain_block_modal.you_wont_see_posts": "Nećete videti objave ili obaveštenja korisnika na ovom serveru.", "domain_pill.activitypub_lets_connect": "Omogućuje vam da se povežete i komunicirate sa ljudima ne samo na Mastodon-u, već i u različitim društvenim aplikacijama.", "domain_pill.activitypub_like_language": "ActivityPub je kao jezik kojim Mastodon govori sa drugim društvenim mrežama.", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index fd13c4ee5c..9529c41fe3 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -209,7 +209,6 @@ "domain_block_modal.they_cant_follow": "Нико са овог сервера не може да вас прати.", "domain_block_modal.they_wont_know": "Неће знати да су блокирани.", "domain_block_modal.title": "Блокирати домен?", - "domain_block_modal.you_will_lose_followers": "Сви ваши пратиоци са овог сервера ће бити уклоњени.", "domain_block_modal.you_wont_see_posts": "Нећете видети објаве или обавештења корисника на овом серверу.", "domain_pill.activitypub_lets_connect": "Омогућује вам да се повежете и комуницирате са људима не само на Mastodon-у, већ и у различитим друштвеним апликацијама.", "domain_pill.activitypub_like_language": "ActivityPub је као језик којим Mastodon говори са другим друштвеним мрежама.", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 6bb0b1424a..b1e5a95edf 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -219,7 +219,6 @@ "domain_block_modal.they_cant_follow": "Ingen från denna server kan följa dig.", "domain_block_modal.they_wont_know": "De kommer inte veta att de har blockerats.", "domain_block_modal.title": "Blockera domän?", - "domain_block_modal.you_will_lose_followers": "Alla dina följare från denna server kommer att tas bort.", "domain_block_modal.you_wont_see_posts": "Du kommer inte att se inlägg eller meddelanden från användare på den här servern.", "domain_pill.activitypub_lets_connect": "Det låter dig ansluta och interagera med människor inte bara på Mastodon, men även på andra sociala appar.", "domain_pill.activitypub_like_language": "ActivityPub är som språket Mastodon talar med andra sociala nätverk.", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index d446cacb92..68b64ca548 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "ไม่มีใครจากเซิร์ฟเวอร์นี้สามารถติดตามคุณ", "domain_block_modal.they_wont_know": "เขาจะไม่ทราบว่ามีการปิดกั้นเขา", "domain_block_modal.title": "ปิดกั้นโดเมน?", - "domain_block_modal.you_will_lose_followers": "จะเอาผู้ติดตามทั้งหมดของคุณจากเซิร์ฟเวอร์นี้ออก", "domain_block_modal.you_wont_see_posts": "คุณจะไม่เห็นโพสต์หรือการแจ้งเตือนจากผู้ใช้ในเซิร์ฟเวอร์นี้", "domain_pill.activitypub_lets_connect": "โปรโตคอลช่วยให้คุณเชื่อมต่อและโต้ตอบกับผู้คนไม่ใช่แค่ใน Mastodon แต่ทั่วทั้งแอปสังคมต่าง ๆ เช่นกัน", "domain_pill.activitypub_like_language": "ActivityPub เป็นเหมือนภาษาที่ Mastodon พูดกับเครือข่ายสังคมอื่น ๆ", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index 9f20388182..ba5395b7bd 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -163,7 +163,6 @@ "dismissable_banner.explore_tags": "suni ni la jan mute li lukin e toki pi toki ni. jan mute li kepeken toki la toki ni li lon sewi.", "dismissable_banner.public_timeline": "toki ni li sin. jan li pali e toki ni la jan ante mute pi ma {domain} li kute e jan ni.", "domain_block_modal.block": "o weka e ma", - "domain_block_modal.you_will_lose_followers": "ma ni la jan alasa ale sina li weka", "domain_block_modal.you_wont_see_posts": "sina ken ala lukin e toki tan jan pi ma ni", "domain_pill.server": "ma", "domain_pill.username": "nimi jan", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index bdb2de0ef1..509dbc7a21 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Bu sunucudan hiç kimse sizi takip edemez.", "domain_block_modal.they_wont_know": "Engellendiklerini bilmeyecekler.", "domain_block_modal.title": "Alan adını engelle?", - "domain_block_modal.you_will_lose_followers": "Bu sunucudaki tüm takipçileriniz kaldırılacaktır.", + "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural, one {{followersCountDisplay} takipçi} other {{followersCountDisplay} takipçi}} ve {followingCount, plural, one {{followingCountDisplay} takip ettiğiniz kişi} other {{followingCountDisplay} takip ettiğiniz kişi}} kaybedeceksiniz.", "domain_block_modal.you_wont_see_posts": "Bu sunucudaki kullanıcılardan gelen gönderileri veya bildirimleri göremezsiniz.", "domain_pill.activitypub_lets_connect": "Sadece Mastodon üzerindeki değil, diğer sosyal uygulamalardaki kişilerle de bağlantı kurmanıza ve etkileşmenize olanak sağlar.", "domain_pill.activitypub_like_language": "ActivityPub, Mastodon'un diğer sosyal ağlarla konuşmak için kullandığı dil gibidir.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 3bf8d00248..1b5dbb4c9b 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "Ніхто з цього сервера не може слідкувати за вами.", "domain_block_modal.they_wont_know": "Вони не знають, що їх заблоковано.", "domain_block_modal.title": "Заблокувати домен?", - "domain_block_modal.you_will_lose_followers": "Усіх ваших підписників з цього сервера буде вилучено.", "domain_block_modal.you_wont_see_posts": "Ви не бачитимете дописів і сповіщень від користувачів на цьому сервері.", "domain_pill.activitypub_lets_connect": "Це дозволяє вам спілкуватися та взаємодіяти з людьми не лише на Mastodon, але й у різних соціальних застосунках.", "domain_pill.activitypub_like_language": "ActivityPub - це як мова, якою Mastodon розмовляє з іншими соціальними мережами.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 04b73e78fa..9c5c9ae1e4 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "Không ai trên máy chủ này có thể theo dõi bạn.", "domain_block_modal.they_wont_know": "Họ sẽ không biết đã bị bạn chặn.", "domain_block_modal.title": "Chặn máy chủ?", - "domain_block_modal.you_will_lose_followers": "Những người theo dõi bạn ở máy chủ này sẽ bị xóa.", + "domain_block_modal.you_will_lose_num_followers": "Bạn sẽ mất {followersCount, plural, other {{followersCountDisplay} người theo dõi}} và {followingCount, plural, other {{followingCountDisplay} người bạn theo dõi}}.", "domain_block_modal.you_wont_see_posts": "Bạn sẽ không thấy tút hoặc thông báo từ thành viên máy chủ này.", "domain_pill.activitypub_lets_connect": "Nó cho phép bạn kết nối và tương tác với mọi người không chỉ trên Mastodon mà còn trên các ứng dụng xã hội khác.", "domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index a7cd089948..1f539727f9 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -221,7 +221,6 @@ "domain_block_modal.they_cant_follow": "此服务器上没有人可以关注你。", "domain_block_modal.they_wont_know": "他们不会知道自己被屏蔽。", "domain_block_modal.title": "屏蔽该域名?", - "domain_block_modal.you_will_lose_followers": "该服务器上你的所有关注者都会被删除。", "domain_block_modal.you_wont_see_posts": "你将不会看到此服务器上用户的嘟文或通知。", "domain_pill.activitypub_lets_connect": "它让你不仅能与Mastodon上的人交流互动,还能与其它不同社交应用上的人联系。", "domain_pill.activitypub_like_language": "ActivityPub就像Mastodon与其它社交网络交流时使用的语言。", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 22f51a8413..a081e55897 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -208,7 +208,6 @@ "domain_block_modal.they_cant_follow": "此伺服器的人無法追蹤你。", "domain_block_modal.they_wont_know": "對方不會知道自己被封鎖。", "domain_block_modal.title": "封鎖網域?", - "domain_block_modal.you_will_lose_followers": "你在此伺服器的所有追蹤者都將會被移除。", "domain_block_modal.you_wont_see_posts": "你將看不到此伺服器使用者的帖文和通知。", "domain_pill.activitypub_lets_connect": "這讓你不僅能在 Mastodon 上,也能在其他社交應用程式中與人交流互動。", "domain_pill.activitypub_like_language": "ActivityPub 就像 Mastodon 與其他社交網絡溝通所用的語言。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 7f2caeaf4b..c585f98b6e 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -221,7 +221,7 @@ "domain_block_modal.they_cant_follow": "來自此伺服器之使用者將無法跟隨您。", "domain_block_modal.they_wont_know": "他們不會知道他們已被封鎖。", "domain_block_modal.title": "是否封鎖該網域?", - "domain_block_modal.you_will_lose_followers": "所有您來自此伺服器之跟隨者將被移除。", + "domain_block_modal.you_will_lose_num_followers": "您將會失去 {followersCount, plural, other {{followersCountDisplay} 個跟隨者}} 與 {followingCount, plural, other {{followingCountDisplay} 個您跟隨之帳號}}.", "domain_block_modal.you_wont_see_posts": "您不會見到來自此伺服器使用者之任何嘟文或推播通知。", "domain_pill.activitypub_lets_connect": "它使您能於 Mastodon 及其他不同的社群應用程式與人連結及互動。", "domain_pill.activitypub_like_language": "ActivityPub 像是 Mastodon 與其他社群網路溝通時所用的語言。", diff --git a/config/locales/activerecord.sk.yml b/config/locales/activerecord.sk.yml index 809d006471..68a9e447b9 100644 --- a/config/locales/activerecord.sk.yml +++ b/config/locales/activerecord.sk.yml @@ -15,6 +15,11 @@ sk: user/invite_request: text: Dôvod errors: + attributes: + domain: + invalid: nie je platný tvar domény + messages: + invalid_domain_on_line: "%{value} nie je platný tvar domény" models: account: attributes: diff --git a/config/locales/an.yml b/config/locales/an.yml index 2f181e0757..2db042f1b1 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1375,7 +1375,6 @@ an: delete: Borrar cuenta development: Desembolique edit_profile: Editar perfil - export: Exportar información featured_tags: Hashtags destacaus import: Importar import_and_export: Importar y exportar diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 81705acba0..829855776d 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1719,7 +1719,6 @@ ar: delete: حذف الحسابات development: التطوير edit_profile: تعديل الصفحة التعريفية - export: تصدير البيانات featured_tags: الوسوم الشائعة import: استيراد import_and_export: استيراد وتصدير diff --git a/config/locales/ast.yml b/config/locales/ast.yml index a7d4a9917e..72c5d9d752 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -774,7 +774,6 @@ ast: back: Volver a Mastodon development: Desendolcu edit_profile: Edición del perfil - export: Esportación de datos featured_tags: Etiquetes destacaes import: Importación import_and_export: Importación y esportación diff --git a/config/locales/be.yml b/config/locales/be.yml index d45f443b75..d1d3e17679 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1722,7 +1722,6 @@ be: delete: Выдаленне ўліковага запісу development: Распрацоўка edit_profile: Рэдагаваць профіль - export: Экспарт даных featured_tags: Выбраныя хэштэгі import: Імпарт import_and_export: Імпарт і экспарт diff --git a/config/locales/bg.yml b/config/locales/bg.yml index e2c246827a..00b3a41167 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1617,7 +1617,6 @@ bg: delete: Изтриване на акаунта development: Разработка edit_profile: Редактирай профила си - export: Експортиране на данни featured_tags: Актуални хаштагове import: Импортиране import_and_export: Импортиране и експортиране diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 33a1d4e88f..e0a68f7b46 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1686,7 +1686,7 @@ ca: delete: Eliminació del compte development: Desenvolupament edit_profile: Edita el perfil - export: Exportació de dades + export: Exporta featured_tags: Etiquetes destacades import: Importació import_and_export: Importació i exportació diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index bc668d2ce4..88dadff014 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -907,7 +907,6 @@ ckb: delete: سڕینەوەی هەژمارە development: گەشەپێدان edit_profile: دەستکاری پرۆفایل - export: ناردن زانیاری featured_tags: هاشتاگی تایبەت import: هاوردن import_and_export: هاوردەکردن و ناردن diff --git a/config/locales/co.yml b/config/locales/co.yml index 58ddd7d01b..dad3e08ffd 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -891,7 +891,6 @@ co: delete: Suppressione di u contu development: Sviluppu edit_profile: Mudificà u prufile - export: Spurtazione d’infurmazione featured_tags: Hashtag in vista import: Impurtazione import_and_export: Impurtazione è spurtazione diff --git a/config/locales/cs.yml b/config/locales/cs.yml index b7fc8ab1b0..91fa517944 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1666,7 +1666,6 @@ cs: delete: Smazání účtu development: Vývoj edit_profile: Upravit profil - export: Export dat featured_tags: Zvýrazněné hashtagy import: Import import_and_export: Import a export diff --git a/config/locales/cy.yml b/config/locales/cy.yml index c2c193d943..1ae6aa08ff 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1796,7 +1796,6 @@ cy: delete: Dileu cyfrif development: Datblygu edit_profile: Golygu proffil - export: Allforio data featured_tags: Prif hashnodau import: Mewnforio import_and_export: Mewnforio ac allforio diff --git a/config/locales/da.yml b/config/locales/da.yml index a177b97de7..96b27c91b3 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1692,7 +1692,7 @@ da: delete: Kontosletning development: Udvikling edit_profile: Redigér profil - export: Dataeksport + export: Eksport featured_tags: Udvalgte hashtags import: Import import_and_export: Import og eksport diff --git a/config/locales/de.yml b/config/locales/de.yml index 85e24c230e..5af77c431d 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1692,7 +1692,6 @@ de: delete: Kontolöschung development: Entwicklung edit_profile: Profil bearbeiten - export: Exportieren featured_tags: Vorgestellte Hashtags import: Importieren import_and_export: Importieren und exportieren diff --git a/config/locales/doorkeeper.cy.yml b/config/locales/doorkeeper.cy.yml index 80cc022a0b..32f5055b6c 100644 --- a/config/locales/doorkeeper.cy.yml +++ b/config/locales/doorkeeper.cy.yml @@ -60,6 +60,7 @@ cy: error: title: Mae rhywbeth wedi mynd o'i le new: + prompt_html: Hoffai %{client_name} gael caniatâd i gael mynediad i'ch cyfrif. Dim ond os ydych chi'n adnabod ac yn ymddiried yn y ffynhonnell hon y dylech gymeradwyo'r cais hwn. review_permissions: Adolygu caniatâd title: Angen awdurdodi show: diff --git a/config/locales/doorkeeper.sq.yml b/config/locales/doorkeeper.sq.yml index 1fd9000aa2..f98cf88c63 100644 --- a/config/locales/doorkeeper.sq.yml +++ b/config/locales/doorkeeper.sq.yml @@ -60,6 +60,7 @@ sq: error: title: Ndodhi një gabim new: + prompt_html: "%{client_name} do të donte leje të hyjë në llogarinë tuaj. Miratojeni këtë kërkesë vetëm nëse e njihni dhe e besoni këtë burim." review_permissions: Shqyrtoni leje title: Lypset autorizim show: diff --git a/config/locales/el.yml b/config/locales/el.yml index c119beec17..610ae40265 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1604,7 +1604,6 @@ el: delete: Διαγραφή λογαριασμού development: Ανάπτυξη edit_profile: Επεξεργασία προφίλ - export: Εξαγωγή δεδομένων featured_tags: Παρεχόμενες ετικέτες import: Εισαγωγή import_and_export: Εισαγωγή και εξαγωγή diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 577978ce88..21afcd990f 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1692,7 +1692,6 @@ en-GB: delete: Account deletion development: Development edit_profile: Edit profile - export: Data export featured_tags: Featured hashtags import: Import import_and_export: Import and export diff --git a/config/locales/eo.yml b/config/locales/eo.yml index 2d03ce08a7..7d0f66a0c0 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -275,6 +275,7 @@ eo: filter_by_action: Filtri per ago filter_by_user: Filtri per uzanto title: Ĵurnalo de revizo + unavailable_instance: "(domajna nomo nedisponebla)" announcements: destroyed_msg: Anonco sukcese forigita! edit: @@ -412,6 +413,7 @@ eo: attempts_over_week: one: "%{count} provo ekde lasta semajno" other: "%{count} registroprovoj ekde lasta semajno" + created_msg: Sukcese blokita retpoŝta domajno delete: Forigi dns: types: @@ -420,6 +422,7 @@ eo: new: create: Aldoni domajnon resolve: Solvi domajnon + title: Bloki novan retpoŝtan domajnon not_permitted: Ne permesita resolved_through_html: Solvis tra %{domain} export_domain_allows: @@ -572,6 +575,7 @@ eo: silence_description_html: La konto estos videbla al nur personoj kiu jam sekvis ĝin au permane serĉo ĝin, ege limigante ĝian atingon. Malfermi ciujn raportojn kontra ĉi tiun konton. suspend_description_html: La konto kaj ciuj ĝiaj enhavoj estos neatingebla kaj poŝte forigitas, kaj interagi per ĝi estos neebla. Malfermi ciujn raportojn kontra ĉi tiu konto. actions_description_remote_html: Decidu kiun klopodon por solvi ĉi tiun raporton. Ĉi tiu efikas kiel nur via servilo komuniki per ĉi tiu fora konto kaj trakti ĝian enhavon. + actions_no_posts: Ĉi tiu raporto havas neniujn rilatajn afiŝojn por forigi add_to_report: Aldoni pli al raporto are_you_sure: Ĉu vi certas? assign_to_self: Asigni al mi @@ -608,6 +612,7 @@ eo: report: 'Signalo #%{id}' reported_account: Signalita konto reported_by: Signalita de + reported_with_application: Raportita per aplikaĵo resolved: Solvitaj resolved_msg: Signalo sukcese solvita! skip_to_actions: Salti al agoj @@ -804,6 +809,8 @@ eo: message_html: Estas pritraktataj datumbazaj migradoj. Bonvolu ekzekuti ilin por certigi, ke la apliko kondutas kiel atendite elasticsearch_preset: action: Legi dokumentaron + elasticsearch_preset_single_node: + action: Vidi dokumentadon elasticsearch_running_check: message_html: Ne eblas konekti Elasticsearch. Bonvolu kontroli ke ĝi funkcias, aǔ malŝaltu plentekstan serĉon elasticsearch_version_check: @@ -814,6 +821,8 @@ eo: message_html: Vi ne difinis iujn servilajn regulojn. sidekiq_process_check: message_html: Neniu Sidekiq-procezo por la %{value} vico + software_version_critical_check: + action: Vidi disponeblajn ĝisdatigojn upload_check_privacy_error: action: Klaku ĉi tie por pliaj informoj message_html: "Via retservilo estas misagordita. La privateco de viaj uzantoj estas en risko." @@ -975,7 +984,9 @@ eo: guide_link_text: Ĉiu povas kontribui. sensitive_content: Tikla enhavo application_mailer: + notification_preferences: Ŝanĝi retpoŝtajn preferojn salutation: "%{name}," + settings: 'Ŝanĝi retpoŝtajn preferojn: %{link}' unsubscribe: Malabonu view: 'Vidi:' view_profile: Vidi profilon @@ -994,8 +1005,11 @@ eo: help_html: Se vi havas problemojn solvi la CAPTCHA, vi povas kontakti nin per %{email} kaj ni povas helpi vin. title: Sekureckontrolo confirmations: + clicking_this_link: alklakante ĉi tiun ligilon login_link: ensaluti + registration_complete: Via registriĝo sur %{domain} nun finiĝis! welcome_title: Bonvenon, %{name}! + wrong_email_hint: Se tiu retadreso ne estas ĝusta, vi povas ŝanĝi ĝin en kontagordoj. delete_account: Forigi konton delete_account_html: Se vi deziras forigi vian konton, vi povas fari tion ĉi tie. Vi bezonos konfirmi vian peton. description: @@ -1016,6 +1030,7 @@ eo: or_log_in_with: Aŭ saluti per privacy_policy_agreement_html: Mi legis kaj konsentis pri privatpolitiko progress: + confirm: Konfirmi retadreson details: Viaj detaloj review: Niaj recenzoj rules: Akcepti regulojn @@ -1053,8 +1068,10 @@ eo: too_fast: Formularo sendita tro rapide, klopodu denove. use_security_key: Uzi sekurecan ŝlosilon author_attribution: + example_title: Ekzempla teksto more_from_html: Pli de %{name} s_blog: Blogo de %{name} + title: Atribuo de aŭtoro challenge: confirm: Daŭrigi hint_html: "Konsileto: Ni ne demandos pri via pasvorto ĝis 1 horo." @@ -1250,8 +1267,10 @@ eo: overwrite: Anstataŭigi overwrite_long: Anstataŭigi la nunajn registrojn per la novaj preface: Vi povas importi datumojn, kiujn vi eksportis el alia servilo, kiel liston de homoj, kiujn vi sekvas aŭ blokas. + recent_imports: Lastatempaj importoj states: finished: Finita + in_progress: Farata unconfirmed: Nekonfirmita status: Stato success: Viaj datumoj estis sukcese alŝutitaj kaj estos traktitaj kiel planite @@ -1541,7 +1560,6 @@ eo: delete: Konta forigo development: Evoluigado edit_profile: Redakti profilon - export: Eksporti datumojn featured_tags: Elstarigitaj kradvortoj import: Enporti import_and_export: Importi kaj eksporti @@ -1553,6 +1571,9 @@ eo: strikes: Kontroladmonoj two_factor_authentication: Dufaktora aŭtentigo webauthn_authentication: Sekurecaj ŝlosiloj + severed_relationships: + lost_followers: Perditaj sekvantoj + type: Evento statuses: attached: audio: @@ -1719,6 +1740,12 @@ eo: explanation: Jen kelkaj konsiloj por helpi vin komenci feature_action: Lerni pli follow_action: Sekvi + hashtags_title: Popularaj kradvortoj + hashtags_view_more: Vidi pli da popularaj kradvortoj + post_step: Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj. + post_title: Faru vian unuan afiŝon + share_step: Sciigu viajn amikojn kiel trovi vin sur Mastodon. + sign_in_action: Ensaluti subject: Bonvenon en Mastodon title: Bonvenon, %{name}! users: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 9f1dc46c9d..01685f99fe 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1692,7 +1692,6 @@ es-AR: delete: Eliminación de la cuenta development: Desarrollo edit_profile: Editar perfil - export: Exportación de datos featured_tags: Etiquetas destacadas import: Importar import_and_export: Importación y exportación diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 0325757dca..a8ff5c6938 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1692,7 +1692,6 @@ es-MX: delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil - export: Exportar información featured_tags: Hashtags destacados import: Importar import_and_export: Importar y exportar diff --git a/config/locales/es.yml b/config/locales/es.yml index 2815ada779..ab7fd3bc54 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1692,7 +1692,6 @@ es: delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil - export: Exportar información featured_tags: Hashtags destacados import: Importar import_and_export: Importar y exportar diff --git a/config/locales/et.yml b/config/locales/et.yml index 60f98a471e..b71e3ccb68 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1692,7 +1692,6 @@ et: delete: Konto kustutamine development: Arendus edit_profile: Muuda profiili - export: Andmete eksportimine featured_tags: Esile toodud sildid import: Impordi import_and_export: Import / eksport diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 7c7f995a71..e80207d46f 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1592,7 +1592,6 @@ eu: delete: Kontuaren ezabaketa development: Garapena edit_profile: Editatu profila - export: Datuen esportazioa featured_tags: Nabarmendutako traolak import: Inportazioa import_and_export: Inportatu eta esportatu diff --git a/config/locales/fa.yml b/config/locales/fa.yml index c2c22af4c4..e7d932de11 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1438,7 +1438,6 @@ fa: delete: پاک‌کردن حساب development: فرابری edit_profile: ویرایش نمایه - export: برون‌سپاری داده‌ها featured_tags: برچسب‌های برگزیده import: درون‌ریزی import_and_export: درون‌ریزی و برون‌بری diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 5df82bff9f..9bd0f12241 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1692,7 +1692,6 @@ fi: delete: Tilin poisto development: Kehitys edit_profile: Muokkaa profiilia - export: Vie tietoja featured_tags: Suositellut aihetunnisteet import: Tuo tietoja import_and_export: Tuonti ja vienti diff --git a/config/locales/fo.yml b/config/locales/fo.yml index ce21aa3be7..50b4802bc7 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1692,7 +1692,6 @@ fo: delete: Striking av kontu development: Menning edit_profile: Rætta vanga - export: Útflyt dátur featured_tags: Varpaði frámerki import: Innflyt import_and_export: Innflyt og útflyt diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 3f9252ffab..6ab0ee6660 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1692,7 +1692,6 @@ fr-CA: delete: Suppression du compte development: Développement edit_profile: Modifier le profil - export: Export de données featured_tags: Hashtags mis en avant import: Import de données import_and_export: Import et export diff --git a/config/locales/fr.yml b/config/locales/fr.yml index cb76ae2243..6e13466bfe 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1692,7 +1692,6 @@ fr: delete: Suppression du compte development: Développement edit_profile: Modifier le profil - export: Export de données featured_tags: Hashtags mis en avant import: Import de données import_and_export: Import et export diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 8b854494d4..0379af34e9 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1682,7 +1682,6 @@ fy: delete: Account fuortsmite development: Untwikkelers edit_profile: Profyl bewurkje - export: Eksportearje featured_tags: Utljochte hashtags import: Ymportearje import_and_export: Ymportearje en eksportearje diff --git a/config/locales/ga.yml b/config/locales/ga.yml index a6369354cd..9513623932 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1770,7 +1770,6 @@ ga: delete: Scriosadh cuntais development: Forbairt edit_profile: Cuir an phróifíl in eagar - export: Easpórtáil sonraí featured_tags: Haischlib faoi thrácht import: Iompórtáil import_and_export: Iompórtáil agus easpórtáil diff --git a/config/locales/gd.yml b/config/locales/gd.yml index b5cbc4a73e..90d03c74e1 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1744,7 +1744,6 @@ gd: delete: Sguabadh às cunntais development: Leasachadh edit_profile: Deasaich a’ phròifil - export: Às-phortadh dàta featured_tags: Tagaichean hais brosnaichte import: Ion-phortadh import_and_export: Ion-phortadh ⁊ às-phortadh diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 9813514a7b..2eadb2ba6b 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1692,7 +1692,7 @@ gl: delete: Eliminación da conta development: Desenvolvemento edit_profile: Editar perfil - export: Exportar datos + export: Exportar featured_tags: Cancelos destacados import: Importar import_and_export: Importar e exportar diff --git a/config/locales/he.yml b/config/locales/he.yml index 13a1f6f05d..c7af22660f 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1744,7 +1744,6 @@ he: delete: מחיקת חשבון development: פיתוח edit_profile: עריכת פרופיל - export: יצוא מידע featured_tags: תגיות נבחרות import: יבוא import_and_export: יבוא ויצוא diff --git a/config/locales/hr.yml b/config/locales/hr.yml index 7dacf20077..908cbf51c4 100644 --- a/config/locales/hr.yml +++ b/config/locales/hr.yml @@ -205,7 +205,6 @@ hr: delete: Brisanje računa development: Razvijanje edit_profile: Uredi profil - export: Izvoz podataka featured_tags: Istaknuti hashtagovi import: Uvezi import_and_export: Uvezi i izvezi diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 9767c48834..2f6a4c5778 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1692,7 +1692,6 @@ hu: delete: Fiók törlése development: Fejlesztőknek edit_profile: Profil szerkesztése - export: Adatok exportálása featured_tags: Kiemelt hashtagek import: Importálás import_and_export: Import és export diff --git a/config/locales/hy.yml b/config/locales/hy.yml index 1fda020c07..201922d102 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -757,7 +757,6 @@ hy: delete: Հաշուի ջնջում development: Ծրագրավորում edit_profile: Խմբագրել պրոֆիլը - export: Տվյալների արտահանում featured_tags: Ընտրուած հէշթեգեր import: Ներմուծել import_and_export: Ներմուծել և արտահանել diff --git a/config/locales/ia.yml b/config/locales/ia.yml index 6632af061e..a8bc48b306 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -1675,7 +1675,6 @@ ia: delete: Deletion de conto development: Disveloppamento edit_profile: Modificar profilo - export: Exportation de datos featured_tags: Hashtags in evidentia import: Importar import_and_export: Importar e exportar diff --git a/config/locales/id.yml b/config/locales/id.yml index 96a5022a7c..6a005fddaa 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1347,7 +1347,6 @@ id: delete: Penghapusan akun development: Pengembangan edit_profile: Ubah profil - export: Expor data featured_tags: Tagar unggulan import: Impor import_and_export: Impor dan ekspor diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 513a8eda7e..7e8140a374 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1590,7 +1590,6 @@ ie: delete: Deletion de conto development: Developation edit_profile: Modificar profil - export: Exportation de data featured_tags: Recomandat hashtags import: Importar import_and_export: Importation e exportation diff --git a/config/locales/io.yml b/config/locales/io.yml index 97cc417df0..dfb583450a 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1555,7 +1555,6 @@ io: delete: Kontoefaco development: Developo edit_profile: Redaktar la profilo - export: Exportacar datumi featured_tags: Estelata hashtagi import: Importacar import_and_export: Importaco e exportaco diff --git a/config/locales/is.yml b/config/locales/is.yml index 590805ad30..4af26eea0b 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1696,7 +1696,6 @@ is: delete: Eyðing notandaaðgangs development: Þróun edit_profile: Breyta notandasniði - export: Útflutningur gagna 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 fe6fec17d7..9fdeede8bf 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1694,7 +1694,6 @@ it: delete: Cancellazione account development: Sviluppo edit_profile: Modifica profilo - export: Esportazione dati featured_tags: Hashtag in evidenza import: Importa import_and_export: Importa ed esporta diff --git a/config/locales/ja.yml b/config/locales/ja.yml index cdc1fd18a8..41f93397da 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1659,7 +1659,6 @@ ja: delete: アカウントの削除 development: 開発 edit_profile: プロフィールを編集 - export: データのエクスポート featured_tags: 注目のハッシュタグ import: データのインポート import_and_export: インポート・エクスポート diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 5769375078..2a0365fbf5 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -410,7 +410,6 @@ ka: delete: ანგარიშის გაუქმება development: დეველოპმენტი edit_profile: პროფილის ცვლილება - export: მონაცემის ექსპორტი import: იმპორტი migrate: ანგარიშის მიგრაცია preferences: პრეფერენციები diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 88193f8434..12bda84d46 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -776,7 +776,6 @@ kab: delete: Tukksa n umiḍan development: Taneflit edit_profile: Ẓreg amaɣnu - export: Taktert n yisefka import: Kter import_and_export: Taktert d usifeḍ migrate: Tunigin n umiḍan diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 67969d4d69..537104ba51 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -623,7 +623,6 @@ kk: delete: Аккаунт өшіру development: Жасаушы топ edit_profile: Профиль өңдеу - export: Экспорт уақыты featured_tags: Таңдаулы хэштегтер import: Импорт import_and_export: Импорт/экспорт diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 216e468762..ba43310e02 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1668,7 +1668,7 @@ ko: delete: 계정 삭제 development: 개발 edit_profile: 프로필 편집 - export: 데이터 내보내기 + export: 내보내기 featured_tags: 추천 해시태그 import: 데이터 가져오기 import_and_export: 가져오기 & 내보내기 diff --git a/config/locales/ku.yml b/config/locales/ku.yml index 08843f645e..ddd214441c 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1369,7 +1369,6 @@ ku: delete: Jêbirina ajimêr development: Pêşdebir edit_profile: Profîlê serrast bike - export: Derxistinê daneyan featured_tags: Hashtagên bijarte import: Têxistin import_and_export: Têxistin û derxistin diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 4136877ede..275bdab861 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1652,7 +1652,6 @@ lad: delete: Efasa kuento development: Dezvelopamiento edit_profile: Edita profil - export: Eksporta enformasyon featured_tags: Etiketas avaliadas import: Importo import_and_export: Importo i eksporto diff --git a/config/locales/lt.yml b/config/locales/lt.yml index fa07eb6f59..ef13817028 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -1090,7 +1090,6 @@ lt: delete: Paskyros trynimas development: Kūrimas edit_profile: Redaguoti profilį - export: Duomenų eksportas featured_tags: Rodomi saitažodžiai import: Importuoti import_and_export: Importas ir eksportas diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 4aeec5ceca..16844a95c2 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1130,6 +1130,8 @@ lv: too_fast: Veidlapa ir iesniegta pārāk ātri, mēģini vēlreiz. use_security_key: Lietot drošības atslēgu author_attribution: + example_title: Parauga teksts + more_from_html: Vairāk no %{name} s_blog: "%{name} emuāri" title: Autora attiecinājums challenge: @@ -1650,20 +1652,23 @@ lv: delete: Konta dzēšana development: Izstrāde edit_profile: Labot profilu - export: Datu eksports featured_tags: Piedāvātie tēmturi import: Imports import_and_export: Imports un eksports migrate: Konta migrācija + notifications: E-pasta paziņojumi preferences: Iestatījumi profile: Profils relationships: Sekojamie un sekotāji + severed_relationships: Pārtrauktās attiecības statuses_cleanup: Automātiska ziņu dzēšana strikes: Moderācijas aizrādījumi two_factor_authentication: Divpakāpju autentifikācija webauthn_authentication: Drošības atslēgas severed_relationships: download: Lejupielādēt (%{count}) + lost_followers: Zaudētie sekotāji + lost_follows: Zaudētie sekojumi type: Notikums statuses: attached: @@ -1829,6 +1834,8 @@ lv: suspend: Konts apturēts welcome: apps_android_action: Iegūt to Google Play + apps_ios_action: Lejupielādēt no App Store + apps_step: Lejupielādēt mūsu oficiālās lietotnes. apps_title: Mastodon lietotnes edit_profile_action: Pielāgot edit_profile_title: Pielāgo savu profilu diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 0c0ffb69bf..9994a34bb5 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1529,7 +1529,6 @@ ms: delete: Pemadaman akaun development: Pembangunan edit_profile: Sunting profil - export: Eksport data featured_tags: Tanda pagar terpilih import: Import import_and_export: Import dan eksport diff --git a/config/locales/my.yml b/config/locales/my.yml index 6acaa34cdc..598915fad9 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1529,7 +1529,6 @@ my: delete: အကောင့်ဖျက်သိမ်းခြင်း development: Development edit_profile: ပရိုဖိုင်ပြင်ဆင်ရန် - export: အချက်အလက်ထုတ်ယူခြင်း featured_tags: အသားပေးဖော်ပြထားသည့် ဟက်ရှ်တဂျ်များ import: ထည့်သွင်းခြင်း import_and_export: ထည့်သွင်းခြင်းနှင့် ထုတ်ယူခြင်း diff --git a/config/locales/nn.yml b/config/locales/nn.yml index dcf571a792..98f62e123a 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1692,7 +1692,6 @@ nn: delete: Kontosletting development: Utvikling edit_profile: Endr profil - export: Dataeksport featured_tags: Utvalgte emneknagger import: Hent inn import_and_export: Importer og eksporter diff --git a/config/locales/no.yml b/config/locales/no.yml index 1f0b6bacce..ec0b14d5a3 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1584,7 +1584,6 @@ delete: Kontosletting development: Utvikling edit_profile: Endre profil - export: Dataeksport featured_tags: Utvalgte emneknagger import: Importér import_and_export: Importer og eksporter diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 5cdd9240b0..a30126c44b 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -813,7 +813,6 @@ oc: delete: Supression de compte development: Desvolopament edit_profile: Modificar lo perfil - export: Exportar de donadas featured_tags: Etiquetas en avant import: Importar de donadas import_and_export: Import e export diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 314adf885f..e68ea2b16a 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1744,7 +1744,6 @@ pl: delete: Usuń konto development: Tworzenie aplikacji edit_profile: Edytuj profil - export: Eksportowanie danych featured_tags: Wyróżnione hashtagi import: Importowanie danych import_and_export: Import i eksport diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 7742a80569..ba21dd1b3b 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1692,7 +1692,6 @@ pt-BR: delete: Exclusão de conta development: Desenvolvimento edit_profile: Editar perfil - export: Exportar dados featured_tags: Hashtags em destaque import: Importar import_and_export: Importar e exportar diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index d6c5c4a6ff..6b48e8de26 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1679,7 +1679,6 @@ pt-PT: delete: Eliminação da conta development: Desenvolvimento edit_profile: Editar perfil - export: Exportar dados featured_tags: Etiquetas destacadas import: Importar import_and_export: Importar e exportar diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 3877727490..c61c7f459f 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1741,7 +1741,6 @@ ru: delete: Удаление учётной записи development: Разработчикам edit_profile: Изменить профиль - export: Экспорт данных featured_tags: Избранные хэштеги import: Импорт import_and_export: Импорт и экспорт diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 780270ddf1..306e670b71 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -1080,7 +1080,6 @@ sc: delete: Eliminatzione de su contu development: Isvilupu edit_profile: Modìfica profilu - export: Esportatzione de datos featured_tags: Etichetas in evidèntzia import: Importatzione import_and_export: Importatzione e esportatzione diff --git a/config/locales/sco.yml b/config/locales/sco.yml index 97eaa21ed6..8cc733a4ac 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1359,7 +1359,6 @@ sco: delete: Accoont deletion development: Development edit_profile: Edit profile - export: Data export featured_tags: Featured hashtags import: Import import_and_export: Import an export diff --git a/config/locales/si.yml b/config/locales/si.yml index 8460de01da..270e0ae3fc 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1234,7 +1234,6 @@ si: delete: ගිණුම මැකීම development: සංවර්ධනය edit_profile: පැතිකඩ සංස්කරණය - export: දත්ත නිර්යාතය featured_tags: විශේෂාංගගත හැෂ් ටැග් import: ආයාතය import_and_export: ආයාත හා නිර්යාත diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index f2108828d5..8c84e35a4d 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -79,14 +79,14 @@ es-MX: form_admin_settings: activity_api_enabled: Conteo de publicaciones publicadas localmente, usuarios activos, y nuevos registros en periodos semanales app_icon: WEBP, PNG, GIF o JPG. Reemplaza el icono de aplicación predeterminado en dispositivos móviles con un icono personalizado. - backups_retention_period: Los usuarios tienen la capacidad de generar archivos de sus mensajes para descargar más adelante. Cuando se establece un valor positivo, estos archivos se eliminarán automáticamente del almacenamiento después del número de días especificado. + backups_retention_period: Los usuarios tienen la posibilidad de generar archivos de sus mensajes para descargarlos más adelante. Cuando se establece en un valor positivo, estos archivos se eliminarán automáticamente del almacenamiento después del número especificado de días. bootstrap_timeline_accounts: Estas cuentas aparecerán en la parte superior de las recomendaciones de los nuevos usuarios. closed_registrations_message: Mostrado cuando los registros están cerrados - content_cache_retention_period: Todas las publicaciones de otros servidores (incluso impulsos y respuestas) se eliminarán después del número de días especificado, sin tener en cuenta la interacción del usuario local con esos mensajes. Esto incluye mensajes donde un usuario local los ha marcado como marcadores o favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán sin posibilidad de recuperación. El uso de esta configuración está destinado a instancias de propósito especial, y rompe muchas expectativas de los usuarios cuando se implementa para un uso de propósito general. + content_cache_retention_period: Todas las publicaciones de otros servidores (incluyendo impuestos y respuestas) serán borrados después del número de días especificado, sin tener en cuenta cualquier interacción del usuario local con esas publicaciones. Esto incluye los mensajes que un usuario local haya marcado como favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán y será imposible restaurarlas. El uso de esta configuración está pensado para instancias de propósito especial y rompe muchas expectativas de los usuarios cuando se implementa para uso general. custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon. favicon: WEBP, PNG, GIF o JPG. Reemplaza el icono predeterminado de Mastodon con un icono personalizado. mascot: Reemplaza la ilustración en la interfaz web avanzada. - media_cache_retention_period: Los archivos multimedia de las publicaciones creadas por usuarios remotos se almacenan en caché en tu servidor. Cuando se establece un valor positivo, estos archivos se eliminarán después del número especificado de días. Si los datos multimedia se solicitan después de eliminarse, se volverán a descargar, si el contenido fuente todavía está disponible. Debido a restricciones en la frecuencia con la que las tarjetas de previsualización de enlaces realizan peticiones a sitios de terceros, se recomienda establecer este valor a al menos 14 días, o las tarjetas de previsualización de enlaces no se actualizarán bajo demanda antes de ese momento. + media_cache_retention_period: Los archivos multimedia de las publicaciones realizadas por usuarios remotos se almacenan en caché en su servidor. Si se establece en un valor positivo, los archivos multimedia se eliminarán tras el número de días especificado. Si los datos multimedia se solicitan después de haber sido eliminados, se volverán a descargar, si el contenido de origen sigue estando disponible. Debido a las restricciones sobre la frecuencia con la que las tarjetas de previsualización de enlaces sondean sitios de terceros, se recomienda establecer este valor en al menos 14 días, o las tarjetas de previsualización de enlaces no se actualizarán bajo demanda antes de ese tiempo. peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el fediverso. Aquí no se incluye ningún dato sobre si usted federa con un servidor determinado, sólo que su servidor lo sabe. Esto es utilizado por los servicios que recopilan estadísticas sobre la federación en un sentido general. profile_directory: El directorio de perfiles lista a todos los usuarios que han optado por que su cuenta pueda ser descubierta. require_invite_text: Cuando los registros requieren aprobación manual, hace obligatoria la entrada de texto "¿Por qué quieres unirte?" en lugar de opcional @@ -249,7 +249,7 @@ es-MX: backups_retention_period: Período de retención del archivo de usuario bootstrap_timeline_accounts: Recomendar siempre estas cuentas a nuevos usuarios closed_registrations_message: Mensaje personalizado cuando los registros no están disponibles - content_cache_retention_period: Período de retención de contenido remoto + content_cache_retention_period: Periodo de conservación de contenidos remotos custom_css: CSS personalizado favicon: Favicon mascot: Mascota personalizada (legado) diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index ed27e08bc3..9cc32457f7 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -82,6 +82,7 @@ lv: backups_retention_period: Lietotājiem ir iespēja izveidot savu ierakstu arhīvu lejupielādēšanai vēlāk. Kad iestatīta pozitīva vērtība, šie arhīvi tiks automātiski izdzēsti no krātuves pēc norādītā dienu skaita. bootstrap_timeline_accounts: Šie konti tiks piesprausti jauno lietotāju ieteikumu augšdaļā. closed_registrations_message: Tiek rādīts, kad reģistrēšanās ir slēgta + content_cache_retention_period: Visi ieraksti no citiem serveriem (tajā skaitā pastiprinājumi un atbildes) tiks izdzēsti pēc norādītā dienu skaita, neņemot vērā vietēja lietotāja mijiedarbību ar šādiem ierakstiem. Tas ietver ierakstus, kurus vietējs lietotājs ir atzīmējis kā grāmatzīmi vai pievienojis izlasē. Tiks zaudēti arī privāti pieminējumi starp lietotājiem no dažādiem serveriem, un tos nebūs iespējams atgūt. Šī iestatījuma izmantošana ir paredzēta īpašam nolūkam paredzētiem serveriem un neatbilst tam, ko sagaida vairums lietotāju, kad pielietots vispārējas izmantošanas serveros. custom_css: Vari lietot pielāgotus stilus Mastodon tīmekļa versijā. favicon: WEBP, PNG, GIF vai JPG. Aizstāj noklusējuma Mastodon favikonu ar pielāgotu. mascot: Ignorē ilustrāciju uzlabotajā tīmekļa saskarnē. diff --git a/config/locales/simple_form.sk.yml b/config/locales/simple_form.sk.yml index 9d3845e7a7..aa8dbe7693 100644 --- a/config/locales/simple_form.sk.yml +++ b/config/locales/simple_form.sk.yml @@ -126,7 +126,7 @@ sk: setting_system_font_ui: Použi základné systémové písmo setting_theme: Vzhľad webu setting_trends: Ukáž dnešné trendy - setting_unfollow_modal: Vyžaduj potvrdenie pred skončením sledovania iného užívateľa + setting_unfollow_modal: Vyžaduj potvrdenie pred tým, než niekoho prestaneš sledovať setting_use_blurhash: Ukáž farebné prechody pre skryté médiá setting_use_pending_items: Pomalý režim severity: Závažnosť diff --git a/config/locales/sk.yml b/config/locales/sk.yml index d7eacb6850..8076682ed4 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -394,6 +394,7 @@ sk: resolve: Preveď doménu not_permitted: Nepovolená resolved_through_html: Prevedená cez %{domain} + title: Blokované e-mailové domény export_domain_allows: new: title: Nahraj povolené domény @@ -401,6 +402,7 @@ sk: export_domain_blocks: import: existing_relationships_warning: Existujúce vzťahy nasledovania + private_comment_template: 'Importované z: %{source} dňa %{date}' title: Nahraj zákazy domén new: title: Nahraj zákazy domén @@ -1097,7 +1099,7 @@ sk: subject: "%{name} si obľúbil/a tvoj príspevok" title: Novo obľúbené follow: - body: "%{name} ťa teraz následuje!" + body: "%{name} ťa teraz nasleduje!" subject: "%{name} ťa teraz nasleduje" title: Nový sledovateľ follow_request: @@ -1166,7 +1168,7 @@ sk: follow_failure: Nemožno nasledovať niektoré z vybraných účtov. follow_selected_followers: Následuj označených sledovatelov followers: Následovatelia - following: Následovaní + following: Nasledovaní invited: Pozvaný/á last_active: Naposledy aktívny most_recent: Najnovšie @@ -1226,7 +1228,6 @@ sk: delete: Vymazanie účtu development: Vývoj edit_profile: Uprav profil - export: Exportuj dáta featured_tags: Zvýraznené haštagy import: Importuj import_and_export: Import a export diff --git a/config/locales/sl.yml b/config/locales/sl.yml index c8e806bf35..286bece877 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1729,7 +1729,6 @@ sl: delete: Brisanje računa development: Razvoj edit_profile: Uredi profil - export: Izvoz podatkov featured_tags: Vključeni ključniki import: Uvozi import_and_export: Uvoz in izvoz diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 294c8a888f..c1ed91cf96 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -296,6 +296,7 @@ sq: filter_by_action: Filtroji sipas veprimit filter_by_user: Filtroji sipas përdoruesit title: Regjistër auditimesh + unavailable_instance: "(emër përkatësie jo i passhëm)" announcements: destroyed_msg: Lajmërimi u fshi me sukses! edit: @@ -1684,7 +1685,7 @@ sq: delete: Fshirje llogarie development: Zhvillim edit_profile: Përpunoni profilin - export: Eksportim të dhënash + export: Eksportim featured_tags: Hashtag-ë të zgjedhur import: Importo import_and_export: Importim dhe eksportim diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index bfb52c275b..ad14d9d131 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1619,7 +1619,6 @@ sr-Latn: delete: Brisanje naloga development: Razvoj edit_profile: Uređivanje profila - export: Izvoz podataka featured_tags: Istaknute heš oznake import: Uvoz import_and_export: Uvoz i izvoz diff --git a/config/locales/sr.yml b/config/locales/sr.yml index af7e7ab8d6..fc92b98176 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1649,7 +1649,6 @@ sr: delete: Брисање налога development: Развој edit_profile: Уређивање профила - export: Извоз података featured_tags: Истакнуте хеш ознаке import: Увоз import_and_export: Увоз и извоз diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 6146cfc8d7..ab54500537 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1645,7 +1645,7 @@ sv: delete: Konto radering development: Utveckling edit_profile: Redigera profil - export: Exportera data + export: Export featured_tags: Utvalda hashtaggar import: Importera import_and_export: Import och export diff --git a/config/locales/th.yml b/config/locales/th.yml index d56385f261..fa04b6030a 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1666,7 +1666,6 @@ th: delete: การลบบัญชี development: การพัฒนา edit_profile: แก้ไขโปรไฟล์ - export: การส่งออกข้อมูล featured_tags: แฮชแท็กที่น่าสนใจ import: การนำเข้า import_and_export: การนำเข้าและการส่งออก diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 16dd4c899d..d2cf412cc9 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1692,7 +1692,6 @@ tr: delete: Hesap silme development: Geliştirme edit_profile: Profili düzenle - export: Veriyi dışa aktar featured_tags: Öne çıkan etiketler import: İçe aktar import_and_export: İçe ve dışa aktar diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 0ef08a1555..d0164d846a 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1744,7 +1744,6 @@ uk: delete: Видалення облікового запису development: Розробка edit_profile: Редагувати профіль - export: Експорт даних featured_tags: Рекомендовані хештеґи import: Імпорт import_and_export: Імпорт та експорт diff --git a/config/locales/vi.yml b/config/locales/vi.yml index d969ad7d4f..21fc4a3bf1 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1666,7 +1666,7 @@ vi: delete: Xóa tài khoản development: Lập trình edit_profile: Sửa hồ sơ - export: Xuất dữ liệu + export: Xuất featured_tags: Hashtag thường dùng import: Nhập dữ liệu import_and_export: Dữ liệu diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 8b34da076a..ade35ceb62 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1666,7 +1666,6 @@ zh-CN: delete: 删除账户 development: 开发 edit_profile: 更改个人资料 - export: 导出 featured_tags: 精选的话题标签 import: 导入 import_and_export: 导入和导出 diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 598c65d049..c0726fc2f7 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1564,7 +1564,6 @@ zh-HK: delete: 刪除帳戶 development: 開發 edit_profile: 修改個人資料 - export: 匯出 featured_tags: 推薦的標籤 import: 匯入 import_and_export: 匯入及匯出 From db57fe80c8a4fcac2b0fb857c7eb959cbf82a2e0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 26 Sep 2024 04:54:01 -0400 Subject: [PATCH 06/68] Remove `page_json` var from ap/replies spec (#32000) --- .../activitypub/replies_controller_spec.rb | 82 ++++++++++++++----- 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb index 27821b0d4e..d7c2c2d3b0 100644 --- a/spec/controllers/activitypub/replies_controller_spec.rb +++ b/spec/controllers/activitypub/replies_controller_spec.rb @@ -66,7 +66,6 @@ RSpec.describe ActivityPub::RepliesController do context 'when status is public' do let(:parent_visibility) { :public } - let(:page_json) { response.parsed_body[:first] } it 'returns http success and correct media type' do expect(response) @@ -78,16 +77,28 @@ RSpec.describe ActivityPub::RepliesController do context 'without only_other_accounts' do it "returns items with thread author's replies" do - expect(page_json).to be_a Hash - expect(page_json[:items]).to be_an Array - expect(page_json[:items].size).to eq 1 - expect(page_json[:items].all? { |item| targets_public_collection?(item) }).to be true + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include( + items: be_an(Array) + .and(have_attributes(size: 1)) + .and(all(satisfy { |item| targets_public_collection?(item) })) + ) + ) + ) end context 'when there are few self-replies' do it 'points next to replies from other people' do - expect(page_json).to be_a Hash - expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=true', 'page=true') + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include( + next: satisfy { |value| (parsed_uri_query_values(value) & %w(only_other_accounts=true page=true)).any? } + ) + ) + ) end end @@ -97,8 +108,14 @@ RSpec.describe ActivityPub::RepliesController do end it 'points next to other self-replies' do - expect(page_json).to be_a Hash - expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=false', 'page=true') + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include( + next: satisfy { |value| (parsed_uri_query_values(value) & %w(only_other_accounts=false page=true)).any? } + ) + ) + ) end end end @@ -107,26 +124,31 @@ RSpec.describe ActivityPub::RepliesController do let(:only_other_accounts) { 'true' } it 'returns items with other public or unlisted replies' do - expect(page_json).to be_a Hash - expect(page_json[:items]).to be_an Array - expect(page_json[:items].size).to eq 3 + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include(items: be_an(Array).and(have_attributes(size: 3))) + ) + ) end it 'only inlines items that are local and public or unlisted replies' do - inlined_replies = page_json[:items].select { |x| x.is_a?(Hash) } - expect(inlined_replies.all? { |item| targets_public_collection?(item) }).to be true - expect(inlined_replies.all? { |item| ActivityPub::TagManager.instance.local_uri?(item[:id]) }).to be true + expect(inlined_replies) + .to all(satisfy { |item| targets_public_collection?(item) }) + .and all(satisfy { |item| ActivityPub::TagManager.instance.local_uri?(item[:id]) }) end it 'uses ids for remote toots' do - remote_replies = page_json[:items].reject { |x| x.is_a?(Hash) } - expect(remote_replies.all? { |item| item.is_a?(String) && !ActivityPub::TagManager.instance.local_uri?(item) }).to be true + expect(remote_replies) + .to all(satisfy { |item| item.is_a?(String) && !ActivityPub::TagManager.instance.local_uri?(item) }) end context 'when there are few replies' do it 'does not have a next page' do - expect(page_json).to be_a Hash - expect(page_json[:next]).to be_nil + expect(response.parsed_body) + .to include( + first: be_a(Hash).and(not_include(next: be_present)) + ) end end @@ -136,8 +158,14 @@ RSpec.describe ActivityPub::RepliesController do end it 'points next to other replies' do - expect(page_json).to be_a Hash - expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=true', 'page=true') + expect(response.parsed_body) + .to include( + first: be_a(Hash).and( + include( + next: satisfy { |value| (parsed_uri_query_values(value) & %w(only_other_accounts=true page=true)).any? } + ) + ) + ) end end end @@ -193,6 +221,18 @@ RSpec.describe ActivityPub::RepliesController do private + def inlined_replies + response + .parsed_body[:first][:items] + .select { |x| x.is_a?(Hash) } + end + + def remote_replies + response + .parsed_body[:first][:items] + .reject { |x| x.is_a?(Hash) } + end + def parsed_uri_query_values(uri) Addressable::URI .parse(uri) From 00aaf77e04ce3aeadd976b4e1726c49794b3ea89 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Thu, 26 Sep 2024 13:48:01 +0200 Subject: [PATCH 07/68] Use same styling for statuses in email as on web (#32073) --- app/javascript/styles/mailer.scss | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index e5d0c05f81..2c1b443cb5 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -168,6 +168,7 @@ table + p { // Utility classes .email-w-full { + table-layout: fixed; width: 100%; } @@ -587,7 +588,10 @@ table + p { p { font-size: 14px; line-height: 20px; + margin-bottom: 20px; color: #17063b; + white-space: pre-wrap; + unicode-bidi: plaintext; } a { @@ -598,6 +602,21 @@ table + p { color: #563acc !important; } } + + .invisible { + font-size: 0; + line-height: 0; + display: inline-block; + width: 0; + height: 0; + position: absolute; + } + + .ellipsis { + &::after { + content: '…'; + } + } } .email-status-media { From 89df27a06c69818d38621c1147c6724d76beefde Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 26 Sep 2024 14:31:32 +0200 Subject: [PATCH 08/68] Change design of media tab on profiles in web UI (#31967) --- .../mastodon/components/media_gallery.jsx | 13 +- app/javascript/mastodon/components/status.jsx | 38 ++-- .../account_gallery/components/media_item.jsx | 158 -------------- .../account_gallery/components/media_item.tsx | 197 ++++++++++++++++++ .../features/account_gallery/index.jsx | 2 +- .../status/components/detailed_status.tsx | 33 +-- app/javascript/mastodon/models/status.ts | 2 + .../material-icons/400-20px/mood-fill.svg | 2 +- .../material-icons/400-20px/mood.svg | 2 +- .../material-icons/400-20px/warning-fill.svg | 2 +- .../material-icons/400-20px/warning.svg | 2 +- .../400-24px/add_photo_alternate-fill.svg | 2 +- .../400-24px/add_photo_alternate.svg | 2 +- .../400-24px/bookmarks-fill.svg | 2 +- .../material-icons/400-24px/bookmarks.svg | 2 +- .../400-24px/headphones-fill.svg | 1 + .../material-icons/400-24px/headphones.svg | 1 + .../400-24px/manufacturing-fill.svg | 1 + .../material-icons/400-24px/manufacturing.svg | 2 +- .../material-icons/400-24px/movie-fill.svg | 1 + .../material-icons/400-24px/movie.svg | 1 + .../400-24px/quiet_time-fill.svg | 2 +- .../material-icons/400-24px/quiet_time.svg | 2 +- .../material-icons/400-24px/share-fill.svg | 2 +- .../material-icons/400-24px/share.svg | 2 +- .../styles/mastodon/components.scss | 99 +++++---- app/javascript/styles/mastodon/variables.scss | 2 + 27 files changed, 330 insertions(+), 245 deletions(-) delete mode 100644 app/javascript/mastodon/features/account_gallery/components/media_item.jsx create mode 100644 app/javascript/mastodon/features/account_gallery/components/media_item.tsx create mode 100644 app/javascript/material-icons/400-24px/headphones-fill.svg create mode 100644 app/javascript/material-icons/400-24px/headphones.svg create mode 100644 app/javascript/material-icons/400-24px/manufacturing-fill.svg create mode 100644 app/javascript/material-icons/400-24px/movie-fill.svg create mode 100644 app/javascript/material-icons/400-24px/movie.svg diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index ba54b7f903..35924008b5 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -11,6 +11,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { debounce } from 'lodash'; import { Blurhash } from 'mastodon/components/blurhash'; +import { formatTime } from 'mastodon/features/video'; import { autoPlayGif, displayMedia, useBlurhash } from '../initial_state'; @@ -57,7 +58,7 @@ class Item extends PureComponent { hoverToPlay () { const { attachment } = this.props; - return !this.getAutoPlay() && attachment.get('type') === 'gifv'; + return !this.getAutoPlay() && ['gifv', 'video'].includes(attachment.get('type')); } handleClick = (e) => { @@ -150,10 +151,15 @@ class Item extends PureComponent { /> ); - } else if (attachment.get('type') === 'gifv') { + } else if (['gifv', 'video'].includes(attachment.get('type'))) { const autoPlay = this.getAutoPlay(); + const duration = attachment.getIn(['meta', 'original', 'duration']); - badges.push(GIF); + if (attachment.get('type') === 'gifv') { + badges.push(GIF); + } else { + badges.push({formatTime(Math.floor(duration))}); + } thumbnail = (
@@ -167,6 +173,7 @@ class Item extends PureComponent { onClick={this.handleClick} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} + onLoadedData={this.handleImageLoad} autoPlay={autoPlay} playsInline loop diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 6c32fd245d..46926b4aae 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -449,7 +449,25 @@ class Status extends ImmutablePureComponent { } else if (status.get('media_attachments').size > 0) { const language = status.getIn(['translation', 'language']) || status.get('language'); - if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { + if (['image', 'gifv'].includes(status.getIn(['media_attachments', 0, 'type'])) || status.get('media_attachments').size > 1) { + media = ( + + {Component => ( + + )} + + ); + } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') { const attachment = status.getIn(['media_attachments', 0]); const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); @@ -501,24 +519,6 @@ class Status extends ImmutablePureComponent { )} ); - } else { - media = ( - - {Component => ( - - )} - - ); } } else if (status.get('spoiler_text').length === 0 && status.get('card')) { media = ( diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.jsx b/app/javascript/mastodon/features/account_gallery/components/media_item.jsx deleted file mode 100644 index 087e775753..0000000000 --- a/app/javascript/mastodon/features/account_gallery/components/media_item.jsx +++ /dev/null @@ -1,158 +0,0 @@ -import PropTypes from 'prop-types'; - -import classNames from 'classnames'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -import AudiotrackIcon from '@/material-icons/400-24px/music_note.svg?react'; -import PlayArrowIcon from '@/material-icons/400-24px/play_arrow.svg?react'; -import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; -import { Blurhash } from 'mastodon/components/blurhash'; -import { Icon } from 'mastodon/components/icon'; -import { autoPlayGif, displayMedia, useBlurhash } from 'mastodon/initial_state'; - -export default class MediaItem extends ImmutablePureComponent { - - static propTypes = { - attachment: ImmutablePropTypes.map.isRequired, - displayWidth: PropTypes.number.isRequired, - onOpenMedia: PropTypes.func.isRequired, - }; - - state = { - visible: displayMedia !== 'hide_all' && !this.props.attachment.getIn(['status', 'sensitive']) || displayMedia === 'show_all', - loaded: false, - }; - - handleImageLoad = () => { - this.setState({ loaded: true }); - }; - - handleMouseEnter = e => { - if (this.hoverToPlay()) { - e.target.play(); - } - }; - - handleMouseLeave = e => { - if (this.hoverToPlay()) { - e.target.pause(); - e.target.currentTime = 0; - } - }; - - hoverToPlay () { - return !autoPlayGif && ['gifv', 'video'].indexOf(this.props.attachment.get('type')) !== -1; - } - - handleClick = e => { - if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - - if (this.state.visible) { - this.props.onOpenMedia(this.props.attachment); - } else { - this.setState({ visible: true }); - } - } - }; - - render () { - const { attachment, displayWidth } = this.props; - const { visible, loaded } = this.state; - - const width = `${Math.floor((displayWidth - 4) / 3) - 4}px`; - const height = width; - const status = attachment.get('status'); - const title = status.get('spoiler_text') || attachment.get('description'); - - let thumbnail, label, icon, content; - - if (!visible) { - icon = ( - - - - ); - } else { - if (['audio', 'video'].includes(attachment.get('type'))) { - content = ( - {attachment.get('description')} - ); - - if (attachment.get('type') === 'audio') { - label = ; - } else { - label = ; - } - } else if (attachment.get('type') === 'image') { - const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0; - const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0; - const x = ((focusX / 2) + .5) * 100; - const y = ((focusY / -2) + .5) * 100; - - content = ( - {attachment.get('description')} - ); - } else if (attachment.get('type') === 'gifv') { - content = ( -
- {preview && preview.followers_count + preview.following_count > 0 && ( + {preview && + preview !== 'error' && + preview.followers_count + preview.following_count > 0 && ( +
+
+ +
+
+ + + ), + followingCount: preview.following_count, + followingCountDisplay: ( + + ), + }} + /> + +
+
+ )} + + {preview === 'error' && (
@@ -97,18 +126,8 @@ export const DomainBlockModal: React.FC<{
- ), - followingCount: preview.following_count, - followingCountDisplay: ( - - ), - }} + id='domain_block_modal.you_will_lose_relationships' + defaultMessage='You will lose all followers and people you follow from this server.' />
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 0dc4ccee80..b20934388c 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -222,6 +222,7 @@ "domain_block_modal.they_wont_know": "They won't know they've been blocked.", "domain_block_modal.title": "Block domain?", "domain_block_modal.you_will_lose_num_followers": "You will lose {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} followers}} and {followingCount, plural, one {{followingCountDisplay} person you follow} other {{followingCountDisplay} people you follow}}.", + "domain_block_modal.you_will_lose_relationships": "You will lose all followers and people you follow from this server.", "domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.", "domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.", "domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.", From a04433f995099854c06fbc7d02245a7d2a3677c0 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 26 Sep 2024 15:26:49 +0200 Subject: [PATCH 10/68] Add ability to view alt text by clicking the ALT badge in web UI (#32058) --- .../mastodon/components/alt_text_badge.tsx | 67 +++++++++++++++++++ .../mastodon/components/media_gallery.jsx | 7 +- .../account_gallery/components/media_item.tsx | 17 +++-- app/javascript/mastodon/locales/en.json | 1 + .../styles/mastodon/components.scss | 45 +++++++++++-- 5 files changed, 121 insertions(+), 16 deletions(-) create mode 100644 app/javascript/mastodon/components/alt_text_badge.tsx diff --git a/app/javascript/mastodon/components/alt_text_badge.tsx b/app/javascript/mastodon/components/alt_text_badge.tsx new file mode 100644 index 0000000000..99bec1ee51 --- /dev/null +++ b/app/javascript/mastodon/components/alt_text_badge.tsx @@ -0,0 +1,67 @@ +import { useState, useCallback, useRef } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import Overlay from 'react-overlays/Overlay'; +import type { + OffsetValue, + UsePopperOptions, +} from 'react-overlays/esm/usePopper'; + +const offset = [0, 4] as OffsetValue; +const popperConfig = { strategy: 'fixed' } as UsePopperOptions; + +export const AltTextBadge: React.FC<{ + description: string; +}> = ({ description }) => { + const anchorRef = useRef(null); + const [open, setOpen] = useState(false); + + const handleClick = useCallback(() => { + setOpen((v) => !v); + }, [setOpen]); + + const handleClose = useCallback(() => { + setOpen(false); + }, [setOpen]); + + return ( + <> + + + + {({ props }) => ( +
+
+

+ +

+

{description}

+
+
+ )} +
+ + ); +}; diff --git a/app/javascript/mastodon/components/media_gallery.jsx b/app/javascript/mastodon/components/media_gallery.jsx index 35924008b5..84cb4e04dc 100644 --- a/app/javascript/mastodon/components/media_gallery.jsx +++ b/app/javascript/mastodon/components/media_gallery.jsx @@ -10,6 +10,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { debounce } from 'lodash'; +import { AltTextBadge } from 'mastodon/components/alt_text_badge'; import { Blurhash } from 'mastodon/components/blurhash'; import { formatTime } from 'mastodon/features/video'; @@ -97,7 +98,7 @@ class Item extends PureComponent { } if (attachment.get('description')?.length > 0) { - badges.push(ALT); + badges.push(); } const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); @@ -156,9 +157,9 @@ class Item extends PureComponent { const duration = attachment.getIn(['meta', 'original', 'duration']); if (attachment.get('type') === 'gifv') { - badges.push(GIF); + badges.push(GIF); } else { - badges.push({formatTime(Math.floor(duration))}); + badges.push({formatTime(Math.floor(duration))}); } thumbnail = ( diff --git a/app/javascript/mastodon/features/account_gallery/components/media_item.tsx b/app/javascript/mastodon/features/account_gallery/components/media_item.tsx index 1a294a74a0..729e40a993 100644 --- a/app/javascript/mastodon/features/account_gallery/components/media_item.tsx +++ b/app/javascript/mastodon/features/account_gallery/components/media_item.tsx @@ -5,6 +5,7 @@ import classNames from 'classnames'; import HeadphonesIcon from '@/material-icons/400-24px/headphones-fill.svg?react'; import MovieIcon from '@/material-icons/400-24px/movie-fill.svg?react'; import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; +import { AltTextBadge } from 'mastodon/components/alt_text_badge'; import { Blurhash } from 'mastodon/components/blurhash'; import { Icon } from 'mastodon/components/icon'; import { formatTime } from 'mastodon/features/video'; @@ -77,11 +78,7 @@ export const MediaItem: React.FC<{ const badges = []; if (description && description.length > 0) { - badges.push( - - ALT - , - ); + badges.push(); } if (!visible) { @@ -156,13 +153,19 @@ export const MediaItem: React.FC<{ if (type === 'gifv') { badges.push( - + GIF , ); } else { badges.push( - + {formatTime(Math.floor(duration))} , ); diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index b20934388c..e86e300bcb 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "alt_text_badge.title": "Alt text", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", "audio.hide": "Hide audio", diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index f3464c83b7..8cb63e42e6 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -6971,14 +6971,14 @@ a.status-card { inset-inline-end: 8px; display: flex; gap: 2px; + pointer-events: none; } -.media-gallery__alt__label, -.media-gallery__gifv__label { - display: flex; - align-items: center; - justify-content: center; +.media-gallery__alt__label { + display: block; + text-align: center; color: $white; + border: 0; background: rgba($black, 0.65); backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%); padding: 3px 8px; @@ -6986,8 +6986,41 @@ a.status-card { font-size: 12px; font-weight: 700; z-index: 1; - pointer-events: none; line-height: 20px; + cursor: pointer; + pointer-events: auto; + + &--non-interactive { + pointer-events: none; + } +} + +.media-gallery__alt__popover { + background: rgba($black, 0.65); + backdrop-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%); + border-radius: 4px; + box-shadow: var(--dropdown-shadow); + padding: 16px; + min-width: 16em; + min-height: 2em; + max-width: 22em; + max-height: 30em; + overflow-y: auto; + + h4 { + font-size: 15px; + line-height: 20px; + font-weight: 500; + color: $white; + margin-bottom: 8px; + } + + p { + font-size: 15px; + line-height: 20px; + color: rgba($white, 0.85); + white-space: pre-line; + } } .attachment-list { From 89c39e7826bee92ebc537babfc4061bd4d98c8ba Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 26 Sep 2024 16:26:04 +0200 Subject: [PATCH 11/68] Fix scrollbar width (#32091) --- app/javascript/styles/mastodon/reset.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/app/javascript/styles/mastodon/reset.scss b/app/javascript/styles/mastodon/reset.scss index 5a4152826d..fc0305baf3 100644 --- a/app/javascript/styles/mastodon/reset.scss +++ b/app/javascript/styles/mastodon/reset.scss @@ -56,7 +56,6 @@ table { @supports not selector(::-webkit-scrollbar) { html { scrollbar-color: $action-button-color var(--background-border-color); - scrollbar-width: thin; } } From 106b22bd2dc2fca8561d36f849c80dd4a918ca2e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 26 Sep 2024 15:26:40 -0400 Subject: [PATCH 12/68] Use 1 column layout for form `ul` on narrow widths (#32112) --- app/javascript/styles/mastodon/forms.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 56f7b893f3..957a283522 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -312,6 +312,10 @@ code { ul { columns: 2; + + @media screen and (max-width: $mobile-breakpoint) { + columns: 1; + } } } From ee2d966080b4e293d07acedf9385786a939432c6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:27:13 +0200 Subject: [PATCH 13/68] Update dependency blurhash to v0.1.8 (#32114) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ed217ca146..e1ea677dfd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -134,7 +134,7 @@ GEM bindata (2.5.0) binding_of_caller (1.0.1) debug_inspector (>= 1.2.0) - blurhash (0.1.7) + blurhash (0.1.8) bootsnap (1.18.4) msgpack (~> 1.2) brakeman (6.2.1) From 513f187dafd8ff441479a6de12c61f8bb8d4c5bf Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 26 Sep 2024 21:27:57 +0200 Subject: [PATCH 14/68] =?UTF-8?q?Add=20=E2=80=9CA=20Mastodon=20update=20is?= =?UTF-8?q?=20available.=E2=80=9D=20message=20on=20admin=20dashboard=20for?= =?UTF-8?q?=20non-bugfix=20updates=20(#32106)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/lib/admin/system_check/software_version_check.rb | 6 ++++-- config/locales/en.yml | 3 +++ spec/lib/admin/system_check/software_version_check_spec.rb | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/lib/admin/system_check/software_version_check.rb b/app/lib/admin/system_check/software_version_check.rb index e142feddf0..e5cacfe354 100644 --- a/app/lib/admin/system_check/software_version_check.rb +++ b/app/lib/admin/system_check/software_version_check.rb @@ -14,14 +14,16 @@ class Admin::SystemCheck::SoftwareVersionCheck < Admin::SystemCheck::BaseCheck def message if software_updates.any?(&:urgent?) Admin::SystemCheck::Message.new(:software_version_critical_check, nil, admin_software_updates_path, true) - else + elsif software_updates.any?(&:patch_type?) Admin::SystemCheck::Message.new(:software_version_patch_check, nil, admin_software_updates_path) + else + Admin::SystemCheck::Message.new(:software_version_check, nil, admin_software_updates_path) end end private def software_updates - @software_updates ||= SoftwareUpdate.pending_to_a.filter { |update| update.urgent? || update.patch_type? } + @software_updates ||= SoftwareUpdate.pending_to_a end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 9c3bab6baa..bf45dff33a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -875,6 +875,9 @@ en: 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. diff --git a/spec/lib/admin/system_check/software_version_check_spec.rb b/spec/lib/admin/system_check/software_version_check_spec.rb index 1affaa3a96..8460d90668 100644 --- a/spec/lib/admin/system_check/software_version_check_spec.rb +++ b/spec/lib/admin/system_check/software_version_check_spec.rb @@ -51,8 +51,8 @@ RSpec.describe Admin::SystemCheck::SoftwareVersionCheck do Fabricate(:software_update, version: '99.99.99', type: 'major', urgent: false) end - it 'returns true' do - expect(check.pass?).to be true + it 'returns false' do + expect(check.pass?).to be false end end From c9b069996456fb79d41dd37d986673a07cef5187 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:34:46 +0200 Subject: [PATCH 15/68] New Crowdin Translations (automated) (#32121) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ca.json | 2 + app/javascript/mastodon/locales/da.json | 2 + app/javascript/mastodon/locales/de.json | 2 + app/javascript/mastodon/locales/en-GB.json | 3 + app/javascript/mastodon/locales/eo.json | 2 + app/javascript/mastodon/locales/es-AR.json | 2 + app/javascript/mastodon/locales/es-MX.json | 4 +- app/javascript/mastodon/locales/es.json | 2 + app/javascript/mastodon/locales/eu.json | 1 + app/javascript/mastodon/locales/fa.json | 5 + app/javascript/mastodon/locales/fi.json | 3 + app/javascript/mastodon/locales/fo.json | 2 + app/javascript/mastodon/locales/ga.json | 1 + app/javascript/mastodon/locales/gl.json | 2 + app/javascript/mastodon/locales/hu.json | 2 + app/javascript/mastodon/locales/io.json | 206 +++++++++++++++++++++ app/javascript/mastodon/locales/it.json | 3 + app/javascript/mastodon/locales/lt.json | 7 +- app/javascript/mastodon/locales/nl.json | 4 +- app/javascript/mastodon/locales/pl.json | 2 + app/javascript/mastodon/locales/pt-BR.json | 3 + app/javascript/mastodon/locales/sq.json | 2 + app/javascript/mastodon/locales/tr.json | 2 + app/javascript/mastodon/locales/uk.json | 3 + app/javascript/mastodon/locales/vi.json | 1 + app/javascript/mastodon/locales/zh-CN.json | 3 + app/javascript/mastodon/locales/zh-TW.json | 2 + config/locales/activerecord.io.yml | 6 + config/locales/ca.yml | 3 + config/locales/da.yml | 3 + config/locales/de.yml | 4 + config/locales/devise.io.yml | 10 + config/locales/doorkeeper.ga.yml | 1 + config/locales/doorkeeper.pt-BR.yml | 1 + config/locales/en-GB.yml | 1 + config/locales/es-AR.yml | 1 + config/locales/es-MX.yml | 1 + config/locales/es.yml | 1 + config/locales/fi.yml | 1 + config/locales/fo.yml | 1 + config/locales/ga.yml | 1 + config/locales/gl.yml | 7 +- config/locales/hu.yml | 1 + config/locales/it.yml | 4 + config/locales/lt.yml | 4 + config/locales/nl.yml | 3 + config/locales/nn.yml | 3 + config/locales/pl.yml | 4 + config/locales/pt-BR.yml | 1 + config/locales/simple_form.io.yml | 20 ++ config/locales/sq.yml | 3 + config/locales/tr.yml | 1 + config/locales/uk.yml | 4 + config/locales/zh-CN.yml | 4 + config/locales/zh-TW.yml | 3 + 55 files changed, 364 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 2c6dcba469..1cd643842c 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Límit de freqüència", "alert.unexpected.message": "S'ha produït un error inesperat.", "alert.unexpected.title": "Vaja!", + "alt_text_badge.title": "Text alternatiu", "announcement.announcement": "Anunci", "attachments_list.unprocessed": "(sense processar)", "audio.hide": "Amaga l'àudio", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "No sabran que són blocats.", "domain_block_modal.title": "Bloquem el domini?", "domain_block_modal.you_will_lose_num_followers": "Perdreu {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidors}} i {followingCount, plural, one {{followingCountDisplay} persona} other {{followingCountDisplay} persones}} que seguiu.", + "domain_block_modal.you_will_lose_relationships": "Perdreu seguidors i gent a qui seguiu d'aquest servidor.", "domain_block_modal.you_wont_see_posts": "No veureu ni les publicacions ni les notificacions dels usuaris d'aquest servidor.", "domain_pill.activitypub_lets_connect": "Us permet connectar i interactuar amb persones a Mastodon i també a d'altres apps socials.", "domain_pill.activitypub_like_language": "ActivityPub és el llenguatge que Mastodon parla amb altres xarxes socials.", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index e7d2bcaf80..8223177ab9 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Hastighedsbegrænset", "alert.unexpected.message": "En uventet fejl opstod.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Alt text", "announcement.announcement": "Bekendtgørelse", "attachments_list.unprocessed": "(ubehandlet)", "audio.hide": "Skjul lyd", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Vedkommende ser ikke den aktive blokering.", "domain_block_modal.title": "Blokér domæne?", "domain_block_modal.you_will_lose_num_followers": "Man vil miste {followersCount, plural, one {{followersCountDisplay} følger} other {{followersCountDisplay} følgere}} og {followingCount, plural, one {{followingCountDisplay} person, man følger} other {{followingCountDisplay} personer, man følger}}.", + "domain_block_modal.you_will_lose_relationships": "Alle følgere og personer som følges på denne server mistes.", "domain_block_modal.you_wont_see_posts": "Indlæg eller notifikationer fra brugere på denne server vises ikke.", "domain_pill.activitypub_lets_connect": "Det muliggør at komme i forbindelse og interagere med folk ikke kun på Mastodon, men også på tværs af forskellige sociale apps.", "domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", Mastodon taler med andre sociale netværk.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 2f8c89961a..30a55df05b 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Anfragelimit überschritten", "alert.unexpected.message": "Ein unerwarteter Fehler ist aufgetreten.", "alert.unexpected.title": "Oha!", + "alt_text_badge.title": "Bildbeschreibung", "announcement.announcement": "Ankündigung", "attachments_list.unprocessed": "(ausstehend)", "audio.hide": "Audio ausblenden", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Es wird nicht erkennbar sein, dass diese Domain blockiert wurde.", "domain_block_modal.title": "Domain blockieren?", "domain_block_modal.you_will_lose_num_followers": "Du wirst {followersCount, plural, one {{followersCountDisplay} Follower} other {{followersCountDisplay} Follower}} verlieren und {followingCount, plural, one {{followingCountDisplay} Profil} other {{followingCountDisplay} Profilen}} entfolgen.", + "domain_block_modal.you_will_lose_relationships": "Du wirst von diesem Server alle Follower und Profile, denen du dort folgst, verlieren.", "domain_block_modal.you_wont_see_posts": "Du wirst keine Beiträge oder Benachrichtigungen von Profilen auf diesem Server sehen.", "domain_pill.activitypub_lets_connect": "Somit kannst du dich nicht nur auf Mastodon mit Leuten verbinden und mit ihnen interagieren, sondern über alle sozialen Apps hinweg.", "domain_pill.activitypub_like_language": "ActivityPub ist sozusagen die Sprache, die Mastodon mit anderen sozialen Netzwerken spricht.", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index ee38b77554..b1d61ddd3d 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Rate limited", "alert.unexpected.message": "An unexpected error occurred.", "alert.unexpected.title": "Oops!", + "alt_text_badge.title": "Alt text", "announcement.announcement": "Announcement", "attachments_list.unprocessed": "(unprocessed)", "audio.hide": "Hide audio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Nobody from this server can follow you.", "domain_block_modal.they_wont_know": "They won't know they've been blocked.", "domain_block_modal.title": "Block domain?", + "domain_block_modal.you_will_lose_num_followers": "You will lose {followersCount, plural, one {{followersCountDisplay} follower} other {{followersCountDisplay} followers}} and {followingCount, plural, one {{followingCountDisplay} person you follow} other {{followingCountDisplay} people you follow}}.", + "domain_block_modal.you_will_lose_relationships": "You will lose all followers and people you follow from this server.", "domain_block_modal.you_wont_see_posts": "You won't see posts or notifications from users on this server.", "domain_pill.activitypub_lets_connect": "It lets you connect and interact with people not just on Mastodon, but across different social apps too.", "domain_pill.activitypub_like_language": "ActivityPub is like the language Mastodon speaks with other social networks.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 8139e8c76d..832bf9eda0 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Mesaĝkvante limigita", "alert.unexpected.message": "Neatendita eraro okazis.", "alert.unexpected.title": "Aj!", + "alt_text_badge.title": "Alt-teksto", "announcement.announcement": "Anoncoj", "attachments_list.unprocessed": "(neprilaborita)", "audio.hide": "Kaŝi aŭdion", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Ili ne scios, ke ili estas blokitaj.", "domain_block_modal.title": "Ĉu bloki la domajnon?", "domain_block_modal.you_will_lose_num_followers": "Vi perdos {followersCount, plural, one {{followersCountDisplay} sekvanton} other {{followersCountDisplay} sekvantojn}} kaj {followingCount, plural, one {{followingCountDisplay} homon, kiu vi sekvas} other {{followingCountDisplay} homojn, kiuj vi sekvas}}.", + "domain_block_modal.you_will_lose_relationships": "Vi perdos ĉiujn sekvantojn kaj homojn, kiujn vi sekvas de ĉi tiu servilo.", "domain_block_modal.you_wont_see_posts": "Vi ne vidos afiŝojn aŭ sciigojn de uzantoj sur ĉi tiu servilo.", "domain_pill.activitypub_lets_connect": "Ĝi ebligas vin konekti kaj interagi kun homoj ne nur sur Mastodon, sed ankaŭ tra diversaj sociaj apoj.", "domain_pill.activitypub_like_language": "ActivityPub estas kiel la lingvo kiun Mastodon parolas kun aliaj sociaj retoj.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 26a37e76b3..e0a4f0fc92 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Acción limitada", "alert.unexpected.message": "Ocurrió un error.", "alert.unexpected.title": "¡Epa!", + "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "[sin procesar]", "audio.hide": "Ocultar audio", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "No sabrán que fueron bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", + "domain_block_modal.you_will_lose_relationships": "Perderás a todos los seguidores y gente a la que sigas de este servidor.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con cuentas no solo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index dd3188c146..3948de6c32 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Tarifa limitada", "alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.title": "¡Ups!", + "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", @@ -221,7 +222,8 @@ "domain_block_modal.they_cant_follow": "Nadie de este servidor puede seguirte.", "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", - "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", + "domain_block_modal.you_will_lose_num_followers": "Vas a perder {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigas}}.", + "domain_block_modal.you_will_lose_relationships": "Perderás todos los seguidores y las personas que sigues de este servidor.", "domain_block_modal.you_wont_see_posts": "No verás publicaciones ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con personas no sólo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index aa282b4c5b..6e7ea9c9ec 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Tráfico limitado", "alert.unexpected.message": "Hubo un error inesperado.", "alert.unexpected.title": "¡Ups!", + "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sin procesar)", "audio.hide": "Ocultar audio", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "No sabrán que han sido bloqueados.", "domain_block_modal.title": "¿Bloquear dominio?", "domain_block_modal.you_will_lose_num_followers": "Perderás {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} y {followingCount, plural, one {{followingCountDisplay} persona a la que sigues} other {{followingCountDisplay} personas a las que sigues}}.", + "domain_block_modal.you_will_lose_relationships": "Perderás a todos los seguidores y gente a la que sigas de este servidor.", "domain_block_modal.you_wont_see_posts": "No verás mensajes ni notificaciones de usuarios en este servidor.", "domain_pill.activitypub_lets_connect": "Te permite conectar e interactuar con personas no sólo en Mastodon, sino también a través de diferentes aplicaciones sociales.", "domain_pill.activitypub_like_language": "ActivityPub es como el idioma que Mastodon habla con otras redes sociales.", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 35b869486b..63449e9342 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Abiadura mugatua", "alert.unexpected.message": "Ustekabeko errore bat gertatu da.", "alert.unexpected.title": "Ene!", + "alt_text_badge.title": "Testu alternatiboa", "announcement.announcement": "Iragarpena", "attachments_list.unprocessed": "(prozesatu gabe)", "audio.hide": "Ezkutatu audioa", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 583fd4ec5a..d510c2a6a4 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -85,9 +85,11 @@ "alert.rate_limited.title": "محدودیت تعداد", "alert.unexpected.message": "خطایی غیرمنتظره رخ داد.", "alert.unexpected.title": "ای وای!", + "alt_text_badge.title": "متن جایگزین", "announcement.announcement": "اعلامیه", "attachments_list.unprocessed": "(پردازش نشده)", "audio.hide": "نهفتن صدا", + "block_modal.remote_users_caveat": "ما از کارساز {domain} خواهیم خواست که به تصمیم شما احترام بگذارد. با این حال، تضمینی برای رعایت آن وجود ندارد زیرا برخی کارسازها ممکن است بلوک‌ها را به‌طور متفاوتی مدیریت کنند. فرسته‌های عمومی ممکن است همچنان برای کاربران که وارد نشده قابل مشاهده باشند.", "block_modal.show_less": "نمایش کم‌تر", "block_modal.show_more": "نمایش بیش‌تر", "block_modal.they_cant_mention": "نمی‌توانند نامتان را برده یا پی‌تان بگیرند.", @@ -220,7 +222,10 @@ "domain_block_modal.they_cant_follow": "هیچ‌کسی از این کارساز نمی‌تواند پیتان بگیرد.", "domain_block_modal.they_wont_know": "نخواهند دانست که مسدود شده‌اند.", "domain_block_modal.title": "انسداد دامنه؟", + "domain_block_modal.you_will_lose_relationships": "شما تمام پیگیرکنندگان و افرادی که از این کارساز پیگیری می‌کنید را از دست خواهید داد.", "domain_block_modal.you_wont_see_posts": "فرسته‌ها یا آگاهی‌ها از کاربران روی این کارساز را نخواهید دید.", + "domain_pill.activitypub_lets_connect": "این به شما اجازه می‌دهد تا نه تنها در ماستودون، بلکه در برنامه‌های اجتماعی مختلف نیز با افراد ارتباط برقرار کرده و تعامل داشته باشید.", + "domain_pill.activitypub_like_language": "ActivityPub مانند زبانی است که ماستودون با دیگر شبکه‌های اجتماعی صحبت می‌کند.", "domain_pill.server": "کارساز", "domain_pill.their_handle": "شناسه‌اش:", "domain_pill.their_server": "خانهٔ رقمیش. جایی که همهٔ فرسته‌هایش می‌زیند.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4caec3159f..0a37a96abb 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Pyyntömäärää rajoitettu", "alert.unexpected.message": "Tapahtui odottamaton virhe.", "alert.unexpected.title": "Hups!", + "alt_text_badge.title": "Vaihtoehtoinen teksti", "announcement.announcement": "Tiedote", "attachments_list.unprocessed": "(käsittelemätön)", "audio.hide": "Piilota ääni", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Kukaan tältä palvelimelta ei voi seurata sinua.", "domain_block_modal.they_wont_know": "Hän ei saa tietää tulleensa estetyksi.", "domain_block_modal.title": "Estetäänkö verkkotunnus?", + "domain_block_modal.you_will_lose_num_followers": "Menetät {followersCount, plural, one {{followersCountDisplay} seuraajasi} other {{followersCountDisplay} seuraajaasi}} ja {followingCount, plural, one {{followingCountDisplay} seurattusi} other {{followingCountDisplay} seurattuasi}}.", + "domain_block_modal.you_will_lose_relationships": "Menetät kaikki tämän palvelimen seuraajasi ja seurattusi.", "domain_block_modal.you_wont_see_posts": "Et enää näe julkaisuja etkä ilmoituksia tämän palvelimen käyttäjiltä.", "domain_pill.activitypub_lets_connect": "Sen avulla voit muodostaa yhteyden ja olla vuorovaikutuksessa ihmisten kanssa, ei vain Mastodonissa vaan myös muissa sosiaalisissa sovelluksissa.", "domain_pill.activitypub_like_language": "ActivityPub on kuin kieli, jota Mastodon puhuu muiden sosiaalisten verkostojen kanssa.", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 3165c10153..70908c62dc 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Avmarkaður títtleiki", "alert.unexpected.message": "Ein óvæntaður feilur kom fyri.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Annar tekstur", "announcement.announcement": "Kunngerð", "attachments_list.unprocessed": "(óviðgjørt)", "audio.hide": "Fjal ljóð", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Tey vita ikki, at tey eru bannað.", "domain_block_modal.title": "Banna økisnavni?", "domain_block_modal.you_will_lose_num_followers": "Tú missir {followersCount, plural, one {{followersCountDisplay} fylgjara} other {{followersCountDisplay} fylgjarar}} og {followingCount, plural, one {{followingCountDisplay} persón, sum tú fylgir} other {{followingCountDisplay} persónar, sum tú fylgir}}.", + "domain_block_modal.you_will_lose_relationships": "Tú fer at missa allar fylgjarar og øll tey, tú fylgir á hesum ambætaranum.", "domain_block_modal.you_wont_see_posts": "Tú sært ongar postar ella boð frá brúkarum á hesum ambætara.", "domain_pill.activitypub_lets_connect": "Tað letur teg fáa samband og samvirka við fólki ikki bara á Mastodon, men á øðrum sosialum appum eisini.", "domain_pill.activitypub_like_language": "ActivityPub er málið, sum Mastodon tosar við onnur sosial netverk.", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 2161591dcd..6d64c6f712 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -221,6 +221,7 @@ "domain_block_modal.they_cant_follow": "Ní féidir le duine ar bith ón bhfreastalaí seo tú a leanúint.", "domain_block_modal.they_wont_know": "Ní bheidh a fhios acu go bhfuil bac orthu.", "domain_block_modal.title": "Blocáil fearann?", + "domain_block_modal.you_will_lose_num_followers": "Caillfidh tú {followersCount, plural, one {{followersCountDisplay} leantóir} two {{followersCountDisplay} leantóirí} few {{followersCountDisplay} leantóirí} many {{followersCountDisplay} leantóirí} other {{followersCountDisplay} leantóirí}} agus {followingCount, plural, one {{followingCountDisplay} duine atá á leanúint agat} two {{followingCountDisplay} daoine atá á leanúint agat} few {{followingCountDisplay} daoine atá á leanúint agat} many {{followingCountDisplay} daoine atá á leanúint agat} other {{followingCountDisplay} daoine atá á leanúint agat}}.", "domain_block_modal.you_wont_see_posts": "Ní fheicfidh tú postálacha nó fógraí ó úsáideoirí ar an bhfreastalaí seo.", "domain_pill.activitypub_lets_connect": "Ligeann sé duit ceangal agus idirghníomhú le daoine, ní hamháin ar Mastodon, ach thar aipeanna sóisialta éagsúla freisin.", "domain_pill.activitypub_like_language": "Tá GníomhaíochtPub cosúil leis an teanga a labhraíonn Mastodon le líonraí sóisialta eile.", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index aa3a78fce8..c2b645ed0f 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Límite de intentos", "alert.unexpected.message": "Aconteceu un fallo non agardado.", "alert.unexpected.title": "Vaites!", + "alt_text_badge.title": "Texto Alt", "announcement.announcement": "Anuncio", "attachments_list.unprocessed": "(sen procesar)", "audio.hide": "Agochar audio", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Non saberá que a bloqueaches.", "domain_block_modal.title": "Bloquear dominio?", "domain_block_modal.you_will_lose_num_followers": "Vas perder {followersCount, plural, one {{followersCountDisplay} seguidora} other {{followersCountDisplay} seguidoras}} e {followingCount, plural, one {{followingCountDisplay} persoa que segues} other {{followingCountDisplay} persoas que segues}}.", + "domain_block_modal.you_will_lose_relationships": "Vas perder todas as seguidoras e seguimentos a persoas deste servidor.", "domain_block_modal.you_wont_see_posts": "Non verás publicacións ou notificacións das usuarias deste servidor.", "domain_pill.activitypub_lets_connect": "Permíteche conectar e interactuar con persoas non só de Mastodon, se non tamén con outras sociais.", "domain_pill.activitypub_like_language": "ActivityPub é algo así como o idioma que Mastodon fala con outras redes sociais.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 2e48cb626d..34a9949afd 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -221,6 +221,8 @@ "domain_block_modal.they_cant_follow": "Erről a kiszolgálóról senki sem követhet.", "domain_block_modal.they_wont_know": "Nem fogja tudni, hogy letiltották.", "domain_block_modal.title": "Letiltsuk a domaint?", + "domain_block_modal.you_will_lose_num_followers": "El fogsz veszíteni {followersCount, plural, one {{followersCountDisplay} követőt} other {{followersCountDisplay} követőt}} és {followingCount, plural, one {{followingCountDisplay} követett személyt} other {{followingCountDisplay} követett személyt}}.", + "domain_block_modal.you_will_lose_relationships": "Minden követőt és követett személyt el fogsz veszíteni erről a kiszolgálóról.", "domain_block_modal.you_wont_see_posts": "Nem látsz majd bejegyzéseket vagy értesítéseket ennek a kiszolgálónak a felhasználóitól.", "domain_pill.activitypub_lets_connect": "Lehetővé teszi, hogy kapcsolatba lépj nem csak a Mastodonon, hanem a más közösségi alkalmazásokon lévő emberekkel is.", "domain_pill.activitypub_like_language": "Az ActivityPub olyan mint egy nyelv, amelyet a Mastodon a más közösségi hálózatokkal való kommunikációra használ.", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index aa284685e7..b47590a64c 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -1,6 +1,7 @@ { "about.blocks": "Jerata servili", "about.contact": "Kontaktajo:", + "about.disclaimer": "Mastodon esas libera, publikfonta e komercmarko di Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Expliko nedisponebla", "about.domain_blocks.preamble": "Mastodon generale permisas on vidar kontenajo e interagar kun uzanti de irga altra servilo en fediverso. Existas eceptioni quo facesis che ca partikulara servilo.", "about.domain_blocks.silenced.explanation": "On generale ne vidar profili e kontenajo de ca servilo, se on ne reale trovar o voluntale juntar per sequar.", @@ -10,6 +11,7 @@ "about.not_available": "Ca informo ne igesis che ca servilo.", "about.powered_by": "Necentraligita sociala ret quo povigesas da {mastodon}", "about.rules": "Servilreguli", + "account.account_note_header": "Personala noto", "account.add_or_remove_from_list": "Insertez o removez de listi", "account.badges.bot": "Boto", "account.badges.group": "Grupo", @@ -29,9 +31,12 @@ "account.featured_tags.last_status_never": "Nula posti", "account.featured_tags.title": "Estalita hashtagi di {name}", "account.follow": "Sequar", + "account.follow_back": "Anke sequez", "account.followers": "Sequanti", "account.followers.empty": "Nulu sequas ca uzanto til nun.", + "account.followers_counter": "{count, plural,one {{counter} sequanto} other {{counter} sequanti}}", "account.following": "Sequata", + "account.following_counter": "{count, plural,one {{counter} sequato} other {{counter} sequati}}", "account.follows.empty": "Ca uzanto ne sequa irgu til nun.", "account.go_to_profile": "Irez al profilo", "account.hide_reblogs": "Celez repeti de @{name}", @@ -47,6 +52,7 @@ "account.mute_notifications_short": "Silencigez avizi", "account.mute_short": "Silencigez", "account.muted": "Silencigata", + "account.mutual": "Mutuala", "account.no_bio": "Deskriptajo ne provizesis.", "account.open_original_page": "Apertez originala pagino", "account.posts": "Mesaji", @@ -56,6 +62,7 @@ "account.requested_follow": "{name} demandis sequar tu", "account.share": "Partigez profilo di @{name}", "account.show_reblogs": "Montrez repeti de @{name}", + "account.statuses_counter": "{count, plural,one {{counter} mesajo} other {{counter} mesaji}}", "account.unblock": "Desblokusar @{name}", "account.unblock_domain": "Desblokusar {domain}", "account.unblock_short": "Desblokusar", @@ -78,10 +85,21 @@ "alert.rate_limited.title": "Demandi limitizita", "alert.unexpected.message": "Neexpektita eroro eventis.", "alert.unexpected.title": "Problemo!", + "alt_text_badge.title": "Alternativa texto", "announcement.announcement": "Anunco", "attachments_list.unprocessed": "(neprocedita)", "audio.hide": "Celez audio", + "block_modal.remote_users_caveat": "Ni questionos {domain} di la servilo por respektar vua decido. Publika posti forsan ankore estas videbla a neenirinta uzanti.", + "block_modal.show_less": "Montrar mine", + "block_modal.show_more": "Montrar plue", + "block_modal.they_cant_mention": "Oli ne povas mencionar o sequar vu.", + "block_modal.they_cant_see_posts": "Oli ne povas vidar vua mesaji e vu ne vidos vidar olia.", + "block_modal.they_will_know": "Oli povas vidar ke oli esas blokusita.", + "block_modal.title": "Blokusar uzanto?", + "block_modal.you_wont_see_mentions": "Vu ne vidos mesaji qua mencionas oli.", "boost_modal.combo": "Vu povas pulsar {combo} por omisar co venontafoye", + "boost_modal.reblog": "Ka repetar posto?", + "boost_modal.undo_reblog": "Ka retrorepetar posto?", "bundle_column_error.copy_stacktrace": "Kopierorraporto", "bundle_column_error.error.body": "La demandita pagino ne povas strukturigesar. Forsan ol esas eroro en kodexo hike o vidilkoncilieblesproblemo.", "bundle_column_error.error.title": "Ach!", @@ -138,30 +156,47 @@ "compose_form.lock_disclaimer.lock": "klefagesas", "compose_form.placeholder": "Quo esas en tua spirito?", "compose_form.poll.duration": "Votpostoduro", + "compose_form.poll.multiple": "Multopla selekteso", + "compose_form.poll.option_placeholder": "Selektato {number}", + "compose_form.poll.single": "Selektez un", "compose_form.poll.switch_to_multiple": "Chanjez votposto por permisar multiselektaji", "compose_form.poll.switch_to_single": "Chanjez votposto por permisar una selektajo", + "compose_form.poll.type": "Stilo", + "compose_form.publish": "Posto", "compose_form.publish_form": "Publish", + "compose_form.reply": "Respondez", + "compose_form.save_changes": "Aktualigez", "compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Kontenajaverto (selektebla)", "confirmation_modal.cancel": "Anulez", "confirmations.block.confirm": "Restriktez", "confirmations.delete.confirm": "Efacez", "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete.title": "Ka efacar posto?", "confirmations.delete_list.confirm": "Efacez", "confirmations.delete_list.message": "Ka vu certe volas netempale efacar ca listo?", + "confirmations.delete_list.title": "Ka efacar listo?", "confirmations.discard_edit_media.confirm": "Efacez", "confirmations.discard_edit_media.message": "Vu havas nesparita chanji di mediodeskript o prevido, vu volas jus efacar?", "confirmations.edit.confirm": "Modifikez", "confirmations.edit.message": "Modifikar nun remplasos la mesajo quon vu nune skribas. Ka vu certe volas procedar?", + "confirmations.edit.title": "Ka remplasar posto?", "confirmations.logout.confirm": "Ekirez", "confirmations.logout.message": "Ka tu certe volas ekirar?", + "confirmations.logout.title": "Ka ekirar?", "confirmations.mute.confirm": "Silencigez", "confirmations.redraft.confirm": "Efacez e riskisez", "confirmations.redraft.message": "Ka vu certe volas efacar ca posto e riskisigar ol? Favoriziti e repeti esos perdita, e respondi al posto originala esos orfanigita.", + "confirmations.redraft.title": "Ka efacar & riskisar posto?", "confirmations.reply.confirm": "Respondez", "confirmations.reply.message": "Respondar nun remplos mesajo quon vu nun igas. Ka vu certe volas durar?", + "confirmations.reply.title": "Ka remplasar posto?", "confirmations.unfollow.confirm": "Desequez", "confirmations.unfollow.message": "Ka vu certe volas desequar {name}?", + "confirmations.unfollow.title": "Ka retrosequar uzanto?", + "content_warning.hide": "Celez posto", + "content_warning.show": "Montrez nur", "conversation.delete": "Efacez konverso", "conversation.mark_as_read": "Markizez quale lektita", "conversation.open": "Videz konverso", @@ -181,6 +216,28 @@ "dismissable_banner.explore_statuses": "Yen posti del tota reto sociala qui esas populara hodie. Posti plu nova kun plu repeti e favoriziti esas rangizita plu alte.", "dismissable_banner.explore_tags": "Ca hashtagi bezonas plu famoza inter personi che ca e altra servili di la necentraligita situo nun.", "dismissable_banner.public_timeline": "Yen la posti maxim recenta da personi che la reto sociala quin personi che {domain} sequas.", + "domain_block_modal.block": "Blokusez servilo", + "domain_block_modal.block_account_instead": "Blokusez @{name} vice", + "domain_block_modal.they_can_interact_with_old_posts": "Personi de ca servilo povas interagar kun vua desnova posti.", + "domain_block_modal.they_cant_follow": "Nulu de ca servilo povas sequar vu.", + "domain_block_modal.they_wont_know": "Lu ne savos ke lu blokusesis.", + "domain_block_modal.title": "Ka blokusar domeno?", + "domain_block_modal.you_will_lose_num_followers": "Vu desganos {followersCount, plural, one {{followersCountDisplay} sequanto} other {{followersCountDisplay} sequanti}} e {followingCount, plural, one {{followingCountDisplay} persono quan vu sequas} other {{followingCountDisplay} personi quan vu sequas}}.", + "domain_block_modal.you_will_lose_relationships": "Vu desganos omna sequanti e sequati de ca servilo.", + "domain_block_modal.you_wont_see_posts": "Vu ne vidos postoi o savigi de uzanti en ca servilo.", + "domain_pill.activitypub_lets_connect": "Ol povigas vu kuneskas e interagar kun personi ne nur sur Mastodon, o anke kun dessama socia softwari.", + "domain_pill.activitypub_like_language": "ActivityPub esas kam linguo quan Mastodon parolas kun altra socia reti.", + "domain_pill.server": "Servilo", + "domain_pill.their_handle": "Lua nomo:", + "domain_pill.their_server": "Lua komputala hemo, e havas omna lua posti.", + "domain_pill.their_username": "Lua unika identesilo sur lua servilo. Posible trovar uzanti kun sama uzantonomo sur dessama servili.", + "domain_pill.username": "Uzantonomo", + "domain_pill.whats_in_a_handle": "Quo esas nomo?", + "domain_pill.who_they_are": "Pro ke nomo esas deskripto di ulu, vu povas interagar kun personi tra socia interreto kun .", + "domain_pill.who_you_are": "Pro ke vua nomo esas deskripto pri vu e vua situo, personi povas interagar kun vu tra socia interreto kun .", + "domain_pill.your_handle": "Vua nomo:", + "domain_pill.your_server": "Vua komputerala hemo qua havas omna vua posti. On povas transferar a altra servili ulatempe e anke adportar vua sequanti.", + "domain_pill.your_username": "Vua unika identesilo sur lua servilo. Posible trovar uzanti kun sama uzantonomo sur dessama servili.", "embed.instructions": "Embed this status on your website by copying the code below.", "embed.preview": "Co esas quon ol semblos tale:", "emoji_button.activity": "Ago", @@ -217,6 +274,7 @@ "empty_column.list": "There is nothing in this list yet.", "empty_column.lists": "Vu ne havas irga listi til nun. Kande vu kreas talo, ol montresos hike.", "empty_column.mutes": "Vu ne silencigis irga uzanti til nun.", + "empty_column.notification_requests": "Finis. Kande vu recevas nova savigi, oli aparos hike segun vua preferaji.", "empty_column.notifications": "Tu havas ankore nula savigo. Komunikez kun altri por debutar la konverso.", "empty_column.public": "Esas nulo hike! Skribez ulo publike, o manuale sequez uzeri de altra instaluri por plenigar ol.", "error.unexpected_crash.explanation": "Pro eroro en nia kodexo o vidilkonciliebloproblemo, ca pagino ne povas korekte montresar.", @@ -247,12 +305,30 @@ "filter_modal.select_filter.subtitle": "Usez disponebla grupo o kreez novajo", "filter_modal.select_filter.title": "Filtragez ca posto", "filter_modal.title.status": "Filtragez posto", + "filter_warning.matches_filter": "Sama kam filtrilo \"{title}\"", + "filtered_notifications_banner.pending_requests": "De {count, plural,=0 {nulu} one {1 persono} other {# personi}} quan vu forsan konocas", + "filtered_notifications_banner.title": "Filtrilita savigi", "firehose.all": "Omno", "firehose.local": "Ca servilo", "firehose.remote": "Altra servili", "follow_request.authorize": "Yurizar", "follow_request.reject": "Refuzar", "follow_requests.unlocked_explanation": "Quankam vua konto ne klefklozesis, la {domain} laborero pensas ke vu forsan volas kontralar sequodemandi de ca konti manuale.", + "follow_suggestions.curated_suggestion": "Selektato de jeranto", + "follow_suggestions.dismiss": "Ne montrez pluse", + "follow_suggestions.featured_longer": "Selektesis da la grupo di {domain}", + "follow_suggestions.friends_of_friends_longer": "Populara inter personi quan vu sequas", + "follow_suggestions.hints.featured": "Ca profilo selektesis da la grupo di {domain}.", + "follow_suggestions.hints.friends_of_friends": "Ca profilo esas populara inter personi quan vu sequas.", + "follow_suggestions.hints.most_followed": "Vua profilo esas un de maxim sequita sur {domain}.", + "follow_suggestions.hints.most_interactions": "Ca profilo recente populareskis sur {domain}.", + "follow_suggestions.hints.similar_to_recently_followed": "Ca profilo esas simila a la profili quan vu recente sequis.", + "follow_suggestions.personalized_suggestion": "Personalita sugestato", + "follow_suggestions.popular_suggestion": "Populara sugestato", + "follow_suggestions.popular_suggestion_longer": "Populara sur {domain}", + "follow_suggestions.similar_to_recently_followed_longer": "Simila a profili quan vu recente sequis", + "follow_suggestions.view_all": "Videz omno", + "follow_suggestions.who_to_follow": "Sequindo", "followed_tags": "Hashtagi sequita", "footer.about": "Pri co", "footer.directory": "Profilcheflisto", @@ -279,6 +355,14 @@ "hashtag.follow": "Sequez hashtago", "hashtag.unfollow": "Desequez hashtago", "hashtags.and_other": "…e {count, plural, one {# plusa}other {# plusa}}", + "hints.profiles.followers_may_be_missing": "Sequanti di ca profilo forsan ne esas hike.", + "hints.profiles.follows_may_be_missing": "Sequati di ca profilo forsan ne esas hike.", + "hints.profiles.posts_may_be_missing": "Kelka posti sur ca profilo forsan ne esas hike.", + "hints.profiles.see_more_followers": "Vidar plu multa sequanti sur {domain}", + "hints.profiles.see_more_follows": "Vidar plu multa sequati sur {domain}", + "hints.profiles.see_more_posts": "Vidar plu multa posti sur {domain}", + "hints.threads.replies_may_be_missing": "Respondi de altra servili forsan ne esas hike.", + "hints.threads.see_more": "Vidar plu multa demandi sur {domain}", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", "home.hide_announcements": "Celez anunci", @@ -286,6 +370,17 @@ "home.pending_critical_update.link": "Vidar aktualigaji", "home.pending_critical_update.title": "Sekuresala aktualigajo gravega disponebla!", "home.show_announcements": "Montrez anunci", + "ignore_notifications_modal.disclaimer": "Mastodon ne povas savigar uzanti ke vu ignoris olia savigi. Ignorar savigi ne cesos ipse mesaji sendesar.", + "ignore_notifications_modal.filter_instead": "Filtrar vice", + "ignore_notifications_modal.filter_to_act_users": "Vu povos aceptar, refuzar o raportar uzanti", + "ignore_notifications_modal.filter_to_avoid_confusion": "Filtro helpas evitar posibla konfuzo", + "ignore_notifications_modal.filter_to_review_separately": "Vu povas kontrolar filtrita savigi separe", + "ignore_notifications_modal.ignore": "Ignorez savigi", + "ignore_notifications_modal.limited_accounts_title": "Ka ignorar savigi de jerita konti?", + "ignore_notifications_modal.new_accounts_title": "Ka ignorar savigi de nova konti?", + "ignore_notifications_modal.not_followers_title": "Ka ignorar savigi de personi qua ne sequas vu?", + "ignore_notifications_modal.not_following_title": "Ka ignorar savigi de personi quan vu ne sequas?", + "ignore_notifications_modal.private_mentions_title": "Ka ignorar savigi de nekonocita privata mencionii?", "interaction_modal.description.favourite": "Kun konto che Mastodon, vu povas favorizar ca posto por savigar la autoro ke vu prizas ol e sparar ol por pose.", "interaction_modal.description.follow": "Per konto che Mastodon, vu povas sequar {name} por ganar ola posti en vua hemniuzeto.", "interaction_modal.description.reblog": "Per konto che Mastodon, vu povas repetar ca posti por dissemar lo a vua propra sequati.", @@ -341,9 +436,13 @@ "lightbox.close": "Klozar", "lightbox.next": "Nexta", "lightbox.previous": "Antea", + "lightbox.zoom_in": "Grandigez a reala grandeso", + "lightbox.zoom_out": "Grandigez por fitigar", "limited_account_hint.action": "Jus montrez profilo", "limited_account_hint.title": "Ca profilo celesas dal jereri di {domain}.", "link_preview.author": "Da {name}", + "link_preview.more_from_author": "Plua de {name}", + "link_preview.shares": "{count, plural,one {{counter} posto} other {{counter} posti}}", "lists.account.add": "Insertez a listo", "lists.account.remove": "Efacez de listo", "lists.delete": "Efacez listo", @@ -360,8 +459,19 @@ "lists.subheading": "Vua listi", "load_pending": "{count, plural, one {# nova kozo} other {# nova kozi}}", "loading_indicator.label": "Kargante…", + "media_gallery.hide": "Celez", "moved_to_account_banner.text": "Vua konto {disabledAccount} es nune desaktiva pro ke vu movis a {movedToAccount}.", + "mute_modal.hide_from_notifications": "Celez de savigi", + "mute_modal.hide_options": "Celez preferaji", + "mute_modal.indefinite": "Til me retrosilencigas lu", + "mute_modal.show_options": "Montrez preferaji", + "mute_modal.they_can_mention_and_follow": "Lu povas mencionar e sequar vu, ma vu ne vidos lu.", + "mute_modal.they_wont_know": "Lu ne savos ke lu silencigesis.", + "mute_modal.title": "Ka silencigar uzanto?", + "mute_modal.you_wont_see_mentions": "Vu ne vidos posti qua mencionas lu.", + "mute_modal.you_wont_see_posts": "Lu ankore povas vidar vua posti, ma vu ne vidos lua.", "navigation_bar.about": "Pri co", + "navigation_bar.administration": "Administro", "navigation_bar.advanced_interface": "Apertez per retintervizajo", "navigation_bar.blocks": "Blokusita uzeri", "navigation_bar.bookmarks": "Libromarki", @@ -378,6 +488,7 @@ "navigation_bar.follows_and_followers": "Sequati e sequanti", "navigation_bar.lists": "Listi", "navigation_bar.logout": "Ekirar", + "navigation_bar.moderation": "Jero", "navigation_bar.mutes": "Celita uzeri", "navigation_bar.opened_in_classic_interface": "Posti, konti e altra pagini specifika apertesas en la retovidilo klasika.", "navigation_bar.personal": "Personala", @@ -388,20 +499,71 @@ "navigation_bar.security": "Sekureso", "not_signed_in_indicator.not_signed_in": "Vu mustas enirar por acesar ca moyeno.", "notification.admin.report": "{name} raportizis {target}", + "notification.admin.report_account": "{name} raportis {count, plural,one {1 posto} other {# posti}} de {target} pro {category}", + "notification.admin.report_account_other": "{name} raportis {count, plural,one {1 posto} other {# posti}} de {target}", + "notification.admin.report_statuses": "{name} raportis {target} pro {category}", + "notification.admin.report_statuses_other": "{name} raportis {target}", "notification.admin.sign_up": "{name} registresis", + "notification.admin.sign_up.name_and_others": "{name} e {count, plural,one {# altru} other {#altri}} enrejistris", "notification.favourite": "{name} favorizis tua mesajo", + "notification.favourite.name_and_others_with_link": "{name} e {count, plural,one {# altru} other {# altri}} favorizis vua posto", "notification.follow": "{name} sequeskis tu", + "notification.follow.name_and_others": "{name} e {count, plural,one {# altru} other {#altri}} sequis vu", "notification.follow_request": "{name} demandas sequar vu", + "notification.follow_request.name_and_others": "{name} e {count, plural,one {# altru} other {# altri}} volas sequar vu", + "notification.label.mention": "Mencionez", + "notification.label.private_mention": "Privata menciono", + "notification.label.private_reply": "Privata respondo", + "notification.label.reply": "Respondez", + "notification.mention": "Mencionez", + "notification.moderation-warning.learn_more": "Lernez pluse", + "notification.moderation_warning": "Vu recevis jeraverto", + "notification.moderation_warning.action_delete_statuses": "Kelka vua posti efacesis.", + "notification.moderation_warning.action_disable": "Vua konto estas desaktivigita.", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Kelka vua posti markizesis quale sentoza.", + "notification.moderation_warning.action_none": "Vua konto recevis jeraverto.", + "notification.moderation_warning.action_sensitive": "Vua posti markizesos quale sentoza pos nun.", + "notification.moderation_warning.action_silence": "Vua konto limitizesis.", + "notification.moderation_warning.action_suspend": "Vua konto restriktesis.", "notification.own_poll": "Vua votposto finigis", + "notification.poll": "Votposto quan vu partoprenis finis", "notification.reblog": "{name} repetis tua mesajo", + "notification.reblog.name_and_others_with_link": "{name} e {count, plural,one {# altru} other {#altri}} repetis vua posto", + "notification.relationships_severance_event": "Desganis konekteso kun {name}", + "notification.relationships_severance_event.account_suspension": "Administranto de {from} restriktis {target}, do vu ne povas plue recevar novaji de lu o interagar kun lu.", + "notification.relationships_severance_event.domain_block": "Administranto de {from} blokusis {target}, e anke {followersCount} de vua sequanti e {followingCount, plural, one {# konto} other {# konti}} quan vu sequas.", + "notification.relationships_severance_event.learn_more": "Lernez pluse", + "notification.relationships_severance_event.user_domain_block": "Vu blokusis {target}, do efacis {followersCount} de vua sequanti e {followingCount, plural, one {# konto} other {#konti}} quan vu sequis.", "notification.status": "{name} nove postigis", "notification.update": "{name} modifikis posto", + "notification_requests.accept": "Aceptez", + "notification_requests.accept_multiple": "{count, plural, one {Aceptar # demando…} other {Aceptar # demandi…}}", + "notification_requests.confirm_accept_multiple.button": "{count, plural, one {Aceptar demando} other {Aceptar demandi}}", + "notification_requests.confirm_accept_multiple.message": "Vu aceptos {count, plural, one {1 savigdemando} other {# savigdemandi}}. Ka vu certe volas durar?", + "notification_requests.confirm_accept_multiple.title": "Ka aceptar savigdemandi?", + "notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Ignorez demando} other {Ignorez demandi}}", + "notification_requests.confirm_dismiss_multiple.message": "Vu ignoros {count, plural, one {1 savigdemando} other {# savigdemandi}}. Vu ne povas facile ganar {count, plural, one {ol} other {oli}} pluse. Ka vu esas certe ke vu volas durar?", + "notification_requests.confirm_dismiss_multiple.title": "Ka ignorar savigdemandi?", + "notification_requests.dismiss": "Ignorez", + "notification_requests.dismiss_multiple": "{count, plural,one {Ignorez # demando…} other {Ignorez # demandi…}}", + "notification_requests.edit_selection": "Modifikez", + "notification_requests.exit_selection": "Finas", + "notification_requests.explainer_for_limited_account": "Savigi de ca konto filtresis pro ke la konto limitizesis da jeranto.", + "notification_requests.explainer_for_limited_remote_account": "Savigi de ca konto filtresis pro ke la konto o olua servilo limitizesis da jeranto.", + "notification_requests.maximize": "Parmontrez", + "notification_requests.minimize_banner": "Celez banero di filtrita savigi", + "notification_requests.notifications_from": "Savigi de {name}", + "notification_requests.title": "Filtrita savigi", + "notification_requests.view": "Videz savigi", "notifications.clear": "Efacar savigi", "notifications.clear_confirmation": "Ka tu esas certa, ke tu volas efacar omna tua savigi?", + "notifications.clear_title": "Ka efacar savigi?", "notifications.column_settings.admin.report": "Nova raporti:", "notifications.column_settings.admin.sign_up": "Nova registranti:", "notifications.column_settings.alert": "Desktopavizi", "notifications.column_settings.favourite": "Favoriziti:", + "notifications.column_settings.filter_bar.advanced": "Montrez omna kategorii", + "notifications.column_settings.filter_bar.category": "Rapidfiltrilbaro", "notifications.column_settings.follow": "Nova sequanti:", "notifications.column_settings.follow_request": "Nova sequodemandi:", "notifications.column_settings.mention": "Mencioni:", @@ -427,6 +589,23 @@ "notifications.permission_denied": "Desktopavizi esas nedisplonebla pro antea refuzita vidilpermisdemando", "notifications.permission_denied_alert": "Desktopavizi ne povas aktivigesar pro ke vidilpermiso refuzesis", "notifications.permission_required": "Desktopavizi esas nedisplonebla pro ke bezonata permiso ne donesis.", + "notifications.policy.accept": "Aceptez", + "notifications.policy.accept_hint": "Montrez en savigi", + "notifications.policy.drop": "Ignorez", + "notifications.policy.drop_hint": "Nihiligez lu", + "notifications.policy.filter": "Filtrez", + "notifications.policy.filter_hint": "Sendez a enbuxo di filtrita savigi", + "notifications.policy.filter_limited_accounts_hint": "Limitizesis da serviljeranti", + "notifications.policy.filter_limited_accounts_title": "Jerita konti", + "notifications.policy.filter_new_accounts.hint": "Kreesis depos {days, plural, one {1 dio} other {# dii}}", + "notifications.policy.filter_new_accounts_title": "Nova konti", + "notifications.policy.filter_not_followers_hint": "Inkluzanta personi qua sequas vu min kam {days, plural, one {1 dio} other {# dii}}", + "notifications.policy.filter_not_followers_title": "Nesequanti", + "notifications.policy.filter_not_following_hint": "Til vu manuale aprobas lu", + "notifications.policy.filter_not_following_title": "Nesequati", + "notifications.policy.filter_private_mentions_hint": "Filtrita se ol ne esas respondo a vua sua menciono o se vu sequas la sendanto", + "notifications.policy.filter_private_mentions_title": "Nekonocita privata mencioni", + "notifications.policy.title": "Regular savigi de…", "notifications_permission_banner.enable": "Aktivigez desktopavizi", "notifications_permission_banner.how_to_control": "Por ganar avizi kande Mastodon ne esas apertita, aktivigez dekstopavizi. Vu povas precize regularar quale interakti facas deskstopavizi tra la supera {icon} butono pos oli aktivigesis.", "notifications_permission_banner.title": "Irga kozo ne pasas vu", @@ -464,6 +643,10 @@ "onboarding.steps.setup_profile.title": "Customize your profile", "onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!", "onboarding.steps.share_profile.title": "Share your profile", + "onboarding.tips.2fa": "Ka vu savas? Vu povas sekurigar vua konto per pozar 2-faktora verifiko en preferaji de vua konto. Telefonilnombro ne bezonesis!", + "onboarding.tips.accounts_from_other_servers": "Ka vu savas? Vu povas interagar kun profili sur altra servili senrupte!", + "onboarding.tips.migration": "Ka vu savas? Se vu sentas ke {domain} ne esas apta por vu en la futuro, vu povas transferar a altra servilo di Mastodon sen malganar vua sequanti!", + "onboarding.tips.verification": "Ka vu savas? Vu povas verifikar vua konto per pozi ligilo a vua profilo di Mastodon sur vua sua retsituo e adjuntar la retsituo a vua profilo. Senpage!", "password_confirmation.exceeds_maxlength": "La konfirmo dil pasvorto superesas la limito pri longeso di pasvorti", "password_confirmation.mismatching": "La konfirmo dil pasvorto ne egalesas", "picture_in_picture.restore": "Retropozez", @@ -478,7 +661,15 @@ "poll_button.add_poll": "Insertez votposto", "poll_button.remove_poll": "Efacez votposto", "privacy.change": "Aranjar privateso di mesaji", + "privacy.direct.long": "Omnu quan mencionesis en la posto", + "privacy.direct.short": "Specifika personi", + "privacy.private.long": "Nur vua sequanti", + "privacy.private.short": "Sequanti", + "privacy.public.long": "Ulu de e ne de Mastodon", "privacy.public.short": "Publike", + "privacy.unlisted.additional": "Co kondutas exakte kam publika, escepte la posto ne aparos en viva novajari o gretiketi, exploro, o sercho di Mastodon, mem se vu esas volunta totkonte.", + "privacy.unlisted.long": "Min multa algoritmoridikuli", + "privacy.unlisted.short": "Deslauta publiko", "privacy_policy.last_updated": "Antea novajo ye {date}", "privacy_policy.title": "Privatesguidilo", "recommended": "Rekomendata", @@ -496,7 +687,9 @@ "relative_time.minutes": "{number}m", "relative_time.seconds": "{number}s", "relative_time.today": "hodie", + "reply_indicator.attachments": "{count, plural, one {# atachajo} other {# atachaji}}", "reply_indicator.cancel": "Nihiligar", + "reply_indicator.poll": "Votposto", "report.block": "Restriktez", "report.block_explanation": "Vu ne vidos olia posti. Oli ne povas vidar vua posti o sequar vu. Oli savos ke oli restriktesis.", "report.categories.legal": "Legala", @@ -539,9 +732,13 @@ "report.unfollow_explanation": "Vu sequas ca konto. Por ne vidar olia posti en vua hemniuzeto pluse, desequez oli.", "report_notification.attached_statuses": "{count, plural,one {{count} posti} other {{count} posti}} adjuntesas", "report_notification.categories.legal": "Legala", + "report_notification.categories.legal_sentence": "deslegala kontenajo", "report_notification.categories.other": "Altra", + "report_notification.categories.other_sentence": "altra", "report_notification.categories.spam": "Spamo", + "report_notification.categories.spam_sentence": "sendacho", "report_notification.categories.violation": "Regulnesequo", + "report_notification.categories.violation_sentence": "regulviolaco", "report_notification.open": "Apertez raporto", "search.no_recent_searches": "Nula serchi recenta", "search.placeholder": "Serchez", @@ -569,8 +766,11 @@ "server_banner.about_active_users": "Personi quo uzas ca servilo dum antea 30 dii (monate aktiva uzanti)", "server_banner.active_users": "aktiva uzanti", "server_banner.administered_by": "Administresis da:", + "server_banner.is_one_of_many": "{domain} esas 1 de multa sendependa servili di Mastodon quan vu povas uzar por partoprenar en la fediverso.", "server_banner.server_stats": "Servilstatistiko:", "sign_in_banner.create_account": "Kreez konto", + "sign_in_banner.follow_anyone": "On povas sequar ulu sur tota fediverso e vidar omno ye kronologia ordino. Nula algoritmi, reklami o klikatrapo omnaloke.", + "sign_in_banner.mastodon_is": "Mastodon esas la maxim bona voyo por saveskar eventi.", "sign_in_banner.sign_in": "Enirez", "sign_in_banner.sso_redirect": "Enirar o krear konto", "status.admin_account": "Apertez jerintervizajo por @{name}", @@ -580,14 +780,18 @@ "status.bookmark": "Libromarko", "status.cancel_reblog_private": "Desrepetez", "status.cannot_reblog": "Ca posto ne povas repetesar", + "status.continued_thread": "Durigita postaro", "status.copy": "Copy link to status", "status.delete": "Efacar", "status.detailed_status": "Detala konversvido", "status.direct": "Private mencionez @{name}", "status.direct_indicator": "Privata menciono", "status.edit": "Modifikez", + "status.edited": "Recente modifikesis ye {date}", "status.edited_x_times": "Modifikesis {count, plural, one {{count} foyo} other {{count} foyi}}", + "status.embed": "Ganez adherkodexo", "status.favourite": "Favorizar", + "status.favourites": "{count, plural, one {favorizo} other {favorizi}}", "status.filter": "Filtragez ca posto", "status.history.created": "{name} kreis ye {date}", "status.history.edited": "{name} modifikis ye {date}", @@ -606,9 +810,11 @@ "status.reblog": "Repetez", "status.reblog_private": "Repetez kun originala videbleso", "status.reblogged_by": "{name} repetis", + "status.reblogs": "{count, plural, one {repeto} other {repeti}}", "status.reblogs.empty": "Nulu ja repetis ca posto. Kande ulu facas lo, lu montresos hike.", "status.redraft": "Efacez e riskisigez", "status.remove_bookmark": "Efacez libromarko", + "status.replied_in_thread": "Respondesis en postaro", "status.replied_to": "Respondis a {name}", "status.reply": "Respondar", "status.replyAll": "Respondar a filo", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index fdb56f542e..ef709516c2 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Limitazione per eccesso di richieste", "alert.unexpected.message": "Si è verificato un errore imprevisto.", "alert.unexpected.title": "Oops!", + "alt_text_badge.title": "Testo alternativo", "announcement.announcement": "Annuncio", "attachments_list.unprocessed": "(non elaborato)", "audio.hide": "Nascondi audio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Nessuno da questo server può seguirti.", "domain_block_modal.they_wont_know": "Non sapranno di essere stati bloccati.", "domain_block_modal.title": "Bloccare il dominio?", + "domain_block_modal.you_will_lose_num_followers": "Perderai {followersCount, plural, one {{followersCountDisplay} seguace} other {{followersCountDisplay} seguaci}} e {followingCount, plural, one {{followingCountDisplay} persona che segui} other {{followingCountDisplay} persone che segui}}.", + "domain_block_modal.you_will_lose_relationships": "Perderai tutti i seguaci e le persone che segui da questo server.", "domain_block_modal.you_wont_see_posts": "Non vedrai post o notifiche dagli utenti su questo server.", "domain_pill.activitypub_lets_connect": "Ti consente di connetterti e interagire con le persone non solo su Mastodon, ma anche su diverse app social.", "domain_pill.activitypub_like_language": "ActivityPub è come la lingua che Mastodon parla con altri social network.", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 7dcc346802..0eb3dbf5b4 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Sparta apribota.", "alert.unexpected.message": "Įvyko netikėta klaida.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Alternatyvus tekstas", "announcement.announcement": "Skelbimas", "attachments_list.unprocessed": "(neapdorotas)", "audio.hide": "Slėpti garsą", @@ -98,7 +99,7 @@ "block_modal.you_wont_see_mentions": "Nematysi įrašus, kuriuose jie paminimi.", "boost_modal.combo": "Galima paspausti {combo}, kad praleisti tai kitą kartą", "boost_modal.reblog": "Pasidalinti įrašą?", - "boost_modal.undo_reblog": "Panaikinti pasidalintą įrašą?", + "boost_modal.undo_reblog": "Nebepasidalinti įrašo?", "bundle_column_error.copy_stacktrace": "Kopijuoti klaidos ataskaitą", "bundle_column_error.error.body": "Paprašytos puslapio nepavyko atvaizduoti. Tai gali būti dėl mūsų kodo klaidos arba naršyklės suderinamumo problemos.", "bundle_column_error.error.title": "O, ne!", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Niekas iš šio serverio negali tavęs sekti.", "domain_block_modal.they_wont_know": "Jie nežinos, kad buvo užblokuoti.", "domain_block_modal.title": "Blokuoti serverį?", + "domain_block_modal.you_will_lose_num_followers": "Prarasi {followersCount, plural, one {{followersCountDisplay} sekėją} few {{followersCountDisplay} sekėjus} many {{followersCountDisplay} sekėjo} other {{followersCountDisplay} sekėjų}} ir {followingCount, plural, one {{followingCountDisplay} žmogų, kurį seki} few {{followingCountDisplay} žmones, kuriuos seki} many {{followingCountDisplay} žmonės, kuriuos seki} other {{followingCountDisplay} žmonių, kurių seki}}.", + "domain_block_modal.you_will_lose_relationships": "Prarasi visus sekėjus ir žmones, kuriuos seki iš šio serverio.", "domain_block_modal.you_wont_see_posts": "Nematysi naudotojų įrašų ar pranešimų šiame serveryje.", "domain_pill.activitypub_lets_connect": "Tai leidžia tau prisijungti ir bendrauti su žmonėmis ne tik „Mastodon“ platformoje, bet ir įvairiose socialinėse programėlėse.", "domain_pill.activitypub_like_language": "„ActivityPub“ – tai tarsi kalba, kuria „Mastodon“ kalba su kitais socialiniais tinklais.", @@ -765,7 +768,7 @@ "status.admin_status": "Atidaryti šį įrašą prižiūrėjimo sąsajoje", "status.block": "Blokuoti @{name}", "status.bookmark": "Pridėti į žymės", - "status.cancel_reblog_private": "Nebepakelti", + "status.cancel_reblog_private": "Nebepasidalinti", "status.cannot_reblog": "Šis įrašas negali būti pakeltas.", "status.continued_thread": "Tęsiama gijoje", "status.copy": "Kopijuoti nuorodą į įrašą", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index f8e98e865b..282c345def 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Dataverkeer beperkt", "alert.unexpected.message": "Er deed zich een onverwachte fout voor", "alert.unexpected.title": "Oeps!", + "alt_text_badge.title": "Alt-tekst", "announcement.announcement": "Mededeling", "attachments_list.unprocessed": "(niet verwerkt)", "audio.hide": "Audio verbergen", @@ -216,12 +217,13 @@ "dismissable_banner.explore_tags": "Deze hashtags winnen aan populariteit op het sociale web (fediverse). Hashtags die door meer verschillende mensen worden gebruikt staan hoger.", "dismissable_banner.public_timeline": "Dit zijn de meest recente openbare berichten van accounts op het sociale web (fediverse) die door mensen op {domain} worden gevolgd.", "domain_block_modal.block": "Server blokkeren", - "domain_block_modal.block_account_instead": "In plaats hiervan {name} blokkeren", + "domain_block_modal.block_account_instead": "Alleen {name} blokkeren", "domain_block_modal.they_can_interact_with_old_posts": "Mensen op deze server kunnen interactie hebben met jouw oude berichten.", "domain_block_modal.they_cant_follow": "Niemand op deze server kan jou volgen.", "domain_block_modal.they_wont_know": "Ze krijgen niet te weten dat ze worden geblokkeerd.", "domain_block_modal.title": "Server blokkeren?", "domain_block_modal.you_will_lose_num_followers": "Je verliest {followersCount, plural, one {{followersCountDisplay} volger} other {{followersCountDisplay} volgers}} en {followingCount, plural, one {{followingCountDisplay} persoon die jij volgt} other {{followingCountDisplay} personen die jij volgt}}.", + "domain_block_modal.you_will_lose_relationships": "Je verliest alle volgers en mensen die je volgt van deze server.", "domain_block_modal.you_wont_see_posts": "Je ziet geen berichten of meldingen meer van gebruikers op deze server.", "domain_pill.activitypub_lets_connect": "Het zorgt ervoor dat je niet alleen maar kunt verbinden en communiceren met mensen op Mastodon, maar ook met andere sociale apps.", "domain_pill.activitypub_like_language": "ActivityPub is de taal die Mastodon met andere sociale netwerken spreekt.", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 4528940797..8e9dd96baf 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Ograniczenie liczby zapytań", "alert.unexpected.message": "Wystąpił nieoczekiwany błąd.", "alert.unexpected.title": "Ups!", + "alt_text_badge.title": "Tekst alternatywny", "announcement.announcement": "Ogłoszenie", "attachments_list.unprocessed": "(nieprzetworzone)", "audio.hide": "Ukryj dźwięk", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Użytkownik nie dowie się, że został zablokowany.", "domain_block_modal.title": "Zablokować domenę?", "domain_block_modal.you_will_lose_num_followers": "Utracisz {followersCount, plural, one {jednego obserwującego} other {{followersCountDisplay} obserwujących}} i {followingCount, plural, one {jedną osobę którą obserwujesz} few {{followingCountDisplay} osoby które obserwujesz} other {{followingCountDisplay} osób które obserwujesz}}.", + "domain_block_modal.you_will_lose_relationships": "Utracisz wszystkich obserwujących z tego serwera i wszystkie osoby które obserwujesz na tym serwerze.", "domain_block_modal.you_wont_see_posts": "Nie zobaczysz postów ani powiadomień od użytkowników na tym serwerze.", "domain_pill.activitypub_lets_connect": "Pozwala połączyć się z ludźmi na Mastodonie, jak i na innych serwisach społecznościowych.", "domain_pill.activitypub_like_language": "ActivityPub jest językiem używanym przez Mastodon do wymiany danych z innymi serwisami społecznościowymi.", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 402c0b38b5..d1a3ecdaa7 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Tentativas limitadas", "alert.unexpected.message": "Ocorreu um erro inesperado.", "alert.unexpected.title": "Eita!", + "alt_text_badge.title": "Texto alternativo", "announcement.announcement": "Comunicados", "attachments_list.unprocessed": "(não processado)", "audio.hide": "Ocultar áudio", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Ninguém deste servidor pode lhe seguir.", "domain_block_modal.they_wont_know": "Eles não saberão que foram bloqueados.", "domain_block_modal.title": "Dominio do bloco", + "domain_block_modal.you_will_lose_num_followers": "Você perderá {followersCount, plural, one {{followersCountDisplay} seguidor} other {{followersCountDisplay} seguidores}} e {followingCount, plural, one {{followingCountDisplay} pessoa que você segue} other {{followingCountDisplay} pessoas que você segue}}.", + "domain_block_modal.you_will_lose_relationships": "Você irá perder todos os seguidores e pessoas que você segue neste servidor.", "domain_block_modal.you_wont_see_posts": "Você não verá postagens ou notificações de usuários neste servidor.", "domain_pill.activitypub_lets_connect": "Ele permite que você se conecte e interaja com pessoas não apenas no Mastodon, mas também em diferentes aplicativos sociais.", "domain_pill.activitypub_like_language": "ActivityPub é como a linguagem que o Mastodon fala com outras redes sociais.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 2195e6bf9a..084ac9945f 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Shpejtësi e kufizuar", "alert.unexpected.message": "Ndodhi një gabim të papritur.", "alert.unexpected.title": "Hëm!", + "alt_text_badge.title": "Tekst alternativ", "announcement.announcement": "Lajmërim", "attachments_list.unprocessed": "(e papërpunuar)", "audio.hide": "Fshihe audion", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "S’do ta dinë se janë bllokuar.", "domain_block_modal.title": "Të bllokohet përkatësia?", "domain_block_modal.you_will_lose_num_followers": "Do të humbni {followersCount, plural, one {{followersCountDisplay} ndjekës} other {{followersCountDisplay} ndjekës}} dhe {followingCount, plural, one {{followingCountDisplay} person që ndiqni} other {{followingCountDisplay} vetë që ndiqni}}.", + "domain_block_modal.you_will_lose_relationships": "Do të humbni krejt ndjekësit dhe personat që ndiqni nga ky shërbyes.", "domain_block_modal.you_wont_see_posts": "S’do të shihni postime, apo njoftime nga përdorues në këtë shërbyes.", "domain_pill.activitypub_lets_connect": "Ju lejon të lidheni dhe ndërveproni me persona jo thjesht në Mastodon, por edhe nëpër aplikacione të ndryshme shoqërore.", "domain_pill.activitypub_like_language": "ActivityPub është si gjuha me të cilën Mastodon-i komunikon me rrjete të tjerë shoqërorë.", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 509dbc7a21..6feae5d137 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "Aşırı istek gönderildi", "alert.unexpected.message": "Beklenmedik bir hata oluştu.", "alert.unexpected.title": "Hay aksi!", + "alt_text_badge.title": "Alternatif metin", "announcement.announcement": "Duyuru", "attachments_list.unprocessed": "(işlenmemiş)", "audio.hide": "Sesi gizle", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "Engellendiklerini bilmeyecekler.", "domain_block_modal.title": "Alan adını engelle?", "domain_block_modal.you_will_lose_num_followers": "{followersCount, plural, one {{followersCountDisplay} takipçi} other {{followersCountDisplay} takipçi}} ve {followingCount, plural, one {{followingCountDisplay} takip ettiğiniz kişi} other {{followingCountDisplay} takip ettiğiniz kişi}} kaybedeceksiniz.", + "domain_block_modal.you_will_lose_relationships": "Bu sunucudaki tüm takip edenleri ve takip ettiklerinizi kaybedeceksiniz.", "domain_block_modal.you_wont_see_posts": "Bu sunucudaki kullanıcılardan gelen gönderileri veya bildirimleri göremezsiniz.", "domain_pill.activitypub_lets_connect": "Sadece Mastodon üzerindeki değil, diğer sosyal uygulamalardaki kişilerle de bağlantı kurmanıza ve etkileşmenize olanak sağlar.", "domain_pill.activitypub_like_language": "ActivityPub, Mastodon'un diğer sosyal ağlarla konuşmak için kullandığı dil gibidir.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 1b5dbb4c9b..1753d0bebe 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.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": "Сховати аудіо", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "Ніхто з цього сервера не може слідкувати за вами.", "domain_block_modal.they_wont_know": "Вони не знають, що їх заблоковано.", "domain_block_modal.title": "Заблокувати домен?", + "domain_block_modal.you_will_lose_num_followers": "Ви втратите {followersCount, plural, one {{followersCountDisplay} підписника} few {{followersCountDisplay} підписника} many {{followersCountDisplay} підписників} other {{followersCountDisplay} підписника}} та {followingCount, plural, one {{followingCountDisplay} особу, за якою ви стежите} few {{followingCountDisplay} особи, за якими ви стежите} many {{followingCountDisplay} осіб, за якими ви стежите} other {{followingCountDisplay} особу, за якою ви стежите}}.", + "domain_block_modal.you_will_lose_relationships": "Ви втратите всіх підписників і людей, на яких ви підписані.", "domain_block_modal.you_wont_see_posts": "Ви не бачитимете дописів і сповіщень від користувачів на цьому сервері.", "domain_pill.activitypub_lets_connect": "Це дозволяє вам спілкуватися та взаємодіяти з людьми не лише на Mastodon, але й у різних соціальних застосунках.", "domain_pill.activitypub_like_language": "ActivityPub - це як мова, якою Mastodon розмовляє з іншими соціальними мережами.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 9c5c9ae1e4..12d9bd4354 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -222,6 +222,7 @@ "domain_block_modal.they_wont_know": "Họ sẽ không biết đã bị bạn chặn.", "domain_block_modal.title": "Chặn máy chủ?", "domain_block_modal.you_will_lose_num_followers": "Bạn sẽ mất {followersCount, plural, other {{followersCountDisplay} người theo dõi}} và {followingCount, plural, other {{followingCountDisplay} người bạn theo dõi}}.", + "domain_block_modal.you_will_lose_relationships": "Bạn sẽ mất tất cả người theo dõi và những người bạn theo dõi từ máy chủ này.", "domain_block_modal.you_wont_see_posts": "Bạn sẽ không thấy tút hoặc thông báo từ thành viên máy chủ này.", "domain_pill.activitypub_lets_connect": "Nó cho phép bạn kết nối và tương tác với mọi người không chỉ trên Mastodon mà còn trên các ứng dụng xã hội khác.", "domain_pill.activitypub_like_language": "ActivityPub giống như ngôn ngữ Mastodon giao tiếp với các mạng xã hội khác.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 1f539727f9..8ce888a039 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.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": "隐藏音频", @@ -221,6 +222,8 @@ "domain_block_modal.they_cant_follow": "此服务器上没有人可以关注你。", "domain_block_modal.they_wont_know": "他们不会知道自己被屏蔽。", "domain_block_modal.title": "屏蔽该域名?", + "domain_block_modal.you_will_lose_num_followers": "你将失去 {followersCount, plural, other {{followersCountDisplay} 名关注者}}和 {followingCount, plural, other {{followingCountDisplay} 名关注}}。", + "domain_block_modal.you_will_lose_relationships": "你将失去在此实例上的所有关注和关注者。", "domain_block_modal.you_wont_see_posts": "你将不会看到此服务器上用户的嘟文或通知。", "domain_pill.activitypub_lets_connect": "它让你不仅能与Mastodon上的人交流互动,还能与其它不同社交应用上的人联系。", "domain_pill.activitypub_like_language": "ActivityPub就像Mastodon与其它社交网络交流时使用的语言。", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index c585f98b6e..530202f0a5 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -85,6 +85,7 @@ "alert.rate_limited.title": "已限速", "alert.unexpected.message": "發生非預期的錯誤。", "alert.unexpected.title": "哎呀!", + "alt_text_badge.title": "ALT 說明文字", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未經處理)", "audio.hide": "隱藏音訊", @@ -222,6 +223,7 @@ "domain_block_modal.they_wont_know": "他們不會知道他們已被封鎖。", "domain_block_modal.title": "是否封鎖該網域?", "domain_block_modal.you_will_lose_num_followers": "您將會失去 {followersCount, plural, other {{followersCountDisplay} 個跟隨者}} 與 {followingCount, plural, other {{followingCountDisplay} 個您跟隨之帳號}}.", + "domain_block_modal.you_will_lose_relationships": "您將失去所有的跟隨者與您自此伺服器跟隨之帳號。", "domain_block_modal.you_wont_see_posts": "您不會見到來自此伺服器使用者之任何嘟文或推播通知。", "domain_pill.activitypub_lets_connect": "它使您能於 Mastodon 及其他不同的社群應用程式與人連結及互動。", "domain_pill.activitypub_like_language": "ActivityPub 像是 Mastodon 與其他社群網路溝通時所用的語言。", diff --git a/config/locales/activerecord.io.yml b/config/locales/activerecord.io.yml index 6426defc55..2b0d509198 100644 --- a/config/locales/activerecord.io.yml +++ b/config/locales/activerecord.io.yml @@ -15,6 +15,12 @@ io: user/invite_request: text: Rezono errors: + attributes: + domain: + invalid: ne esas valida domennomo + messages: + invalid_domain_on_line: "%{value} ne esas valida domennomo" + too_many_lines: esas plu kam la limito qua esas %{limit} linei models: account: attributes: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index e0a68f7b46..965f354a35 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -873,6 +873,9 @@ ca: message_html: No has definit cap norma del servidor. sidekiq_process_check: message_html: No hi ha cap procés de Sidekiq executant-se per a la cua (o cues) de %{value}. Reviseu la configuració de Sidekiq + software_version_check: + action: Veure les actualitzacions disponibles + message_html: Hi ha disponible una actualització de Mastodon. software_version_critical_check: action: Veure actualitzacions disponibles message_html: Hi ha disponible una actualització crítica de Mastodon, si us plau, actualitza-la el més abans possible. diff --git a/config/locales/da.yml b/config/locales/da.yml index 96b27c91b3..0da901d4a8 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -875,6 +875,9 @@ da: message_html: Ingen serverregler defineret. sidekiq_process_check: message_html: Ingen Sidekiq-proces kører for %{value}-kø(er). Gennemgå Sidekiq-opsætningen + software_version_check: + action: Se tilgængelige opdateringer + message_html: En Mastodon-opdatering er tilgængelig. software_version_critical_check: action: Se tilgængelige opdateringer message_html: En kritisk Mastodon-opdatering er tilgængelig. Opdatér hurtigst muligt. diff --git a/config/locales/de.yml b/config/locales/de.yml index 5af77c431d..b98a96a1cd 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -875,6 +875,9 @@ de: message_html: Du hast keine Serverregeln festgelegt. sidekiq_process_check: message_html: Kein Sidekiq-Prozess läuft für die %{value} Warteschlange(n). Bitte überprüfe deine Sidekiq-Konfiguration + software_version_check: + action: Verfügbare Updates ansehen + message_html: Ein Update für Mastodon ist verfügbar. software_version_critical_check: action: Verfügbare Updates ansehen message_html: Ein kritisches Mastodon-Update ist verfügbar – bitte aktualisiere so schnell wie möglich. @@ -1692,6 +1695,7 @@ de: delete: Kontolöschung development: Entwicklung edit_profile: Profil bearbeiten + export: Exportieren featured_tags: Vorgestellte Hashtags import: Importieren import_and_export: Importieren und exportieren diff --git a/config/locales/devise.io.yml b/config/locales/devise.io.yml index 6bf0b52cef..49637579e4 100644 --- a/config/locales/devise.io.yml +++ b/config/locales/devise.io.yml @@ -12,6 +12,7 @@ io: last_attempt: Tu ankore povas probar unfoye ante ke tua konto esos extingita. locked: Tua konto esas extingita. not_found_in_database: Nejusta %{authentication_keys}. + omniauth_user_creation_failure: Eroro dum ke kreas konto por ca identeso. pending: Vua konti ankore kontrolesas. timeout: Vua kunsido expiris. Voluntez rienirar por avancar. unauthenticated: Tu devas enirar o membreskar por durar. @@ -47,14 +48,19 @@ io: subject: Instrucioni por chanjar la pasvorto title: Richanjo di pasvorto two_factor_disabled: + explanation: Eniro esas nun posibla per nur retpostoadreso e pasvorto. subject: 'Mastodon: 2-faktorverifiko deaktivigesis' + subtitle: 2-faktora verifiko por vua konto desaktivigesis. title: 2FA deaktivigesis two_factor_enabled: + explanation: Ficho facesis da parigita softwaro TOTP bezonesos por eniro. subject: 'Mastodon: 2-faktorverifiko aktivigesis' + subtitle: 2-faktora verifiko aktivigesis por vua konto. title: 2FA aktivigesis two_factor_recovery_codes_changed: explanation: Antea rigankodexi devalidesis e novo facesis. subject: 'Mastodon: 2-faktorrigankodexi rifacesis' + subtitle: Antea rigankodexi desvalidesis e novo facesis. title: 2FA-rigankodexi chanjesis unlock_instructions: subject: Instructioni por riacendar la konto @@ -68,9 +74,13 @@ io: subject: 'Mastodon: Sekurklefo efacesis' title: 1 de vua sekurklefi efacesis webauthn_disabled: + explanation: Verifiko per sekuresklefi desaktivigesis por vua konto. + extra: Eniro esas nun posibla per nur ficho qua facesis da parigita softwaro TOTP. subject: 'Mastodon: Verifiko per sekurklefi deaktivigesis' title: Sekurklefi deaktivigesis webauthn_enabled: + explanation: Sekuresklefoa verifiko aktivigesis por vua konto. + extra: Vua sekuresklefo povas nun uzesar por eniro. subject: 'Mastodon: Sekurklefverifiko aktivigesis' title: Sekurklefi aktivigesis omniauth_callbacks: diff --git a/config/locales/doorkeeper.ga.yml b/config/locales/doorkeeper.ga.yml index 27082028c7..b8ee3497b7 100644 --- a/config/locales/doorkeeper.ga.yml +++ b/config/locales/doorkeeper.ga.yml @@ -60,6 +60,7 @@ ga: error: title: Tharla earráid new: + prompt_html: Ba mhaith le %{client_name} cead rochtain a fháil ar do chuntas. Ní cheadaigh an t-iarratas seo ach amháin má aithníonn tú an fhoinse seo agus go bhfuil muinín agat as. review_permissions: Ceadanna a athbhreithniú title: Tá údarú ag teastáil show: diff --git a/config/locales/doorkeeper.pt-BR.yml b/config/locales/doorkeeper.pt-BR.yml index f7f9dce7ea..85bf5d60c0 100644 --- a/config/locales/doorkeeper.pt-BR.yml +++ b/config/locales/doorkeeper.pt-BR.yml @@ -60,6 +60,7 @@ pt-BR: error: title: Ocorreu um erro new: + prompt_html: "%{client_name} gostaria de permissão para acessar sua conta. Aprove esta solicitação apenas se você reconhecer e confiar nesta fonte." review_permissions: Rever permissões title: Autorização necessária show: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 21afcd990f..fbd48d1c31 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1692,6 +1692,7 @@ en-GB: delete: Account deletion development: Development edit_profile: Edit profile + export: Export featured_tags: Featured hashtags import: Import import_and_export: Import and export diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 01685f99fe..292bbbff51 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1692,6 +1692,7 @@ es-AR: delete: Eliminación de la cuenta development: Desarrollo edit_profile: Editar perfil + export: Exportar featured_tags: Etiquetas destacadas import: Importar import_and_export: Importación y exportación diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index a8ff5c6938..45d8864502 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1692,6 +1692,7 @@ es-MX: delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil + export: Exportar featured_tags: Hashtags destacados import: Importar import_and_export: Importar y exportar diff --git a/config/locales/es.yml b/config/locales/es.yml index ab7fd3bc54..85bcf9065a 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1692,6 +1692,7 @@ es: delete: Borrar cuenta development: Desarrollo edit_profile: Editar perfil + export: Exportar featured_tags: Hashtags destacados import: Importar import_and_export: Importar y exportar diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 9bd0f12241..258dda8cc4 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1692,6 +1692,7 @@ fi: delete: Tilin poisto development: Kehitys edit_profile: Muokkaa profiilia + export: Vie featured_tags: Suositellut aihetunnisteet import: Tuo tietoja import_and_export: Tuonti ja vienti diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 50b4802bc7..034e1f6bd2 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1692,6 +1692,7 @@ fo: delete: Striking av kontu development: Menning edit_profile: Rætta vanga + export: Flyt út featured_tags: Varpaði frámerki import: Innflyt import_and_export: Innflyt og útflyt diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 9513623932..c678e93323 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -1770,6 +1770,7 @@ ga: delete: Scriosadh cuntais development: Forbairt edit_profile: Cuir an phróifíl in eagar + export: Easpórtáil featured_tags: Haischlib faoi thrácht import: Iompórtáil import_and_export: Iompórtáil agus easpórtáil diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 2eadb2ba6b..e396761f7e 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -543,7 +543,7 @@ gl: total_reported: Denuncias sobre eles total_storage: Adxuntos multimedia totals_time_period_hint_html: Os totais aquí mostrados inclúen todo o historial de datos. - unknown_instance: Actualmente non temos constancia deste rexistro no servidor. + unknown_instance: Actualmente non hai rexistro deste dominio no servidor. invites: deactivate_all: Desactivar todo filter: @@ -602,7 +602,7 @@ gl: resolve_description_html: Non se van tomar accións contra a conta denunciada, nin se gardarán avisos, e pecharase a denuncia. silence_description_html: A conta será visible só para quen xa a está a seguir ou quen a buscou manualmente, limitando moito o seu alcance. Pódese cambiar. Isto pecha tódalas denuncias acerca desta conta. suspend_description_html: A conta e todo o seu contido non serán accesible e finalmente eliminaranse, será imposible interactuar con ela. A decisión é reversible durante 30 días. Isto pecha tódalas denuncias sobre esta conta. - actions_description_html: Decide a acción a tomar para resolver esta denuncia. Se tomas accións punitivas contra a conta denunciada enviaraselle un correo, excepto se está indicada a categoría Spam. + actions_description_html: Decide a acción a tomar para resolver esta denuncia. Se tomas accións punitivas contra a conta denunciada enviaráselle un correo, excepto se está indicada a categoría Spam. actions_description_remote_html: Decide a acción a tomar para resolver a denuncia. Isto só lle afecta ao xeito en que o teu servidor se comunica con esta conta remota e xestiona o seu contido. actions_no_posts: Esta denuncia non ten publicacións asociadas para eliminar add_to_report: Engadir máis á denuncia @@ -875,6 +875,9 @@ gl: message_html: Non tes definidas regras para o servidor. sidekiq_process_check: message_html: Non hai procesos Sidekiq a funcionar para a cola(s) %{value}. Revisa a túa configuración para Sidekiq + software_version_check: + action: Ver as actualizacións dispoñibles + message_html: Hai dispoñible unha actualización para Mastodon. software_version_critical_check: action: Mira as actualizacións dispoñibles message_html: Hai unha actualización crítica de Mastodon dispoñible, actualiza axiña. diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 2f6a4c5778..11f2a415f2 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1692,6 +1692,7 @@ hu: delete: Fiók törlése development: Fejlesztőknek edit_profile: Profil szerkesztése + export: Exportálás featured_tags: Kiemelt hashtagek import: Importálás import_and_export: Import és export diff --git a/config/locales/it.yml b/config/locales/it.yml index 9fdeede8bf..a89fa0a53e 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -875,6 +875,9 @@ it: message_html: Non hai definito alcuna regola del server. sidekiq_process_check: message_html: Nessun processo di Sidekiq in esecuzione per le code di %{value}. Sei pregato di revisionare la tua configurazione di Sidekiq + software_version_check: + action: Visualizza gli aggiornamenti disponibili + message_html: È disponibile un aggiornamento per Mastodon. software_version_critical_check: action: Visualizza gli aggiornamenti disponibili message_html: Un aggiornamento critico di Mastodon è disponibile, ti preghiamo di aggiornare il più rapidamente possibile. @@ -1694,6 +1697,7 @@ it: delete: Cancellazione account development: Sviluppo edit_profile: Modifica profilo + export: Esporta featured_tags: Hashtag in evidenza import: Importa import_and_export: Importa ed esporta diff --git a/config/locales/lt.yml b/config/locales/lt.yml index ef13817028..3b63ba6dcf 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -608,6 +608,9 @@ lt: message_html: Tavo Elasticsearch klasteris turi tik vieną mazgą, ES_PRESET turėtų būti nustatyta į single_node_cluster. elasticsearch_running_check: message_html: Nepavyko prijungti prie Elasticsearch. Patikrink, ar ji veikia, arba išjunk viso teksto paiešką. + software_version_check: + action: Žiūrėti galimus naujinimus + message_html: Yra „Mastodon“ naujinimas. tags: moderation: not_trendable: Netendencinga @@ -1090,6 +1093,7 @@ lt: delete: Paskyros trynimas development: Kūrimas edit_profile: Redaguoti profilį + export: Eksportuoti featured_tags: Rodomi saitažodžiai import: Importuoti import_and_export: Importas ir eksportas diff --git a/config/locales/nl.yml b/config/locales/nl.yml index afc4652bf6..7681a04eae 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -875,6 +875,9 @@ nl: message_html: Je hebt voor deze server geen regels opgesteld. sidekiq_process_check: message_html: Er draait geen Sidekiqproces voor de wachtrij(en) %{value}. Controleer je Sidekiqconfiguratie + software_version_check: + action: Beschikbare updates bekijken + message_html: Er is een Mastodon-update beschikbaar. software_version_critical_check: action: Bekijk de beschikbare updates message_html: Er is een kritieke update voor Mastodon beschikbaar. Update zo snel mogelijk. diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 98f62e123a..81047d92e7 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -875,6 +875,9 @@ nn: message_html: Du har ikke definert noen serverregler. sidekiq_process_check: message_html: Ingen Sidekiq-prosess kjører for %{value} køen(e). Vennligst se gjennom Sidekiq-konfigurasjonen din + software_version_check: + action: Sjå tilgjengelege oppdateringar + message_html: Ei Mastodon-oppdatering er tilgjengeleg. software_version_critical_check: action: Sjå tilgjengelege oppdateringar message_html: Ei kritisk oppdatering til Mastodon er tilgjengeleg. Oppdater så snart som mogleg. diff --git a/config/locales/pl.yml b/config/locales/pl.yml index e68ea2b16a..3aaf7a5a57 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -903,6 +903,9 @@ pl: message_html: Nie zdefiniowano żadnych reguł serwera. sidekiq_process_check: message_html: Brak uruchomionego procesu Sidekiq dla kolejki(-ek) %{value}. Sprawdź konfigurację Sidekiq + software_version_check: + action: Pokaż dostępne aktualizacje + message_html: Dostępna aktualizacja Mastodona. software_version_critical_check: action: Pokaż dostępne aktualizacje message_html: Dostępna krytyczna aktualizacja Mastodona, zaktualizuj jak tylko będzie to możliwe. @@ -1744,6 +1747,7 @@ pl: delete: Usuń konto development: Tworzenie aplikacji edit_profile: Edytuj profil + export: Eksportowanie danych featured_tags: Wyróżnione hashtagi import: Importowanie danych import_and_export: Import i eksport diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index ba21dd1b3b..30022be93a 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1692,6 +1692,7 @@ pt-BR: delete: Exclusão de conta development: Desenvolvimento edit_profile: Editar perfil + export: Exportar featured_tags: Hashtags em destaque import: Importar import_and_export: Importar e exportar diff --git a/config/locales/simple_form.io.yml b/config/locales/simple_form.io.yml index fe8243b0e9..5cbbd9d06e 100644 --- a/config/locales/simple_form.io.yml +++ b/config/locales/simple_form.io.yml @@ -3,6 +3,7 @@ io: simple_form: hints: account: + attribution_domains_as_text: Protektas de falsa akreditaji. discoverable: Vua publika posti e profilo povas remarkesar o rekomendesar en diferanta parti di Mastodon e vua profilo povas sugestesar ad altra uzanti. display_name: Vua tota nomo o vua gaya nomo. fields: Vua retsituo, pronomi, evo, irgo quan vu volas. @@ -39,12 +40,14 @@ io: text: Vu povas nur apelar striko unafoye defaults: autofollow: Personi quo registresesas tra invito automatika sequos vu + avatar: WEBP, PNG, GIF o JPG. Maxime %{size}. Esos mikrigita a %{dimensions}px bot: Signalez a altra personi ke la konto precipue havas automatikigita agi e forsan ne surveyesas context: Situeso kande filtrilo debas aplikesar current_password: Por sekuresorezoni, pozez pasvorto di ca konto current_username: Por konfirmar, pozez uzantonomo di ca konto digest: Nur sendesas pos longa neaktiveso e nur se vu ganis irga mesaji dum ke vu esas neprezenta email: Vu sendesos konfirmretposto + header: WEBP, PNG, GIF o JPG. Maxime %{size}. Esos mikrigita a %{dimensions}px inbox_url: Kopiez URL de frontpagino de relayo quon vu volas uzar irreversible: Filtrita posti neinversigeble desaparos, mem se filtro efacesas pose locale: Linguo di uzantointervizajo, retposti e pulsavizi @@ -75,10 +78,15 @@ io: warn: Celez filtrita kontenajo dop avert quo montras titulo di filtrilo form_admin_settings: activity_api_enabled: Quanto de lokale publikigita posti, aktiva uzanti e nova registri, donita semanope + app_icon: WEBP, PNG, GIF o JPG. Ol remplas la originala imajeto di softwaro sur poshaparati kun personaligita imajeto. + backups_retention_period: Uzanto povas facar arkivi di sua posti por deskargar pose. Se ol esas positiva nombro, ca arkivi automate efacesis de vua konserveyo pos la decidita quanto di dii. bootstrap_timeline_accounts: Ca konti pinglagesos a super sequorekomendi di nova uzanti. closed_registrations_message: Montresas kande registradi klozesas + content_cache_retention_period: Omna posti de altra servili efacesos (anke repeti e respondi) pos decidita quanto di dii, sen ye irga lokala uzantointerago kun ti posti. Privata mencioni inter uzanto de dessanta servili anke desganos e neposible riganesos. custom_css: Vu povas pozar kustumizita staili en retverso di Mastodon. + favicon: WEBP, PNG, GIF o JPG. Ol remplas la originala imajeto di Mastodon kun personaligita imajeto. mascot: Remplas montreso en avanca retintervizajo. + media_cache_retention_period: Medidoseri de posti quan posti da deslokala uzanti retummemoresis sur vua servilo. Se medidatumo demandesas pos ol efacesas, ol rideskargesos. peers_api_enabled: Listo di domeni quin ca servilo trovis en la fediverso. Nula informo inkluzesas hike pri ka vu federas kun partikulara servilo, nur ke vua servilo savas pri lo. Co es uzata da enti qui kolektas statistiki pri federeso generale. profile_directory: La profilcheflisto montras omna uzanti quo voluntale volas esar deskovrebla. require_invite_text: Kande registradi bezonas manuala aprobo, ol kauzigas "Por quo vu volas juntas?" textoenpozo esar obliganta @@ -111,6 +119,7 @@ io: sign_up_requires_approval: Nova registro bezonos vua aprobo severity: Selektez quo eventos kun demandi de ca IP rule: + hint: Nemusta. Ol donas plu multa detali pri la regulo text: Deskriptez regulo o bezonaj por uzanti en ca servilo. Vu debas lasar lu esar korta e simpla sessions: otp: Enter the Two-factor code from your phone or use one of your recovery codes. @@ -122,6 +131,7 @@ io: name: Vu povas nur chanjar literkaso, por exemplo, por kauzigar lu divenar plu lektebla user: chosen_languages: Kande marketigesis, nur posti en selektesis lingui montresos en publika tempolinei + role: La rolo donas certena permisi a la uzanto. user_role: color: Koloro quo uzesas por rolo en tota UI, quale RGB kun hexformato highlighted: Co kauzigas rolo divenar publike videbla @@ -130,9 +140,11 @@ io: position: Plu alta rolo decidas problemsolvo en kelka situeso. Kelka agi povas nur eventar a roli kun plu basa prioreso webhook: events: Selektigez eventi por sendar + template: Facez vua sua JSON per variebla interpolo. Lasez quale nulo por originala JSON. url: Ibe eventi sendesos labels: account: + attribution_domains_as_text: Nur permisas specifika retsitui discoverable: Inkluzar profilo e posti en trovado-algoritmi fields: name: Etiketo @@ -201,6 +213,7 @@ io: setting_default_privacy: Videbleso di la mesaji setting_default_sensitive: Sempre markizez medii quale sentoza setting_delete_modal: Montrez konfirmdialogo ante efacar posto + setting_disable_hover_cards: Desaktivigez profilprevido dum klikpaso setting_disable_swiping: Desaktivigez fingromovi setting_display_media: Mediomontrajo setting_display_media_default: Originalo @@ -232,10 +245,13 @@ io: warn: Celez kun averto form_admin_settings: activity_api_enabled: Publikigez rezumstatistiko pri uzantoaktiveso en API + app_icon: Softwarimajeto backups_retention_period: Uzantoarkivretendurtempo bootstrap_timeline_accounts: Sempre rekomendez ca konti a nova uzanti closed_registrations_message: Kustumizita mesajo kande registradi ne esas disponebla + content_cache_retention_period: Fora kontenajretenperiodo custom_css: Kustumizita CSS + favicon: Imajeto mascot: Kustumizita reprezentimajo (oldo) media_cache_retention_period: Mediimemorajretendurtempo peers_api_enabled: Publikigez listo di deskovrita servili en API @@ -291,6 +307,7 @@ io: patch: Notifikar pri problemosolvanta aktualigi trending_tag: Nova tendenco bezonas kontrolo rule: + hint: Plusa informo text: Regulo settings: indexable: Inkluzar profilopagino en serchili @@ -299,6 +316,7 @@ io: listable: Permisez ca hashtago aparar en trovaji e sugestaji name: Hashtago trendable: Permisez ca hashtago aparar che tendenci + usable: Permisez posti uzar ca gretiketo lokale user: role: Rolo time_zone: Klokozono @@ -310,9 +328,11 @@ io: position: Prioreso webhook: events: Aktivigita eventi + template: Pagkargshablono url: URL di finpunto 'no': Ne not_recommended: Ne rekomendesas + overridden: Remplesis recommended: Rekomendito required: mark: "*" diff --git a/config/locales/sq.yml b/config/locales/sq.yml index c1ed91cf96..2f05d7860c 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -871,6 +871,9 @@ sq: message_html: S’keni përcaktuar ndonjë rregull shërbyesi. sidekiq_process_check: message_html: S’ka proces Sidekiq në punë për %{value} radhë. Ju lutemi, shqyrtoni formësimin tuaj për Sidekiq-un + software_version_check: + action: Shihni përditësimet e gatshme + message_html: Ka gati një përditësim Mastodon-i. software_version_critical_check: action: Shihni përditësimet e gatshme message_html: Ka të gatshëm një përditësim kritik të Mastodon-it, ju lutemi, përditësojeni sa më shpejt të jetë e mundur. diff --git a/config/locales/tr.yml b/config/locales/tr.yml index d2cf412cc9..2935948a47 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1692,6 +1692,7 @@ tr: delete: Hesap silme development: Geliştirme edit_profile: Profili düzenle + export: Dışa Aktar featured_tags: Öne çıkan etiketler import: İçe aktar import_and_export: İçe ve dışa aktar diff --git a/config/locales/uk.yml b/config/locales/uk.yml index d0164d846a..de1847a745 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -903,6 +903,9 @@ uk: message_html: Ви не визначили будь-які правила сервера. sidekiq_process_check: message_html: Не працює процес Sidekiq для %{value} черги. Перегляньте конфігурації вашого Sidekiq + software_version_check: + action: Переглянути доступні оновлення + message_html: Доступне оновлення Mastodon. software_version_critical_check: action: Переглянути доступні оновлення message_html: Виявлено критичне оновлення Mastodon. Оновіться якнайшвидше. @@ -1744,6 +1747,7 @@ uk: delete: Видалення облікового запису development: Розробка edit_profile: Редагувати профіль + export: Експорт featured_tags: Рекомендовані хештеґи import: Імпорт import_and_export: Імпорт та експорт diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index ade35ceb62..a73871115b 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -861,6 +861,9 @@ zh-CN: message_html: 你没有定义任何服务器规则。 sidekiq_process_check: message_html: "%{value} 队列未运行任何 Sidekiq 进程。请检查你的 Sidekiq 配置" + software_version_check: + action: 查看可用更新 + message_html: 有一个 Mastodon 更新可用。 software_version_critical_check: action: 查看可用更新 message_html: 有一个紧急Mastodon紧急更新可用,请尽快更新。 @@ -1666,6 +1669,7 @@ zh-CN: delete: 删除账户 development: 开发 edit_profile: 更改个人资料 + export: 导出 featured_tags: 精选的话题标签 import: 导入 import_and_export: 导入和导出 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 41c4c8a534..4079f68a50 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -863,6 +863,9 @@ zh-TW: message_html: 您尚未定義任何伺服器規則。 sidekiq_process_check: message_html: 沒有佇列 %{value} 的 Sidekiq 行程,請檢查您的 Sidekiq 設定組態 + software_version_check: + action: 檢視可取得的更新 + message_html: 有可取得的 Mastodon 更新。 software_version_critical_check: action: 檢視可取得的更新 message_html: 有可取得的重要 Mastodon 更新,請立即升級。 From 675ec1a0adf9b179c9b5fe407f7926c94266dd69 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 04:18:42 -0400 Subject: [PATCH 16/68] Only show recently used tags hint when they are present (#32120) --- app/helpers/settings_helper.rb | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb index 64f2ad70a6..fd631ce92e 100644 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -10,16 +10,17 @@ module SettingsHelper end def featured_tags_hint(recently_used_tags) - safe_join( - [ - t('simple_form.hints.featured_tag.name'), - safe_join( - links_for_featured_tags(recently_used_tags), - ', ' - ), - ], - ' ' - ) + recently_used_tags.present? && + safe_join( + [ + t('simple_form.hints.featured_tag.name'), + safe_join( + links_for_featured_tags(recently_used_tags), + ', ' + ), + ], + ' ' + ) end def session_device_icon(session) From 04dd3a9eb6f28eb6387dd480b0556e5f7aba772b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 04:20:21 -0400 Subject: [PATCH 17/68] Wrap webhook event label with `samp` tag (#32115) --- app/views/admin/webhooks/_form.html.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/admin/webhooks/_form.html.haml b/app/views/admin/webhooks/_form.html.haml index 2b948b9a6a..bdba08a454 100644 --- a/app/views/admin/webhooks/_form.html.haml +++ b/app/views/admin/webhooks/_form.html.haml @@ -13,7 +13,8 @@ as: :check_boxes, collection_wrapper_tag: 'ul', item_wrapper_tag: 'li', - disabled: Webhook::EVENTS.filter { |event| !current_user.role.can?(Webhook.permission_for_event(event)) } + disabled: Webhook::EVENTS.filter { |event| !current_user.role.can?(Webhook.permission_for_event(event)) }, + label_method: ->(event) { tag.samp(event) } .fields-group = form.input :template, From e02e88bff4ad5f5acd017fa340f745b87f430a46 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 04:21:27 -0400 Subject: [PATCH 18/68] Use previously extracted model constants in form `maxlength` attributes (#32113) --- app/models/form/admin_settings.rb | 4 +++- app/views/admin/settings/branding/show.html.haml | 2 +- app/views/auth/registrations/new.html.haml | 2 +- app/views/disputes/strikes/show.html.haml | 2 +- app/views/settings/profiles/show.html.haml | 8 ++++---- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 85b913cf80..515909d5cf 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -73,6 +73,8 @@ class Form::AdminSettings authorized_fetch: :authorized_fetch_mode?, }.freeze + DESCRIPTION_LIMIT = 200 + attr_accessor(*KEYS) validates :registrations_mode, inclusion: { in: %w(open approved none) }, if: -> { defined?(@registrations_mode) } @@ -82,7 +84,7 @@ class Form::AdminSettings validates :show_domain_blocks, inclusion: { in: %w(disabled users all) }, if: -> { defined?(@show_domain_blocks) } validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }, if: -> { defined?(@show_domain_blocks_rationale) } validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true }, allow_blank: true, if: -> { defined?(@media_cache_retention_period) || defined?(@content_cache_retention_period) || defined?(@backups_retention_period) } - validates :site_short_description, length: { maximum: 200 }, if: -> { defined?(@site_short_description) } + validates :site_short_description, length: { maximum: DESCRIPTION_LIMIT }, if: -> { defined?(@site_short_description) } validates :status_page_url, url: true, allow_blank: true validate :validate_site_uploads diff --git a/app/views/admin/settings/branding/show.html.haml b/app/views/admin/settings/branding/show.html.haml index e03c16a25a..62e9c72459 100644 --- a/app/views/admin/settings/branding/show.html.haml +++ b/app/views/admin/settings/branding/show.html.haml @@ -25,7 +25,7 @@ .fields-group = f.input :site_short_description, as: :text, - input_html: { rows: 2, maxlength: 200 }, + input_html: { rows: 2, maxlength: Form::AdminSettings::DESCRIPTION_LIMIT }, wrapper: :with_block_label .fields-row diff --git a/app/views/auth/registrations/new.html.haml b/app/views/auth/registrations/new.html.haml index 1e5aac2976..d58f1ccf4d 100644 --- a/app/views/auth/registrations/new.html.haml +++ b/app/views/auth/registrations/new.html.haml @@ -21,7 +21,7 @@ = f.simple_fields_for :account do |ff| = ff.input :username, append: "@#{site_hostname}", - input_html: { 'aria-label': t('simple_form.labels.defaults.username'), autocomplete: 'off', placeholder: t('simple_form.labels.defaults.username'), pattern: '[a-zA-Z0-9_]+', maxlength: 30 }, + input_html: { 'aria-label': t('simple_form.labels.defaults.username'), autocomplete: 'off', placeholder: t('simple_form.labels.defaults.username'), pattern: '[a-zA-Z0-9_]+', maxlength: Account::USERNAME_LENGTH_LIMIT }, label: false, required: true, wrapper: :with_label diff --git a/app/views/disputes/strikes/show.html.haml b/app/views/disputes/strikes/show.html.haml index 2bfecebbff..150dc06759 100644 --- a/app/views/disputes/strikes/show.html.haml +++ b/app/views/disputes/strikes/show.html.haml @@ -76,7 +76,7 @@ = simple_form_for(@appeal, url: disputes_strike_appeal_path(@strike)) do |f| .fields-group - = f.input :text, wrapper: :with_label, input_html: { maxlength: 500 } + = f.input :text, wrapper: :with_label, input_html: { maxlength: Appeal::TEXT_LENGTH_LIMIT } .actions = f.button :button, t('disputes.strikes.appeals.submit'), type: :submit diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index 9790df7d05..8fb2132519 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -15,10 +15,10 @@ .fields-row .fields-row__column.fields-row__column-6 .fields-group - = f.input :display_name, wrapper: :with_block_label, input_html: { maxlength: 30, data: { default: @account.username } } + = f.input :display_name, wrapper: :with_block_label, input_html: { maxlength: Account::DISPLAY_NAME_LENGTH_LIMIT, data: { default: @account.username } } .fields-group - = f.input :note, wrapper: :with_block_label, input_html: { maxlength: 500 } + = f.input :note, wrapper: :with_block_label, input_html: { maxlength: Account::NOTE_LENGTH_LIMIT } .fields-row__column.fields-group.fields-row__column-6 .input.with_block_label @@ -27,8 +27,8 @@ = f.simple_fields_for :fields do |fields_f| .row - = fields_f.input :name, placeholder: t('simple_form.labels.account.fields.name'), input_html: { maxlength: 255 } - = fields_f.input :value, placeholder: t('simple_form.labels.account.fields.value'), input_html: { maxlength: 255 } + = fields_f.input :name, placeholder: t('simple_form.labels.account.fields.name'), input_html: { maxlength: Account::Field::MAX_CHARACTERS_LOCAL } + = fields_f.input :value, placeholder: t('simple_form.labels.account.fields.value'), input_html: { maxlength: Account::Field::MAX_CHARACTERS_LOCAL } .fields-row .fields-row__column.fields-row__column-6 From cdd7526531f3b2f2fa39497ce2d89002b4f428e3 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 04:22:40 -0400 Subject: [PATCH 19/68] Remove completed TODO note in tags request spec (#32108) --- spec/requests/tags_spec.rb | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/spec/requests/tags_spec.rb b/spec/requests/tags_spec.rb index 7974a6b152..fbd1f7d56e 100644 --- a/spec/requests/tags_spec.rb +++ b/spec/requests/tags_spec.rb @@ -7,18 +7,6 @@ RSpec.describe 'Tags' do context 'when tag exists' do let(:tag) { Fabricate :tag } - context 'with HTML format' do - # TODO: Update the have_cacheable_headers matcher to operate on capybara sessions - # Remove this example, rely on system spec (which should use matcher) - before { get tag_path(tag) } - - it 'returns http success' do - expect(response) - .to have_http_status(200) - .and have_cacheable_headers.with_vary('Accept, Accept-Language, Cookie') - end - end - context 'with JSON format' do before { get tag_path(tag, format: :json) } From 11a12e56b3480ac03921e831a7ccfcc7ade24b52 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 27 Sep 2024 17:09:39 +0200 Subject: [PATCH 20/68] Change media reordering design in the compose form in web UI (#32093) --- .../features/compose/components/upload.jsx | 81 -------- .../features/compose/components/upload.tsx | 130 ++++++++++++ .../compose/components/upload_form.jsx | 53 ----- .../compose/components/upload_form.tsx | 185 ++++++++++++++++++ app/javascript/mastodon/locales/en.json | 5 + .../mastodon/models/media_attachment.ts | 2 + .../styles/mastodon/components.scss | 59 ++++-- package.json | 3 + yarn.lock | 59 ++++++ 9 files changed, 423 insertions(+), 154 deletions(-) delete mode 100644 app/javascript/mastodon/features/compose/components/upload.jsx create mode 100644 app/javascript/mastodon/features/compose/components/upload.tsx delete mode 100644 app/javascript/mastodon/features/compose/components/upload_form.jsx create mode 100644 app/javascript/mastodon/features/compose/components/upload_form.tsx create mode 100644 app/javascript/mastodon/models/media_attachment.ts diff --git a/app/javascript/mastodon/features/compose/components/upload.jsx b/app/javascript/mastodon/features/compose/components/upload.jsx deleted file mode 100644 index 7f6ef6cfd8..0000000000 --- a/app/javascript/mastodon/features/compose/components/upload.jsx +++ /dev/null @@ -1,81 +0,0 @@ -import PropTypes from 'prop-types'; -import { useCallback } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import classNames from 'classnames'; - -import { useDispatch, useSelector } from 'react-redux'; - -import spring from 'react-motion/lib/spring'; - -import CloseIcon from '@/material-icons/400-20px/close.svg?react'; -import EditIcon from '@/material-icons/400-24px/edit.svg?react'; -import WarningIcon from '@/material-icons/400-24px/warning.svg?react'; -import { undoUploadCompose, initMediaEditModal } from 'mastodon/actions/compose'; -import { Blurhash } from 'mastodon/components/blurhash'; -import { Icon } from 'mastodon/components/icon'; -import Motion from 'mastodon/features/ui/util/optional_motion'; - -export const Upload = ({ id, onDragStart, onDragEnter, onDragEnd }) => { - const dispatch = useDispatch(); - const media = useSelector(state => state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id)); - const sensitive = useSelector(state => state.getIn(['compose', 'spoiler'])); - - const handleUndoClick = useCallback(() => { - dispatch(undoUploadCompose(id)); - }, [dispatch, id]); - - const handleFocalPointClick = useCallback(() => { - dispatch(initMediaEditModal(id)); - }, [dispatch, id]); - - const handleDragStart = useCallback(() => { - onDragStart(id); - }, [onDragStart, id]); - - const handleDragEnter = useCallback(() => { - onDragEnter(id); - }, [onDragEnter, id]); - - if (!media) { - return null; - } - - const focusX = media.getIn(['meta', 'focus', 'x']); - const focusY = media.getIn(['meta', 'focus', 'y']); - const x = ((focusX / 2) + .5) * 100; - const y = ((focusY / -2) + .5) * 100; - const missingDescription = (media.get('description') || '').length === 0; - - return ( -
- - {({ scale }) => ( -
- {sensitive && } - -
- - -
- -
- -
-
- )} -
-
- ); -}; - -Upload.propTypes = { - id: PropTypes.string, - onDragEnter: PropTypes.func, - onDragStart: PropTypes.func, - onDragEnd: PropTypes.func, -}; diff --git a/app/javascript/mastodon/features/compose/components/upload.tsx b/app/javascript/mastodon/features/compose/components/upload.tsx new file mode 100644 index 0000000000..3a24b28291 --- /dev/null +++ b/app/javascript/mastodon/features/compose/components/upload.tsx @@ -0,0 +1,130 @@ +import { useCallback } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import classNames from 'classnames'; + +import { useSortable } from '@dnd-kit/sortable'; +import { CSS } from '@dnd-kit/utilities'; + +import CloseIcon from '@/material-icons/400-20px/close.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import WarningIcon from '@/material-icons/400-24px/warning.svg?react'; +import { + undoUploadCompose, + initMediaEditModal, +} from 'mastodon/actions/compose'; +import { Blurhash } from 'mastodon/components/blurhash'; +import { Icon } from 'mastodon/components/icon'; +import type { MediaAttachment } from 'mastodon/models/media_attachment'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +export const Upload: React.FC<{ + id: string; + dragging?: boolean; + overlay?: boolean; + tall?: boolean; + wide?: boolean; +}> = ({ id, dragging, overlay, tall, wide }) => { + const dispatch = useAppDispatch(); + const media = useAppSelector( + (state) => + state.compose // eslint-disable-line @typescript-eslint/no-unsafe-call + .get('media_attachments') // eslint-disable-line @typescript-eslint/no-unsafe-member-access + .find((item: MediaAttachment) => item.get('id') === id) as // eslint-disable-line @typescript-eslint/no-unsafe-member-access + | MediaAttachment + | undefined, + ); + const sensitive = useAppSelector( + (state) => state.compose.get('spoiler') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + ); + + const handleUndoClick = useCallback(() => { + dispatch(undoUploadCompose(id)); + }, [dispatch, id]); + + const handleFocalPointClick = useCallback(() => { + dispatch(initMediaEditModal(id)); + }, [dispatch, id]); + + const { attributes, listeners, setNodeRef, transform, transition } = + useSortable({ id }); + + if (!media) { + return null; + } + + const focusX = media.getIn(['meta', 'focus', 'x']) as number; + const focusY = media.getIn(['meta', 'focus', 'y']) as number; + const x = (focusX / 2 + 0.5) * 100; + const y = (focusY / -2 + 0.5) * 100; + const missingDescription = + ((media.get('description') as string | undefined) ?? '').length === 0; + + const style = { + transform: CSS.Transform.toString(transform), + transition, + }; + + return ( +
+
+ {sensitive && ( + + )} + +
+ + +
+ +
+ +
+
+
+ ); +}; diff --git a/app/javascript/mastodon/features/compose/components/upload_form.jsx b/app/javascript/mastodon/features/compose/components/upload_form.jsx deleted file mode 100644 index adf5591382..0000000000 --- a/app/javascript/mastodon/features/compose/components/upload_form.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import { useRef, useCallback } from 'react'; - -import { useSelector, useDispatch } from 'react-redux'; - -import { changeMediaOrder } from 'mastodon/actions/compose'; - -import { Upload } from './upload'; -import { UploadProgress } from './upload_progress'; - -export const UploadForm = () => { - const dispatch = useDispatch(); - const mediaIds = useSelector(state => state.getIn(['compose', 'media_attachments']).map(item => item.get('id'))); - const active = useSelector(state => state.getIn(['compose', 'is_uploading'])); - const progress = useSelector(state => state.getIn(['compose', 'progress'])); - const isProcessing = useSelector(state => state.getIn(['compose', 'is_processing'])); - - const dragItem = useRef(); - const dragOverItem = useRef(); - - const handleDragStart = useCallback(id => { - dragItem.current = id; - }, [dragItem]); - - const handleDragEnter = useCallback(id => { - dragOverItem.current = id; - }, [dragOverItem]); - - const handleDragEnd = useCallback(() => { - dispatch(changeMediaOrder(dragItem.current, dragOverItem.current)); - dragItem.current = null; - dragOverItem.current = null; - }, [dispatch, dragItem, dragOverItem]); - - return ( - <> - - - {mediaIds.size > 0 && ( -
- {mediaIds.map(id => ( - - ))} -
- )} - - ); -}; diff --git a/app/javascript/mastodon/features/compose/components/upload_form.tsx b/app/javascript/mastodon/features/compose/components/upload_form.tsx new file mode 100644 index 0000000000..1c01c2bd9c --- /dev/null +++ b/app/javascript/mastodon/features/compose/components/upload_form.tsx @@ -0,0 +1,185 @@ +import { useState, useCallback, useMemo } from 'react'; + +import { useIntl, defineMessages } from 'react-intl'; + +import type { List } from 'immutable'; + +import type { + DragStartEvent, + DragEndEvent, + UniqueIdentifier, + Announcements, + ScreenReaderInstructions, +} from '@dnd-kit/core'; +import { + DndContext, + closestCenter, + KeyboardSensor, + PointerSensor, + useSensor, + useSensors, + DragOverlay, +} from '@dnd-kit/core'; +import { + SortableContext, + sortableKeyboardCoordinates, + rectSortingStrategy, +} from '@dnd-kit/sortable'; + +import { changeMediaOrder } from 'mastodon/actions/compose'; +import type { MediaAttachment } from 'mastodon/models/media_attachment'; +import { useAppSelector, useAppDispatch } from 'mastodon/store'; + +import { Upload } from './upload'; +import { UploadProgress } from './upload_progress'; + +const messages = defineMessages({ + screenReaderInstructions: { + id: 'upload_form.drag_and_drop.instructions', + defaultMessage: + '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.', + }, + onDragStart: { + id: 'upload_form.drag_and_drop.on_drag_start', + defaultMessage: 'Picked up media attachment {item}.', + }, + onDragOver: { + id: 'upload_form.drag_and_drop.on_drag_over', + defaultMessage: 'Media attachment {item} was moved.', + }, + onDragEnd: { + id: 'upload_form.drag_and_drop.on_drag_end', + defaultMessage: 'Media attachment {item} was dropped.', + }, + onDragCancel: { + id: 'upload_form.drag_and_drop.on_drag_cancel', + defaultMessage: + 'Dragging was cancelled. Media attachment {item} was dropped.', + }, +}); + +export const UploadForm: React.FC = () => { + const dispatch = useAppDispatch(); + const intl = useIntl(); + const mediaIds = useAppSelector( + (state) => + state.compose // eslint-disable-line @typescript-eslint/no-unsafe-call + .get('media_attachments') // eslint-disable-line @typescript-eslint/no-unsafe-member-access + .map((item: MediaAttachment) => item.get('id')) as List, // eslint-disable-line @typescript-eslint/no-unsafe-member-access + ); + const active = useAppSelector( + (state) => state.compose.get('is_uploading') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + ); + const progress = useAppSelector( + (state) => state.compose.get('progress') as number, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + ); + const isProcessing = useAppSelector( + (state) => state.compose.get('is_processing') as boolean, // eslint-disable-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + ); + const [activeId, setActiveId] = useState(null); + const sensors = useSensors( + useSensor(PointerSensor, { + activationConstraint: { + distance: 5, + }, + }), + useSensor(KeyboardSensor, { + coordinateGetter: sortableKeyboardCoordinates, + }), + ); + + const handleDragStart = useCallback( + (e: DragStartEvent) => { + const { active } = e; + + setActiveId(active.id); + }, + [setActiveId], + ); + + const handleDragEnd = useCallback( + (e: DragEndEvent) => { + const { active, over } = e; + + if (over && active.id !== over.id) { + dispatch(changeMediaOrder(active.id, over.id)); + } + + setActiveId(null); + }, + [dispatch, setActiveId], + ); + + const accessibility: { + screenReaderInstructions: ScreenReaderInstructions; + announcements: Announcements; + } = useMemo( + () => ({ + screenReaderInstructions: { + draggable: intl.formatMessage(messages.screenReaderInstructions), + }, + + announcements: { + onDragStart({ active }) { + return intl.formatMessage(messages.onDragStart, { item: active.id }); + }, + + onDragOver({ active }) { + return intl.formatMessage(messages.onDragOver, { item: active.id }); + }, + + onDragEnd({ active }) { + return intl.formatMessage(messages.onDragEnd, { item: active.id }); + }, + + onDragCancel({ active }) { + return intl.formatMessage(messages.onDragCancel, { item: active.id }); + }, + }, + }), + [intl], + ); + + return ( + <> + + + {mediaIds.size > 0 && ( +
+ + + {mediaIds.map((id, idx) => ( + + ))} + + + + {activeId ? : null} + + +
+ )} + + ); +}; diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index e86e300bcb..1e78745359 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.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/models/media_attachment.ts b/app/javascript/mastodon/models/media_attachment.ts new file mode 100644 index 0000000000..0e5b9ab555 --- /dev/null +++ b/app/javascript/mastodon/models/media_attachment.ts @@ -0,0 +1,2 @@ +// Temporary until we type it correctly +export type MediaAttachment = Immutable.Map; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 8cb63e42e6..14de6e6818 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -653,19 +653,39 @@ body > [data-popper-placement] { } &__uploads { - display: flex; - gap: 8px; padding: 0 12px; - flex-wrap: wrap; - align-self: stretch; - align-items: flex-start; - align-content: flex-start; - justify-content: center; + aspect-ratio: 3/2; + } + + .media-gallery { + gap: 8px; } &__upload { - flex: 1 1 0; - min-width: calc(50% - 8px); + position: relative; + cursor: grab; + + &.dragging { + opacity: 0; + } + + &.overlay { + height: 100%; + border-radius: 8px; + pointer-events: none; + } + + &__drag-handle { + position: absolute; + top: 50%; + inset-inline-start: 0; + transform: translateY(-50%); + color: $white; + background: transparent; + border: 0; + padding: 8px 3px; + cursor: grab; + } &__actions { display: flex; @@ -686,8 +706,7 @@ body > [data-popper-placement] { &__thumbnail { width: 100%; - height: 144px; - border-radius: 6px; + height: 100%; background-position: center; background-size: cover; background-repeat: no-repeat; @@ -7098,30 +7117,30 @@ a.status-card { gap: 2px; &--layout-2 { - .media-gallery__item:nth-child(1) { + & > .media-gallery__item:nth-child(1) { border-end-end-radius: 0; border-start-end-radius: 0; } - .media-gallery__item:nth-child(2) { + & > .media-gallery__item:nth-child(2) { border-start-start-radius: 0; border-end-start-radius: 0; } } &--layout-3 { - .media-gallery__item:nth-child(1) { + & > .media-gallery__item:nth-child(1) { border-end-end-radius: 0; border-start-end-radius: 0; } - .media-gallery__item:nth-child(2) { + & > .media-gallery__item:nth-child(2) { border-start-start-radius: 0; border-end-start-radius: 0; border-end-end-radius: 0; } - .media-gallery__item:nth-child(3) { + & > .media-gallery__item:nth-child(3) { border-start-start-radius: 0; border-end-start-radius: 0; border-start-end-radius: 0; @@ -7129,26 +7148,26 @@ a.status-card { } &--layout-4 { - .media-gallery__item:nth-child(1) { + & > .media-gallery__item:nth-child(1) { border-end-end-radius: 0; border-start-end-radius: 0; border-end-start-radius: 0; } - .media-gallery__item:nth-child(2) { + & > .media-gallery__item:nth-child(2) { border-start-start-radius: 0; border-end-start-radius: 0; border-end-end-radius: 0; } - .media-gallery__item:nth-child(3) { + & > .media-gallery__item:nth-child(3) { border-start-start-radius: 0; border-start-end-radius: 0; border-end-start-radius: 0; border-end-end-radius: 0; } - .media-gallery__item:nth-child(4) { + & > .media-gallery__item:nth-child(4) { border-start-start-radius: 0; border-end-start-radius: 0; border-start-end-radius: 0; diff --git a/package.json b/package.json index 08fec76465..7a6dee1311 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,9 @@ "@babel/preset-react": "^7.22.3", "@babel/preset-typescript": "^7.21.5", "@babel/runtime": "^7.22.3", + "@dnd-kit/core": "^6.1.0", + "@dnd-kit/sortable": "^8.0.0", + "@dnd-kit/utilities": "^3.2.2", "@formatjs/intl-pluralrules": "^5.2.2", "@gamestdio/websocket": "^0.3.2", "@github/webauthn-json": "^2.1.1", diff --git a/yarn.lock b/yarn.lock index eff88f772e..62a538b42c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2010,6 +2010,55 @@ __metadata: languageName: node linkType: hard +"@dnd-kit/accessibility@npm:^3.1.0": + version: 3.1.0 + resolution: "@dnd-kit/accessibility@npm:3.1.0" + dependencies: + tslib: "npm:^2.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/4f9d24e801d66d4fbb551ec389ed90424dd4c5bbdf527000a618e9abb9833cbd84d9a79e362f470ccbccfbd6d00217a9212c92f3cef66e01c951c7f79625b9d7 + languageName: node + linkType: hard + +"@dnd-kit/core@npm:^6.1.0": + version: 6.1.0 + resolution: "@dnd-kit/core@npm:6.1.0" + dependencies: + "@dnd-kit/accessibility": "npm:^3.1.0" + "@dnd-kit/utilities": "npm:^3.2.2" + tslib: "npm:^2.0.0" + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 10c0/c793eb97cb59285ca8937ebcdfcd27cff09d750ae06722e36ca5ed07925e41abc36a38cff98f9f6056f7a07810878d76909826142a2968330e7e22060e6be584 + languageName: node + linkType: hard + +"@dnd-kit/sortable@npm:^8.0.0": + version: 8.0.0 + resolution: "@dnd-kit/sortable@npm:8.0.0" + dependencies: + "@dnd-kit/utilities": "npm:^3.2.2" + tslib: "npm:^2.0.0" + peerDependencies: + "@dnd-kit/core": ^6.1.0 + react: ">=16.8.0" + checksum: 10c0/a6066c652b892c6a11320c7d8f5c18fdf723e721e8eea37f4ab657dee1ac5e7ca710ac32ce0712a57fe968bc07c13bcea5d5599d90dfdd95619e162befd4d2fb + languageName: node + linkType: hard + +"@dnd-kit/utilities@npm:^3.2.2": + version: 3.2.2 + resolution: "@dnd-kit/utilities@npm:3.2.2" + dependencies: + tslib: "npm:^2.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/9aa90526f3e3fd567b5acc1b625a63177b9e8d00e7e50b2bd0e08fa2bf4dba7e19529777e001fdb8f89a7ce69f30b190c8364d390212634e0afdfa8c395e85a0 + languageName: node + linkType: hard + "@dual-bundle/import-meta-resolve@npm:^4.1.0": version: 4.1.0 resolution: "@dual-bundle/import-meta-resolve@npm:4.1.0" @@ -2753,6 +2802,9 @@ __metadata: "@babel/preset-react": "npm:^7.22.3" "@babel/preset-typescript": "npm:^7.21.5" "@babel/runtime": "npm:^7.22.3" + "@dnd-kit/core": "npm:^6.1.0" + "@dnd-kit/sortable": "npm:^8.0.0" + "@dnd-kit/utilities": "npm:^3.2.2" "@formatjs/cli": "npm:^6.1.1" "@formatjs/intl-pluralrules": "npm:^5.2.2" "@gamestdio/websocket": "npm:^0.3.2" @@ -17205,6 +17257,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.0.0": + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 + languageName: node + linkType: hard + "tslib@npm:^2.4.0, tslib@npm:^2.6.2": version: 2.6.3 resolution: "tslib@npm:2.6.3" From 24d3ce7bab2becc345152a143224924044ebe33c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 15:38:44 -0400 Subject: [PATCH 21/68] Add `no-toolbar` state for "nothing here" batch table views (#32128) --- app/javascript/styles/mastodon/tables.scss | 4 ++++ app/views/admin/tags/index.html.haml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/tables.scss b/app/javascript/styles/mastodon/tables.scss index 2becd85bc6..af8ccf5b38 100644 --- a/app/javascript/styles/mastodon/tables.scss +++ b/app/javascript/styles/mastodon/tables.scss @@ -359,6 +359,10 @@ a.table-action-link { @media screen and (max-width: $no-gap-breakpoint) { border-top: 1px solid var(--background-border-color); } + + &--no-toolbar { + border-top: 1px solid var(--background-border-color); + } } @media screen and (width <= 870px) { diff --git a/app/views/admin/tags/index.html.haml b/app/views/admin/tags/index.html.haml index 8d76d8ffa7..be699e5ab2 100644 --- a/app/views/admin/tags/index.html.haml +++ b/app/views/admin/tags/index.html.haml @@ -32,7 +32,7 @@ .batch-table .batch-table__body - if @tags.empty? - = nothing_here 'nothing-here--under-tabs' + = nothing_here 'nothing-here--under-tabs nothing-here--no-toolbar' - else = render partial: 'tag', collection: @tags From 9d664f87a04b6a5157ddbe60ee33b5b7a960198e Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 27 Sep 2024 21:41:41 +0200 Subject: [PATCH 22/68] Mailer layout fixes (#32132) --- app/javascript/styles/mailer.scss | 2 ++ app/views/user_mailer/welcome.html.haml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mailer.scss b/app/javascript/styles/mailer.scss index 2c1b443cb5..f46160889a 100644 --- a/app/javascript/styles/mailer.scss +++ b/app/javascript/styles/mailer.scss @@ -366,6 +366,7 @@ table + p { .email-header-card-banner-td { border-radius: 12px 12px 0 0; + width: 236px; height: 80px; background-color: #f3f2f5 !important; background-position: center !important; @@ -523,6 +524,7 @@ table + p { height: 40px; text-align: center; mso-padding-alt: 0 35px; + word-break: normal; } .email-btn-a { diff --git a/app/views/user_mailer/welcome.html.haml b/app/views/user_mailer/welcome.html.haml index 0f9cbf36ff..efc6cad393 100644 --- a/app/views/user_mailer/welcome.html.haml +++ b/app/views/user_mailer/welcome.html.haml @@ -9,7 +9,7 @@ %td %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.email-header-card-banner-td{ height: 140, background: full_asset_url(instance_presenter.thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png')) } + %td.email-header-card-banner-td{ background: full_asset_url(instance_presenter.thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png')) } %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-header-card-body-td From 7b290cee47dec7cbe734e4363b866f7c1fa8e338 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 25 Sep 2024 20:13:36 +0200 Subject: [PATCH 23/68] [Glitch] Add preview of followers removed in domain block modal in web UI Port 3426ea2912d1cd69ebdfa4e43a119dc6e7374c49 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/api.ts | 1 + .../flavours/glitch/components/button.tsx | 3 + .../features/ui/components/block_modal.jsx | 2 +- .../ui/components/domain_block_modal.jsx | 106 --------- .../ui/components/domain_block_modal.tsx | 204 ++++++++++++++++++ .../flavours/glitch/styles/components.scss | 20 ++ .../flavours/glitch/styles/variables.scss | 3 + 7 files changed, 232 insertions(+), 107 deletions(-) delete mode 100644 app/javascript/flavours/glitch/features/ui/components/domain_block_modal.jsx create mode 100644 app/javascript/flavours/glitch/features/ui/components/domain_block_modal.tsx diff --git a/app/javascript/flavours/glitch/api.ts b/app/javascript/flavours/glitch/api.ts index 25bb25547c..51cbe0b695 100644 --- a/app/javascript/flavours/glitch/api.ts +++ b/app/javascript/flavours/glitch/api.ts @@ -70,6 +70,7 @@ export async function apiRequest( args: { params?: RequestParamsOrData; data?: RequestParamsOrData; + timeout?: number; } = {}, ) { const { data } = await api().request({ diff --git a/app/javascript/flavours/glitch/components/button.tsx b/app/javascript/flavours/glitch/components/button.tsx index c76aaea42f..3e720f7cee 100644 --- a/app/javascript/flavours/glitch/components/button.tsx +++ b/app/javascript/flavours/glitch/components/button.tsx @@ -7,6 +7,7 @@ interface BaseProps extends Omit, 'children'> { block?: boolean; secondary?: boolean; + dangerous?: boolean; } interface PropsChildren extends PropsWithChildren { @@ -26,6 +27,7 @@ export const Button: React.FC = ({ disabled, block, secondary, + dangerous, className, title, text, @@ -46,6 +48,7 @@ export const Button: React.FC = ({ className={classNames('button', className, { 'button-secondary': secondary, 'button--block': block, + 'button--dangerous': dangerous, })} disabled={disabled} onClick={handleClick} diff --git a/app/javascript/flavours/glitch/features/ui/components/block_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/block_modal.jsx index a5ee7bfa4f..2d835eb8ca 100644 --- a/app/javascript/flavours/glitch/features/ui/components/block_modal.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/block_modal.jsx @@ -99,7 +99,7 @@ export const BlockModal = ({ accountId, acct }) => { -
diff --git a/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.jsx deleted file mode 100644 index 8b06389179..0000000000 --- a/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.jsx +++ /dev/null @@ -1,106 +0,0 @@ -import PropTypes from 'prop-types'; -import { useCallback } from 'react'; - -import { FormattedMessage } from 'react-intl'; - -import { useDispatch } from 'react-redux'; - -import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; -import DomainDisabledIcon from '@/material-icons/400-24px/domain_disabled.svg?react'; -import HistoryIcon from '@/material-icons/400-24px/history.svg?react'; -import PersonRemoveIcon from '@/material-icons/400-24px/person_remove.svg?react'; -import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; -import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; -import { blockAccount } from 'flavours/glitch/actions/accounts'; -import { blockDomain } from 'flavours/glitch/actions/domain_blocks'; -import { closeModal } from 'flavours/glitch/actions/modal'; -import { Button } from 'flavours/glitch/components/button'; -import { Icon } from 'flavours/glitch/components/icon'; - -export const DomainBlockModal = ({ domain, accountId, acct }) => { - const dispatch = useDispatch(); - - const handleClick = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - dispatch(blockDomain(domain)); - }, [dispatch, domain]); - - const handleSecondaryClick = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - dispatch(blockAccount(accountId)); - }, [dispatch, accountId]); - - const handleCancel = useCallback(() => { - dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); - }, [dispatch]); - - return ( -
-
-
-
- -
- -
-

-
{domain}
-
-
- -
-
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
- -
-
-
-
-
-
- -
-
- - -
- - - - -
-
-
- ); -}; - -DomainBlockModal.propTypes = { - domain: PropTypes.string.isRequired, - accountId: PropTypes.string.isRequired, - acct: PropTypes.string.isRequired, -}; - -export default DomainBlockModal; diff --git a/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.tsx b/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.tsx new file mode 100644 index 0000000000..c5aff4043d --- /dev/null +++ b/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.tsx @@ -0,0 +1,204 @@ +import { useCallback, useEffect, useState } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; +import DomainDisabledIcon from '@/material-icons/400-24px/domain_disabled.svg?react'; +import HistoryIcon from '@/material-icons/400-24px/history.svg?react'; +import PersonRemoveIcon from '@/material-icons/400-24px/person_remove.svg?react'; +import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; +import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; +import { blockAccount } from 'flavours/glitch/actions/accounts'; +import { blockDomain } from 'flavours/glitch/actions/domain_blocks'; +import { closeModal } from 'flavours/glitch/actions/modal'; +import { apiRequest } from 'flavours/glitch/api'; +import { Button } from 'flavours/glitch/components/button'; +import { Icon } from 'flavours/glitch/components/icon'; +import { LoadingIndicator } from 'flavours/glitch/components/loading_indicator'; +import { ShortNumber } from 'flavours/glitch/components/short_number'; +import { useAppDispatch } from 'flavours/glitch/store'; + +interface DomainBlockPreviewResponse { + following_count: number; + followers_count: number; +} + +export const DomainBlockModal: React.FC<{ + domain: string; + accountId: string; + acct: string; +}> = ({ domain, accountId, acct }) => { + const dispatch = useAppDispatch(); + const [loading, setLoading] = useState(true); + const [preview, setPreview] = useState( + null, + ); + + const handleClick = useCallback(() => { + if (loading) { + return; // Prevent destructive action before the preview finishes loading or times out + } + + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + dispatch(blockDomain(domain)); + }, [dispatch, loading, domain]); + + const handleSecondaryClick = useCallback(() => { + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + dispatch(blockAccount(accountId)); + }, [dispatch, accountId]); + + const handleCancel = useCallback(() => { + dispatch(closeModal({ modalType: undefined, ignoreFocus: false })); + }, [dispatch]); + + useEffect(() => { + setLoading(true); + + apiRequest('GET', 'v1/domain_blocks/preview', { + params: { domain }, + timeout: 5000, + }) + .then((data) => { + setPreview(data); + setLoading(false); + return ''; + }) + .catch(() => { + setLoading(false); + }); + }, [setPreview, setLoading, domain]); + + return ( +
+
+
+
+ +
+ +
+

+ +

+
{domain}
+
+
+ +
+ {preview && preview.followers_count + preview.following_count > 0 && ( +
+
+ +
+
+ + + ), + followingCount: preview.following_count, + followingCountDisplay: ( + + ), + }} + /> + +
+
+ )} + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ + +
+ + + + +
+
+
+ ); +}; + +// eslint-disable-next-line import/no-default-export +export default DomainBlockModal; diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 87204d9b63..0d74028801 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -81,6 +81,18 @@ outline: $ui-button-icon-focus-outline; } + &--dangerous { + background-color: var(--error-background-color); + color: var(--on-error-color); + + &:active, + &:focus, + &:hover { + background-color: var(--error-active-background-color); + transition: none; + } + } + &--destructive { &:active, &:focus, @@ -6687,6 +6699,14 @@ a.status-card { display: flex; gap: 16px; align-items: center; + + strong { + font-weight: 700; + } + } + + &--deemphasized { + color: $secondary-text-color; } &__icon { diff --git a/app/javascript/flavours/glitch/styles/variables.scss b/app/javascript/flavours/glitch/styles/variables.scss index 8dd2cd0cda..6485b9e9b9 100644 --- a/app/javascript/flavours/glitch/styles/variables.scss +++ b/app/javascript/flavours/glitch/styles/variables.scss @@ -117,4 +117,7 @@ $dismiss-overlay-width: 4rem; --surface-variant-active-background-color: #{lighten($ui-base-color, 4%)}; --on-surface-color: #{transparentize($ui-base-color, 0.5)}; --avatar-border-radius: 8px; + --error-background-color: #{darken($error-red, 16%)}; + --error-active-background-color: #{darken($error-red, 12%)}; + --on-error-color: #fff; } From 8439084587fa86e5cb4b86a41cb232350ceec668 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 26 Sep 2024 14:47:56 +0200 Subject: [PATCH 24/68] [Glitch] Add fallback to domain block confirmation modal Port 7a62d57427f925f3e7de4444cb25c5c190425161 to glitch-soc Signed-off-by: Claire --- .../ui/components/domain_block_modal.tsx | 51 +++++++++++++------ 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.tsx b/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.tsx index c5aff4043d..b056db7f6f 100644 --- a/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.tsx +++ b/app/javascript/flavours/glitch/features/ui/components/domain_block_modal.tsx @@ -30,9 +30,9 @@ export const DomainBlockModal: React.FC<{ }> = ({ domain, accountId, acct }) => { const dispatch = useAppDispatch(); const [loading, setLoading] = useState(true); - const [preview, setPreview] = useState( - null, - ); + const [preview, setPreview] = useState< + DomainBlockPreviewResponse | 'error' | null + >(null); const handleClick = useCallback(() => { if (loading) { @@ -65,6 +65,7 @@ export const DomainBlockModal: React.FC<{ return ''; }) .catch(() => { + setPreview('error'); setLoading(false); }); }, [setPreview, setLoading, domain]); @@ -89,7 +90,35 @@ export const DomainBlockModal: React.FC<{
- {preview && preview.followers_count + preview.following_count > 0 && ( + {preview && + preview !== 'error' && + preview.followers_count + preview.following_count > 0 && ( +
+
+ +
+
+ + + ), + followingCount: preview.following_count, + followingCountDisplay: ( + + ), + }} + /> + +
+
+ )} + + {preview === 'error' && (
@@ -97,18 +126,8 @@ export const DomainBlockModal: React.FC<{
- ), - followingCount: preview.following_count, - followingCountDisplay: ( - - ), - }} + id='domain_block_modal.you_will_lose_relationships' + defaultMessage='You will lose all followers and people you follow from this server.' />
From 77d2f7eef6facb71832dd97906d94791b0401386 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 26 Sep 2024 16:26:04 +0200 Subject: [PATCH 25/68] [Glitch] Fix scrollbar width Port 89c39e7826bee92ebc537babfc4061bd4d98c8ba to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/reset.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/reset.scss b/app/javascript/flavours/glitch/styles/reset.scss index 5a4152826d..fc0305baf3 100644 --- a/app/javascript/flavours/glitch/styles/reset.scss +++ b/app/javascript/flavours/glitch/styles/reset.scss @@ -56,7 +56,6 @@ table { @supports not selector(::-webkit-scrollbar) { html { scrollbar-color: $action-button-color var(--background-border-color); - scrollbar-width: thin; } } From 3fa34bd73a24ea855c9989ad2cb3a48c6b86b400 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 26 Sep 2024 15:26:40 -0400 Subject: [PATCH 26/68] [Glitch] Use 1 column layout for form `ul` on narrow widths Port 106b22bd2dc2fca8561d36f849c80dd4a918ca2e to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/forms.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index 29f4fe04f7..63346bb5ca 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -313,6 +313,10 @@ code { ul { columns: 2; + + @media screen and (max-width: $mobile-breakpoint) { + columns: 1; + } } } From b8c23f94b09e604acba1a8933450c5368836e8b6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 27 Sep 2024 15:38:44 -0400 Subject: [PATCH 27/68] [Glitch] Add `no-toolbar` state for "nothing here" batch table views Port 24d3ce7bab2becc345152a143224924044ebe33c to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/styles/tables.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/javascript/flavours/glitch/styles/tables.scss b/app/javascript/flavours/glitch/styles/tables.scss index 6c7723b60d..c84f672a6f 100644 --- a/app/javascript/flavours/glitch/styles/tables.scss +++ b/app/javascript/flavours/glitch/styles/tables.scss @@ -355,6 +355,10 @@ a.table-action-link { @media screen and (max-width: $no-gap-breakpoint) { border-top: 1px solid var(--background-border-color); } + + &--no-toolbar { + border-top: 1px solid var(--background-border-color); + } } @media screen and (width <= 870px) { From 157ecf255bdb1ae3290d67175e80f2632205c558 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 25 Sep 2024 18:36:19 +0200 Subject: [PATCH 28/68] [Glitch] Change responsive break points on navigation panel in web UI Port 28c4eca0af696ff039b90b8af57aa818df442edf to glitch-soc Signed-off-by: Claire --- .../glitch/components/navigation_portal.tsx | 32 +++--- .../glitch/features/account/navigation.jsx | 5 +- .../features/ui/components/column_link.jsx | 7 +- .../ui/components/navigation_panel.jsx | 107 ++++++++++-------- .../flavours/glitch/styles/components.scss | 54 +++++---- 5 files changed, 113 insertions(+), 92 deletions(-) diff --git a/app/javascript/flavours/glitch/components/navigation_portal.tsx b/app/javascript/flavours/glitch/components/navigation_portal.tsx index 223cc24232..b10b1f28a9 100644 --- a/app/javascript/flavours/glitch/components/navigation_portal.tsx +++ b/app/javascript/flavours/glitch/components/navigation_portal.tsx @@ -4,22 +4,22 @@ import AccountNavigation from 'flavours/glitch/features/account/navigation'; import Trends from 'flavours/glitch/features/getting_started/containers/trends_container'; import { showTrends } from 'flavours/glitch/initial_state'; -const DefaultNavigation: React.FC = () => - showTrends ? ( - <> -
- - - ) : null; +const DefaultNavigation: React.FC = () => (showTrends ? : null); export const NavigationPortal: React.FC = () => ( - - - - - - - - - +
+ + + + + + + + + +
); diff --git a/app/javascript/flavours/glitch/features/account/navigation.jsx b/app/javascript/flavours/glitch/features/account/navigation.jsx index 4be00c49f2..9505c48d5f 100644 --- a/app/javascript/flavours/glitch/features/account/navigation.jsx +++ b/app/javascript/flavours/glitch/features/account/navigation.jsx @@ -43,10 +43,7 @@ class AccountNavigation extends PureComponent { } return ( - <> -
- - + ); } diff --git a/app/javascript/flavours/glitch/features/ui/components/column_link.jsx b/app/javascript/flavours/glitch/features/ui/components/column_link.jsx index 4445435309..452e810a6d 100644 --- a/app/javascript/flavours/glitch/features/ui/components/column_link.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/column_link.jsx @@ -3,11 +3,11 @@ import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useRouteMatch, NavLink } from 'react-router-dom'; -import { Icon } from 'flavours/glitch/components/icon'; +import { Icon } from 'flavours/glitch/components/icon'; -const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, onClick, href, method, badge, transparent, ...other }) => { +const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, onClick, href, method, badge, transparent, optional, ...other }) => { const match = useRouteMatch(to); - const className = classNames('column-link', { 'column-link--transparent': transparent }); + const className = classNames('column-link', { 'column-link--transparent': transparent, 'column-link--optional': optional }); const badgeElement = typeof badge !== 'undefined' ? {badge} : null; const iconElement = (typeof icon === 'string' || iconComponent) ? : icon; const activeIconElement = activeIcon ?? (activeIconComponent ? : iconElement); @@ -58,6 +58,7 @@ ColumnLink.propTypes = { method: PropTypes.string, badge: PropTypes.node, transparent: PropTypes.bool, + optional: PropTypes.bool, }; export default ColumnLink; diff --git a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx index 3e3fa5d9f1..0d73cd421f 100644 --- a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx @@ -122,14 +122,17 @@ class NavigationPanel extends Component { let banner = undefined; - if(transientSingleColumn) - banner = (
- {intl.formatMessage(messages.openedInClassicInterface)} - {" "} - - {intl.formatMessage(messages.advancedInterface)} - -
); + if (transientSingleColumn) { + banner = ( +
+ {intl.formatMessage(messages.openedInClassicInterface)} + {" "} + + {intl.formatMessage(messages.advancedInterface)} + +
+ ); + } return (
@@ -139,55 +142,59 @@ class NavigationPanel extends Component {
} - {signedIn && ( - <> - - - - - )} +
+ {signedIn && ( + <> + + + + + )} - {trendsEnabled ? ( - - ) : ( - - )} + {trendsEnabled ? ( + + ) : ( + + )} - {(signedIn || timelinePreview) && ( - - )} + {(signedIn || timelinePreview) && ( + + )} - {!signedIn && ( -
+ {!signedIn && ( +
+
+ { disabledAccountId ? : } +
+ )} + + {signedIn && ( + <> + + + + + + + +
+ + {!!preferencesLink && } + + + {canManageReports(permissions) && } + {canViewAdminDashboard(permissions) && } + + )} + +

- { disabledAccountId ? : } +
- )} - - {signedIn && ( - <> - - - - - - - -
- - {!!preferencesLink && } - - - {canManageReports(permissions) && } - {canViewAdminDashboard(permissions) && } - - )} - -
-
-
+
+
); diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 0d74028801..7d580f1af2 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -3684,12 +3684,14 @@ $ui-header-logo-wordmark-width: 99px; margin-top: 10px; margin-bottom: 10px; height: calc(100% - 20px); - overflow-y: auto; + overflow: hidden; display: flex; flex-direction: column; - & > a { - flex: 0 0 auto; + &__menu { + flex: 1 1 auto; + min-height: 0; + overflow-y: auto; } .logo { @@ -3700,6 +3702,36 @@ $ui-header-logo-wordmark-width: 99px; &__logo { margin-bottom: 12px; } + + @media screen and (height <= 710px) { + &__portal { + display: none; + } + } + + @media screen and (height <= 765px) { + &__portal .trends__item:nth-child(n + 3) { + display: none; + } + } + + @media screen and (height <= 820px) { + &__portal .trends__item:nth-child(n + 4) { + display: none; + } + } + + @media screen and (height <= 920px) { + .column-link.column-link--optional { + display: none; + } + } + + @media screen and (height <= 1040px) { + .list-panel { + display: none; + } + } } .navigation-panel, @@ -4063,22 +4095,6 @@ $ui-header-logo-wordmark-width: 99px; } } - @media screen and (height <= 810px) { - .trends__item:nth-of-type(3) { - display: none; - } - } - - @media screen and (height <= 720px) { - .trends__item:nth-of-type(2) { - display: none; - } - } - - @media screen and (height <= 670px) { - display: none; - } - .trends__item { border-bottom: 0; padding: 10px; From 9b5f073cb31e4fe45944a5b535304ee7fdf57a13 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 26 Sep 2024 14:31:32 +0200 Subject: [PATCH 29/68] [Glitch] Change design of media tab on profiles in web UI Port 89df27a06c69818d38621c1147c6724d76beefde to glitch-soc Signed-off-by: Claire --- .../glitch/components/media_gallery.jsx | 13 +- .../flavours/glitch/components/status.jsx | 42 ++-- .../account_gallery/components/media_item.jsx | 158 -------------- .../account_gallery/components/media_item.tsx | 200 ++++++++++++++++++ .../glitch/features/account_gallery/index.jsx | 2 +- .../status/components/detailed_status.tsx | 39 ++-- .../flavours/glitch/models/status.ts | 2 + .../flavours/glitch/styles/components.scss | 99 +++++---- .../flavours/glitch/styles/variables.scss | 2 + 9 files changed, 320 insertions(+), 237 deletions(-) delete mode 100644 app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx create mode 100644 app/javascript/flavours/glitch/features/account_gallery/components/media_item.tsx diff --git a/app/javascript/flavours/glitch/components/media_gallery.jsx b/app/javascript/flavours/glitch/components/media_gallery.jsx index 5be5fb4c58..1e40a26777 100644 --- a/app/javascript/flavours/glitch/components/media_gallery.jsx +++ b/app/javascript/flavours/glitch/components/media_gallery.jsx @@ -11,6 +11,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { debounce } from 'lodash'; import { Blurhash } from 'flavours/glitch/components/blurhash'; +import { formatTime } from 'flavours/glitch/features/video'; import { autoPlayGif, displayMedia, useBlurhash } from '../initial_state'; @@ -58,7 +59,7 @@ class Item extends PureComponent { hoverToPlay () { const { attachment } = this.props; - return !this.getAutoPlay() && attachment.get('type') === 'gifv'; + return !this.getAutoPlay() && ['gifv', 'video'].includes(attachment.get('type')); } handleClick = (e) => { @@ -152,10 +153,15 @@ class Item extends PureComponent { /> ); - } else if (attachment.get('type') === 'gifv') { + } else if (['gifv', 'video'].includes(attachment.get('type'))) { const autoPlay = this.getAutoPlay(); + const duration = attachment.getIn(['meta', 'original', 'duration']); - badges.push(GIF); + if (attachment.get('type') === 'gifv') { + badges.push(GIF); + } else { + badges.push({formatTime(Math.floor(duration))}); + } thumbnail = (
@@ -169,6 +175,7 @@ class Item extends PureComponent { onClick={this.handleClick} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} + onLoadedData={this.handleImageLoad} autoPlay={autoPlay} playsInline loop diff --git a/app/javascript/flavours/glitch/components/status.jsx b/app/javascript/flavours/glitch/components/status.jsx index a037895b4e..493ef4f68a 100644 --- a/app/javascript/flavours/glitch/components/status.jsx +++ b/app/javascript/flavours/glitch/components/status.jsx @@ -648,6 +648,27 @@ class Status extends ImmutablePureComponent { media={status.get('media_attachments')} />, ); + } else if (['image', 'gifv'].includes(status.getIn(['media_attachments', 0, 'type'])) || status.get('media_attachments').size > 1) { + media.push( + + {Component => ( + , + ); + mediaIcons.push('picture-o'); } else if (attachments.getIn([0, 'type']) === 'audio') { const attachment = status.getIn(['media_attachments', 0]); const description = attachment.getIn(['translation', 'description']) || attachment.get('description'); @@ -703,27 +724,6 @@ class Status extends ImmutablePureComponent { , ); mediaIcons.push('video-camera'); - } else { // Media type is 'image' or 'gifv' - media.push( - - {Component => ( - , - ); - mediaIcons.push('picture-o'); } if (!status.get('sensitive') && !(status.get('spoiler_text').length > 0) && settings.getIn(['collapsed', 'backgrounds', 'preview_images'])) { diff --git a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx deleted file mode 100644 index c709e58db1..0000000000 --- a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx +++ /dev/null @@ -1,158 +0,0 @@ -import PropTypes from 'prop-types'; - -import classNames from 'classnames'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -import AudiotrackIcon from '@/material-icons/400-24px/music_note.svg?react'; -import PlayArrowIcon from '@/material-icons/400-24px/play_arrow.svg?react'; -import VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react'; -import { Blurhash } from 'flavours/glitch/components/blurhash'; -import { Icon } from 'flavours/glitch/components/icon'; -import { autoPlayGif, displayMedia, useBlurhash } from 'flavours/glitch/initial_state'; - -export default class MediaItem extends ImmutablePureComponent { - - static propTypes = { - attachment: ImmutablePropTypes.map.isRequired, - displayWidth: PropTypes.number.isRequired, - onOpenMedia: PropTypes.func.isRequired, - }; - - state = { - visible: displayMedia !== 'hide_all' && !this.props.attachment.getIn(['status', 'sensitive']) || displayMedia === 'show_all', - loaded: false, - }; - - handleImageLoad = () => { - this.setState({ loaded: true }); - }; - - handleMouseEnter = e => { - if (this.hoverToPlay()) { - e.target.play(); - } - }; - - handleMouseLeave = e => { - if (this.hoverToPlay()) { - e.target.pause(); - e.target.currentTime = 0; - } - }; - - hoverToPlay () { - return !autoPlayGif && ['gifv', 'video'].indexOf(this.props.attachment.get('type')) !== -1; - } - - handleClick = e => { - if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - e.preventDefault(); - - if (this.state.visible) { - this.props.onOpenMedia(this.props.attachment); - } else { - this.setState({ visible: true }); - } - } - }; - - render () { - const { attachment, displayWidth } = this.props; - const { visible, loaded } = this.state; - - const width = `${Math.floor((displayWidth - 4) / 3) - 4}px`; - const height = width; - const status = attachment.get('status'); - const title = status.get('spoiler_text') || attachment.get('description'); - - let thumbnail, label, icon, content; - - if (!visible) { - icon = ( - - - - ); - } else { - if (['audio', 'video'].includes(attachment.get('type'))) { - content = ( - {attachment.get('description')} - ); - - if (attachment.get('type') === 'audio') { - label = ; - } else { - label = ; - } - } else if (attachment.get('type') === 'image') { - const focusX = attachment.getIn(['meta', 'focus', 'x']) || 0; - const focusY = attachment.getIn(['meta', 'focus', 'y']) || 0; - const x = ((focusX / 2) + .5) * 100; - const y = ((focusY / -2) + .5) * 100; - - content = ( - {attachment.get('description')} - ); - } else if (attachment.get('type') === 'gifv') { - content = ( -
); + const canReact = permissions && status.get('reactions').filter(r => r.get('count') > 0 && r.get('me')).size < maxReactions; + const reactButton = ( + + ); + return (
@@ -339,6 +361,13 @@ class StatusActionBar extends ImmutablePureComponent {
+
+ { + permissions + ? + : reactButton + } +
diff --git a/app/javascript/flavours/glitch/components/status_prepend.jsx b/app/javascript/flavours/glitch/components/status_prepend.jsx index b83767a990..fa54d42f6f 100644 --- a/app/javascript/flavours/glitch/components/status_prepend.jsx +++ b/app/javascript/flavours/glitch/components/status_prepend.jsx @@ -6,6 +6,7 @@ import { FormattedMessage } from 'react-intl'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import AddReactionIcon from '@/material-icons/400-24px/add_reaction.svg?react'; import EditIcon from '@/material-icons/400-24px/edit.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; @@ -70,6 +71,14 @@ export default class StatusPrepend extends PureComponent { values={{ name : link }} /> ); + case 'reaction': + return ( + + ); case 'reblog': return ( x.get('count') > 0) + .sort((a, b) => b.get('count') - a.get('count')); + + if (numVisible >= 0) { + visibleReactions = visibleReactions.filter((_, i) => i < numVisible); + } + + const styles = visibleReactions.map(reaction => ({ + key: reaction.get('name'), + data: reaction, + style: { scale: reduceMotion ? 1 : spring(1, { stiffness: 150, damping: 13 }) }, + })).toArray(); + + return ( + + {items => ( +
+ {items.map(({ key, data, style }) => ( + + ))} +
+ )} +
+ ); + } + +} + +class Reaction extends ImmutablePureComponent { + + static propTypes = { + statusId: PropTypes.string, + reaction: ImmutablePropTypes.map.isRequired, + addReaction: PropTypes.func.isRequired, + removeReaction: PropTypes.func.isRequired, + canReact: PropTypes.bool.isRequired, + style: PropTypes.object, + }; + + state = { + hovered: false, + }; + + handleClick = () => { + const { reaction, statusId, addReaction, removeReaction } = this.props; + + if (reaction.get('me')) { + removeReaction(statusId, reaction.get('name')); + } else { + addReaction(statusId, reaction.get('name')); + } + } + + handleMouseEnter = () => this.setState({ hovered: true }) + + handleMouseLeave = () => this.setState({ hovered: false }) + + render() { + const { reaction } = this.props; + + return ( + + ); + } + +} + +class Emoji extends React.PureComponent { + + static propTypes = { + emoji: PropTypes.string.isRequired, + hovered: PropTypes.bool.isRequired, + url: PropTypes.string, + staticUrl: PropTypes.string, + }; + + render() { + const { emoji, hovered, url, staticUrl } = this.props; + + if (unicodeMapping[emoji]) { + const { filename, shortCode } = unicodeMapping[this.props.emoji]; + const title = shortCode ? `:${shortCode}:` : ''; + + return ( + {emoji} + ); + } else { + const filename = (autoPlayGif || hovered) ? url : staticUrl; + const shortCode = `:${emoji}:`; + + return ( + {shortCode} + ); + } + } + +} diff --git a/app/javascript/flavours/glitch/containers/status_container.js b/app/javascript/flavours/glitch/containers/status_container.js index 493a01da23..011444c390 100644 --- a/app/javascript/flavours/glitch/containers/status_container.js +++ b/app/javascript/flavours/glitch/containers/status_container.js @@ -16,6 +16,8 @@ import { unbookmark, pin, unpin, + addReaction, + removeReaction, } from 'flavours/glitch/actions/interactions'; import { openModal } from 'flavours/glitch/actions/modal'; import { initMuteModal } from 'flavours/glitch/actions/mutes'; @@ -106,6 +108,14 @@ const mapDispatchToProps = (dispatch, { contextType }) => ({ } }, + onReactionAdd (statusId, name, url) { + dispatch(addReaction(statusId, name, url)); + }, + + onReactionRemove (statusId, name) { + dispatch(removeReaction(statusId, name)); + }, + onEmbed (status) { dispatch(openModal({ modalType: 'EMBED', diff --git a/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.jsx b/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.jsx index c556f15366..a26d3e3888 100644 --- a/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.jsx +++ b/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.jsx @@ -327,6 +327,7 @@ class EmojiPickerDropdown extends PureComponent { onPickEmoji: PropTypes.func.isRequired, onSkinTone: PropTypes.func.isRequired, skinTone: PropTypes.number.isRequired, + disabled: PropTypes.bool, }; state = { @@ -361,7 +362,7 @@ class EmojiPickerDropdown extends PureComponent { }; onToggle = (e) => { - if (!this.state.loading && (!e.key || e.key === 'Enter')) { + if (!this.state.disabled && !this.state.loading && (!e.key || e.key === 'Enter')) { if (this.state.active) { this.onHideDropdown(); } else { diff --git a/app/javascript/flavours/glitch/features/notifications/components/filter_bar.jsx b/app/javascript/flavours/glitch/features/notifications/components/filter_bar.jsx index 7fabe78a94..9459b50ebc 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/filter_bar.jsx +++ b/app/javascript/flavours/glitch/features/notifications/components/filter_bar.jsx @@ -3,6 +3,7 @@ import { PureComponent } from 'react'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import AddReactionIcon from '@/material-icons/400-24px/add_reaction.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import InsertChartIcon from '@/material-icons/400-24px/insert_chart.svg?react'; import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; @@ -14,6 +15,7 @@ import { Icon } from 'flavours/glitch/components/icon'; const tooltips = defineMessages({ mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' }, favourites: { id: 'notifications.filter.favourites', defaultMessage: 'Favorites' }, + reactions: { id: 'notifications.filter.reactions', defaultMessage: 'Reactions' }, boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Boosts' }, polls: { id: 'notifications.filter.polls', defaultMessage: 'Poll results' }, follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' }, @@ -81,6 +83,13 @@ class FilterBar extends PureComponent { > +