Merge commit '6a4d14b178fc00de989b4a2758f2a1e4adf5ed33' into glitch-soc/merge-upstream

Conflicts:
- `lib/sanitize_ext/sanitize_config.rb`:
  Glitch-soc allows a wider range of HTML than upstream.
  Upstream added `:all => %w(lang)`, which was not supported by glitch-soc,
  added it there too.
This commit is contained in:
Claire 2026-05-22 19:43:42 +02:00
commit 487c814eb9
144 changed files with 1363 additions and 1158 deletions

View File

@ -59,7 +59,7 @@ body:
Any additional technical details you may have, like logs or error traces Any additional technical details you may have, like logs or error traces
value: | value: |
If this is happening on your own Mastodon server, please fill out those: If this is happening on your own Mastodon server, please fill out those:
- Ruby version: (from `ruby --version`, eg. v4.0.4) - Ruby version: (from `ruby --version`, eg. v4.0.5)
- Node.js version: (from `node --version`, eg. v22.16.0) - Node.js version: (from `node --version`, eg. v22.16.0)
validations: validations:
required: false required: false

View File

@ -60,7 +60,7 @@ body:
value: | value: |
Please at least include those informations: Please at least include those informations:
- Operating system: (eg. Ubuntu 24.04.2) - Operating system: (eg. Ubuntu 24.04.2)
- Ruby version: (from `ruby --version`, eg. v4.0.4) - Ruby version: (from `ruby --version`, eg. v4.0.5)
- Node.js version: (from `node --version`, eg. v22.16.0) - Node.js version: (from `node --version`, eg. v22.16.0)
validations: validations:
required: false required: false

View File

@ -23,7 +23,7 @@ runs:
${{ inputs.additional-system-dependencies }} ${{ inputs.additional-system-dependencies }}
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1
with: with:
ruby-version: ${{ inputs.ruby-version }} ruby-version: ${{ inputs.ruby-version }}
bundler-cache: true bundler-cache: true

View File

@ -31,7 +31,7 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1
with: with:
bundler-cache: true bundler-cache: true

View File

@ -34,7 +34,7 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1
with: with:
bundler-cache: true bundler-cache: true

View File

@ -36,7 +36,7 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1 uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1
with: with:
bundler-cache: true bundler-cache: true

View File

@ -1 +1 @@
4.0.4 4.0.5

View File

@ -13,7 +13,7 @@ ARG BASE_REGISTRY="docker.io"
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="4.0.x"] # Ruby image to use for base image, change with [--build-arg RUBY_VERSION="4.0.x"]
# renovate: datasource=docker depName=docker.io/ruby # renovate: datasource=docker depName=docker.io/ruby
ARG RUBY_VERSION="4.0.4" ARG RUBY_VERSION="4.0.5"
# # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="22"] # # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="22"]
# renovate: datasource=node-version depName=node # renovate: datasource=node-version depName=node
ARG NODE_MAJOR_VERSION="24" ARG NODE_MAJOR_VERSION="24"

View File

@ -1097,7 +1097,7 @@ DEPENDENCIES
xorcist (~> 1.1) xorcist (~> 1.1)
RUBY VERSION RUBY VERSION
ruby 4.0.4 ruby 4.0.5
BUNDLED WITH BUNDLED WITH
4.0.11 4.0.11

View File

@ -75,7 +75,7 @@ Mastodon is a **free, open-source social network server** based on [ActivityPub]
- **Ruby** 3.3+ - **Ruby** 3.3+
- **PostgreSQL** 14+ - **PostgreSQL** 14+
- **Redis** 7.0+ - **Redis** 7.0+
- **Node.js** 20+ - **Node.js** 22+
- **FFmpeg** 5.1+ - **FFmpeg** 5.1+
This repository includes deployment configurations for **Docker and docker-compose**, as well as for other environments like Heroku and Scalingo. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). A [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the main documentation. This repository includes deployment configurations for **Docker and docker-compose**, as well as for other environments like Heroku and Scalingo. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). A [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the main documentation.

2
Vagrantfile vendored
View File

@ -12,7 +12,7 @@ sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
# Add repo for NodeJS # Add repo for NodeJS
sudo mkdir -p /etc/apt/keyrings sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=20 NODE_MAJOR=24
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update sudo apt-get update

View File

@ -28,10 +28,9 @@ class Api::V1Alpha::CollectionsController < Api::BaseController
cache_if_unauthenticated! cache_if_unauthenticated!
authorize @account, :index_collections? authorize @account, :index_collections?
presenter = CollectionsPresenter.new(collections: @collections) render json: @collections, each_serializer: REST::CollectionSerializer, adapter: :json
render json: presenter, serializer: REST::CollectionsWithAccountPreviewsSerializer
rescue Mastodon::NotPermittedError rescue Mastodon::NotPermittedError
render json: { collections: [], partial_accounts: [] } render json: { collections: [] }
end end
def show def show
@ -74,7 +73,6 @@ class Api::V1Alpha::CollectionsController < Api::BaseController
def set_collections def set_collections
@collections = @account.collections @collections = @account.collections
.with_tag .with_tag
.preload(top_items: :account)
.order(created_at: :desc) .order(created_at: :desc)
.offset(offset_param) .offset(offset_param)
.limit(limit_param(DEFAULT_COLLECTIONS_LIMIT)) .limit(limit_param(DEFAULT_COLLECTIONS_LIMIT))

View File

@ -20,8 +20,9 @@ module Admin::FilterHelper
def filter_link_to(text, link_to_params, link_class_params = link_to_params) def filter_link_to(text, link_to_params, link_class_params = link_to_params)
new_url = filtered_url_for(link_to_params) new_url = filtered_url_for(link_to_params)
new_class = filtered_url_for(link_class_params) new_class = filtered_url_for(link_class_params)
is_selected = selected?(link_class_params)
link_to text, new_url, class: filter_link_class(new_class) link_to text, new_url, class: filter_link_class(new_class), 'aria-current': (is_selected ? 'true' : nil)
end end
def table_link_to(icon, text, path, **options) def table_link_to(icon, text, path, **options)

View File

@ -99,7 +99,7 @@ export const ensureComposeIsVisible = (getState) => {
export function setComposeToStatus(status, text, spoiler_text) { export function setComposeToStatus(status, text, spoiler_text) {
return (dispatch, getState) => { return (dispatch, getState) => {
const maxOptions = getState().server.getIn(['server', 'configuration', 'polls', 'max_options']); const maxOptions = getState().server.server.item?.configuration.polls.max_options;
dispatch({ dispatch({
type: COMPOSE_SET_STATUS, type: COMPOSE_SET_STATUS,

View File

@ -1,139 +0,0 @@
import api from '../api';
import { importFetchedAccount } from './importer';
export const SERVER_FETCH_REQUEST = 'Server_FETCH_REQUEST';
export const SERVER_FETCH_SUCCESS = 'Server_FETCH_SUCCESS';
export const SERVER_FETCH_FAIL = 'Server_FETCH_FAIL';
export const SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST = 'SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST';
export const SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS = 'SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS';
export const SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL = 'SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL';
export const EXTENDED_DESCRIPTION_REQUEST = 'EXTENDED_DESCRIPTION_REQUEST';
export const EXTENDED_DESCRIPTION_SUCCESS = 'EXTENDED_DESCRIPTION_SUCCESS';
export const EXTENDED_DESCRIPTION_FAIL = 'EXTENDED_DESCRIPTION_FAIL';
export const SERVER_DOMAIN_BLOCKS_FETCH_REQUEST = 'SERVER_DOMAIN_BLOCKS_FETCH_REQUEST';
export const SERVER_DOMAIN_BLOCKS_FETCH_SUCCESS = 'SERVER_DOMAIN_BLOCKS_FETCH_SUCCESS';
export const SERVER_DOMAIN_BLOCKS_FETCH_FAIL = 'SERVER_DOMAIN_BLOCKS_FETCH_FAIL';
export const fetchServer = () => (dispatch, getState) => {
if (getState().getIn(['server', 'server', 'isLoading'])) {
return;
}
dispatch(fetchServerRequest());
api()
.get('/api/v2/instance').then(({ data }) => {
// Only import the account if it doesn't already exist,
// because the API is cached even for logged in users.
const account = data.contact.account;
if (account) {
const existingAccount = getState().getIn(['accounts', account.id]);
if (!existingAccount) {
dispatch(importFetchedAccount(account));
}
}
dispatch(fetchServerSuccess(data));
}).catch(err => dispatch(fetchServerFail(err)));
};
const fetchServerRequest = () => ({
type: SERVER_FETCH_REQUEST,
});
const fetchServerSuccess = server => ({
type: SERVER_FETCH_SUCCESS,
server,
});
const fetchServerFail = error => ({
type: SERVER_FETCH_FAIL,
error,
});
export const fetchServerTranslationLanguages = () => (dispatch) => {
dispatch(fetchServerTranslationLanguagesRequest());
api()
.get('/api/v1/instance/translation_languages').then(({ data }) => {
dispatch(fetchServerTranslationLanguagesSuccess(data));
}).catch(err => dispatch(fetchServerTranslationLanguagesFail(err)));
};
const fetchServerTranslationLanguagesRequest = () => ({
type: SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST,
});
const fetchServerTranslationLanguagesSuccess = translationLanguages => ({
type: SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS,
translationLanguages,
});
const fetchServerTranslationLanguagesFail = error => ({
type: SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL,
error,
});
export const fetchExtendedDescription = () => (dispatch, getState) => {
if (getState().getIn(['server', 'extendedDescription', 'isLoading'])) {
return;
}
dispatch(fetchExtendedDescriptionRequest());
api()
.get('/api/v1/instance/extended_description')
.then(({ data }) => dispatch(fetchExtendedDescriptionSuccess(data)))
.catch(err => dispatch(fetchExtendedDescriptionFail(err)));
};
const fetchExtendedDescriptionRequest = () => ({
type: EXTENDED_DESCRIPTION_REQUEST,
});
const fetchExtendedDescriptionSuccess = description => ({
type: EXTENDED_DESCRIPTION_SUCCESS,
description,
});
const fetchExtendedDescriptionFail = error => ({
type: EXTENDED_DESCRIPTION_FAIL,
error,
});
export const fetchDomainBlocks = () => (dispatch, getState) => {
if (getState().getIn(['server', 'domainBlocks', 'isLoading'])) {
return;
}
dispatch(fetchDomainBlocksRequest());
api()
.get('/api/v1/instance/domain_blocks')
.then(({ data }) => dispatch(fetchDomainBlocksSuccess(true, data)))
.catch(err => {
if (err.response.status === 404) {
dispatch(fetchDomainBlocksSuccess(false, []));
} else {
dispatch(fetchDomainBlocksFail(err));
}
});
};
const fetchDomainBlocksRequest = () => ({
type: SERVER_DOMAIN_BLOCKS_FETCH_REQUEST,
});
const fetchDomainBlocksSuccess = (isAvailable, blocks) => ({
type: SERVER_DOMAIN_BLOCKS_FETCH_SUCCESS,
isAvailable,
blocks,
});
const fetchDomainBlocksFail = error => ({
type: SERVER_DOMAIN_BLOCKS_FETCH_FAIL,
error,
});

View File

@ -0,0 +1,34 @@
import {
apiGetInstance,
apiGetExtendedDescription,
apiGetDomainBlocks,
apiGetTranslationLanguages,
} from 'mastodon/api/instance';
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
import { importFetchedAccount } from './importer';
export const fetchServer = createDataLoadingThunk(
'server/fetch',
() => apiGetInstance(),
(instance, { dispatch }) => {
if (instance.contact.account) {
dispatch(importFetchedAccount(instance.contact.account));
}
},
);
export const fetchExtendedDescription = createDataLoadingThunk(
'server/extended_description',
() => apiGetExtendedDescription(),
);
export const fetchServerTranslationLanguages = createDataLoadingThunk(
'server/translation_languages',
() => apiGetTranslationLanguages(),
);
export const fetchDomainBlocks = createDataLoadingThunk(
'server/domain_blocks',
() => apiGetDomainBlocks(),
);

View File

@ -111,7 +111,7 @@ export function fetchStatusFail(id, error, skipLoading, parentQuotePostId) {
export function redraft(status, raw_text, quoted_status_id = null) { export function redraft(status, raw_text, quoted_status_id = null) {
return (dispatch, getState) => { return (dispatch, getState) => {
const maxOptions = getState().server.getIn(['server', 'configuration', 'polls', 'max_options']); const maxOptions = getState().server.server.item?.configuration.polls.max_options;
dispatch({ dispatch({
type: REDRAFT, type: REDRAFT,

View File

@ -2,6 +2,10 @@ import { apiRequestGet } from 'mastodon/api';
import type { import type {
ApiTermsOfServiceJSON, ApiTermsOfServiceJSON,
ApiPrivacyPolicyJSON, ApiPrivacyPolicyJSON,
ApiInstanceJSON,
ApiExtendedDescriptionJSON,
ApiTranslationLanguagesJSON,
ApiDomainBlockJSON,
} from 'mastodon/api_types/instance'; } from 'mastodon/api_types/instance';
export const apiGetTermsOfService = (version?: string) => export const apiGetTermsOfService = (version?: string) =>
@ -13,3 +17,17 @@ export const apiGetTermsOfService = (version?: string) =>
export const apiGetPrivacyPolicy = () => export const apiGetPrivacyPolicy = () =>
apiRequestGet<ApiPrivacyPolicyJSON>('v1/instance/privacy_policy'); apiRequestGet<ApiPrivacyPolicyJSON>('v1/instance/privacy_policy');
export const apiGetInstance = () =>
apiRequestGet<ApiInstanceJSON>('v2/instance');
export const apiGetExtendedDescription = () =>
apiRequestGet<ApiExtendedDescriptionJSON>('v1/instance/extended_description');
export const apiGetTranslationLanguages = () =>
apiRequestGet<ApiTranslationLanguagesJSON>(
'v1/instance/translation_languages',
);
export const apiGetDomainBlocks = () =>
apiRequestGet<ApiDomainBlockJSON[]>('v1/instance/domain_blocks');

View File

@ -1,3 +1,5 @@
import type { ApiAccountJSON } from './accounts';
export interface ApiTermsOfServiceJSON { export interface ApiTermsOfServiceJSON {
effective_date: string; effective_date: string;
effective: boolean; effective: boolean;
@ -9,3 +11,136 @@ export interface ApiPrivacyPolicyJSON {
updated_at: string; updated_at: string;
content: string; content: string;
} }
interface ApiBaseRuleJSON {
text: string;
hint: string;
}
export interface ApiRuleJSON {
id: string;
text: string;
hint: string;
translations?: Record<string, ApiBaseRuleJSON>;
}
export interface ApiExtendedDescriptionJSON {
updated_at: string;
content: string;
}
export interface ApiDomainBlockJSON {
domain: string;
digest: string;
severity: string;
comment: string;
}
export type ApiTranslationLanguagesJSON = Record<string, string[]>;
export interface ApiInstanceJSON {
domain: string;
title: string;
version: string;
source_url: string;
description: string;
languages: string[];
usage: {
users: {
active_month: number;
};
};
thumbnail: {
url: string;
blurhash?: string;
description: string;
versions?: Record<string, string>;
};
contact: {
email: string | null;
account: ApiAccountJSON | null;
};
api_versions: {
mastodon: number;
};
registrations: {
enabled: boolean;
approval_required: boolean;
reason_required: boolean | null;
message: string | null;
min_age: string | null;
url: string | null;
};
rules: ApiRuleJSON[];
configuration: {
urls: {
streaming: string;
status: string | null;
about: string;
privacy_policy: string | null;
terms_of_service: string | null;
};
vapid: {
public_key: string;
};
accounts: {
max_display_name_length: number;
max_note_length: number;
max_avatar_description_length: number;
max_header_description_length: number;
max_featured_tags: number;
max_pinned_statuses: number;
max_profile_fields: number;
profile_field_name_limit: number;
profile_field_value_limit: number;
};
statuses: {
max_characters: number;
max_media_attachments: number;
characters_reserved_per_url: number;
};
media_attachments: {
description_limit: number;
image_matrix_limit: number;
image_size_limit: number;
supported_mime_types: string[];
video_frame_rate_limit: number;
video_matrix_limit: number;
video_size_limit: number;
};
polls: {
max_options: number;
max_characters_per_option: number;
min_expiration: number;
max_expiration: number;
};
translation: {
enabled: boolean;
};
timeline_access: {
live_feeds: {
local: string;
remote: string;
};
hashtag_feeds: {
local: string;
remote: string;
};
trending_link_feeds: {
local: string;
remote: string;
};
};
limited_federation: boolean;
};
}

View File

@ -22,7 +22,7 @@ const messages = defineMessages({
}); });
const mapStateToProps = state => ({ const mapStateToProps = state => ({
server: state.getIn(['server', 'server']), server: state.server.server,
}); });
class ServerBanner extends PureComponent { class ServerBanner extends PureComponent {
@ -40,7 +40,7 @@ class ServerBanner extends PureComponent {
render () { render () {
const { server, intl } = this.props; const { server, intl } = this.props;
const isLoading = server.get('isLoading'); const isLoading = server.isLoading;
return ( return (
<div className='server-banner'> <div className='server-banner'>
@ -50,8 +50,8 @@ class ServerBanner extends PureComponent {
<NavLink to='/about'> <NavLink to='/about'>
<ServerHeroImage <ServerHeroImage
blurhash={server.getIn(['thumbnail', 'blurhash'])} blurhash={server.item?.thumbnail.blurhash}
src={server.getIn(['thumbnail', 'url'])} src={server.item?.thumbnail.url}
alt={intl.formatMessage(messages.aboutThisServer)} alt={intl.formatMessage(messages.aboutThisServer)}
className='server-banner__hero' className='server-banner__hero'
/> />
@ -66,14 +66,14 @@ class ServerBanner extends PureComponent {
<br /> <br />
<Skeleton width='70%' /> <Skeleton width='70%' />
</> </>
) : server.get('description')} ) : server.item?.description}
</div> </div>
<div className='server-banner__meta'> <div className='server-banner__meta'>
<div className='server-banner__meta__column'> <div className='server-banner__meta__column'>
<h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4> <h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4>
<Account id={server.getIn(['contact', 'account', 'id'])} size={36} minimal /> <Account id={server.item?.contact.account?.id} size={36} minimal />
</div> </div>
<div className='server-banner__meta__column'> <div className='server-banner__meta__column'>
@ -87,7 +87,7 @@ class ServerBanner extends PureComponent {
</> </>
) : ( ) : (
<> <>
<strong className='server-banner__number'><ShortNumber value={server.getIn(['usage', 'users', 'active_month'])} /></strong> <strong className='server-banner__number'><ShortNumber value={server.item?.usage.users.active_month} /></strong>
<br /> <br />
<span className='server-banner__number-label' title={intl.formatMessage(messages.aboutActiveUsers)}><FormattedMessage id='server_banner.active_users' defaultMessage='active users' /></span> <span className='server-banner__number-label' title={intl.formatMessage(messages.aboutActiveUsers)}><FormattedMessage id='server_banner.active_users' defaultMessage='active users' /></span>
</> </>

View File

@ -556,7 +556,7 @@ class Status extends ImmutablePureComponent {
).find((item) => compareUrls(item.get('url'), cardUrl)); ).find((item) => compareUrls(item.get('url'), cardUrl));
if (taggedCollection) { if (taggedCollection) {
media = <CollectionPreviewCard collection={taggedCollection.toJS()} />; media = <CollectionPreviewCard collection={taggedCollection.toJS()} headingLevel='h2' />;
} else { } else {
media = ( media = (
<Card <Card
@ -570,7 +570,7 @@ class Status extends ImmutablePureComponent {
const firstLinkedCollection = status.get('tagged_collections').first(); const firstLinkedCollection = status.get('tagged_collections').first();
if (firstLinkedCollection) { if (firstLinkedCollection) {
media = ( media = (
<CollectionPreviewCard collection={firstLinkedCollection.toJS()} /> <CollectionPreviewCard collection={firstLinkedCollection.toJS()} headingLevel='h2' />
); );
} }
} }

View File

@ -4,7 +4,6 @@ import type { ComponentProps, FC } from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import type { ApiCollectionJSON } from '@/mastodon/api_types/collections';
import type { ApiMentionJSON } from '@/mastodon/api_types/statuses'; import type { ApiMentionJSON } from '@/mastodon/api_types/statuses';
import { getCollectionPath } from '@/mastodon/features/collections/utils'; import { getCollectionPath } from '@/mastodon/features/collections/utils';
import type { OnElementHandler } from '@/mastodon/utils/html'; import type { OnElementHandler } from '@/mastodon/utils/html';
@ -15,7 +14,7 @@ export interface HandledLinkProps {
prevText?: string; prevText?: string;
hashtagAccountId?: string; hashtagAccountId?: string;
mention?: Pick<ApiMentionJSON, 'id' | 'acct'>; mention?: Pick<ApiMentionJSON, 'id' | 'acct'>;
collection?: Pick<ApiCollectionJSON, 'id'>; collectionId?: string;
} }
export const HandledLink: FC<HandledLinkProps & ComponentProps<'a'>> = ({ export const HandledLink: FC<HandledLinkProps & ComponentProps<'a'>> = ({
@ -24,7 +23,7 @@ export const HandledLink: FC<HandledLinkProps & ComponentProps<'a'>> = ({
prevText, prevText,
hashtagAccountId, hashtagAccountId,
mention, mention,
collection, collectionId,
className, className,
children, children,
...props ...props
@ -61,11 +60,11 @@ export const HandledLink: FC<HandledLinkProps & ComponentProps<'a'>> = ({
{children} {children}
</Link> </Link>
); );
} else if (collection) { } else if (collectionId) {
return ( return (
<Link <Link
className={classNames(className)} className={classNames(className)}
to={getCollectionPath(collection.id)} to={getCollectionPath(collectionId)}
> >
{children} {children}
</Link> </Link>
@ -98,15 +97,18 @@ export const HandledLink: FC<HandledLinkProps & ComponentProps<'a'>> = ({
export const useElementHandledLink = ({ export const useElementHandledLink = ({
hashtagAccountId, hashtagAccountId,
hrefToCollectionId: hrefToCollection,
hrefToMention, hrefToMention,
}: { }: {
hashtagAccountId?: string; hashtagAccountId?: string;
hrefToCollectionId?: (href: string) => string | undefined;
hrefToMention?: (href: string) => ApiMentionJSON | undefined; hrefToMention?: (href: string) => ApiMentionJSON | undefined;
} = {}) => { } = {}) => {
const onElement = useCallback<OnElementHandler>( const onElement = useCallback<OnElementHandler>(
(element, { key, ...props }, children) => { (element, { key, ...props }, children) => {
if (element instanceof HTMLAnchorElement) { if (element instanceof HTMLAnchorElement) {
const mention = hrefToMention?.(element.href); const mention = hrefToMention?.(element.href);
const collectionId = hrefToCollection?.(element.href);
return ( return (
<HandledLink <HandledLink
{...props} {...props}
@ -116,6 +118,7 @@ export const useElementHandledLink = ({
prevText={element.previousSibling?.textContent ?? undefined} prevText={element.previousSibling?.textContent ?? undefined}
hashtagAccountId={hashtagAccountId} hashtagAccountId={hashtagAccountId}
mention={mention} mention={mention}
collectionId={collectionId}
> >
{children} {children}
</HandledLink> </HandledLink>
@ -123,7 +126,7 @@ export const useElementHandledLink = ({
} }
return undefined; return undefined;
}, },
[hashtagAccountId, hrefToMention], [hashtagAccountId, hrefToCollection, hrefToMention],
); );
return { onElement }; return { onElement };
}; };

View File

@ -69,7 +69,7 @@ class TranslateButton extends PureComponent {
} }
const mapStateToProps = state => ({ const mapStateToProps = state => ({
languages: state.getIn(['server', 'translationLanguages', 'items']), languages: state.server.translationLanguages.items,
}); });
class StatusContent extends PureComponent { class StatusContent extends PureComponent {
@ -170,7 +170,7 @@ class StatusContent extends PureComponent {
text={element.innerText} text={element.innerText}
hashtagAccountId={this.props.status.getIn(['account', 'id'])} hashtagAccountId={this.props.status.getIn(['account', 'id'])}
mention={mention?.toJSON()} mention={mention?.toJSON()}
collection={taggedCollection?.toJSON()} collectionId={taggedCollection?.get('id')}
key={key} key={key}
> >
{children} {children}

View File

@ -5,7 +5,6 @@ import type { IntlShape } from 'react-intl';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import { createSelector } from '@reduxjs/toolkit'; import { createSelector } from '@reduxjs/toolkit';
import type { List as ImmutableList } from 'immutable';
import type { SelectItem } from '@/mastodon/components/dropdown_selector'; import type { SelectItem } from '@/mastodon/components/dropdown_selector';
import { Select } from '@/mastodon/components/form_fields'; import { Select } from '@/mastodon/components/form_fields';
@ -123,14 +122,13 @@ export const RulesSection: FC<RulesSectionProps> = ({ isLoading = false }) => {
}; };
const selectRules = (state: RootState) => { const selectRules = (state: RootState) => {
const rules = state.server.getIn([ const rules = state.server.server.item?.rules;
'server',
'rules',
]) as ImmutableList<Rule> | null;
if (!rules) { if (!rules) {
return []; return [];
} }
return rules.toJS() as Rule[];
return rules;
}; };
const rulesSelector = createSelector( const rulesSelector = createSelector(

View File

@ -18,6 +18,7 @@ import { LinkFooter} from 'mastodon/features/ui/components/link_footer';
import { Section } from './components/section'; import { Section } from './components/section';
import { RulesSection } from './components/rules'; import { RulesSection } from './components/rules';
import { getColumnSkipLinkId } from '../ui/components/skip_links';
const messages = defineMessages({ const messages = defineMessages({
title: { id: 'column.about', defaultMessage: 'About' }, title: { id: 'column.about', defaultMessage: 'About' },
@ -41,10 +42,10 @@ const severityMessages = {
}; };
const mapStateToProps = state => ({ const mapStateToProps = state => ({
server: state.getIn(['server', 'server']), server: state.server.server,
locale: state.getIn(['meta', 'locale']), locale: state.getIn(['meta', 'locale']),
extendedDescription: state.getIn(['server', 'extendedDescription']), extendedDescription: state.server.extendedDescription,
domainBlocks: state.getIn(['server', 'domainBlocks']), domainBlocks: state.server.domainBlocks,
}); });
class About extends PureComponent { class About extends PureComponent {
@ -76,21 +77,21 @@ class About extends PureComponent {
render () { render () {
const { multiColumn, intl, server, extendedDescription, domainBlocks, locale } = this.props; const { multiColumn, intl, server, extendedDescription, domainBlocks, locale } = this.props;
const isLoading = server.get('isLoading'); const isLoading = server.isLoading;
return ( return (
<Column bindToDocument={!multiColumn} label={intl.formatMessage(messages.title)}> <Column bindToDocument={!multiColumn} label={intl.formatMessage(messages.title)}>
<div className='scrollable about'> <div className='scrollable about' id={getColumnSkipLinkId(1)}>
<div className='about__header'> <div className='about__header'>
<ServerHeroImage <ServerHeroImage
withAltBadge withAltBadge
alt={server.getIn(['thumbnail', 'description']) ?? ''} alt={server.item?.thumbnail.description ?? ''}
blurhash={server.getIn(['thumbnail', 'blurhash'])} blurhash={server.item?.thumbnail.blurhash}
src={server.getIn(['thumbnail', 'url'])} src={server.item?.thumbnail.url}
srcSet={server.getIn(['thumbnail', 'versions'])?.map((value, key) => `${value} ${key.replace('@', '')}`).join(', ')} srcSet={Object.keys(server.item?.thumbnail.versions ?? {}).map((key) => `${server.item?.thumbnail.versions && server.item.thumbnail.versions[key]} ${key.replace('@', '')}`).join(', ')}
className='about__header__hero' className='about__header__hero'
/> />
<h1>{isLoading ? <Skeleton width='10ch' /> : server.get('domain')}</h1> <h1>{isLoading ? <Skeleton width='10ch' /> : server.domain}</h1>
<p><FormattedMessage id='about.powered_by' defaultMessage='Decentralized social media powered by {mastodon}' values={{ mastodon: <a href='https://joinmastodon.org' className='about__mail' target='_blank' rel='noopener'>Mastodon</a> }} /></p> <p><FormattedMessage id='about.powered_by' defaultMessage='Decentralized social media powered by {mastodon}' values={{ mastodon: <a href='https://joinmastodon.org' className='about__mail' target='_blank' rel='noopener'>Mastodon</a> }} /></p>
</div> </div>
@ -98,7 +99,7 @@ class About extends PureComponent {
<div className='about__meta__column'> <div className='about__meta__column'>
<h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4> <h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4>
<Account id={server.getIn(['contact', 'account', 'id'])} size={36} minimal /> <Account id={server.item?.contact?.account?.id} size={36} minimal />
</div> </div>
<hr className='about__meta__divider' /> <hr className='about__meta__divider' />
@ -106,12 +107,12 @@ class About extends PureComponent {
<div className='about__meta__column'> <div className='about__meta__column'>
<h4><FormattedMessage id='about.contact' defaultMessage='Contact:' /></h4> <h4><FormattedMessage id='about.contact' defaultMessage='Contact:' /></h4>
{isLoading ? <Skeleton width='10ch' /> : <a className='about__mail' href={`mailto:${server.getIn(['contact', 'email'])}`}>{server.getIn(['contact', 'email'])}</a>} {isLoading ? <Skeleton width='10ch' /> : <a className='about__mail' href={`mailto:${server.item?.contact?.email}`}>{server.item?.contact?.email}</a>}
</div> </div>
</div> </div>
<Section open title={intl.formatMessage(messages.title)}> <Section open title={intl.formatMessage(messages.title)}>
{extendedDescription.get('isLoading') ? ( {extendedDescription.isLoading ? (
<> <>
<Skeleton width='100%' /> <Skeleton width='100%' />
<br /> <br />
@ -121,10 +122,10 @@ class About extends PureComponent {
<br /> <br />
<Skeleton width='70%' /> <Skeleton width='70%' />
</> </>
) : (extendedDescription.get('content')?.length > 0 ? ( ) : (extendedDescription.item?.content?.length > 0 ? (
<div <div
className='prose' className='prose'
dangerouslySetInnerHTML={{ __html: extendedDescription.get('content') }} dangerouslySetInnerHTML={{ __html: extendedDescription.item?.content }}
/> />
) : ( ) : (
<p><FormattedMessage id='about.not_available' defaultMessage='This information has not been made available on this server.' /></p> <p><FormattedMessage id='about.not_available' defaultMessage='This information has not been made available on this server.' /></p>
@ -134,26 +135,26 @@ class About extends PureComponent {
<RulesSection /> <RulesSection />
<Section title={intl.formatMessage(messages.blocks)} onOpen={this.handleDomainBlocksOpen}> <Section title={intl.formatMessage(messages.blocks)} onOpen={this.handleDomainBlocksOpen}>
{domainBlocks.get('isLoading') ? ( {domainBlocks.isLoading ? (
<> <>
<Skeleton width='100%' /> <Skeleton width='100%' />
<br /> <br />
<Skeleton width='70%' /> <Skeleton width='70%' />
</> </>
) : (domainBlocks.get('isAvailable') ? ( ) : (domainBlocks.isAvailable ? (
<> <>
<p><FormattedMessage id='about.domain_blocks.preamble' defaultMessage='Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.' /></p> <p><FormattedMessage id='about.domain_blocks.preamble' defaultMessage='Mastodon generally allows you to view content from and interact with users from any other server in the fediverse. These are the exceptions that have been made on this particular server.' /></p>
{domainBlocks.get('items').size > 0 && ( {domainBlocks.items.length > 0 && (
<div className='about__domain-blocks'> <div className='about__domain-blocks'>
{domainBlocks.get('items').map(block => ( {domainBlocks.items.map(block => (
<div className='about__domain-blocks__domain' key={block.get('domain')}> <div className='about__domain-blocks__domain' key={block.domain}>
<div className='about__domain-blocks__domain__header'> <div className='about__domain-blocks__domain__header'>
<h6><span title={`SHA-256: ${block.get('digest')}`}>{block.get('domain')}</span></h6> <h6><span title={`SHA-256: ${block.digest}`}>{block.domain}</span></h6>
<span className='about__domain-blocks__domain__type' title={intl.formatMessage(severityMessages[block.get('severity')].explanation)}>{intl.formatMessage(severityMessages[block.get('severity')].title)}</span> <span className='about__domain-blocks__domain__type' title={intl.formatMessage(severityMessages[block.severity].explanation)}>{intl.formatMessage(severityMessages[block.severity].title)}</span>
</div> </div>
<p>{(block.get('comment') || '').length > 0 ? block.get('comment') : <FormattedMessage id='about.domain_blocks.no_reason_available' defaultMessage='Reason not available' />}</p> <p>{(block.comment ?? '').length > 0 ? block.comment : <FormattedMessage id='about.domain_blocks.no_reason_available' defaultMessage='Reason not available' />}</p>
</div> </div>
))} ))}
</div> </div>
@ -164,7 +165,7 @@ class About extends PureComponent {
))} ))}
</Section> </Section>
<LinkFooter /> <LinkFooter context='about' />
<div className='about__footer'> <div className='about__footer'>
<p><FormattedMessage id='about.disclaimer' defaultMessage='Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.' /></p> <p><FormattedMessage id='about.disclaimer' defaultMessage='Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.' /></p>

View File

@ -37,10 +37,7 @@ const selectTags = createAppSelector(
[ [
(state) => state.profileEdit, (state) => state.profileEdit,
(state) => (state) =>
state.server.getIn( state.server.server.item?.configuration.accounts.max_featured_tags ?? 0,
['server', 'accounts', 'max_featured_tags'],
10,
) as number,
], ],
(profileEdit, maxTags) => ({ (profileEdit, maxTags) => ({
tags: profileEdit.profile?.featuredTags ?? [], tags: profileEdit.profile?.featuredTags ?? [],

View File

@ -133,12 +133,7 @@ export const AccountEdit: FC = () => {
const maxFieldCount = useAppSelector( const maxFieldCount = useAppSelector(
(state) => (state) =>
(state.server.getIn([ state.server.server.item?.configuration.accounts.max_profile_fields ?? 4,
'server',
'configuration',
'accounts',
'max_profile_fields',
]) as number | undefined) ?? 4,
); );
const handleOpenModal = useCallback( const handleOpenModal = useCallback(

View File

@ -36,13 +36,7 @@ export const BioModal: FC<BaseConfirmationModalProps> = ({ onClose }) => {
); );
const [newBio, setNewBio] = useState(bio ?? ''); const [newBio, setNewBio] = useState(bio ?? '');
const maxLength = useAppSelector( const maxLength = useAppSelector(
(state) => (state) => state.server.server.item?.configuration.accounts.max_note_length,
state.server.getIn([
'server',
'configuration',
'accounts',
'max_note_length',
]) as number | undefined,
); );
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();

View File

@ -9,8 +9,6 @@ import type { FC, FocusEventHandler } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import type { Map as ImmutableMap } from 'immutable';
import { closeModal } from '@/mastodon/actions/modal'; import { closeModal } from '@/mastodon/actions/modal';
import { Button } from '@/mastodon/components/button'; import { Button } from '@/mastodon/components/button';
import type { FieldStatus } from '@/mastodon/components/form_fields'; import type { FieldStatus } from '@/mastodon/components/form_fields';
@ -97,15 +95,10 @@ const messages = defineMessages({
// We have two different values- the hard limit set by the server, // We have two different values- the hard limit set by the server,
// and the soft limit for mobile display. // and the soft limit for mobile display.
const selectFieldLimits = createAppSelector( const selectFieldLimits = createAppSelector(
[ [(state) => state.server.server.item?.configuration.accounts],
(state) =>
state.server.getIn(['server', 'configuration', 'accounts']) as
| ImmutableMap<string, number>
| undefined,
],
(accounts) => ({ (accounts) => ({
nameLimit: accounts?.get('profile_field_name_limit'), nameLimit: accounts?.profile_field_name_limit,
valueLimit: accounts?.get('profile_field_value_limit'), valueLimit: accounts?.profile_field_value_limit,
}), }),
); );

View File

@ -84,15 +84,8 @@ export const ImageAltTextField: FC<{
}> = ({ imageSrc, altText, onChange, hideTip }) => { }> = ({ imageSrc, altText, onChange, hideTip }) => {
const altLimit = useAppSelector( const altLimit = useAppSelector(
(state) => (state) =>
state.server.getIn( state.server.server.item?.configuration.accounts
[ .max_header_description_length ?? 0,
'server',
'configuration',
'accounts',
'max_header_description_length',
],
150,
) as number,
); );
const handleChange: ChangeEventHandler<HTMLTextAreaElement> = useCallback( const handleChange: ChangeEventHandler<HTMLTextAreaElement> = useCallback(

View File

@ -33,12 +33,7 @@ export const NameModal: FC<BaseConfirmationModalProps> = ({ onClose }) => {
); );
const maxLength = useAppSelector( const maxLength = useAppSelector(
(state) => (state) =>
state.server.getIn([ state.server.server.item?.configuration.accounts.max_display_name_length,
'server',
'configuration',
'accounts',
'max_display_name_length',
]) as number | undefined,
); );
const [newName, setNewName] = useState(displayName ?? ''); const [newName, setNewName] = useState(displayName ?? '');

View File

@ -2,14 +2,15 @@ import { useCallback } from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import { useParams } from 'react-router';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { openModal } from '@/mastodon/actions/modal'; import { openModal } from '@/mastodon/actions/modal';
import { Button } from '@/mastodon/components/button'; import { Button } from '@/mastodon/components/button';
import { DisplayName } from '@/mastodon/components/display_name';
import { EmptyState } from '@/mastodon/components/empty_state'; import { EmptyState } from '@/mastodon/components/empty_state';
import { LimitedAccountHint } from '@/mastodon/components/limited_account_hint'; import { LimitedAccountHint } from '@/mastodon/components/limited_account_hint';
import { areCollectionsEnabled } from '@/mastodon/features/collections/utils'; import { areCollectionsEnabled } from '@/mastodon/features/collections/utils';
import { useAccount } from '@/mastodon/hooks/useAccount';
import { useCurrentAccountId } from '@/mastodon/hooks/useAccountId'; import { useCurrentAccountId } from '@/mastodon/hooks/useAccountId';
import { useAppDispatch } from '@/mastodon/store'; import { useAppDispatch } from '@/mastodon/store';
@ -28,8 +29,8 @@ export const EmptyMessage: React.FC<EmptyMessageProps> = ({
blockedBy, blockedBy,
withoutAddCollectionButton, withoutAddCollectionButton,
}) => { }) => {
const { acct } = useParams<{ acct?: string }>();
const me = useCurrentAccountId(); const me = useCurrentAccountId();
const account = useAccount(accountId);
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
@ -116,12 +117,12 @@ export const EmptyMessage: React.FC<EmptyMessageProps> = ({
/> />
); );
} else { } else {
if (acct) { if (account) {
title = ( title = (
<FormattedMessage <FormattedMessage
id='empty_column.account_featured.other' id='empty_column.account_featured.other'
defaultMessage='{acct} has not featured anything yet.' defaultMessage='{acct} has not featured anything yet.'
values={{ acct }} values={{ acct: <DisplayName variant='simple' account={account} /> }}
/> />
); );
} else { } else {

View File

@ -31,7 +31,7 @@ const selectServerName = createAppSelector(
[ [
(state) => state.accounts, (state) => state.accounts,
(_, accountId: string) => accountId, (_, accountId: string) => accountId,
(state) => state.server.getIn(['server', 'domain']) as string | undefined, (state) => state.server.server.item?.domain,
], ],
(accounts, accountId, serverDomain) => { (accounts, accountId, serverDomain) => {
const acct = accounts.getIn([accountId, 'acct']) as string | undefined; const acct = accounts.getIn([accountId, 'acct']) as string | undefined;

View File

@ -47,6 +47,7 @@ export interface CollectionLockupProps {
withTimestamp?: boolean; withTimestamp?: boolean;
sideContent?: React.ReactNode; sideContent?: React.ReactNode;
className?: string; className?: string;
headingLevel?: 'h2' | 'h3' | 'h4';
} }
export const CollectionLockup: React.FC<CollectionLockupProps> = ({ export const CollectionLockup: React.FC<CollectionLockupProps> = ({
@ -54,6 +55,7 @@ export const CollectionLockup: React.FC<CollectionLockupProps> = ({
withAuthorHandle = true, withAuthorHandle = true,
withTimestamp, withTimestamp,
sideContent, sideContent,
headingLevel = 'h3',
className, className,
}) => { }) => {
const { id, name } = collection; const { id, name } = collection;
@ -70,7 +72,7 @@ export const CollectionLockup: React.FC<CollectionLockupProps> = ({
sideContent={sideContent} sideContent={sideContent}
> >
<ListItemLink <ListItemLink
as='h3' as={headingLevel}
to={getCollectionPath(id)} to={getCollectionPath(id)}
subtitle={ subtitle={
<CollectionInfo <CollectionInfo

View File

@ -24,11 +24,13 @@ import classes from './share_modal.module.scss';
const messages = defineMessages({ const messages = defineMessages({
shareTextOwn: { shareTextOwn: {
id: 'collection.share_template_own', id: 'collection.share_template_own',
defaultMessage: 'Check out my new collection: {link}', defaultMessage: 'Check out my new collection:',
description: 'Collection links are appended after a new line',
}, },
shareTextOther: { shareTextOther: {
id: 'collection.share_template_other', id: 'collection.share_template_other',
defaultMessage: 'Check out this cool collection: {link}', defaultMessage: 'Check out this cool collection:',
description: 'Collection links are appended after a new line',
}, },
}); });
@ -51,13 +53,10 @@ export const CollectionShareModal: React.FC<{
}, [collectionLink]); }, [collectionLink]);
const handleShareViaPost = useCallback(() => { const handleShareViaPost = useCallback(() => {
const shareMessage = isOwnCollection let shareMessage = isOwnCollection
? intl.formatMessage(messages.shareTextOwn, { ? intl.formatMessage(messages.shareTextOwn)
link: collectionLink, : intl.formatMessage(messages.shareTextOther);
}) shareMessage += `\n\n${collectionLink}`;
: intl.formatMessage(messages.shareTextOther, {
link: collectionLink,
});
onClose(); onClose();
dispatch(changeCompose(shareMessage)); dispatch(changeCompose(shareMessage));
@ -93,7 +92,7 @@ export const CollectionShareModal: React.FC<{
/> />
<div className={classes.preview}> <div className={classes.preview}>
<CollectionPreviewCard collection={collection} /> <CollectionPreviewCard collection={collection} headingLevel='h2' />
</div> </div>
<CopyLinkField <CopyLinkField

View File

@ -82,10 +82,6 @@ class ComposeForm extends ImmutablePureComponent {
autoFocus: false, autoFocus: false,
}; };
state = {
highlighted: false,
};
constructor(props) { constructor(props) {
super(props); super(props);
this.textareaRef = createRef(null); this.textareaRef = createRef(null);
@ -220,8 +216,6 @@ class ComposeForm extends ImmutablePureComponent {
Promise.resolve().then(() => { Promise.resolve().then(() => {
this.textareaRef.current.setSelectionRange(selectionStart, selectionEnd); this.textareaRef.current.setSelectionRange(selectionStart, selectionEnd);
this.textareaRef.current.focus(); this.textareaRef.current.focus();
this.setState({ highlighted: true });
this.timeout = setTimeout(() => this.setState({ highlighted: false }), 700);
}).catch(console.error); }).catch(console.error);
} else if(prevProps.isSubmitting && !this.props.isSubmitting) { } else if(prevProps.isSubmitting && !this.props.isSubmitting) {
this.textareaRef.current.focus(); this.textareaRef.current.focus();
@ -252,7 +246,6 @@ class ComposeForm extends ImmutablePureComponent {
render () { render () {
const { intl, onPaste, onDrop, autoFocus, withoutNavigation, maxChars, isSubmitting } = this.props; const { intl, onPaste, onDrop, autoFocus, withoutNavigation, maxChars, isSubmitting } = this.props;
const { highlighted } = this.state;
return ( return (
<form className='compose-form' onSubmit={this.handleSubmit}> <form className='compose-form' onSubmit={this.handleSubmit}>
@ -260,7 +253,7 @@ class ComposeForm extends ImmutablePureComponent {
{!withoutNavigation && <NavigationBar />} {!withoutNavigation && <NavigationBar />}
<Warning /> <Warning />
<div className={classNames('compose-form__highlightable', { active: highlighted })} ref={this.setRef}> <div className='compose-form__highlightable' ref={this.setRef}>
<EditIndicator /> <EditIndicator />
<div className='compose-form__dropdowns'> <div className='compose-form__dropdowns'>

View File

@ -58,7 +58,7 @@ const mapStateToProps = state => ({
&& !state.getIn(['settings', 'dismissed_banners', PRIVATE_QUOTE_MODAL_ID]), && !state.getIn(['settings', 'dismissed_banners', PRIVATE_QUOTE_MODAL_ID]),
isInReply: state.getIn(['compose', 'in_reply_to']) !== null, isInReply: state.getIn(['compose', 'in_reply_to']) !== null,
lang: state.getIn(['compose', 'language']), lang: state.getIn(['compose', 'language']),
maxChars: state.getIn(['server', 'server', 'configuration', 'statuses', 'max_characters'], 500), maxChars: state.getIn(['server', 'server', 'item', 'configuration', 'statuses', 'max_characters'], 500),
}); });
const mapDispatchToProps = (dispatch, props) => ({ const mapDispatchToProps = (dispatch, props) => ({

View File

@ -13,7 +13,7 @@ const GettingStarted: React.FC = () => {
<Column> <Column>
<NavigationPanel multiColumn /> <NavigationPanel multiColumn />
<LinkFooter multiColumn /> <LinkFooter context='multi-column' />
<Helmet> <Helmet>
<title> <title>

View File

@ -212,12 +212,12 @@ export const InlineFollowSuggestions: React.FC<{ hidden?: boolean }> = ({
tabIndex={-1} tabIndex={-1}
> >
<div className='inline-follow-suggestions__header'> <div className='inline-follow-suggestions__header'>
<h3 id={uniqueId}> <h2 id={uniqueId} className='inline-follow-suggestions__title'>
<FormattedMessage <FormattedMessage
id='follow_suggestions.who_to_follow' id='follow_suggestions.who_to_follow'
defaultMessage='Who to follow' defaultMessage='Who to follow'
/> />
</h3> </h2>
<div className='inline-follow-suggestions__header__actions'> <div className='inline-follow-suggestions__header__actions'>
<button className='link-button' onClick={handleDismiss} type='button'> <button className='link-button' onClick={handleDismiss} type='button'>

View File

@ -419,9 +419,7 @@ const InteractionModal: React.FC<{
}> = ({ accountId, url, intent }) => { }> = ({ accountId, url, intent }) => {
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const signupUrl = useAppSelector( const signupUrl = useAppSelector(
(state) => (state) => state.server.server.item?.registrations.url ?? '/auth/sign_up',
(state.server.getIn(['server', 'registrations', 'url'], null) ||
'/auth/sign_up') as string,
); );
const account = useAppSelector((state) => state.accounts.get(accountId)); const account = useAppSelector((state) => state.accounts.get(accountId));
const name = <DisplayName account={account} variant='simple' />; const name = <DisplayName account={account} variant='simple' />;

View File

@ -36,7 +36,7 @@ export const CollapsiblePanel: React.FC<{
}, [setExpanded]); }, [setExpanded]);
return ( return (
<div className='navigation-panel__list-panel'> <li className='navigation-panel__list-panel'>
<div className='navigation-panel__list-panel__header'> <div className='navigation-panel__list-panel__header'>
<ColumnLink <ColumnLink
transparent transparent
@ -64,7 +64,7 @@ export const CollapsiblePanel: React.FC<{
} }
title={expanded ? collapseTitle : expandTitle} title={expanded ? collapseTitle : expandTitle}
onClick={handleClick} onClick={handleClick}
aria-controls={`${accessibilityId}-content`} ariaControls={`${accessibilityId}-content`}
/> />
</> </>
)} )}
@ -80,6 +80,6 @@ export const CollapsiblePanel: React.FC<{
{children} {children}
</div> </div>
)} )}
</div> </li>
); );
}; };

View File

@ -20,10 +20,7 @@ export const SignInBanner: React.FC = () => {
let signupButton: React.ReactNode; let signupButton: React.ReactNode;
const signupUrl = useAppSelector( const signupUrl = useAppSelector(
(state) => (state) => state.server.server.item?.registrations.url ?? '/auth/sign_up',
(state.server.getIn(['server', 'registrations', 'url'], null) as
| string
| null) ?? '/auth/sign_up',
); );
if (sso_redirect) { if (sso_redirect) {

View File

@ -37,21 +37,21 @@ export const Trends: React.FC = () => {
} }
return ( return (
<div className='navigation-panel__portal'> <aside className='navigation-panel__portal'>
<div className='getting-started__trends'> <div className='getting-started__trends'>
<h4> <h2 className='getting-started__trends-heading'>
<Link to={'/explore/tags'}> <Link to={'/explore/tags'}>
<FormattedMessage <FormattedMessage
id='trends.trending_now' id='trends.trending_now'
defaultMessage='Trending now' defaultMessage='Trending now'
/> />
</Link> </Link>
</h4> </h2>
{trends.take(4).map((hashtag) => ( {trends.take(4).map((hashtag) => (
<Hashtag key={hashtag.get('name') as string} hashtag={hashtag} /> <Hashtag key={hashtag.get('name') as string} hashtag={hashtag} />
))} ))}
</div> </div>
</div> </aside>
); );
}; };

View File

@ -249,124 +249,150 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
{banner && <div className='navigation-panel__banner'>{banner}</div>} {banner && <div className='navigation-panel__banner'>{banner}</div>}
<div className='navigation-panel__menu'> <ul className='navigation-panel__menu'>
{signedIn && ( {signedIn && (
<> <>
{!multiColumn && ( {!multiColumn && (
<ColumnLink <li>
to='/publish' <ColumnLink
icon='plus' to='/publish'
iconComponent={AddIcon} icon='plus'
activeIconComponent={AddIcon} iconComponent={AddIcon}
text={intl.formatMessage(messages.compose)} activeIconComponent={AddIcon}
className='button navigation-panel__compose-button' text={intl.formatMessage(messages.compose)}
/> className='button navigation-panel__compose-button'
/>
</li>
)} )}
<ColumnLink <li>
transparent <ColumnLink
to='/home' transparent
icon='home' to='/home'
iconComponent={HomeIcon} icon='home'
activeIconComponent={HomeActiveIcon} iconComponent={HomeIcon}
text={intl.formatMessage(messages.home)} activeIconComponent={HomeActiveIcon}
/> text={intl.formatMessage(messages.home)}
/>
</li>
</> </>
)} )}
{trendsEnabled && ( {trendsEnabled && (
<ColumnLink <li>
transparent <ColumnLink
to='/explore' transparent
icon='explore' to='/explore'
iconComponent={TrendingUpIcon} icon='explore'
text={intl.formatMessage(messages.explore)} iconComponent={TrendingUpIcon}
/> text={intl.formatMessage(messages.explore)}
/>
</li>
)} )}
{(canViewFeed(signedIn, permissions, localLiveFeedAccess) || {(canViewFeed(signedIn, permissions, localLiveFeedAccess) ||
canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && ( canViewFeed(signedIn, permissions, remoteLiveFeedAccess)) && (
<ColumnLink <li>
transparent <ColumnLink
to={ transparent
canViewFeed(signedIn, permissions, localLiveFeedAccess) to={
? '/public/local' canViewFeed(signedIn, permissions, localLiveFeedAccess)
: '/public/remote' ? '/public/local'
} : '/public/remote'
icon='globe' }
iconComponent={PublicIcon} icon='globe'
isActive={isFirehoseActive} iconComponent={PublicIcon}
text={intl.formatMessage( isActive={isFirehoseActive}
canViewFeed(signedIn, permissions, localLiveFeedAccess) && text={intl.formatMessage(
canViewFeed(signedIn, permissions, remoteLiveFeedAccess) canViewFeed(signedIn, permissions, localLiveFeedAccess) &&
? messages.firehose canViewFeed(signedIn, permissions, remoteLiveFeedAccess)
: messages.firehose_singular, ? messages.firehose
)} : messages.firehose_singular,
/> )}
/>
</li>
)} )}
{signedIn && ( {signedIn && (
<> <>
<NotificationsLink /> <li>
<NotificationsLink />
</li>
<FollowRequestsLink /> <li>
<FollowRequestsLink />
</li>
<AnnualReportNavItem /> <li>
<AnnualReportNavItem />
</li>
<hr /> <li role='separator' />
<ListPanel /> <ListPanel />
<FollowedTagsPanel /> <FollowedTagsPanel />
<ColumnLink <li>
transparent
to='/favourites'
icon='star'
iconComponent={StarIcon}
activeIconComponent={StarActiveIcon}
text={intl.formatMessage(messages.favourites)}
/>
<ColumnLink
transparent
to='/bookmarks'
icon='bookmarks'
iconComponent={BookmarksIcon}
activeIconComponent={BookmarksActiveIcon}
text={intl.formatMessage(messages.bookmarks)}
/>
{areCollectionsEnabled() && (
<ColumnLink <ColumnLink
transparent transparent
to={`/@${account?.acct}/collections`} to='/favourites'
icon='collections' icon='star'
iconComponent={CollectionsIcon} iconComponent={StarIcon}
activeIconComponent={CollectionsActiveIcon} activeIconComponent={StarActiveIcon}
text={intl.formatMessage(messages.collections)} text={intl.formatMessage(messages.favourites)}
/> />
</li>
<li>
<ColumnLink
transparent
to='/bookmarks'
icon='bookmarks'
iconComponent={BookmarksIcon}
activeIconComponent={BookmarksActiveIcon}
text={intl.formatMessage(messages.bookmarks)}
/>
</li>
{areCollectionsEnabled() && (
<li>
<ColumnLink
transparent
to={`/@${account?.acct}/collections`}
icon='collections'
iconComponent={CollectionsIcon}
activeIconComponent={CollectionsActiveIcon}
text={intl.formatMessage(messages.collections)}
/>
</li>
)} )}
<ColumnLink <li>
transparent <ColumnLink
to='/conversations' transparent
icon='at' to='/conversations'
iconComponent={AlternateEmailIcon} icon='at'
text={intl.formatMessage(messages.direct)} iconComponent={AlternateEmailIcon}
/> text={intl.formatMessage(messages.direct)}
/>
</li>
<hr /> <li role='separator' />
<ColumnLink <li>
transparent <ColumnLink
href='/settings/preferences' transparent
icon='cog' href='/settings/preferences'
iconComponent={SettingsIcon} icon='cog'
text={intl.formatMessage(messages.preferences)} iconComponent={SettingsIcon}
/> text={intl.formatMessage(messages.preferences)}
/>
</li>
<MoreLink /> <li>
<MoreLink />
</li>
</> </>
)} )}
<div className='navigation-panel__legal'> <li className='navigation-panel__legal'>
<ColumnLink <ColumnLink
transparent transparent
to='/about' to='/about'
@ -374,16 +400,16 @@ export const NavigationPanel: React.FC<{ multiColumn?: boolean }> = ({
iconComponent={InfoIcon} iconComponent={InfoIcon}
text={intl.formatMessage(messages.about)} text={intl.formatMessage(messages.about)}
/> />
</div> </li>
{!signedIn && ( {!signedIn && (
<div className='navigation-panel__sign-in-banner'> <li className='navigation-panel__sign-in-banner'>
<hr /> <hr />
{disabledAccountId ? <DisabledAccountBanner /> : <SignInBanner />} {disabledAccountId ? <DisabledAccountBanner /> : <SignInBanner />}
</div> </li>
)} )}
</div> </ul>
<div className='flex-spacer' /> <div className='flex-spacer' />

View File

@ -1,6 +1,6 @@
import { useCallback, useMemo } from 'react'; import { useCallback, useMemo } from 'react';
import type { List } from 'immutable'; import type { List, Map } from 'immutable';
import { EmojiHTML } from '@/mastodon/components/emoji/html'; import { EmojiHTML } from '@/mastodon/components/emoji/html';
import { useElementHandledLink } from '@/mastodon/components/status/handled_link'; import { useElementHandledLink } from '@/mastodon/components/status/handled_link';
@ -23,8 +23,19 @@ export const EmbeddedStatusContent: React.FC<{
}, },
[mentions], [mentions],
); );
const hrefToCollection = useCallback(
(href: string) => {
const collections = status.get('tagged_collections') as List<
Map<'url' | 'id', string>
>;
const collection = collections.find((item) => item.get('url') === href);
return collection?.get('id');
},
[status],
);
const htmlHandlers = useElementHandledLink({ const htmlHandlers = useElementHandledLink({
hashtagAccountId: status.get('account') as string | undefined, hashtagAccountId: status.get('account') as string | undefined,
hrefToCollectionId: hrefToCollection,
hrefToMention, hrefToMention,
}); });

View File

@ -106,10 +106,10 @@ export const NotificationAdminReport: React.FC<{
<div className='notification-group__main'> <div className='notification-group__main'>
<div className='notification-group__main__header'> <div className='notification-group__main__header'>
<div className='notification-group__main__header__label'> <h2 className='notification-group__main__header__label'>
{message} {message}
<RelativeTimestamp timestamp={report.created_at} /> <RelativeTimestamp timestamp={report.created_at} />
</div> </h2>
</div> </div>
{report.comment.length > 0 && ( {report.comment.length > 0 && (

View File

@ -46,7 +46,7 @@ export const NotificationCollection: React.FC<{
<div className='notification-group__main'> <div className='notification-group__main'>
<div className='notification-group__main__header'> <div className='notification-group__main__header'>
<div className='notification-group__main__header__label'> <h2 className='notification-group__main__header__label'>
{type === 'added_to_collection' && ( {type === 'added_to_collection' && (
<FormattedMessage <FormattedMessage
id='notification.added_to_collection' id='notification.added_to_collection'
@ -79,7 +79,7 @@ export const NotificationCollection: React.FC<{
}} }}
/> />
)} )}
</div> </h2>
</div> </div>
<CollectionPreviewCard collection={collection} /> <CollectionPreviewCard collection={collection} />

View File

@ -125,7 +125,7 @@ export const NotificationGroupWithStatus: React.FC<{
)} )}
</div> </div>
<div className='notification-group__main__header__label'> <h2 className='notification-group__main__header__label'>
<span>{label}</span> <span>{label}</span>
{timestamp && ( {timestamp && (
<> <>
@ -135,7 +135,7 @@ export const NotificationGroupWithStatus: React.FC<{
<RelativeTimestamp timestamp={timestamp} /> <RelativeTimestamp timestamp={timestamp} />
</> </>
)} )}
</div> </h2>
</div> </div>
{statusId && ( {statusId && (

View File

@ -101,12 +101,12 @@ export const NotificationWithStatus: React.FC<{
)} )}
tabIndex={0} tabIndex={0}
> >
<div className='notification-ungrouped__header'> <h2 className='notification-ungrouped__header'>
<div className='notification-ungrouped__header__icon'> <div className='notification-ungrouped__header__icon'>
<Icon icon={icon} id={iconId} /> <Icon icon={icon} id={iconId} />
</div> </div>
<span>{label}</span> <span>{label}</span>
</div> </h2>
<StatusQuoteManager <StatusQuoteManager
id={statusId} id={statusId}

View File

@ -272,7 +272,12 @@ export const DetailedStatus: React.FC<{
); );
if (taggedCollection) { if (taggedCollection) {
media = <CollectionPreviewCard collection={taggedCollection.toJS()} />; media = (
<CollectionPreviewCard
collection={taggedCollection.toJS()}
headingLevel='h2'
/>
);
} else { } else {
media = ( media = (
<Card <Card
@ -286,7 +291,10 @@ export const DetailedStatus: React.FC<{
const firstLinkedCollection = status.get('tagged_collections').first(); const firstLinkedCollection = status.get('tagged_collections').first();
if (firstLinkedCollection) { if (firstLinkedCollection) {
media = ( media = (
<CollectionPreviewCard collection={firstLinkedCollection.toJS()} /> <CollectionPreviewCard
collection={firstLinkedCollection.toJS()}
headingLevel='h2'
/>
); );
} }
} }

View File

@ -51,7 +51,7 @@ export const ComposePanel: React.FC = () => {
{signedIn && !hideComposer && <ComposeFormContainer singleColumn />} {signedIn && !hideComposer && <ComposeFormContainer singleColumn />}
{signedIn && hideComposer && <div className='compose-form' />} {signedIn && hideComposer && <div className='compose-form' />}
<LinkFooter multiColumn={!singleColumn} /> <LinkFooter context={singleColumn ? 'default' : 'multi-column'} />
</div> </div>
); );
}; };

View File

@ -0,0 +1,61 @@
.wrapper {
z-index: 1;
flex: 0 0 auto;
display: flex;
flex-direction: column;
gap: 20px;
font-size: 13px;
color: var(--color-text-secondary);
&[data-context='default'] {
padding: 20px 0;
}
&[data-context='multi-column'] {
padding: 15px;
}
&[data-context='about'] {
margin-top: 60px;
text-align: center;
font-size: 15px;
line-height: 22px;
@media screen and (width >= 1175px) {
display: none;
}
}
}
.heading {
display: inline;
margin-inline-end: 0.3em;
font-weight: 500;
}
.list {
display: inline;
li {
display: inline;
&:not(:last-child)::after {
content: ' · ';
}
}
a {
color: var(--color-text-secondary);
text-decoration: underline;
&:hover,
&:focus,
&:active {
text-decoration: none;
}
}
}
.version {
white-space: nowrap;
}

View File

@ -11,94 +11,110 @@ import {
termsOfServiceEnabled, termsOfServiceEnabled,
} from 'mastodon/initial_state'; } from 'mastodon/initial_state';
const DividingCircle: React.FC = () => <span aria-hidden>{' · '}</span>; import classes from './link_footer.module.scss';
export const LinkFooter: React.FC<{ export const LinkFooter: React.FC<{
multiColumn: boolean; context?: 'default' | 'multi-column' | 'about';
}> = ({ multiColumn }) => { }> = ({ context = 'default' }) => {
const multiColumn = context === 'multi-column';
return ( return (
<div className='link-footer'> <footer className={classes.wrapper} data-context={context}>
<p> <section>
<strong>{domain}</strong>:{' '} <h2 className={classes.heading}>{`${domain}:`}</h2>
<Link to='/about' target={multiColumn ? '_blank' : undefined}> <ul className={classes.list}>
<FormattedMessage <li>
id='footer.about_this_server' <Link to='/about' target={multiColumn ? '_blank' : undefined}>
defaultMessage='About'
/>
</Link>
{statusPageUrl && (
<>
<DividingCircle />
<a href={statusPageUrl} target='_blank' rel='noopener'>
<FormattedMessage id='footer.status' defaultMessage='Status' />
</a>
</>
)}
{canProfileDirectory && (
<>
<DividingCircle />
<Link to='/directory'>
<FormattedMessage <FormattedMessage
id='footer.directory' id='footer.about_this_server'
defaultMessage='Profiles directory' defaultMessage='About'
/> />
</Link> </Link>
</> </li>
)} {statusPageUrl && (
<DividingCircle /> <li>
<Link <a href={statusPageUrl} target='_blank' rel='noopener'>
to='/privacy-policy' <FormattedMessage id='footer.status' defaultMessage='Status' />
target={multiColumn ? '_blank' : undefined} </a>
rel='privacy-policy' </li>
> )}
<FormattedMessage {canProfileDirectory && (
id='footer.privacy_policy' <li>
defaultMessage='Privacy policy' <Link to='/directory'>
/> <FormattedMessage
</Link> id='footer.directory'
{termsOfServiceEnabled && ( defaultMessage='Profiles directory'
<> />
<DividingCircle /> </Link>
</li>
)}
<li>
<Link <Link
to='/terms-of-service' to='/privacy-policy'
target={multiColumn ? '_blank' : undefined} target={multiColumn ? '_blank' : undefined}
rel='terms-of-service' rel='privacy-policy'
> >
<FormattedMessage <FormattedMessage
id='footer.terms_of_service' id='footer.privacy_policy'
defaultMessage='Terms of service' defaultMessage='Privacy policy'
/> />
</Link> </Link>
</> </li>
)} {termsOfServiceEnabled && (
</p> <li>
<Link
<p> to='/terms-of-service'
<strong>Mastodon</strong>:{' '} target={multiColumn ? '_blank' : undefined}
<a href='https://joinmastodon.org' target='_blank' rel='noopener'> rel='terms-of-service'
<FormattedMessage id='footer.about' defaultMessage='About' /> >
</a> <FormattedMessage
<DividingCircle /> id='footer.terms_of_service'
<a href='https://joinmastodon.org/apps' target='_blank' rel='noopener'> defaultMessage='Terms of service'
<FormattedMessage id='footer.get_app' defaultMessage='Get the app' /> />
</a> </Link>
<DividingCircle /> </li>
<Link to='/keyboard-shortcuts'> )}
<FormattedMessage </ul>
id='footer.keyboard_shortcuts' </section>
defaultMessage='Keyboard shortcuts' <section>
/> <h2 className={classes.heading}>Mastodon:</h2>
</Link> <ul className={classes.list}>
<DividingCircle /> <li>
<a href={source_url} rel='noopener' target='_blank'> <a href='https://joinmastodon.org' target='_blank' rel='noopener'>
<FormattedMessage <FormattedMessage id='footer.about' defaultMessage='About' />
id='footer.source_code' </a>
defaultMessage='View source code' </li>
/> <li>
</a> <a
<DividingCircle /> href='https://joinmastodon.org/apps'
<span className='version'>v{version}</span> target='_blank'
</p> rel='noopener'
</div> >
<FormattedMessage
id='footer.get_app'
defaultMessage='Get the app'
/>
</a>
</li>
<li>
<Link to='/keyboard-shortcuts'>
<FormattedMessage
id='footer.keyboard_shortcuts'
defaultMessage='Keyboard shortcuts'
/>
</Link>
</li>
<li>
<a href={source_url} rel='noopener' target='_blank'>
<FormattedMessage
id='footer.source_code'
defaultMessage='View source code'
/>
</a>
</li>
<li className={classes.version}>v{version}</li>
</ul>
</section>
</footer>
); );
}; };

View File

@ -84,10 +84,7 @@ const NotificationsButton = () => {
const LoginOrSignUp: React.FC = () => { const LoginOrSignUp: React.FC = () => {
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const signupUrl = useAppSelector( const signupUrl = useAppSelector(
(state) => (state) => state.server.server.item?.registrations.url ?? '/auth/sign_up',
(state.server.getIn(['server', 'registrations', 'url'], null) as
| string
| null) ?? '/auth/sign_up',
); );
const openClosedRegistrationsModal = useCallback(() => { const openClosedRegistrationsModal = useCallback(() => {
@ -95,7 +92,7 @@ const LoginOrSignUp: React.FC = () => {
}, [dispatch]); }, [dispatch]);
useEffect(() => { useEffect(() => {
dispatch(fetchServer()); void dispatch(fetchServer());
}, [dispatch]); }, [dispatch]);
if (sso_redirect) { if (sso_redirect) {

View File

@ -52,7 +52,7 @@ export const ReportCollectionModal: React.FC<{
const account = useAccount(account_id); const account = useAccount(account_id);
useEffect(() => { useEffect(() => {
dispatch(fetchServer()); void dispatch(fetchServer());
}, [dispatch]); }, [dispatch]);
const [submitState, setSubmitState] = useState< const [submitState, setSubmitState] = useState<

View File

@ -42,6 +42,9 @@
"account.familiar_followers_two": "يتبعه {name1} و {name2}", "account.familiar_followers_two": "يتبعه {name1} و {name2}",
"account.featured": "معروض", "account.featured": "معروض",
"account.featured.accounts": "ملفات شخصية", "account.featured.accounts": "ملفات شخصية",
"account.featured.collections": "المجموعات",
"account.featured.new_collection": "مجموعة جديدة",
"account.field_overflow": "عرض المحتوى الكامل",
"account.filters.all": "جميع الأنشطة", "account.filters.all": "جميع الأنشطة",
"account.filters.boosts_toggle": "اعرض المعاد نشرها", "account.filters.boosts_toggle": "اعرض المعاد نشرها",
"account.filters.posts_boosts": "المنشورات والمعاد نشرها", "account.filters.posts_boosts": "المنشورات والمعاد نشرها",
@ -66,6 +69,16 @@
"account.go_to_profile": "اذهب إلى الملف الشخصي", "account.go_to_profile": "اذهب إلى الملف الشخصي",
"account.hide_reblogs": "إخفاء المعاد نشرها مِن @{name}", "account.hide_reblogs": "إخفاء المعاد نشرها مِن @{name}",
"account.in_memoriam": "في الذكرى.", "account.in_memoriam": "في الذكرى.",
"account.join_modal.day": "يوم",
"account.join_modal.me": "انضممت إلى {server} في",
"account.join_modal.me_anniversary": "ذكرى سنوية سعيدة! لقد انضممت إلى {server} في",
"account.join_modal.me_today": "إنه يومك الأول على {server}!",
"account.join_modal.other": "انضمّ {name} إلى {server} في",
"account.join_modal.other_today": "إنه اليوم الأول لـ{name} على {server}!",
"account.join_modal.share.celebrate": "مشاركة منشور احتفالي",
"account.join_modal.share.intro": "مشاركة منشور تعريفي",
"account.join_modal.share.welcome": "مشاركة منشور ترحيبي",
"account.join_modal.years": "{number, plural, zero {أقل من سنة} one {سنة واحدة} two {سنتَين} few {سنوات} many {سنة} other {سنة}}",
"account.joined_short": "انضم في", "account.joined_short": "انضم في",
"account.languages": "تغيير اللغات المشترَك فيها", "account.languages": "تغيير اللغات المشترَك فيها",
"account.last_active": "آخر نشاط", "account.last_active": "آخر نشاط",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Гэты ўліковы запіс пазначаны як схаваны. Уладальнік сам вырашае, хто можа падпісвацца на яго.", "account.locked_info": "Гэты ўліковы запіс пазначаны як схаваны. Уладальнік сам вырашае, хто можа падпісвацца на яго.",
"account.media": "Медыя", "account.media": "Медыя",
"account.mention": "Згадаць @{name}", "account.mention": "Згадаць @{name}",
"account.menu.add_to_collection": "Дадаць у калекцыю…",
"account.menu.add_to_list": "Дадаць у спіс…", "account.menu.add_to_list": "Дадаць у спіс…",
"account.menu.block": "Заблакіраваць профіль", "account.menu.block": "Заблакіраваць профіль",
"account.menu.block_domain": "Заблакіраваць {domain}", "account.menu.block_domain": "Заблакіраваць {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Падзяліцца ў…", "collection.share_modal.share_via_system": "Падзяліцца ў…",
"collection.share_modal.title": "Падзяліцца калекцыяй", "collection.share_modal.title": "Падзяліцца калекцыяй",
"collection.share_modal.title_new": "Падзяліцеся сваёй калекцыяй!", "collection.share_modal.title_new": "Падзяліцеся сваёй калекцыяй!",
"collection.share_template_other": "Глядзі, якая класная калекцыя: {link}", "collection.share_template_other": "Глядзі, якая класная калекцыя:",
"collection.share_template_own": "Глядзі, у мяне новая калекцыя: {link}", "collection.share_template_own": "Глядзі, у мяне новая калекцыя:",
"collections.account_count": "{count, plural,one {# уліковы запіс} few {# уліковыя запісы} other {# уліковых запісаў}}", "collections.account_count": "{count, plural,one {# уліковы запіс} few {# уліковыя запісы} other {# уліковых запісаў}}",
"collections.accounts.empty_description": "Дадайце да {count} уліковых запісаў", "collections.accounts.empty_description": "Дадайце да {count} уліковых запісаў",
"collections.accounts.empty_editor_title": "У гэтай калекцыі пакуль нікога няма", "collections.accounts.empty_editor_title": "У гэтай калекцыі пакуль нікога няма",
"collections.accounts.empty_title": "Гэтая калекцыя пустая", "collections.accounts.empty_title": "Гэтая калекцыя пустая",
"collections.add_to_collection": "Дадаць {name} у калекцыі",
"collections.block_collection_owner": "Заблакіраваць профіль", "collections.block_collection_owner": "Заблакіраваць профіль",
"collections.by_account": "ад {account_handle}", "collections.by_account": "ад {account_handle}",
"collections.collection_description": "Апісанне", "collections.collection_description": "Апісанне",
@ -394,6 +396,7 @@
"collections.detail.loading": "Загружаецца калекцыя…", "collections.detail.loading": "Загружаецца калекцыя…",
"collections.detail.revoke_inclusion": "Прыбраць сябе", "collections.detail.revoke_inclusion": "Прыбраць сябе",
"collections.detail.sensitive_content": "Адчувальнае змесціва", "collections.detail.sensitive_content": "Адчувальнае змесціва",
"collections.detail.sensitive_note": "Апісанне і ўліковыя запісы могуць не пасаваць усім гледачам.",
"collections.detail.share": "Падзяліцца гэтай калекцыяй", "collections.detail.share": "Падзяліцца гэтай калекцыяй",
"collections.detail.you_are_in_this_collection": "Вас уключылі ў гэтую калекцыю", "collections.detail.you_are_in_this_collection": "Вас уключылі ў гэтую калекцыю",
"collections.edit_details": "Рэдагаваць падрабязнасці", "collections.edit_details": "Рэдагаваць падрабязнасці",
@ -424,6 +427,11 @@
"collections.search_accounts_max_reached": "Вы дадалі максімальную колькасць уліковых запісаў", "collections.search_accounts_max_reached": "Вы дадалі максімальную колькасць уліковых запісаў",
"collections.sensitive": "Адчувальная", "collections.sensitive": "Адчувальная",
"collections.share_short": "Абагуліць", "collections.share_short": "Абагуліць",
"collections.sort_alphabetical": "Алфавіце",
"collections.sort_by": "Сартаваць па:",
"collections.sort_date_added": "Даце дадавання",
"collections.sort_last_active": "Апошняй актыўнасці",
"collections.sort_most_followers": "Колькасці падпісчыкаў",
"collections.suggestions.can_not_add": "Немагчыма дадаць", "collections.suggestions.can_not_add": "Немагчыма дадаць",
"collections.suggestions.can_not_add_desc": "Магчыма, гэтыя ўліковыя запісы схаваныя ад рэкамендацый або знаходзяцца на серверы, які не падтрымлівае калекцыі.", "collections.suggestions.can_not_add_desc": "Магчыма, гэтыя ўліковыя запісы схаваныя ад рэкамендацый або знаходзяцца на серверы, які не падтрымлівае калекцыі.",
"collections.suggestions.must_follow": "Патрабуецца падпіска", "collections.suggestions.must_follow": "Патрабуецца падпіска",
@ -635,6 +643,7 @@
"empty_column.blocks": "Вы яшчэ нікога не заблакіравалі.", "empty_column.blocks": "Вы яшчэ нікога не заблакіравалі.",
"empty_column.bookmarked_statuses": "У Вашых закладках яшчэ няма допісаў. Калі Вы дадасце закладку, яна з’явіцца тут.", "empty_column.bookmarked_statuses": "У Вашых закладках яшчэ няма допісаў. Калі Вы дадасце закладку, яна з’явіцца тут.",
"empty_column.collections.featured_in": "Вас пакуль не дадалі ў ніякія калекцыі.", "empty_column.collections.featured_in": "Вас пакуль не дадалі ў ніякія калекцыі.",
"empty_column.collections.featured_in_undiscoverable": "Каб людзі маглі дадаваць Вас у калекцыі, Вам трэба даць ім дазвол знаходзіць Вас у <link>Налады > Прыватнасць і пошук</link>",
"empty_column.community": "Мясцовая стужка пустая. Напішыце нешта публічнае, каб разварушыць справу!", "empty_column.community": "Мясцовая стужка пустая. Напішыце нешта публічнае, каб разварушыць справу!",
"empty_column.direct": "Пакуль у Вас няма асабістых згадванняў. Калі Вы дашляце або атрымаеце штосьці, яно з’явіцца тут.", "empty_column.direct": "Пакуль у Вас няма асабістых згадванняў. Калі Вы дашляце або атрымаеце штосьці, яно з’явіцца тут.",
"empty_column.disabled_feed": "Гэта стужка была адключаная Вашымі адміністратарамі сервера.", "empty_column.disabled_feed": "Гэта стужка была адключаная Вашымі адміністратарамі сервера.",

View File

@ -366,8 +366,6 @@
"collection.share_modal.share_via_system": "Rhannwch i…", "collection.share_modal.share_via_system": "Rhannwch i…",
"collection.share_modal.title": "Rhannu casgliad", "collection.share_modal.title": "Rhannu casgliad",
"collection.share_modal.title_new": "Rhannwch eich casgliad newydd!", "collection.share_modal.title_new": "Rhannwch eich casgliad newydd!",
"collection.share_template_other": "Edrychwch ar y casgliad trawiadol hwn: {link}",
"collection.share_template_own": "Edrychwch ar fy nghasgliad newydd: {link}",
"collections.account_count": "{count, plural, one {# cyfrif} other {# cyfrif}}", "collections.account_count": "{count, plural, one {# cyfrif} other {# cyfrif}}",
"collections.accounts.empty_description": "Ychwanegu hyd at {count} cyfrif", "collections.accounts.empty_description": "Ychwanegu hyd at {count} cyfrif",
"collections.accounts.empty_editor_title": "Does neb yn y casgliad hwn eto", "collections.accounts.empty_editor_title": "Does neb yn y casgliad hwn eto",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Denne kontos fortrolighedsstatus er sat til låst. Ejeren bedømmer manuelt, hvem der kan følge vedkommende.", "account.locked_info": "Denne kontos fortrolighedsstatus er sat til låst. Ejeren bedømmer manuelt, hvem der kan følge vedkommende.",
"account.media": "Medier", "account.media": "Medier",
"account.mention": "Nævn @{name}", "account.mention": "Nævn @{name}",
"account.menu.add_to_collection": "Føj til samling…",
"account.menu.add_to_list": "Føj til liste…", "account.menu.add_to_list": "Føj til liste…",
"account.menu.block": "Blokér konto", "account.menu.block": "Blokér konto",
"account.menu.block_domain": "Blokér {domain}", "account.menu.block_domain": "Blokér {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Del med…", "collection.share_modal.share_via_system": "Del med…",
"collection.share_modal.title": "Del samling", "collection.share_modal.title": "Del samling",
"collection.share_modal.title_new": "Del din nye samling!", "collection.share_modal.title_new": "Del din nye samling!",
"collection.share_template_other": "Tjek denne seje samling: {link}", "collection.share_template_other": "Tjek denne seje samling:",
"collection.share_template_own": "Tjek min nye samling: {link}", "collection.share_template_own": "Tjek min nye samling:",
"collections.account_count": "{count, plural, one {# konto} other {# konti}}", "collections.account_count": "{count, plural, one {# konto} other {# konti}}",
"collections.accounts.empty_description": "Tilføj op til {count} konti", "collections.accounts.empty_description": "Tilføj op til {count} konti",
"collections.accounts.empty_editor_title": "Ingen er i denne samling endnu", "collections.accounts.empty_editor_title": "Ingen er i denne samling endnu",
"collections.accounts.empty_title": "Denne samling er tom", "collections.accounts.empty_title": "Denne samling er tom",
"collections.add_to_collection": "Tilføj {name} til samlinger",
"collections.block_collection_owner": "Blokér konto", "collections.block_collection_owner": "Blokér konto",
"collections.by_account": "af {account_handle}", "collections.by_account": "af {account_handle}",
"collections.collection_description": "Beskrivelse", "collections.collection_description": "Beskrivelse",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.", "account.locked_info": "Die Privatsphäre dieses Kontos wurde auf „geschützt“ gesetzt. Die Person bestimmt manuell, wer ihrem Profil folgen darf.",
"account.media": "Medien", "account.media": "Medien",
"account.mention": "@{name} erwähnen", "account.mention": "@{name} erwähnen",
"account.menu.add_to_collection": "Einer Sammlung hinzufügen …",
"account.menu.add_to_list": "Einer Liste hinzufügen …", "account.menu.add_to_list": "Einer Liste hinzufügen …",
"account.menu.block": "Konto blockieren", "account.menu.block": "Konto blockieren",
"account.menu.block_domain": "{domain} blockieren", "account.menu.block_domain": "{domain} blockieren",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Teilen …", "collection.share_modal.share_via_system": "Teilen …",
"collection.share_modal.title": "Sammlung teilen", "collection.share_modal.title": "Sammlung teilen",
"collection.share_modal.title_new": "Teile deine neue Sammlung!", "collection.share_modal.title_new": "Teile deine neue Sammlung!",
"collection.share_template_other": "Seht euch diese coole Sammlung an: {link}", "collection.share_template_other": "Seht euch diese coole Sammlung an:",
"collection.share_template_own": "Seht euch meine neue Sammlung an: {link}", "collection.share_template_own": "Seht euch meine neue Sammlung an:",
"collections.account_count": "{count, plural, one {# Konto} other {# Konten}}", "collections.account_count": "{count, plural, one {# Konto} other {# Konten}}",
"collections.accounts.empty_description": "Füge bis zu {count} Konten hinzu", "collections.accounts.empty_description": "Füge bis zu {count} Konten hinzu",
"collections.accounts.empty_editor_title": "Noch befindet sich niemand in dieser Sammlung", "collections.accounts.empty_editor_title": "Noch befindet sich niemand in dieser Sammlung",
"collections.accounts.empty_title": "Diese Sammlung ist leer", "collections.accounts.empty_title": "Diese Sammlung ist leer",
"collections.add_to_collection": "{name} einer Sammlung hinzufügen",
"collections.block_collection_owner": "Konto blockieren", "collections.block_collection_owner": "Konto blockieren",
"collections.by_account": "von {account_handle}", "collections.by_account": "von {account_handle}",
"collections.collection_description": "Beschreibung", "collections.collection_description": "Beschreibung",
@ -426,7 +428,7 @@
"collections.sensitive": "Inhaltswarnung", "collections.sensitive": "Inhaltswarnung",
"collections.share_short": "Teilen", "collections.share_short": "Teilen",
"collections.sort_alphabetical": "Alphabetisch", "collections.sort_alphabetical": "Alphabetisch",
"collections.sort_by": "Sortierung:", "collections.sort_by": "Sortieren nach:",
"collections.sort_date_added": "Datum des Hinzufügens", "collections.sort_date_added": "Datum des Hinzufügens",
"collections.sort_last_active": "Neueste Aktivität", "collections.sort_last_active": "Neueste Aktivität",
"collections.sort_most_followers": "Followerzahl", "collections.sort_most_followers": "Followerzahl",

View File

@ -86,7 +86,8 @@
"account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού έχει ρυθμιστεί σε κλειδωμένη. Ο ιδιοκτήτης ελέγχει χειροκίνητα ποιος μπορεί να τον ακολουθήσει.", "account.locked_info": "Η κατάσταση απορρήτου αυτού του λογαριασμού έχει ρυθμιστεί σε κλειδωμένη. Ο ιδιοκτήτης ελέγχει χειροκίνητα ποιος μπορεί να τον ακολουθήσει.",
"account.media": "Πολυμέσα", "account.media": "Πολυμέσα",
"account.mention": "Επισήμανση @{name}", "account.mention": "Επισήμανση @{name}",
"account.menu.add_to_list": "Προσθήκη στη λίστα…", "account.menu.add_to_collection": "Προσθήκη σε συλλογή…",
"account.menu.add_to_list": "Προσθήκη σε λίστα…",
"account.menu.block": "Αποκλεισμός λογαριασμού", "account.menu.block": "Αποκλεισμός λογαριασμού",
"account.menu.block_domain": "Αποκλεισμός {domain}", "account.menu.block_domain": "Αποκλεισμός {domain}",
"account.menu.copied": "Αντιγραφή συνδέσμου λογαριασμού στο πρόχειρο", "account.menu.copied": "Αντιγραφή συνδέσμου λογαριασμού στο πρόχειρο",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Κοινοποίηση σε…", "collection.share_modal.share_via_system": "Κοινοποίηση σε…",
"collection.share_modal.title": "Κοινοποίηση συλλογής", "collection.share_modal.title": "Κοινοποίηση συλλογής",
"collection.share_modal.title_new": "Μοιραστείτε τη νέα σας συλλογή!", "collection.share_modal.title_new": "Μοιραστείτε τη νέα σας συλλογή!",
"collection.share_template_other": "Δείτε αυτή την ωραία συλλογή: {link}", "collection.share_template_other": "Δείτε αυτή την ωραία συλλογή:",
"collection.share_template_own": "Δείτε τη νέα μου συλλογή: {link}", "collection.share_template_own": "Δείτε τη νέα μου συλλογή:",
"collections.account_count": "{count, plural, one {# λογαριασμός} other {# λογαριασμοί}}", "collections.account_count": "{count, plural, one {# λογαριασμός} other {# λογαριασμοί}}",
"collections.accounts.empty_description": "Προσθέστε μέχρι και {count} λογαριασμούς", "collections.accounts.empty_description": "Προσθέστε μέχρι και {count} λογαριασμούς",
"collections.accounts.empty_editor_title": "Κανείς δεν είναι ακόμη σε αυτήν τη συλλογή", "collections.accounts.empty_editor_title": "Κανείς δεν είναι ακόμη σε αυτήν τη συλλογή",
"collections.accounts.empty_title": "Αυτή η συλλογή είναι κενή", "collections.accounts.empty_title": "Αυτή η συλλογή είναι κενή",
"collections.add_to_collection": "Προσθήκη {name} σε συλλογές",
"collections.block_collection_owner": "Αποκλεισμός λογαριασμού", "collections.block_collection_owner": "Αποκλεισμός λογαριασμού",
"collections.by_account": "από {account_handle}", "collections.by_account": "από {account_handle}",
"collections.collection_description": "Περιγραφή", "collections.collection_description": "Περιγραφή",
@ -990,7 +992,7 @@
"notifications.clear_title": "Εκκαθάριση ειδοποιήσεων;", "notifications.clear_title": "Εκκαθάριση ειδοποιήσεων;",
"notifications.column_settings.admin.report": "Νέες αναφορές:", "notifications.column_settings.admin.report": "Νέες αναφορές:",
"notifications.column_settings.admin.sign_up": "Νέες εγγραφές:", "notifications.column_settings.admin.sign_up": "Νέες εγγραφές:",
"notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας", "notifications.column_settings.alert": "Ειδοποιήσεις για υπολογιστή",
"notifications.column_settings.favourite": "Αγαπημένα:", "notifications.column_settings.favourite": "Αγαπημένα:",
"notifications.column_settings.filter_bar.advanced": "Εμφάνιση όλων των κατηγοριών", "notifications.column_settings.filter_bar.advanced": "Εμφάνιση όλων των κατηγοριών",
"notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου", "notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου",
@ -1018,9 +1020,9 @@
"notifications.grant_permission": "Χορήγηση άδειας.", "notifications.grant_permission": "Χορήγηση άδειας.",
"notifications.group": "{count} ειδοποιήσεις", "notifications.group": "{count} ειδοποιήσεις",
"notifications.mark_as_read": "Σήμανε όλες τις ειδοποιήσεις ως αναγνωσμένες", "notifications.mark_as_read": "Σήμανε όλες τις ειδοποιήσεις ως αναγνωσμένες",
"notifications.permission_denied": "Οι ειδοποιήσεις στην επιφάνεια εργασίας δεν είναι διαθέσιμες διότι έχει απορριφθεί κάποιο προηγούμενο αίτημα άδειας", "notifications.permission_denied": "Οι ειδοποιήσεις για υπολογιστή δεν είναι διαθέσιμες διότι έχει απορριφθεί κάποιο προηγούμενο αίτημα άδειας",
"notifications.permission_denied_alert": "Δεν είναι δυνατή η ενεργοποίηση των ειδοποιήσεων της επιφάνειας εργασίας, καθώς η άδεια του προγράμματος περιήγησης έχει απορριφθεί νωρίτερα", "notifications.permission_denied_alert": "Δεν είναι δυνατή η ενεργοποίηση των ειδοποιήσεων για υπολογιστή, καθώς η άδεια του προγράμματος περιήγησης έχει απορριφθεί προηγουμένων",
"notifications.permission_required": "Οι ειδοποιήσεις δεν είναι διαθέσιμες επειδή δεν έχει δοθεί η απαιτούμενη άδεια.", "notifications.permission_required": "Οι ειδοποιήσεις για υπολογιστή δεν είναι διαθέσιμες επειδή δεν έχει δοθεί η απαιτούμενη άδεια.",
"notifications.policy.accept": "Αποδοχή", "notifications.policy.accept": "Αποδοχή",
"notifications.policy.accept_hint": "Εμφάνιση στις ειδοποιήσεις", "notifications.policy.accept_hint": "Εμφάνιση στις ειδοποιήσεις",
"notifications.policy.drop": "Αγνόηση", "notifications.policy.drop": "Αγνόηση",
@ -1038,8 +1040,8 @@
"notifications.policy.filter_private_mentions_hint": "Φιλτράρισμα εκτός αν είναι απάντηση σε δική σου επισήμανση ή αν ακολουθείς τον αποστολέα", "notifications.policy.filter_private_mentions_hint": "Φιλτράρισμα εκτός αν είναι απάντηση σε δική σου επισήμανση ή αν ακολουθείς τον αποστολέα",
"notifications.policy.filter_private_mentions_title": "Μη συναινετικές ιδιωτικές επισημάνσεις", "notifications.policy.filter_private_mentions_title": "Μη συναινετικές ιδιωτικές επισημάνσεις",
"notifications.policy.title": "Διαχείριση ειδοποιήσεων από…", "notifications.policy.title": "Διαχείριση ειδοποιήσεων από…",
"notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων επιφάνειας εργασίας", "notifications_permission_banner.enable": "Ενεργοποίηση ειδοποιήσεων για υπολογιστή",
"notifications_permission_banner.how_to_control": "Για να λαμβάνεις ειδοποιήσεις όταν το Mastodon δεν είναι ανοιχτό, ενεργοποίησε τις ειδοποιήσεις επιφάνειας εργασίας. Μπορείς να ελέγξεις με ακρίβεια ποιοι τύποι αλληλεπιδράσεων δημιουργούν ειδοποιήσεις επιφάνειας εργασίας μέσω του κουμπιού {icon} μόλις ενεργοποιηθούν.", "notifications_permission_banner.how_to_control": "Για να λαμβάνεις ειδοποιήσεις όταν το Mastodon δεν είναι ανοιχτό, ενεργοποίησε τις ειδοποιήσεις για υπολογιστή. Μπορείς να ελέγξεις με ακρίβεια ποιοι τύποι αλληλεπιδράσεων δημιουργούν ειδοποιήσεις για υπολογιστή μέσω του κουμπιού {icon} μόλις ενεργοποιηθούν.",
"notifications_permission_banner.title": "Μη χάσεις στιγμή", "notifications_permission_banner.title": "Μη χάσεις στιγμή",
"onboarding.follows.back": "Πίσω", "onboarding.follows.back": "Πίσω",
"onboarding.follows.empty": "Δυστυχώς, δεν μπορούν να εμφανιστούν αποτελέσματα αυτή τη στιγμή. Μπορείς να προσπαθήσεις να χρησιμοποιήσεις την αναζήτηση ή να περιηγηθείς στη σελίδα εξερεύνησης για να βρεις άτομα να ακολουθήσεις ή να δοκιμάσεις ξανά αργότερα.", "onboarding.follows.empty": "Δυστυχώς, δεν μπορούν να εμφανιστούν αποτελέσματα αυτή τη στιγμή. Μπορείς να προσπαθήσεις να χρησιμοποιήσεις την αναζήτηση ή να περιηγηθείς στη σελίδα εξερεύνησης για να βρεις άτομα να ακολουθήσεις ή να δοκιμάσεις ξανά αργότερα.",
@ -1296,7 +1298,7 @@
"status.uncached_media_warning": "Μη διαθέσιμη προεπισκόπηση", "status.uncached_media_warning": "Μη διαθέσιμη προεπισκόπηση",
"status.unmute_conversation": "Άρση σίγασης συνομιλίας", "status.unmute_conversation": "Άρση σίγασης συνομιλίας",
"status.unpin": "Ξεκαρφίτσωσε από το προφίλ", "status.unpin": "Ξεκαρφίτσωσε από το προφίλ",
"subscribed_languages.lead": "Μόνο αναρτήσεις σε επιλεγμένες γλώσσες θα εμφανίζονται στην αρχική σου και θα παραθέτονται ροές μετά την αλλαγή. Επέλεξε καμία για να λαμβάνεις αναρτήσεις σε όλες τις γλώσσες.", "subscribed_languages.lead": "Μόνο αναρτήσεις στις επιλεγμένες γλώσσες θα εμφανίζονται στην αρχική σου και στις ροές λίστας μετά την αλλαγή. Επέλεξε καμία για να λαμβάνεις αναρτήσεις σε όλες τις γλώσσες.",
"subscribed_languages.save": "Αποθήκευση αλλαγών", "subscribed_languages.save": "Αποθήκευση αλλαγών",
"subscribed_languages.target": "Αλλαγή εγγεγραμμένων γλωσσών για {target}", "subscribed_languages.target": "Αλλαγή εγγεγραμμένων γλωσσών για {target}",
"tabs_bar.home": "Αρχική", "tabs_bar.home": "Αρχική",

View File

@ -366,8 +366,6 @@
"collection.share_modal.share_via_system": "Share to…", "collection.share_modal.share_via_system": "Share to…",
"collection.share_modal.title": "Share collection", "collection.share_modal.title": "Share collection",
"collection.share_modal.title_new": "Share your new collection!", "collection.share_modal.title_new": "Share your new collection!",
"collection.share_template_other": "Check out this cool collection: {link}",
"collection.share_template_own": "Check out my new collection: {link}",
"collections.account_count": "{count, plural, one {# account} other {# accounts}}", "collections.account_count": "{count, plural, one {# account} other {# accounts}}",
"collections.accounts.empty_description": "Add up to {count} accounts", "collections.accounts.empty_description": "Add up to {count} accounts",
"collections.accounts.empty_editor_title": "No one is in this collection yet", "collections.accounts.empty_editor_title": "No one is in this collection yet",

View File

@ -367,8 +367,8 @@
"collection.share_modal.share_via_system": "Share to…", "collection.share_modal.share_via_system": "Share to…",
"collection.share_modal.title": "Share collection", "collection.share_modal.title": "Share collection",
"collection.share_modal.title_new": "Share your new collection!", "collection.share_modal.title_new": "Share your new collection!",
"collection.share_template_other": "Check out this cool collection: {link}", "collection.share_template_other": "Check out this cool collection:",
"collection.share_template_own": "Check out my new collection: {link}", "collection.share_template_own": "Check out my new collection:",
"collections.account_count": "{count, plural, one {# account} other {# accounts}}", "collections.account_count": "{count, plural, one {# account} other {# accounts}}",
"collections.accounts.empty_description": "Add up to {count} accounts", "collections.accounts.empty_description": "Add up to {count} accounts",
"collections.accounts.empty_editor_title": "No one is in this collection yet", "collections.accounts.empty_editor_title": "No one is in this collection yet",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Esta cuenta es privada. El propietario manualmente revisa quién puede seguirle.", "account.locked_info": "Esta cuenta es privada. El propietario manualmente revisa quién puede seguirle.",
"account.media": "Medios", "account.media": "Medios",
"account.mention": "Mencionar a @{name}", "account.mention": "Mencionar a @{name}",
"account.menu.add_to_collection": "Agregar a la colección…",
"account.menu.add_to_list": "Añadir a lista…", "account.menu.add_to_list": "Añadir a lista…",
"account.menu.block": "Bloquear cuenta", "account.menu.block": "Bloquear cuenta",
"account.menu.block_domain": "Bloquear a {domain}", "account.menu.block_domain": "Bloquear a {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Compartir en…", "collection.share_modal.share_via_system": "Compartir en…",
"collection.share_modal.title": "Compartir colección", "collection.share_modal.title": "Compartir colección",
"collection.share_modal.title_new": "¡Compartí tu nueva colección!", "collection.share_modal.title_new": "¡Compartí tu nueva colección!",
"collection.share_template_other": "¡Mirá qué copada está esta colección! {link}", "collection.share_template_other": "Fijate qué copada es esta colección:",
"collection.share_template_own": "Mirá mi nueva colección: {link}", "collection.share_template_own": "Revisá mi nueva colección:",
"collections.account_count": "{count, plural, one {# hora} other {# horas}}", "collections.account_count": "{count, plural, one {# hora} other {# horas}}",
"collections.accounts.empty_description": "Agregá hasta {count} cuentas", "collections.accounts.empty_description": "Agregá hasta {count} cuentas",
"collections.accounts.empty_editor_title": "Todavía no hay nadie en esta colección", "collections.accounts.empty_editor_title": "Todavía no hay nadie en esta colección",
"collections.accounts.empty_title": "Esta colección está vacía", "collections.accounts.empty_title": "Esta colección está vacía",
"collections.add_to_collection": "Agregar {name} a las colecciones",
"collections.block_collection_owner": "Bloquear cuenta", "collections.block_collection_owner": "Bloquear cuenta",
"collections.by_account": "por {account_handle}", "collections.by_account": "por {account_handle}",
"collections.collection_description": "Descripción", "collections.collection_description": "Descripción",

View File

@ -86,6 +86,7 @@
"account.locked_info": "El estado de privacidad de esta cuenta está configurado como bloqueado. El propietario revisa manualmente quién puede seguirlo.", "account.locked_info": "El estado de privacidad de esta cuenta está configurado como bloqueado. El propietario revisa manualmente quién puede seguirlo.",
"account.media": "Multimedia", "account.media": "Multimedia",
"account.mention": "Mencionar a @{name}", "account.mention": "Mencionar a @{name}",
"account.menu.add_to_collection": "Añadir a colección…",
"account.menu.add_to_list": "Añadir a lista…", "account.menu.add_to_list": "Añadir a lista…",
"account.menu.block": "Bloquear cuenta", "account.menu.block": "Bloquear cuenta",
"account.menu.block_domain": "Bloquear {domain}", "account.menu.block_domain": "Bloquear {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Compartir con…", "collection.share_modal.share_via_system": "Compartir con…",
"collection.share_modal.title": "Compartir la colección", "collection.share_modal.title": "Compartir la colección",
"collection.share_modal.title_new": "¡Comparte tu nueva colección!", "collection.share_modal.title_new": "¡Comparte tu nueva colección!",
"collection.share_template_other": "Echa un vistazo a esta increíble colección: {link}", "collection.share_template_other": "Mira esta colección tan chula:",
"collection.share_template_own": "Echa un vistazo a mi nueva colección: {link}", "collection.share_template_own": "Mira mi nueva colección:",
"collections.account_count": "{count, plural,one {# cuenta} other {# cuentas}}", "collections.account_count": "{count, plural,one {# cuenta} other {# cuentas}}",
"collections.accounts.empty_description": "Añade hasta {count} cuentas", "collections.accounts.empty_description": "Añade hasta {count} cuentas",
"collections.accounts.empty_editor_title": "No hay nadie en esta colección todavía", "collections.accounts.empty_editor_title": "No hay nadie en esta colección todavía",
"collections.accounts.empty_title": "Esta colección está vacía", "collections.accounts.empty_title": "Esta colección está vacía",
"collections.add_to_collection": "Añadir a {name} a colecciones",
"collections.block_collection_owner": "Bloquer cuenta", "collections.block_collection_owner": "Bloquer cuenta",
"collections.by_account": "de {account_handle}", "collections.by_account": "de {account_handle}",
"collections.collection_description": "Descripción", "collections.collection_description": "Descripción",
@ -394,7 +396,7 @@
"collections.detail.loading": "Cargando colección…", "collections.detail.loading": "Cargando colección…",
"collections.detail.revoke_inclusion": "Excluirme", "collections.detail.revoke_inclusion": "Excluirme",
"collections.detail.sensitive_content": "Contenido sensible", "collections.detail.sensitive_content": "Contenido sensible",
"collections.detail.sensitive_note": "La descripción y cuentas pueden no ser adecuadas para todas las personas.", "collections.detail.sensitive_note": "Es posible que la descripción y las cuentas no sean aptas para todos las personas.",
"collections.detail.share": "Compartir esta colección", "collections.detail.share": "Compartir esta colección",
"collections.detail.you_are_in_this_collection": "Apareces en esta colección", "collections.detail.you_are_in_this_collection": "Apareces en esta colección",
"collections.edit_details": "Editar detalles", "collections.edit_details": "Editar detalles",
@ -641,7 +643,7 @@
"empty_column.blocks": "Aún no has bloqueado a ningún usuario.", "empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
"empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.", "empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
"empty_column.collections.featured_in": "Aún no te han añadido a ninguna colección.", "empty_column.collections.featured_in": "Aún no te han añadido a ninguna colección.",
"empty_column.collections.featured_in_undiscoverable": "Para que la gente pueda añadirte a colecciones, debes permitir ser destacado en algoritmos de descubrimiento desde <link>Preferencias > Privacidad y alcance</link>", "empty_column.collections.featured_in_undiscoverable": "Para que los usuarios puedan añadirte a sus colecciones, debes habilitar la opción de aparecer en las experiencias de descubrimiento desde <link>Preferencias > Privacidad y alcance</link>",
"empty_column.community": "La cronología local está vacía. ¡Escribe algo públicamente para ponerla en marcha!", "empty_column.community": "La cronología local está vacía. ¡Escribe algo públicamente para ponerla en marcha!",
"empty_column.direct": "Aún no tienes ninguna mención privada. Cuando envíes o recibas una, aparecerá aquí.", "empty_column.direct": "Aún no tienes ninguna mención privada. Cuando envíes o recibas una, aparecerá aquí.",
"empty_column.disabled_feed": "Esta cronología fue desactivada por los administradores de tu servidor.", "empty_column.disabled_feed": "Esta cronología fue desactivada por los administradores de tu servidor.",

View File

@ -86,6 +86,7 @@
"account.locked_info": "El estado de privacidad de esta cuenta está configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.", "account.locked_info": "El estado de privacidad de esta cuenta está configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.",
"account.media": "Multimedia", "account.media": "Multimedia",
"account.mention": "Mencionar a @{name}", "account.mention": "Mencionar a @{name}",
"account.menu.add_to_collection": "Añadir a colección…",
"account.menu.add_to_list": "Añadir a lista…", "account.menu.add_to_list": "Añadir a lista…",
"account.menu.block": "Bloquear cuenta", "account.menu.block": "Bloquear cuenta",
"account.menu.block_domain": "Bloquear {domain}", "account.menu.block_domain": "Bloquear {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Compartir con…", "collection.share_modal.share_via_system": "Compartir con…",
"collection.share_modal.title": "Compartir la colección", "collection.share_modal.title": "Compartir la colección",
"collection.share_modal.title_new": "¡Comparte tu nueva colección!", "collection.share_modal.title_new": "¡Comparte tu nueva colección!",
"collection.share_template_other": "Echa un vistazo a esta fantástica colección: {link}", "collection.share_template_other": "Mira esta colección tan chula:",
"collection.share_template_own": "Echa un vistazo a mi nueva colección: {link}", "collection.share_template_own": "Mira mi nueva colección:",
"collections.account_count": "{count, plural, one {# cuenta} other {# cuentas}}", "collections.account_count": "{count, plural, one {# cuenta} other {# cuentas}}",
"collections.accounts.empty_description": "Añade hasta {count} cuentas", "collections.accounts.empty_description": "Añade hasta {count} cuentas",
"collections.accounts.empty_editor_title": "No hay nadie en esta colección todavía", "collections.accounts.empty_editor_title": "No hay nadie en esta colección todavía",
"collections.accounts.empty_title": "Esta colección está vacía", "collections.accounts.empty_title": "Esta colección está vacía",
"collections.add_to_collection": "Añadir {name} a colecciones",
"collections.block_collection_owner": "Bloquear cuenta", "collections.block_collection_owner": "Bloquear cuenta",
"collections.by_account": "de {account_handle}", "collections.by_account": "de {account_handle}",
"collections.collection_description": "Descripción", "collections.collection_description": "Descripción",
@ -425,9 +427,9 @@
"collections.search_accounts_max_reached": "Has añadido el número máximo de cuentas", "collections.search_accounts_max_reached": "Has añadido el número máximo de cuentas",
"collections.sensitive": "Sensible", "collections.sensitive": "Sensible",
"collections.share_short": "Compartir", "collections.share_short": "Compartir",
"collections.sort_alphabetical": "Alfabético", "collections.sort_alphabetical": "Alfabéticamente",
"collections.sort_by": "Orden:", "collections.sort_by": "Ordenar por:",
"collections.sort_date_added": "Añadido a fecha", "collections.sort_date_added": "Fecha de inclusión",
"collections.sort_last_active": "Última actividad", "collections.sort_last_active": "Última actividad",
"collections.sort_most_followers": "Más seguidores", "collections.sort_most_followers": "Más seguidores",
"collections.suggestions.can_not_add": "No puede ser añadida", "collections.suggestions.can_not_add": "No puede ser añadida",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Selle konto privaatsusolek on „lukustatud“. Omanik vaatab üle, kes teda jälgida saab.", "account.locked_info": "Selle konto privaatsusolek on „lukustatud“. Omanik vaatab üle, kes teda jälgida saab.",
"account.media": "Meedium", "account.media": "Meedium",
"account.mention": "Maini kasutajat @{name}", "account.mention": "Maini kasutajat @{name}",
"account.menu.add_to_collection": "Lisa kogumikku…",
"account.menu.add_to_list": "Lisa loendisse…", "account.menu.add_to_list": "Lisa loendisse…",
"account.menu.block": "Blokeeri kasutajakonto", "account.menu.block": "Blokeeri kasutajakonto",
"account.menu.block_domain": "Blokeeri {domain}", "account.menu.block_domain": "Blokeeri {domain}",
@ -147,7 +148,7 @@
"account.unmute": "Lõpeta {name} kasutaja summutamine", "account.unmute": "Lõpeta {name} kasutaja summutamine",
"account.unmute_notifications_short": "Lõpeta teavituste summutamine", "account.unmute_notifications_short": "Lõpeta teavituste summutamine",
"account.unmute_short": "Lõpeta summutamine", "account.unmute_short": "Lõpeta summutamine",
"account_edit.advanced_settings.bot_hint": "Teavita teisi, et sel kontol tehakse peamiselt automatiseeritud toiminguid ja seda ei pruugita jälgida", "account_edit.advanced_settings.bot_hint": "Teavita teisi, et sel kasutajakontol tehakse peamiselt automatiseeritud toiminguid ja seda ei pruugita jälgida",
"account_edit.advanced_settings.bot_label": "Automatiseeritud kasutajakonto", "account_edit.advanced_settings.bot_label": "Automatiseeritud kasutajakonto",
"account_edit.advanced_settings.title": "Täpsemad seadistused", "account_edit.advanced_settings.title": "Täpsemad seadistused",
"account_edit.bio.add_label": "Lisa elulugu", "account_edit.bio.add_label": "Lisa elulugu",
@ -227,7 +228,7 @@
"account_edit.profile_tab.show_relations.description": "Näitab sinu profiilis teistele kasutajatele kontosid, mida jälgid ning su jälgijaid. Inimesed saavad endiselt näha, kas sa neid jälgid.", "account_edit.profile_tab.show_relations.description": "Näitab sinu profiilis teistele kasutajatele kontosid, mida jälgid ning su jälgijaid. Inimesed saavad endiselt näha, kas sa neid jälgid.",
"account_edit.profile_tab.show_relations.title": "Näita „Jälgijad“ ja „Jälgib“", "account_edit.profile_tab.show_relations.title": "Näita „Jälgijad“ ja „Jälgib“",
"account_edit.profile_tab.subtitle": "Kohanda, kuidas su profiili näidatakse.", "account_edit.profile_tab.subtitle": "Kohanda, kuidas su profiili näidatakse.",
"account_edit.profile_tab.title": "Profiili näitamise seaded", "account_edit.profile_tab.title": "Profiili näitamise seadistused",
"account_edit.save": "Salvesta", "account_edit.save": "Salvesta",
"account_edit.upload_modal.back": "Tagasi", "account_edit.upload_modal.back": "Tagasi",
"account_edit.upload_modal.done": "Valmis", "account_edit.upload_modal.done": "Valmis",
@ -365,13 +366,14 @@
"collection.share_modal.share_via_post": "Postita Mastodonis", "collection.share_modal.share_via_post": "Postita Mastodonis",
"collection.share_modal.share_via_system": "Jaga kohas…", "collection.share_modal.share_via_system": "Jaga kohas…",
"collection.share_modal.title": "Jaga kogumikku", "collection.share_modal.title": "Jaga kogumikku",
"collection.share_modal.title_new": "Jaga oma ut kogumikku!", "collection.share_modal.title_new": "Jaga oma uut kogumikku!",
"collection.share_template_other": "Vaata seda lahedat kogumikku: {link}", "collection.share_template_other": "Vaata seda lahedat kogumikku:",
"collection.share_template_own": "Vaata mu uut kogumikku: {link}", "collection.share_template_own": "Vaata minu uut kogumikku:",
"collections.account_count": "{count, plural, one {# kasutajakonto} other {# kasutajakontot}}", "collections.account_count": "{count, plural, one {# kasutajakonto} other {# kasutajakontot}}",
"collections.accounts.empty_description": "Lisa kuni {count} kontot", "collections.accounts.empty_description": "Lisa kuni {count} kasutajakontot",
"collections.accounts.empty_editor_title": "Selles kogumikus pole veel kedagi", "collections.accounts.empty_editor_title": "Selles kogumikus pole veel kedagi",
"collections.accounts.empty_title": "See kogumik on tühi", "collections.accounts.empty_title": "See kogumik on tühi",
"collections.add_to_collection": "Lisa „{name}“ kogumikku",
"collections.block_collection_owner": "Konto blokeerimine", "collections.block_collection_owner": "Konto blokeerimine",
"collections.by_account": "{account_handle} poolt", "collections.by_account": "{account_handle} poolt",
"collections.collection_description": "Kirjeldus", "collections.collection_description": "Kirjeldus",
@ -383,7 +385,7 @@
"collections.content_warning": "Sisuhoiatus", "collections.content_warning": "Sisuhoiatus",
"collections.continue": "Jätka", "collections.continue": "Jätka",
"collections.copy_link": "Kopeeri link", "collections.copy_link": "Kopeeri link",
"collections.copy_link_confirmation": "Kogumiku link kopeeriti lõikelauale", "collections.copy_link_confirmation": "Kogumiku link on kopeeritud lõikelauale",
"collections.create.accounts_title": "Kes saavad olema selles kogumikus?", "collections.create.accounts_title": "Kes saavad olema selles kogumikus?",
"collections.create.basic_details_title": "Põhiandmed", "collections.create.basic_details_title": "Põhiandmed",
"collections.create.steps": "Samm {step}/{total}", "collections.create.steps": "Samm {step}/{total}",
@ -422,7 +424,7 @@
"collections.revoke_inclusion.confirmation": "Oled eemaldatud \"{collection}\"-st", "collections.revoke_inclusion.confirmation": "Oled eemaldatud \"{collection}\"-st",
"collections.revoke_inclusion.error": "Oli viga, palun proovi hiljem uuesti.", "collections.revoke_inclusion.error": "Oli viga, palun proovi hiljem uuesti.",
"collections.search_accounts_label": "Otsi kontot, mida lisada", "collections.search_accounts_label": "Otsi kontot, mida lisada",
"collections.search_accounts_max_reached": "Oled lisanud maksimumarv kontosid", "collections.search_accounts_max_reached": "Oled lisanud maksimumarvu kontosid",
"collections.sensitive": "Tundlik", "collections.sensitive": "Tundlik",
"collections.share_short": "Jaga", "collections.share_short": "Jaga",
"collections.sort_alphabetical": "Tähestikuline", "collections.sort_alphabetical": "Tähestikuline",
@ -462,17 +464,17 @@
"column.list_members": "Halda loendi liikmeid", "column.list_members": "Halda loendi liikmeid",
"column.lists": "Loetelud", "column.lists": "Loetelud",
"column.mutes": "Summutatud kasutajad", "column.mutes": "Summutatud kasutajad",
"column.notifications": "Teated", "column.notifications": "Teavitused",
"column.other_collections": "Kasutaja {name} kogumikud", "column.other_collections": "Kasutaja {name} kogumikud",
"column.pins": "Esiletõstetud postitused", "column.pins": "Esiletõstetud postitused",
"column.public": "Föderatiivne ajajoon", "column.public": "Födereeritud ajajoon",
"column.your_collections": "Sinu kogumikud", "column.your_collections": "Sinu kogumikud",
"column_back_button.label": "Tagasi", "column_back_button.label": "Tagasi",
"column_header.hide_settings": "Peida sätted", "column_header.hide_settings": "Peida seadistused",
"column_header.moveLeft_settings": "Liiguta tulp vasakule", "column_header.moveLeft_settings": "Liiguta tulp vasakule",
"column_header.moveRight_settings": "Liiguta tulp paremale", "column_header.moveRight_settings": "Liiguta tulp paremale",
"column_header.pin": "Kinnita", "column_header.pin": "Kinnita",
"column_header.show_settings": "Näita sätteid", "column_header.show_settings": "Näita seadistusi",
"column_header.unpin": "Eemalda kinnitus", "column_header.unpin": "Eemalda kinnitus",
"column_search.cancel": "Tühista", "column_search.cancel": "Tühista",
"combobox.close_results": "Sulge tulemused", "combobox.close_results": "Sulge tulemused",
@ -532,7 +534,7 @@
"confirmations.follow_to_list.message": "Pead jälgima kasutajat {name}, et lisada teda loetellu.", "confirmations.follow_to_list.message": "Pead jälgima kasutajat {name}, et lisada teda loetellu.",
"confirmations.follow_to_list.title": "Jälgida kasutajat?", "confirmations.follow_to_list.title": "Jälgida kasutajat?",
"confirmations.hide_featured_tab.confirm": "Peida vahekaart", "confirmations.hide_featured_tab.confirm": "Peida vahekaart",
"confirmations.hide_featured_tab.intro": "Saad seda igal ajal muuta menüüs <i>Profiili muutmine > Profiili vahekaardi seaded</i>.", "confirmations.hide_featured_tab.intro": "Saad seda igal ajal muuta menüüs <i>Profiili muutmine > Profiili vahekaardi seadistused</i>.",
"confirmations.hide_featured_tab.message": "See peidab vahekaardi serveri {serverName} kasutajatel ja teistel serveritel, kus kasutatakse Mastodoni uusimat versiooni. Muudel serveritel võib kuvamine erineda.", "confirmations.hide_featured_tab.message": "See peidab vahekaardi serveri {serverName} kasutajatel ja teistel serveritel, kus kasutatakse Mastodoni uusimat versiooni. Muudel serveritel võib kuvamine erineda.",
"confirmations.hide_featured_tab.title": "Kas peidame vahekaardi „Esiletõstetud“?", "confirmations.hide_featured_tab.title": "Kas peidame vahekaardi „Esiletõstetud“?",
"confirmations.logout.confirm": "Välju", "confirmations.logout.confirm": "Välju",
@ -586,7 +588,7 @@
"directory.local": "Ainult domeenilt {domain}", "directory.local": "Ainult domeenilt {domain}",
"directory.new_arrivals": "Uustulijad", "directory.new_arrivals": "Uustulijad",
"directory.recently_active": "Hiljuti aktiivne", "directory.recently_active": "Hiljuti aktiivne",
"disabled_account_banner.account_settings": "Kontosätted", "disabled_account_banner.account_settings": "Kasutajakonto seadistused",
"disabled_account_banner.text": "Su konto {disabledAccount} on hetkel keelatud.", "disabled_account_banner.text": "Su konto {disabledAccount} on hetkel keelatud.",
"dismissable_banner.community_timeline": "Need on kõige viimased avalikud postitused inimestelt, kelle kontosid majutab {domain}.", "dismissable_banner.community_timeline": "Need on kõige viimased avalikud postitused inimestelt, kelle kontosid majutab {domain}.",
"dismissable_banner.dismiss": "Sulge", "dismissable_banner.dismiss": "Sulge",
@ -641,6 +643,7 @@
"empty_column.blocks": "Blokeeritud kasutajaid pole.", "empty_column.blocks": "Blokeeritud kasutajaid pole.",
"empty_column.bookmarked_statuses": "Järjehoidjatesse pole veel lisatud postitusi. Kui lisad mõne, näed neid siin.", "empty_column.bookmarked_statuses": "Järjehoidjatesse pole veel lisatud postitusi. Kui lisad mõne, näed neid siin.",
"empty_column.collections.featured_in": "Sind pole lisatud veel ühtegi kogumikku.", "empty_column.collections.featured_in": "Sind pole lisatud veel ühtegi kogumikku.",
"empty_column.collections.featured_in_undiscoverable": "Selleks, et kasutajad saaks sind lisada kogumikesse, pead sa seadistustest lubama tuvastamise ja esiletõstmise siit: <link>Eelistused > Privaatsus ja ulatus</link>",
"empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema ajada!", "empty_column.community": "Kohalik ajajoon on tühi. Kirjuta midagi avalikult, et pall veerema ajada!",
"empty_column.direct": "Sul pole veel ühtegi privaatset mainimist. Kui saadad või saad mõne, ilmuvad need siin.", "empty_column.direct": "Sul pole veel ühtegi privaatset mainimist. Kui saadad või saad mõne, ilmuvad need siin.",
"empty_column.disabled_feed": "See infovoog on serveri peakasutajate poolt välja lülitatud.", "empty_column.disabled_feed": "See infovoog on serveri peakasutajate poolt välja lülitatud.",
@ -683,7 +686,7 @@
"filter_modal.added.expired_explanation": "Selle filtri kategooria on aegunud. pead muutma aegumiskuupäeva, kui tahad, et filter kehtiks.", "filter_modal.added.expired_explanation": "Selle filtri kategooria on aegunud. pead muutma aegumiskuupäeva, kui tahad, et filter kehtiks.",
"filter_modal.added.expired_title": "Aegunud filter!", "filter_modal.added.expired_title": "Aegunud filter!",
"filter_modal.added.review_and_configure": "Et vaadata üle ja täpsemalt seadistada seda filtrikategooriat, mine lehele {settings_link}.", "filter_modal.added.review_and_configure": "Et vaadata üle ja täpsemalt seadistada seda filtrikategooriat, mine lehele {settings_link}.",
"filter_modal.added.review_and_configure_title": "Filtrite sätted", "filter_modal.added.review_and_configure_title": "Filtrite seadistused",
"filter_modal.added.settings_link": "sätete leht", "filter_modal.added.settings_link": "sätete leht",
"filter_modal.added.short_explanation": "See postitus on lisatud järgmisesse filtrikategooriasse: {title}.", "filter_modal.added.short_explanation": "See postitus on lisatud järgmisesse filtrikategooriasse: {title}.",
"filter_modal.added.title": "Filter lisatud!", "filter_modal.added.title": "Filter lisatud!",
@ -743,7 +746,7 @@
"hashtag.column_header.tag_mode.all": "ja {additional}", "hashtag.column_header.tag_mode.all": "ja {additional}",
"hashtag.column_header.tag_mode.any": "või teemaviide {additional}", "hashtag.column_header.tag_mode.any": "või teemaviide {additional}",
"hashtag.column_header.tag_mode.none": "ilma teemaviiteta {additional}", "hashtag.column_header.tag_mode.none": "ilma teemaviiteta {additional}",
"hashtag.column_settings.select.no_options_message": "Soovitusi ei leitud", "hashtag.column_settings.select.no_options_message": "Soovitusi ei leidu",
"hashtag.column_settings.select.placeholder": "Sisesta teemaviited…", "hashtag.column_settings.select.placeholder": "Sisesta teemaviited…",
"hashtag.column_settings.tag_mode.all": "Kõik need", "hashtag.column_settings.tag_mode.all": "Kõik need",
"hashtag.column_settings.tag_mode.any": "Mõni neist", "hashtag.column_settings.tag_mode.any": "Mõni neist",
@ -989,23 +992,23 @@
"notifications.clear_title": "Tühjenda teavitus?", "notifications.clear_title": "Tühjenda teavitus?",
"notifications.column_settings.admin.report": "Uued teavitused:", "notifications.column_settings.admin.report": "Uued teavitused:",
"notifications.column_settings.admin.sign_up": "Uued kasutajad:", "notifications.column_settings.admin.sign_up": "Uued kasutajad:",
"notifications.column_settings.alert": "Töölauateated", "notifications.column_settings.alert": "Teavitused töölaual",
"notifications.column_settings.favourite": "Lemmikud:", "notifications.column_settings.favourite": "Lemmikud:",
"notifications.column_settings.filter_bar.advanced": "Näita kõiki kategooriaid", "notifications.column_settings.filter_bar.advanced": "Näita kõiki kategooriaid",
"notifications.column_settings.filter_bar.category": "Kiirfiltri riba", "notifications.column_settings.filter_bar.category": "Kiirfiltri riba",
"notifications.column_settings.follow": "Uued jälgijad:", "notifications.column_settings.follow": "Uued jälgijad:",
"notifications.column_settings.follow_request": "Uued jälgimistaotlused:", "notifications.column_settings.follow_request": "Uued jälgimistaotlused:",
"notifications.column_settings.group": "Grupp", "notifications.column_settings.group": "Grupeeri",
"notifications.column_settings.mention": "Mainimised:", "notifications.column_settings.mention": "Mainimised:",
"notifications.column_settings.poll": "Küsitluse tulemused:", "notifications.column_settings.poll": "Küsitluse tulemused:",
"notifications.column_settings.push": "Push teated", "notifications.column_settings.push": "Tõuketeavitused",
"notifications.column_settings.quote": "Tsitaadid:", "notifications.column_settings.quote": "Tsitaadid:",
"notifications.column_settings.reblog": "Jagamised:", "notifications.column_settings.reblog": "Jagamised:",
"notifications.column_settings.show": "Kuva tulbas", "notifications.column_settings.show": "Kuva tulbas",
"notifications.column_settings.sound": "Mängi heli", "notifications.column_settings.sound": "Esita heli",
"notifications.column_settings.status": "Uued postitused:", "notifications.column_settings.status": "Uued postitused:",
"notifications.column_settings.unread_notifications.category": "Lugemata teated", "notifications.column_settings.unread_notifications.category": "Lugemata teavitused",
"notifications.column_settings.unread_notifications.highlight": "Tõsta esile lugemata teated", "notifications.column_settings.unread_notifications.highlight": "Tõsta lugemata teavitused esile",
"notifications.column_settings.update": "Muudatused:", "notifications.column_settings.update": "Muudatused:",
"notifications.filter.all": "Kõik", "notifications.filter.all": "Kõik",
"notifications.filter.boosts": "Jagamised", "notifications.filter.boosts": "Jagamised",

View File

@ -366,8 +366,6 @@
"collection.share_modal.share_via_system": "هم‌رسانی در…", "collection.share_modal.share_via_system": "هم‌رسانی در…",
"collection.share_modal.title": "هم‌رسانی مجموعه", "collection.share_modal.title": "هم‌رسانی مجموعه",
"collection.share_modal.title_new": "هم‌رسانی مجموعهٔ جدیدتان!", "collection.share_modal.title_new": "هم‌رسانی مجموعهٔ جدیدتان!",
"collection.share_template_other": "این مجموعهٔ باحال رو ببینید: {link}",
"collection.share_template_own": "مجموعهٔ جدیدم رو ببینید: {link}",
"collections.account_count": "{count, plural, one {# حساب} other {# حساب}}", "collections.account_count": "{count, plural, one {# حساب} other {# حساب}}",
"collections.accounts.empty_description": "افزودن تا {count} حساب", "collections.accounts.empty_description": "افزودن تا {count} حساب",
"collections.accounts.empty_editor_title": "هنوز کسی در این مجموعه نیست", "collections.accounts.empty_editor_title": "هنوز کسی در این مجموعه نیست",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Tilin yksityisyystilaksi on määritetty lukittu. Tilin omistaja arvioi erikseen, kuka voi seurata häntä.", "account.locked_info": "Tilin yksityisyystilaksi on määritetty lukittu. Tilin omistaja arvioi erikseen, kuka voi seurata häntä.",
"account.media": "Media", "account.media": "Media",
"account.mention": "Mainitse @{name}", "account.mention": "Mainitse @{name}",
"account.menu.add_to_collection": "Lisää kokoelmaan…",
"account.menu.add_to_list": "Lisää listaan…", "account.menu.add_to_list": "Lisää listaan…",
"account.menu.block": "Estä tili", "account.menu.block": "Estä tili",
"account.menu.block_domain": "Estä {domain}", "account.menu.block_domain": "Estä {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Jaa kohteeseen…", "collection.share_modal.share_via_system": "Jaa kohteeseen…",
"collection.share_modal.title": "Jaa kokoelma", "collection.share_modal.title": "Jaa kokoelma",
"collection.share_modal.title_new": "Jaa uusi kokoelmasi!", "collection.share_modal.title_new": "Jaa uusi kokoelmasi!",
"collection.share_template_other": "Katso tämä siisti kokoelma: {link}", "collection.share_template_other": "Katso tämä siisti kokoelma:",
"collection.share_template_own": "Katso uusi kokoelmani: {link}", "collection.share_template_own": "Katso uusi kokoelmani:",
"collections.account_count": "{count, plural, one {# tili} other {# tiliä}}", "collections.account_count": "{count, plural, one {# tili} other {# tiliä}}",
"collections.accounts.empty_description": "Lisää enintään {count} tiliä", "collections.accounts.empty_description": "Lisää enintään {count} tiliä",
"collections.accounts.empty_editor_title": "Kukaan ei ole vielä tässä kokoelmassa", "collections.accounts.empty_editor_title": "Kukaan ei ole vielä tässä kokoelmassa",
"collections.accounts.empty_title": "Tämä kokoelma on tyhjä", "collections.accounts.empty_title": "Tämä kokoelma on tyhjä",
"collections.add_to_collection": "Lisää {name} kokoelmiin",
"collections.block_collection_owner": "Estä tili", "collections.block_collection_owner": "Estä tili",
"collections.by_account": "koonnut {account_handle}", "collections.by_account": "koonnut {account_handle}",
"collections.collection_description": "Kuvaus", "collections.collection_description": "Kuvaus",

View File

@ -265,8 +265,6 @@
"collection.share_modal.share_via_system": "Deil til…", "collection.share_modal.share_via_system": "Deil til…",
"collection.share_modal.title": "Deil savn", "collection.share_modal.title": "Deil savn",
"collection.share_modal.title_new": "Deil títt nýggja savn!", "collection.share_modal.title_new": "Deil títt nýggja savn!",
"collection.share_template_other": "Hygg at hesum kula savninum: {link}",
"collection.share_template_own": "Hygg at mínum nýggja savni: {link}",
"collections.account_count": "{count, plural, one {# konta} other {# kontur}}", "collections.account_count": "{count, plural, one {# konta} other {# kontur}}",
"collections.accounts.empty_title": "Hetta savnið er tómt", "collections.accounts.empty_title": "Hetta savnið er tómt",
"collections.collection_description": "Lýsing", "collections.collection_description": "Lýsing",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Le statut de confidentialité de ce compte est privé. Son propriétaire vérifie manuellement qui peut le/la suivre.", "account.locked_info": "Le statut de confidentialité de ce compte est privé. Son propriétaire vérifie manuellement qui peut le/la suivre.",
"account.media": "Média", "account.media": "Média",
"account.mention": "Mentionner @{name}", "account.mention": "Mentionner @{name}",
"account.menu.add_to_collection": "Ajouter à une collection…",
"account.menu.add_to_list": "Ajouter à la liste…", "account.menu.add_to_list": "Ajouter à la liste…",
"account.menu.block": "Bloquer le compte", "account.menu.block": "Bloquer le compte",
"account.menu.block_domain": "Bloquer {domain}", "account.menu.block_domain": "Bloquer {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Partager avec…", "collection.share_modal.share_via_system": "Partager avec…",
"collection.share_modal.title": "Partager la collection", "collection.share_modal.title": "Partager la collection",
"collection.share_modal.title_new": "Partager votre nouvelle collection!", "collection.share_modal.title_new": "Partager votre nouvelle collection!",
"collection.share_template_other": "Découvrez cette collection incroyable : {link}", "collection.share_template_other": "Découvrez cette collection incroyable :",
"collection.share_template_own": "Découvrez ma nouvelle collection : {link}", "collection.share_template_own": "Découvrez ma nouvelle collection :",
"collections.account_count": "{count, plural, one {# compte} other {# comptes}}", "collections.account_count": "{count, plural, one {# compte} other {# comptes}}",
"collections.accounts.empty_description": "Ajoutez jusqu'à {count} comptes", "collections.accounts.empty_description": "Ajoutez jusqu'à {count} comptes",
"collections.accounts.empty_editor_title": "Il n'y a personne dans cette collection", "collections.accounts.empty_editor_title": "Il n'y a personne dans cette collection",
"collections.accounts.empty_title": "Cette collection est vide", "collections.accounts.empty_title": "Cette collection est vide",
"collections.add_to_collection": "Ajouter {name} aux collections",
"collections.block_collection_owner": "Bloquer le compte", "collections.block_collection_owner": "Bloquer le compte",
"collections.by_account": "par {account_handle}", "collections.by_account": "par {account_handle}",
"collections.collection_description": "Description", "collections.collection_description": "Description",
@ -394,6 +396,7 @@
"collections.detail.loading": "Chargement de la collection…", "collections.detail.loading": "Chargement de la collection…",
"collections.detail.revoke_inclusion": "Me retirer", "collections.detail.revoke_inclusion": "Me retirer",
"collections.detail.sensitive_content": "Contenu sensible", "collections.detail.sensitive_content": "Contenu sensible",
"collections.detail.sensitive_note": "La description et les comptes peuvent ne pas convenir à tous les publics.",
"collections.detail.share": "Partager la collection", "collections.detail.share": "Partager la collection",
"collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection", "collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection",
"collections.edit_details": "Modifier les détails", "collections.edit_details": "Modifier les détails",
@ -424,6 +427,11 @@
"collections.search_accounts_max_reached": "Vous avez ajouté le nombre maximum de comptes", "collections.search_accounts_max_reached": "Vous avez ajouté le nombre maximum de comptes",
"collections.sensitive": "Sensible", "collections.sensitive": "Sensible",
"collections.share_short": "Partager", "collections.share_short": "Partager",
"collections.sort_alphabetical": "Alphabétique",
"collections.sort_by": "Trier par :",
"collections.sort_date_added": "Date d'ajout",
"collections.sort_last_active": "Dernière activité",
"collections.sort_most_followers": "Nombre d'abonné·e·s",
"collections.suggestions.can_not_add": "Ne peut pas être ajouté", "collections.suggestions.can_not_add": "Ne peut pas être ajouté",
"collections.suggestions.can_not_add_desc": "Ces comptes peuvent avoir choisi de ne pas être découverts, ou ils peuvent être sur un serveur qui ne supporte pas les collections.", "collections.suggestions.can_not_add_desc": "Ces comptes peuvent avoir choisi de ne pas être découverts, ou ils peuvent être sur un serveur qui ne supporte pas les collections.",
"collections.suggestions.must_follow": "Vous devez d'abord suivre", "collections.suggestions.must_follow": "Vous devez d'abord suivre",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.", "account.locked_info": "Ce compte est privé. Son ou sa propriétaire approuve manuellement qui peut le suivre.",
"account.media": "Médias", "account.media": "Médias",
"account.mention": "Mentionner @{name}", "account.mention": "Mentionner @{name}",
"account.menu.add_to_collection": "Ajouter à une collection…",
"account.menu.add_to_list": "Ajouter à la liste…", "account.menu.add_to_list": "Ajouter à la liste…",
"account.menu.block": "Bloquer le compte", "account.menu.block": "Bloquer le compte",
"account.menu.block_domain": "Bloquer {domain}", "account.menu.block_domain": "Bloquer {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Partager avec…", "collection.share_modal.share_via_system": "Partager avec…",
"collection.share_modal.title": "Partager la collection", "collection.share_modal.title": "Partager la collection",
"collection.share_modal.title_new": "Partager votre nouvelle collection!", "collection.share_modal.title_new": "Partager votre nouvelle collection!",
"collection.share_template_other": "Découvrez cette collection incroyable : {link}", "collection.share_template_other": "Découvrez cette collection incroyable :",
"collection.share_template_own": "Découvrez ma nouvelle collection : {link}", "collection.share_template_own": "Découvrez ma nouvelle collection :",
"collections.account_count": "{count, plural, one {# compte} other {# comptes}}", "collections.account_count": "{count, plural, one {# compte} other {# comptes}}",
"collections.accounts.empty_description": "Ajoutez jusqu'à {count} comptes", "collections.accounts.empty_description": "Ajoutez jusqu'à {count} comptes",
"collections.accounts.empty_editor_title": "Il n'y a personne dans cette collection", "collections.accounts.empty_editor_title": "Il n'y a personne dans cette collection",
"collections.accounts.empty_title": "Cette collection est vide", "collections.accounts.empty_title": "Cette collection est vide",
"collections.add_to_collection": "Ajouter {name} aux collections",
"collections.block_collection_owner": "Bloquer le compte", "collections.block_collection_owner": "Bloquer le compte",
"collections.by_account": "par {account_handle}", "collections.by_account": "par {account_handle}",
"collections.collection_description": "Description", "collections.collection_description": "Description",
@ -394,6 +396,7 @@
"collections.detail.loading": "Chargement de la collection…", "collections.detail.loading": "Chargement de la collection…",
"collections.detail.revoke_inclusion": "Me retirer", "collections.detail.revoke_inclusion": "Me retirer",
"collections.detail.sensitive_content": "Contenu sensible", "collections.detail.sensitive_content": "Contenu sensible",
"collections.detail.sensitive_note": "La description et les comptes peuvent ne pas convenir à tous les publics.",
"collections.detail.share": "Partager la collection", "collections.detail.share": "Partager la collection",
"collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection", "collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection",
"collections.edit_details": "Modifier les détails", "collections.edit_details": "Modifier les détails",
@ -424,6 +427,11 @@
"collections.search_accounts_max_reached": "Vous avez ajouté le nombre maximum de comptes", "collections.search_accounts_max_reached": "Vous avez ajouté le nombre maximum de comptes",
"collections.sensitive": "Sensible", "collections.sensitive": "Sensible",
"collections.share_short": "Partager", "collections.share_short": "Partager",
"collections.sort_alphabetical": "Alphabétique",
"collections.sort_by": "Trier par :",
"collections.sort_date_added": "Date d'ajout",
"collections.sort_last_active": "Dernière activité",
"collections.sort_most_followers": "Nombre d'abonné·e·s",
"collections.suggestions.can_not_add": "Ne peut pas être ajouté", "collections.suggestions.can_not_add": "Ne peut pas être ajouté",
"collections.suggestions.can_not_add_desc": "Ces comptes peuvent avoir choisi de ne pas être découverts, ou ils peuvent être sur un serveur qui ne supporte pas les collections.", "collections.suggestions.can_not_add_desc": "Ces comptes peuvent avoir choisi de ne pas être découverts, ou ils peuvent être sur un serveur qui ne supporte pas les collections.",
"collections.suggestions.must_follow": "Vous devez d'abord suivre", "collections.suggestions.must_follow": "Vous devez d'abord suivre",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Tá an socrú príobháideachais don cuntas seo curtha go 'faoi ghlas'. Déanann an t-úinéir léirmheas ar cén daoine atá ceadaithe an cuntas leanúint.", "account.locked_info": "Tá an socrú príobháideachais don cuntas seo curtha go 'faoi ghlas'. Déanann an t-úinéir léirmheas ar cén daoine atá ceadaithe an cuntas leanúint.",
"account.media": "Meáin", "account.media": "Meáin",
"account.mention": "Luaigh @{name}", "account.mention": "Luaigh @{name}",
"account.menu.add_to_collection": "Cuir leis an mbailiúchán…",
"account.menu.add_to_list": "Cuir leis an liosta…", "account.menu.add_to_list": "Cuir leis an liosta…",
"account.menu.block": "Cuntas blocáilte", "account.menu.block": "Cuntas blocáilte",
"account.menu.block_domain": "Blocáil {domain}", "account.menu.block_domain": "Blocáil {domain}",
@ -366,12 +367,11 @@
"collection.share_modal.share_via_system": "Comhroinn le…", "collection.share_modal.share_via_system": "Comhroinn le…",
"collection.share_modal.title": "Comhroinn bailiúchán", "collection.share_modal.title": "Comhroinn bailiúchán",
"collection.share_modal.title_new": "Roinn do bhailiúchán nua!", "collection.share_modal.title_new": "Roinn do bhailiúchán nua!",
"collection.share_template_other": "Féach ar an mbailiúchán fionnuar seo: {link}",
"collection.share_template_own": "Féach ar mo bhailiúchán nua: {link}",
"collections.account_count": "{count, plural, one {# cuntas} two {# cuntais} few {# cuntais} many {# cuntais} other {# cuntais}}", "collections.account_count": "{count, plural, one {# cuntas} two {# cuntais} few {# cuntais} many {# cuntais} other {# cuntais}}",
"collections.accounts.empty_description": "Cuir suas le {count} cuntas leis", "collections.accounts.empty_description": "Cuir suas le {count} cuntas leis",
"collections.accounts.empty_editor_title": "Níl aon duine sa bhailiúchán seo fós", "collections.accounts.empty_editor_title": "Níl aon duine sa bhailiúchán seo fós",
"collections.accounts.empty_title": "Tá an bailiúchán seo folamh", "collections.accounts.empty_title": "Tá an bailiúchán seo folamh",
"collections.add_to_collection": "Cuir {name} le bailiúcháin",
"collections.block_collection_owner": "Cuntas blocáilte", "collections.block_collection_owner": "Cuntas blocáilte",
"collections.by_account": "le {account_handle}", "collections.by_account": "le {account_handle}",
"collections.collection_description": "Cur síos", "collections.collection_description": "Cur síos",
@ -394,6 +394,7 @@
"collections.detail.loading": "Ag lódáil an bhailiúcháin…", "collections.detail.loading": "Ag lódáil an bhailiúcháin…",
"collections.detail.revoke_inclusion": "Bain mé", "collections.detail.revoke_inclusion": "Bain mé",
"collections.detail.sensitive_content": "Ábhar íogair", "collections.detail.sensitive_content": "Ábhar íogair",
"collections.detail.sensitive_note": "Bfhéidir nach mbeidh an cur síos agus na cuntais oiriúnach do gach lucht féachana.",
"collections.detail.share": "Comhroinn an bailiúchán seo", "collections.detail.share": "Comhroinn an bailiúchán seo",
"collections.detail.you_are_in_this_collection": "Tá tú le feiceáil sa bhailiúchán seo", "collections.detail.you_are_in_this_collection": "Tá tú le feiceáil sa bhailiúchán seo",
"collections.edit_details": "Cuir sonraí in eagar", "collections.edit_details": "Cuir sonraí in eagar",
@ -424,6 +425,11 @@
"collections.search_accounts_max_reached": "Tá an líon uasta cuntas curtha leis agat", "collections.search_accounts_max_reached": "Tá an líon uasta cuntas curtha leis agat",
"collections.sensitive": "Íogair", "collections.sensitive": "Íogair",
"collections.share_short": "Comhroinn", "collections.share_short": "Comhroinn",
"collections.sort_alphabetical": "Aibítre",
"collections.sort_by": "Sórtáil de réir:",
"collections.sort_date_added": "Dáta curtha leis",
"collections.sort_last_active": "Gníomhach deireanach",
"collections.sort_most_followers": "An chuid is mó leanúna",
"collections.suggestions.can_not_add": "Ní féidir a chur leis", "collections.suggestions.can_not_add": "Ní féidir a chur leis",
"collections.suggestions.can_not_add_desc": "Bfhéidir gur roghnaigh na cuntais seo gan a bheith san fhionnachtain, nó bfhéidir go bhfuil siad ar fhreastalaí nach dtacaíonn le bailiúcháin.", "collections.suggestions.can_not_add_desc": "Bfhéidir gur roghnaigh na cuntais seo gan a bheith san fhionnachtain, nó bfhéidir go bhfuil siad ar fhreastalaí nach dtacaíonn le bailiúcháin.",
"collections.suggestions.must_follow": "Ní mór leanúint ar dtús", "collections.suggestions.must_follow": "Ní mór leanúint ar dtús",
@ -635,6 +641,7 @@
"empty_column.blocks": "Níl aon úsáideoir bactha agat fós.", "empty_column.blocks": "Níl aon úsáideoir bactha agat fós.",
"empty_column.bookmarked_statuses": "Níl aon phostáil leabharmharcaithe agat fós. Nuair a dhéanann tú leabharmharc, beidh sé le feiceáil anseo.", "empty_column.bookmarked_statuses": "Níl aon phostáil leabharmharcaithe agat fós. Nuair a dhéanann tú leabharmharc, beidh sé le feiceáil anseo.",
"empty_column.collections.featured_in": "Níor cuireadh le haon bhailiúchán thú go fóill.", "empty_column.collections.featured_in": "Níor cuireadh le haon bhailiúchán thú go fóill.",
"empty_column.collections.featured_in_undiscoverable": "Chun go mbeidh daoine in ann tú a chur le bailiúcháin, ní mór duit cead a thabhairt duit a bheith le feiceáil i dtaithí fionnachtana ó <link>Sainroghanna > Príobháideacht agus raon feidhme</link>",
"empty_column.community": "Tá an amlíne áitiúil folamh. Foilsigh rud éigin go poiblí le tús a chur le cúrsaí!", "empty_column.community": "Tá an amlíne áitiúil folamh. Foilsigh rud éigin go poiblí le tús a chur le cúrsaí!",
"empty_column.direct": "Níl aon tagairtí príobháideacha agat fós. Nuair a sheolann tú nó a gheobhaidh tú ceann, beidh sé le feiceáil anseo.", "empty_column.direct": "Níl aon tagairtí príobháideacha agat fós. Nuair a sheolann tú nó a gheobhaidh tú ceann, beidh sé le feiceáil anseo.",
"empty_column.disabled_feed": "Tá an fotha seo díchumasaithe ag riarthóirí do fhreastalaí.", "empty_column.disabled_feed": "Tá an fotha seo díchumasaithe ag riarthóirí do fhreastalaí.",

View File

@ -361,8 +361,6 @@
"collection.share_modal.share_via_system": "Co-roinn gu…", "collection.share_modal.share_via_system": "Co-roinn gu…",
"collection.share_modal.title": "Co-roinn an cruinneachadh", "collection.share_modal.title": "Co-roinn an cruinneachadh",
"collection.share_modal.title_new": "Co-roinn an cruinneachadh ùr agad!", "collection.share_modal.title_new": "Co-roinn an cruinneachadh ùr agad!",
"collection.share_template_other": "Thoir sùil air an deagh-chruinneachadh seo: {link}",
"collection.share_template_own": "Thoir sùil air a chruinneachadh ùr agam: {link}",
"collections.account_count": "{count, plural, one {# chunntas} two {# chunntas} few {# cunntasan} other {# cunntas}}", "collections.account_count": "{count, plural, one {# chunntas} two {# chunntas} few {# cunntasan} other {# cunntas}}",
"collections.accounts.empty_editor_title": "Chan eil neach sam bith sa chruinneachadh seo fhathast", "collections.accounts.empty_editor_title": "Chan eil neach sam bith sa chruinneachadh seo fhathast",
"collections.accounts.empty_title": "Tha an an cruinneachadh seo falamh", "collections.accounts.empty_title": "Tha an an cruinneachadh seo falamh",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Esta é unha conta privada. A propietaria revisa de xeito manual quen pode seguila.", "account.locked_info": "Esta é unha conta privada. A propietaria revisa de xeito manual quen pode seguila.",
"account.media": "Multimedia", "account.media": "Multimedia",
"account.mention": "Mencionar @{name}", "account.mention": "Mencionar @{name}",
"account.menu.add_to_collection": "Engadir á coleción…",
"account.menu.add_to_list": "Engadir á lista…", "account.menu.add_to_list": "Engadir á lista…",
"account.menu.block": "Bloquear conta", "account.menu.block": "Bloquear conta",
"account.menu.block_domain": "Bloquear a {domain}", "account.menu.block_domain": "Bloquear a {domain}",
@ -366,12 +367,11 @@
"collection.share_modal.share_via_system": "Compartir con…", "collection.share_modal.share_via_system": "Compartir con…",
"collection.share_modal.title": "Compartir colección", "collection.share_modal.title": "Compartir colección",
"collection.share_modal.title_new": "Comparte a túa nova colección!", "collection.share_modal.title_new": "Comparte a túa nova colección!",
"collection.share_template_other": "Mira que colección máis boa: {link}",
"collection.share_template_own": "Mira a miña nova colección: {link}",
"collections.account_count": "{count, plural, one {# conta} other {# contas}}", "collections.account_count": "{count, plural, one {# conta} other {# contas}}",
"collections.accounts.empty_description": "Engade ate {count} contas", "collections.accounts.empty_description": "Engade ate {count} contas",
"collections.accounts.empty_editor_title": "Aínda non hai ninguén nesta colección", "collections.accounts.empty_editor_title": "Aínda non hai ninguén nesta colección",
"collections.accounts.empty_title": "A colección está baleira", "collections.accounts.empty_title": "A colección está baleira",
"collections.add_to_collection": "Engadir a {name} ás coleccións",
"collections.block_collection_owner": "Bloquear conta", "collections.block_collection_owner": "Bloquear conta",
"collections.by_account": "de {account_handle}", "collections.by_account": "de {account_handle}",
"collections.collection_description": "Descrición", "collections.collection_description": "Descrición",
@ -425,6 +425,11 @@
"collections.search_accounts_max_reached": "Acadaches o máximo de contas permitidas", "collections.search_accounts_max_reached": "Acadaches o máximo de contas permitidas",
"collections.sensitive": "Sensible", "collections.sensitive": "Sensible",
"collections.share_short": "Compartir", "collections.share_short": "Compartir",
"collections.sort_alphabetical": "Alfabética",
"collections.sort_by": "Orde por:",
"collections.sort_date_added": "Data de alta",
"collections.sort_last_active": "Última actividade",
"collections.sort_most_followers": "Con máis seguidoras",
"collections.suggestions.can_not_add": "Non se pode engadir", "collections.suggestions.can_not_add": "Non se pode engadir",
"collections.suggestions.can_not_add_desc": "Estas contas optaron por poder ser engadidas, ou pode que estean nun servidor que aínda non é compatible coas coleccións.", "collections.suggestions.can_not_add_desc": "Estas contas optaron por poder ser engadidas, ou pode que estean nun servidor que aínda non é compatible coas coleccións.",
"collections.suggestions.must_follow": "Primeiro tes que seguila", "collections.suggestions.must_follow": "Primeiro tes que seguila",

View File

@ -86,6 +86,7 @@
"account.locked_info": "החשבון הזה הוגדר כנעול. צריך לקבל אישור כדי לעקוב אחריו.", "account.locked_info": "החשבון הזה הוגדר כנעול. צריך לקבל אישור כדי לעקוב אחריו.",
"account.media": "מדיה", "account.media": "מדיה",
"account.mention": "אזכור של @{name}", "account.mention": "אזכור של @{name}",
"account.menu.add_to_collection": "הוספה לאוסף…",
"account.menu.add_to_list": "הוספה לרשימה…", "account.menu.add_to_list": "הוספה לרשימה…",
"account.menu.block": "חסימת חשבון", "account.menu.block": "חסימת חשבון",
"account.menu.block_domain": "חסימת {domain}", "account.menu.block_domain": "חסימת {domain}",
@ -366,12 +367,11 @@
"collection.share_modal.share_via_system": "לשתף אל…", "collection.share_modal.share_via_system": "לשתף אל…",
"collection.share_modal.title": "שיתוף אוסף", "collection.share_modal.title": "שיתוף אוסף",
"collection.share_modal.title_new": "שתפו את האוסף החדש שלכם!", "collection.share_modal.title_new": "שתפו את האוסף החדש שלכם!",
"collection.share_template_other": "הציצו על האוסף המעניין הזה: {link}",
"collection.share_template_own": "הציצו על האוסף החדש שלי: {link}",
"collections.account_count": "{count, plural, one {חשבון אחד} other {# חשבונות}}", "collections.account_count": "{count, plural, one {חשבון אחד} other {# חשבונות}}",
"collections.accounts.empty_description": "להוסיף עד ל־{count} חשבונות", "collections.accounts.empty_description": "להוסיף עד ל־{count} חשבונות",
"collections.accounts.empty_editor_title": "אוסף זה ריק כרגע", "collections.accounts.empty_editor_title": "אוסף זה ריק כרגע",
"collections.accounts.empty_title": "האוסף הזה ריק", "collections.accounts.empty_title": "האוסף הזה ריק",
"collections.add_to_collection": "להוסיף את {name} לאוספים",
"collections.block_collection_owner": "חסימת חשבון", "collections.block_collection_owner": "חסימת חשבון",
"collections.by_account": "מאת {account_handle}", "collections.by_account": "מאת {account_handle}",
"collections.collection_description": "תיאור", "collections.collection_description": "תיאור",
@ -394,6 +394,7 @@
"collections.detail.loading": "טוען אוסף…", "collections.detail.loading": "טוען אוסף…",
"collections.detail.revoke_inclusion": "הסירוני", "collections.detail.revoke_inclusion": "הסירוני",
"collections.detail.sensitive_content": "תוכן רגיש", "collections.detail.sensitive_content": "תוכן רגיש",
"collections.detail.sensitive_note": "התיאור והחשבונות עשויים שלא להתאים לכל הצופיםות.",
"collections.detail.share": "שיתוף אוסף", "collections.detail.share": "שיתוף אוסף",
"collections.detail.you_are_in_this_collection": "אתם מופיעים באוסף זה", "collections.detail.you_are_in_this_collection": "אתם מופיעים באוסף זה",
"collections.edit_details": "עריכת פרטים", "collections.edit_details": "עריכת פרטים",
@ -424,6 +425,11 @@
"collections.search_accounts_max_reached": "הגעת למספר החשבונות המירבי", "collections.search_accounts_max_reached": "הגעת למספר החשבונות המירבי",
"collections.sensitive": "רגיש", "collections.sensitive": "רגיש",
"collections.share_short": "שיתוף", "collections.share_short": "שיתוף",
"collections.sort_alphabetical": "בסדר האלפבית",
"collections.sort_by": "מיין לפי:",
"collections.sort_date_added": "תאריך הוספה",
"collections.sort_last_active": "פעילות אחרונה",
"collections.sort_most_followers": "מירב העוקבים",
"collections.suggestions.can_not_add": "לא ניתן להוסיף", "collections.suggestions.can_not_add": "לא ניתן להוסיף",
"collections.suggestions.can_not_add_desc": "חשבונות אלו כנראה ביקשו לא להכלל ב\"תגליות\" או שהם משתמשים בשרת שאינו תומך באוספים.", "collections.suggestions.can_not_add_desc": "חשבונות אלו כנראה ביקשו לא להכלל ב\"תגליות\" או שהם משתמשים בשרת שאינו תומך באוספים.",
"collections.suggestions.must_follow": "יש לעקוב תחילה", "collections.suggestions.must_follow": "יש לעקוב תחילה",
@ -635,6 +641,7 @@
"empty_column.blocks": "עדיין לא חסמתם משתמשים אחרים.", "empty_column.blocks": "עדיין לא חסמתם משתמשים אחרים.",
"empty_column.bookmarked_statuses": "אין עדיין הודעות שחיבבת. כשתחבב את הראשונה, היא תופיע כאן.", "empty_column.bookmarked_statuses": "אין עדיין הודעות שחיבבת. כשתחבב את הראשונה, היא תופיע כאן.",
"empty_column.collections.featured_in": "עוד לא הוסיפו אותך לאף אוסף.", "empty_column.collections.featured_in": "עוד לא הוסיפו אותך לאף אוסף.",
"empty_column.collections.featured_in_undiscoverable": "כדי שאחרים יוכלו להוסיפך לאוספים, עליך לאפשר להופיע ב\"תגליות\" תחת <link>העדפות > פרטיות ומידת חשיפה</link>",
"empty_column.community": "פיד השרת המקומי ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!", "empty_column.community": "פיד השרת המקומי ריק. יש לפרסם משהו כדי שדברים יתרחילו להתגלגל!",
"empty_column.direct": "אין לך שום הודעות פרטיות עדיין. כשתשלחו או תקבלו אחת, היא תופיע כאן.", "empty_column.direct": "אין לך שום הודעות פרטיות עדיין. כשתשלחו או תקבלו אחת, היא תופיע כאן.",
"empty_column.disabled_feed": "פיד זה נחסם לשימוש על ידי מנהלי השרת שלך.", "empty_column.disabled_feed": "פיד זה נחסם לשימוש על ידי מנהלי השרת שלך.",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Ennek a fióknak zárolt a láthatósága. A tulajdonos kézzel engedélyezi, hogy ki követheti őt.", "account.locked_info": "Ennek a fióknak zárolt a láthatósága. A tulajdonos kézzel engedélyezi, hogy ki követheti őt.",
"account.media": "Média", "account.media": "Média",
"account.mention": "@{name} említése", "account.mention": "@{name} említése",
"account.menu.add_to_collection": "Hozzáadás gyűjteményhez…",
"account.menu.add_to_list": "Hozzáadás listához…", "account.menu.add_to_list": "Hozzáadás listához…",
"account.menu.block": "Fiók letiltása", "account.menu.block": "Fiók letiltása",
"account.menu.block_domain": "{domain} letiltása", "account.menu.block_domain": "{domain} letiltása",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Megosztás…", "collection.share_modal.share_via_system": "Megosztás…",
"collection.share_modal.title": "Gyűjtemény megosztása", "collection.share_modal.title": "Gyűjtemény megosztása",
"collection.share_modal.title_new": "Oszd meg az új gyűjteményedet!", "collection.share_modal.title_new": "Oszd meg az új gyűjteményedet!",
"collection.share_template_other": "Nézd meg ezt a gyűjteményt: {link}", "collection.share_template_other": "Nézd meg ezt a gyűjteményt:",
"collection.share_template_own": "Nézd meg az új gyűjteményemet: {link}", "collection.share_template_own": "Nézd meg az új gyűjteményemet:",
"collections.account_count": "{count, plural, one {# fiók} other {# fiók}}", "collections.account_count": "{count, plural, one {# fiók} other {# fiók}}",
"collections.accounts.empty_description": "Adj hozzá legfeljebb {count} fiókot", "collections.accounts.empty_description": "Adj hozzá legfeljebb {count} fiókot",
"collections.accounts.empty_editor_title": "Még senki sincs ebben a gyűjteményben", "collections.accounts.empty_editor_title": "Még senki sincs ebben a gyűjteményben",
"collections.accounts.empty_title": "Ez a gyűjtemény üres", "collections.accounts.empty_title": "Ez a gyűjtemény üres",
"collections.add_to_collection": "{name} hozzáadása gyűjteményekhez",
"collections.block_collection_owner": "Fiók letiltása", "collections.block_collection_owner": "Fiók letiltása",
"collections.by_account": "szerző: {account_handle}", "collections.by_account": "szerző: {account_handle}",
"collections.collection_description": "Leírás", "collections.collection_description": "Leírás",
@ -394,6 +396,7 @@
"collections.detail.loading": "Gyűjtemény betöltése…", "collections.detail.loading": "Gyűjtemény betöltése…",
"collections.detail.revoke_inclusion": "Saját magam eltávolítása", "collections.detail.revoke_inclusion": "Saját magam eltávolítása",
"collections.detail.sensitive_content": "Kényes tartalom", "collections.detail.sensitive_content": "Kényes tartalom",
"collections.detail.sensitive_note": "A leírás és a fiókok lehet, hogy nem minden megtekintő számára megfelelőek.",
"collections.detail.share": "Gyűjtemény megosztása", "collections.detail.share": "Gyűjtemény megosztása",
"collections.detail.you_are_in_this_collection": "Kiemeltek téged ebben a gyűjteményhez", "collections.detail.you_are_in_this_collection": "Kiemeltek téged ebben a gyűjteményhez",
"collections.edit_details": "Részletek szerkesztése", "collections.edit_details": "Részletek szerkesztése",
@ -424,6 +427,11 @@
"collections.search_accounts_max_reached": "Elérte a hozzáadott fiókok maximális számát", "collections.search_accounts_max_reached": "Elérte a hozzáadott fiókok maximális számát",
"collections.sensitive": "Érzékeny", "collections.sensitive": "Érzékeny",
"collections.share_short": "Megosztás", "collections.share_short": "Megosztás",
"collections.sort_alphabetical": "Betűrendben",
"collections.sort_by": "Rendezés:",
"collections.sort_date_added": "Hozzáadás dátuma",
"collections.sort_last_active": "Utoljára aktív",
"collections.sort_most_followers": "Legtöbb követő",
"collections.suggestions.can_not_add": "Nem adható hozzá", "collections.suggestions.can_not_add": "Nem adható hozzá",
"collections.suggestions.can_not_add_desc": "Ezek a fiókok lehet, hogy a felfedezés kikapcsolását kérték, vagy olyan kiszolgálón lehetnek, mely nem támogatja a gyűjteményeket.", "collections.suggestions.can_not_add_desc": "Ezek a fiókok lehet, hogy a felfedezés kikapcsolását kérték, vagy olyan kiszolgálón lehetnek, mely nem támogatja a gyűjteményeket.",
"collections.suggestions.must_follow": "Először követni kell", "collections.suggestions.must_follow": "Először követni kell",

View File

@ -199,8 +199,6 @@
"collection.share_modal.share_via_system": "Kunhavigez ad…", "collection.share_modal.share_via_system": "Kunhavigez ad…",
"collection.share_modal.title": "Kunhavigez kolektajo", "collection.share_modal.title": "Kunhavigez kolektajo",
"collection.share_modal.title_new": "Kunhavigez vua nova kolektajo!", "collection.share_modal.title_new": "Kunhavigez vua nova kolektajo!",
"collection.share_template_other": "Videz ca splendida kolektajo: {link}",
"collection.share_template_own": "Videz mia nova kolektajo: {link}",
"collections.content_warning": "Kontenajaverto", "collections.content_warning": "Kontenajaverto",
"collections.create.accounts_title": "Quan vu estalos en ca kolektajo?", "collections.create.accounts_title": "Quan vu estalos en ca kolektajo?",
"collections.detail.share": "Kunhavigez ca kolektajo", "collections.detail.share": "Kunhavigez ca kolektajo",

View File

@ -366,8 +366,6 @@
"collection.share_modal.share_via_system": "Deila með…", "collection.share_modal.share_via_system": "Deila með…",
"collection.share_modal.title": "Deila safni", "collection.share_modal.title": "Deila safni",
"collection.share_modal.title_new": "Deildu nýja safninu þínu!", "collection.share_modal.title_new": "Deildu nýja safninu þínu!",
"collection.share_template_other": "Kíktu á þetta áhugaverða safn: {link}",
"collection.share_template_own": "Kíktu á nýja safnið mitt: {link}",
"collections.account_count": "{count, plural, one {# aðgangur} other {# aðgangar}}", "collections.account_count": "{count, plural, one {# aðgangur} other {# aðgangar}}",
"collections.accounts.empty_description": "Bættu við allt að {count} aðgöngum", "collections.accounts.empty_description": "Bættu við allt að {count} aðgöngum",
"collections.accounts.empty_editor_title": "Enginn er enn í þessu safni", "collections.accounts.empty_editor_title": "Enginn er enn í þessu safni",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Lo stato della privacy di questo profilo è impostato a bloccato. Il proprietario revisiona manualmente chi può seguirlo.", "account.locked_info": "Lo stato della privacy di questo profilo è impostato a bloccato. Il proprietario revisiona manualmente chi può seguirlo.",
"account.media": "Media", "account.media": "Media",
"account.mention": "Menziona @{name}", "account.mention": "Menziona @{name}",
"account.menu.add_to_collection": "Aggiungi alla collezione…",
"account.menu.add_to_list": "Aggiungi alla lista…", "account.menu.add_to_list": "Aggiungi alla lista…",
"account.menu.block": "Blocca l'account", "account.menu.block": "Blocca l'account",
"account.menu.block_domain": "Blocca {domain}", "account.menu.block_domain": "Blocca {domain}",
@ -366,12 +367,11 @@
"collection.share_modal.share_via_system": "Condividi con…", "collection.share_modal.share_via_system": "Condividi con…",
"collection.share_modal.title": "Condividi la collezione", "collection.share_modal.title": "Condividi la collezione",
"collection.share_modal.title_new": "Condividi la tua nuova collezione!", "collection.share_modal.title_new": "Condividi la tua nuova collezione!",
"collection.share_template_other": "Dai un'occhiata a questa fantastica collezione: {link}",
"collection.share_template_own": "Dai un'occhiata alla mia collezione: {link}",
"collections.account_count": "{count, plural, one {# account} other {# account}}", "collections.account_count": "{count, plural, one {# account} other {# account}}",
"collections.accounts.empty_description": "Aggiungi fino a {count} account", "collections.accounts.empty_description": "Aggiungi fino a {count} account",
"collections.accounts.empty_editor_title": "Nessuno è ancora in questa collezione", "collections.accounts.empty_editor_title": "Nessuno è ancora in questa collezione",
"collections.accounts.empty_title": "Questa collezione è vuota", "collections.accounts.empty_title": "Questa collezione è vuota",
"collections.add_to_collection": "Aggiungi {name} alle collezioni",
"collections.block_collection_owner": "Blocca l'account", "collections.block_collection_owner": "Blocca l'account",
"collections.by_account": "di {account_handle}", "collections.by_account": "di {account_handle}",
"collections.collection_description": "Descrizione", "collections.collection_description": "Descrizione",
@ -425,6 +425,11 @@
"collections.search_accounts_max_reached": "Hai aggiunto il numero massimo di account", "collections.search_accounts_max_reached": "Hai aggiunto il numero massimo di account",
"collections.sensitive": "Sensibile", "collections.sensitive": "Sensibile",
"collections.share_short": "Condividi", "collections.share_short": "Condividi",
"collections.sort_alphabetical": "Ordine alfabetico",
"collections.sort_by": "Ordina per:",
"collections.sort_date_added": "Data aggiunta",
"collections.sort_last_active": "Ultima attività",
"collections.sort_most_followers": "Più follower",
"collections.suggestions.can_not_add": "Non può essere aggiunto", "collections.suggestions.can_not_add": "Non può essere aggiunto",
"collections.suggestions.can_not_add_desc": "Questi account potrebbero aver scelto di non essere scoperti, oppure potrebbero trovarsi su un server che non supporta le collezioni.", "collections.suggestions.can_not_add_desc": "Questi account potrebbero aver scelto di non essere scoperti, oppure potrebbero trovarsi su un server che non supporta le collezioni.",
"collections.suggestions.must_follow": "Devi prima seguire", "collections.suggestions.must_follow": "Devi prima seguire",
@ -762,7 +767,7 @@
"hints.profiles.see_more_posts": "Vedi altri post su {domain}", "hints.profiles.see_more_posts": "Vedi altri post su {domain}",
"home.column_settings.show_quotes": "Mostra le citazioni", "home.column_settings.show_quotes": "Mostra le citazioni",
"home.column_settings.show_reblogs": "Mostra le condivisioni", "home.column_settings.show_reblogs": "Mostra le condivisioni",
"home.column_settings.show_replies": "Mostra risposte", "home.column_settings.show_replies": "Mostra le risposte",
"home.hide_announcements": "Nascondi annunci", "home.hide_announcements": "Nascondi annunci",
"home.pending_critical_update.body": "Ti preghiamo di aggiornare il tuo server di Mastodon, il prima possibile!", "home.pending_critical_update.body": "Ti preghiamo di aggiornare il tuo server di Mastodon, il prima possibile!",
"home.pending_critical_update.link": "Visualizza aggiornamenti", "home.pending_critical_update.link": "Visualizza aggiornamenti",
@ -935,7 +940,7 @@
"notification.follow_request.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno richiesto di seguirti", "notification.follow_request.name_and_others": "{name} e {count, plural, one {# altro} other {altri #}} hanno richiesto di seguirti",
"notification.label.mention": "Menziona", "notification.label.mention": "Menziona",
"notification.label.private_mention": "Menzione privata", "notification.label.private_mention": "Menzione privata",
"notification.label.private_reply": "Rispondi in privato", "notification.label.private_reply": "Risposta in privato",
"notification.label.quote": "{name} ha citato il tuo post", "notification.label.quote": "{name} ha citato il tuo post",
"notification.label.reply": "Rispondi", "notification.label.reply": "Rispondi",
"notification.mention": "Menziona", "notification.mention": "Menziona",
@ -952,7 +957,7 @@
"notification.own_poll": "Il tuo sondaggio è terminato", "notification.own_poll": "Il tuo sondaggio è terminato",
"notification.poll": "Un sondaggio in cui hai votato è terminato", "notification.poll": "Un sondaggio in cui hai votato è terminato",
"notification.quoted_update": "{name} ha modificato un post che hai citato", "notification.quoted_update": "{name} ha modificato un post che hai citato",
"notification.reblog": "{name} ha rebloggato il tuo post", "notification.reblog": "{name} ha condiviso il tuo post",
"notification.reblog.name_and_others_with_link": "{name} e <a>{count, plural, one {# altro} other {altri #}}</a> hanno condiviso il tuo post", "notification.reblog.name_and_others_with_link": "{name} e <a>{count, plural, one {# altro} other {altri #}}</a> hanno condiviso il tuo post",
"notification.relationships_severance_event": "Connessioni perse con {name}", "notification.relationships_severance_event": "Connessioni perse con {name}",
"notification.relationships_severance_event.account_suspension": "Un amministratore da {from} ha sospeso {target}, il che significa che non puoi più ricevere aggiornamenti da loro o interagire con loro.", "notification.relationships_severance_event.account_suspension": "Un amministratore da {from} ha sospeso {target}, il che significa che non puoi più ricevere aggiornamenti da loro o interagire con loro.",
@ -1267,7 +1272,7 @@
"status.reblog_or_quote": "Condividi o cita", "status.reblog_or_quote": "Condividi o cita",
"status.reblog_private": "Condividi di nuovo con i tuoi follower", "status.reblog_private": "Condividi di nuovo con i tuoi follower",
"status.reblogged_by": "{name} ha condiviso", "status.reblogged_by": "{name} ha condiviso",
"status.reblogs.empty": "Ancora nessuno ha rebloggato questo post. Quando qualcuno lo farà, apparirà qui.", "status.reblogs.empty": "Nessuno ha ancora condiviso questo post. Quando qualcuno lo farà, comparirà qui.",
"status.reblogs_count": "{count, plural, one {{counter} condivisione} other {{counter} condivisioni}}", "status.reblogs_count": "{count, plural, one {{counter} condivisione} other {{counter} condivisioni}}",
"status.redraft": "Elimina e riscrivi", "status.redraft": "Elimina e riscrivi",
"status.remove_bookmark": "Rimuovi segnalibro", "status.remove_bookmark": "Rimuovi segnalibro",

View File

@ -181,8 +181,6 @@
"collection.share_modal.share_via_system": "共有…", "collection.share_modal.share_via_system": "共有…",
"collection.share_modal.title": "コレクションを共有", "collection.share_modal.title": "コレクションを共有",
"collection.share_modal.title_new": "新しいコレクションを共有しよう!", "collection.share_modal.title_new": "新しいコレクションを共有しよう!",
"collection.share_template_other": "この素敵なコレクションを見てみてください: {link}",
"collection.share_template_own": "私の新しいコレクションを見てみてください: {link}",
"collections.accounts.empty_title": "このコレクションは空です", "collections.accounts.empty_title": "このコレクションは空です",
"collections.by_account": "{account_handle} による", "collections.by_account": "{account_handle} による",
"collections.collection_description": "詳細", "collections.collection_description": "詳細",

View File

@ -366,8 +366,6 @@
"collection.share_modal.share_via_system": "分享kàu……", "collection.share_modal.share_via_system": "分享kàu……",
"collection.share_modal.title": "分享收藏", "collection.share_modal.title": "分享收藏",
"collection.share_modal.title_new": "分享lí ê新收藏!", "collection.share_modal.title_new": "分享lí ê新收藏!",
"collection.share_template_other": "緊看覓chit ê時行ê收藏:{link}",
"collection.share_template_own": "緊看覓我ê收藏:{link}",
"collections.account_count": "{count, plural, other {# ê口座}}", "collections.account_count": "{count, plural, other {# ê口座}}",
"collections.accounts.empty_description": "加上tsē {count} ê口座", "collections.accounts.empty_description": "加上tsē {count} ê口座",
"collections.accounts.empty_editor_title": "Tsit ê 收藏內底iáu無半ê lâng", "collections.accounts.empty_editor_title": "Tsit ê 收藏內底iáu無半ê lâng",

View File

@ -86,6 +86,7 @@
"account.locked_info": "De privacystatus van dit account is ingesteld op vergrendeld. De eigenaar beoordeelt handmatig wie diegene kan volgen.", "account.locked_info": "De privacystatus van dit account is ingesteld op vergrendeld. De eigenaar beoordeelt handmatig wie diegene kan volgen.",
"account.media": "Media", "account.media": "Media",
"account.mention": "@{name} vermelden", "account.mention": "@{name} vermelden",
"account.menu.add_to_collection": "Aan verzameling toevoegen…",
"account.menu.add_to_list": "Aan lijst toevoegen…", "account.menu.add_to_list": "Aan lijst toevoegen…",
"account.menu.block": "Account blokkeren", "account.menu.block": "Account blokkeren",
"account.menu.block_domain": "{domain} blokkeren", "account.menu.block_domain": "{domain} blokkeren",
@ -366,12 +367,11 @@
"collection.share_modal.share_via_system": "Delen met…", "collection.share_modal.share_via_system": "Delen met…",
"collection.share_modal.title": "Verzameling delen", "collection.share_modal.title": "Verzameling delen",
"collection.share_modal.title_new": "Je nieuwe verzameling delen!", "collection.share_modal.title_new": "Je nieuwe verzameling delen!",
"collection.share_template_other": "Bekijk deze coole verzameling: {link}",
"collection.share_template_own": "Bekijk mijn nieuwe verzameling: {link}",
"collections.account_count": "{count, plural, one {# account} other {# accounts}}", "collections.account_count": "{count, plural, one {# account} other {# accounts}}",
"collections.accounts.empty_description": "Tot {count} accounts toevoegen", "collections.accounts.empty_description": "Tot {count} accounts toevoegen",
"collections.accounts.empty_editor_title": "Er is nog nog niemand in deze verzameling", "collections.accounts.empty_editor_title": "Er is nog nog niemand in deze verzameling",
"collections.accounts.empty_title": "Deze verzameling is leeg", "collections.accounts.empty_title": "Deze verzameling is leeg",
"collections.add_to_collection": "Voeg {name} aan verzamelingen toe",
"collections.block_collection_owner": "Account blokkeren", "collections.block_collection_owner": "Account blokkeren",
"collections.by_account": "door {account_handle}", "collections.by_account": "door {account_handle}",
"collections.collection_description": "Omschrijving", "collections.collection_description": "Omschrijving",
@ -425,6 +425,11 @@
"collections.search_accounts_max_reached": "Je hebt het maximum aantal accounts toegevoegd", "collections.search_accounts_max_reached": "Je hebt het maximum aantal accounts toegevoegd",
"collections.sensitive": "Gevoelig", "collections.sensitive": "Gevoelig",
"collections.share_short": "Delen", "collections.share_short": "Delen",
"collections.sort_alphabetical": "Alfabetisch",
"collections.sort_by": "Sortering:",
"collections.sort_date_added": "Datum toegevoegd",
"collections.sort_last_active": "Laatst actief",
"collections.sort_most_followers": "Meeste volgers",
"collections.suggestions.can_not_add": "Kan niet worden toegevoegd", "collections.suggestions.can_not_add": "Kan niet worden toegevoegd",
"collections.suggestions.can_not_add_desc": "Deze accounts willen mogelijk niet worden uitgelicht, of ze bevinden zich op een server die geen verzamelingen ondersteunt.", "collections.suggestions.can_not_add_desc": "Deze accounts willen mogelijk niet worden uitgelicht, of ze bevinden zich op een server die geen verzamelingen ondersteunt.",
"collections.suggestions.must_follow": "Moeten eerst gevolgd worden", "collections.suggestions.must_follow": "Moeten eerst gevolgd worden",

View File

@ -361,8 +361,6 @@
"collection.share_modal.share_via_system": "Del med…", "collection.share_modal.share_via_system": "Del med…",
"collection.share_modal.title": "Del ei samling", "collection.share_modal.title": "Del ei samling",
"collection.share_modal.title_new": "Del den nye samlinga di!", "collection.share_modal.title_new": "Del den nye samlinga di!",
"collection.share_template_other": "Sjekk denne samlinga: {link}",
"collection.share_template_own": "Sjekk den nye samlinga mi: {link}",
"collections.account_count": "{count, plural, one {# konto} other {# kontoar}}", "collections.account_count": "{count, plural, one {# konto} other {# kontoar}}",
"collections.accounts.empty_title": "Denne samlinga er tom", "collections.accounts.empty_title": "Denne samlinga er tom",
"collections.by_account": "av {account_handle}", "collections.by_account": "av {account_handle}",

View File

@ -44,7 +44,7 @@
"account.featured.accounts": "Perfis", "account.featured.accounts": "Perfis",
"account.featured.collections": "Coleções", "account.featured.collections": "Coleções",
"account.featured.new_collection": "Nova coleção", "account.featured.new_collection": "Nova coleção",
"account.field_overflow": "Exibir conteúdo inteiro", "account.field_overflow": "Exibir conteúdo completo",
"account.filters.all": "Toda atividade", "account.filters.all": "Toda atividade",
"account.filters.boosts_toggle": "Exibir impulsos", "account.filters.boosts_toggle": "Exibir impulsos",
"account.filters.posts_boosts": "Publicações e impulsos", "account.filters.posts_boosts": "Publicações e impulsos",
@ -70,13 +70,13 @@
"account.hide_reblogs": "Ocultar impulsos de @{name}", "account.hide_reblogs": "Ocultar impulsos de @{name}",
"account.in_memoriam": "In Memoriam.", "account.in_memoriam": "In Memoriam.",
"account.join_modal.day": "Dia", "account.join_modal.day": "Dia",
"account.join_modal.me": "Você juntou-se à {server} em", "account.join_modal.me": "Você está em {server} desde",
"account.join_modal.me_anniversary": "Feliz Fediversário! Você juntou-se à {server} em", "account.join_modal.me_anniversary": "Feliz Fediversário! Você está em {server} desde",
"account.join_modal.me_today": "É seu primeiro dia em {server}!", "account.join_modal.me_today": "É seu primeiro dia em {server}!",
"account.join_modal.other": "{name} juntou-se à {server} em", "account.join_modal.other": "{name} está em {server} desde",
"account.join_modal.other_today": "Este é o primeiro dia de {name} em {server}!", "account.join_modal.other_today": "Este é o primeiro dia de {name} em {server}!",
"account.join_modal.share.celebrate": "Compartilhar publicação comemorativa", "account.join_modal.share.celebrate": "Compartilhar publicação comemorativa",
"account.join_modal.share.intro": "Compartilhar publicação de introdução", "account.join_modal.share.intro": "Compartilhar publicação de apresentação",
"account.join_modal.share.welcome": "Compartilhar publicação de boas-vindas", "account.join_modal.share.welcome": "Compartilhar publicação de boas-vindas",
"account.join_modal.years": "{number, plural, one {ano} other {anos}}", "account.join_modal.years": "{number, plural, one {ano} other {anos}}",
"account.joined_short": "Entrou", "account.joined_short": "Entrou",
@ -86,6 +86,7 @@
"account.locked_info": "Trancado. Seguir requer aprovação manual do perfil.", "account.locked_info": "Trancado. Seguir requer aprovação manual do perfil.",
"account.media": "Mídia", "account.media": "Mídia",
"account.mention": "Mencionar @{name}", "account.mention": "Mencionar @{name}",
"account.menu.add_to_collection": "Adicionar à coleção…",
"account.menu.add_to_list": "Adicionar à lista…", "account.menu.add_to_list": "Adicionar à lista…",
"account.menu.block": "Bloquear conta", "account.menu.block": "Bloquear conta",
"account.menu.block_domain": "Bloquear {domain}", "account.menu.block_domain": "Bloquear {domain}",
@ -103,7 +104,7 @@
"account.menu.show_reblogs": "Exibir impulsos na timeline", "account.menu.show_reblogs": "Exibir impulsos na timeline",
"account.menu.unblock": "Desbloquear conta", "account.menu.unblock": "Desbloquear conta",
"account.menu.unblock_domain": "Desbloquear {domain}", "account.menu.unblock_domain": "Desbloquear {domain}",
"account.menu.unmute": "Deixar de silenciar a conta", "account.menu.unmute": "Dessilenciar conta",
"account.moved_to": "{name} indicou que sua nova conta agora é:", "account.moved_to": "{name} indicou que sua nova conta agora é:",
"account.mute": "Silenciar @{name}", "account.mute": "Silenciar @{name}",
"account.mute_notifications_short": "Silenciar notificações", "account.mute_notifications_short": "Silenciar notificações",
@ -111,22 +112,22 @@
"account.muted": "Silenciado", "account.muted": "Silenciado",
"account.mutual": "Vocês se seguem", "account.mutual": "Vocês se seguem",
"account.name.copy": "Copiar usuário", "account.name.copy": "Copiar usuário",
"account.name.help.domain": "{domain} é o servidor que hospeda o perfil e publicações do usuário.", "account.name.help.domain": "{domain} é o servidor que hospeda este perfil e suas publicações.",
"account.name.help.domain_self": "{domain} é o servidor que hospeda seu perfil e suas publicações.", "account.name.help.domain_self": "{domain} é o servidor que hospeda seu perfil e suas publicações.",
"account.name.help.footer": "Assim como você pode enviar e-mails para outras pessoas usando endereços de e-mail diferentes, você pode interagir com usuários em outros servidores do Mastodon, e com qualquer um dos outros aplicativos do Fediverso.", "account.name.help.footer": "Assim como pode enviar e-mails para pessoas usando diferentes provedores de e-mail, você pode interagir com pessoas em outros servidor do Mastodon, e com qualquer um em outros apps da Fediverse.",
"account.name.help.header": "Um nome de usuário é como um e-mail", "account.name.help.header": "Um nome de usuário é como um endereço de email",
"account.name.help.username": "{username} é o usuário desta conta em seu próprio servidor. Alguém do mesmo servidor talvez possua o mesmo usuário.", "account.name.help.username": "{username} é o nome de usuário desta conta no servidor dela. Alguém em outro servidor pode ter o mesmo nome de usuário.",
"account.name.help.username_self": "{username} é seu usuário neste servidor. Alguém em outro servidor talvez possua o mesmo usuário.", "account.name.help.username_self": "{username} é seu nome de usuário neste servidor. Alguém em outro servidor pode ter o mesmo nome de usuário.",
"account.name_info": "O que isso quer dizer?", "account.name_info": "O que isso quer dizer?",
"account.no_bio": "Nenhuma descrição fornecida.", "account.no_bio": "Nenhuma descrição fornecida.",
"account.node_modal.callout": "Notas pessoais são visíveis somente para você.", "account.node_modal.callout": "Notas pessoais são visíveis apenas para você.",
"account.node_modal.edit_title": "Editar nota pessoal", "account.node_modal.edit_title": "Editar nota pessoal",
"account.node_modal.error_unknown": "Não foi possível salvar nota", "account.node_modal.error_unknown": "Não foi possível salvar a nota",
"account.node_modal.field_label": "Nota Pessoal", "account.node_modal.field_label": "Nota Pessoal",
"account.node_modal.save": "Salvar", "account.node_modal.save": "Salvar",
"account.node_modal.title": "Adicionar nota pessoal", "account.node_modal.title": "Adicionar nota pessoal",
"account.note.edit_button": "Editar", "account.note.edit_button": "Editar",
"account.note.title": "Nota pessoal (visível só para você)", "account.note.title": "Nota pessoal (visível apenas para você)",
"account.open_original_page": "Abrir a página original", "account.open_original_page": "Abrir a página original",
"account.pending": "Pendente", "account.pending": "Pendente",
"account.posts": "Publicações", "account.posts": "Publicações",
@ -137,7 +138,7 @@
"account.show_reblogs": "Mostrar impulsos de @{name}", "account.show_reblogs": "Mostrar impulsos de @{name}",
"account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", "account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
"account.timeline.pinned": "Fixado", "account.timeline.pinned": "Fixado",
"account.timeline.pinned.view_all": "Ver publicações fixadas", "account.timeline.pinned.view_all": "Ver todas as publicações fixadas",
"account.unblock": "Desbloquear @{name}", "account.unblock": "Desbloquear @{name}",
"account.unblock_domain": "Desbloquear domínio {domain}", "account.unblock_domain": "Desbloquear domínio {domain}",
"account.unblock_domain_short": "Desbloquear", "account.unblock_domain_short": "Desbloquear",
@ -147,50 +148,50 @@
"account.unmute": "Dessilenciar @{name}", "account.unmute": "Dessilenciar @{name}",
"account.unmute_notifications_short": "Ativar som de notificações", "account.unmute_notifications_short": "Ativar som de notificações",
"account.unmute_short": "Desativar silêncio", "account.unmute_short": "Desativar silêncio",
"account_edit.advanced_settings.bot_hint": "Alertar a todos que a conta realiza ações automáticas que talvez não sejam monitoradas", "account_edit.advanced_settings.bot_hint": "Alertar a outros que a conta realiza ações automáticas que talvez não sejam monitoradas",
"account_edit.advanced_settings.bot_label": "Conta automática", "account_edit.advanced_settings.bot_label": "Conta automatizada",
"account_edit.advanced_settings.title": "Opções avançadas", "account_edit.advanced_settings.title": "Configurações avançadas",
"account_edit.bio.add_label": "Adicionar biografia", "account_edit.bio.add_label": "Adicionar biografia",
"account_edit.bio.edit_label": "Editar biografia", "account_edit.bio.edit_label": "Editar biografia",
"account_edit.bio.placeholder": "Escreva uma curta introdução para ajudar os outros a identificarem você.", "account_edit.bio.placeholder": "Insira uma breve apresentação para ajudar os outros a lhe identificarem.",
"account_edit.bio.title": "Biografia", "account_edit.bio.title": "Biografia",
"account_edit.bio_modal.add_title": "Adicionar biografia", "account_edit.bio_modal.add_title": "Adicionar biografia",
"account_edit.bio_modal.edit_title": "Editar biografia", "account_edit.bio_modal.edit_title": "Editar biografia",
"account_edit.column_button": "Concluído", "account_edit.column_button": "Concluído",
"account_edit.column_title": "Editar perfil", "account_edit.column_title": "Editar perfil",
"account_edit.custom_fields.add_label": "Novo espaço", "account_edit.custom_fields.add_label": "Acrescentar campo",
"account_edit.custom_fields.edit_label": "Editar espaço", "account_edit.custom_fields.edit_label": "Editar campo",
"account_edit.custom_fields.placeholder": "Adicione seus pronomes, links externos ou qualquer coisa que deseja compartilhar.", "account_edit.custom_fields.placeholder": "Insira seus pronomes, links externos ou qualquer coisa que queira compartilhar.",
"account_edit.custom_fields.reorder_button": "Reordenar espaços", "account_edit.custom_fields.reorder_button": "Reordenar campos",
"account_edit.custom_fields.tip_content": "Você pode adicionar credibilidade facilmente a sua conta ao verificar qualquer link para seus sites.", "account_edit.custom_fields.tip_content": "Você pode facilmente dar credibilidade à sua conta Mastodon verificando os links para os seus sites.",
"account_edit.custom_fields.tip_title": "Dica: Adicionando links verificados", "account_edit.custom_fields.tip_title": "Dica: Adicionar links verificados",
"account_edit.custom_fields.title": "Espaços personalizados", "account_edit.custom_fields.title": "Campos personalizados",
"account_edit.custom_fields.verified_hint": "Como adicionar um link verificado?", "account_edit.custom_fields.verified_hint": "Como adiciono um link verificado?",
"account_edit.display_name.add_label": "Adicionar nome de exibição", "account_edit.display_name.add_label": "Acrescentar nome de exibição",
"account_edit.display_name.edit_label": "Editar nome de exibição", "account_edit.display_name.edit_label": "Editar nome de exibição",
"account_edit.display_name.placeholder": "O nome de exibição é como seu nome aparece em seu perfil e em timelines.", "account_edit.display_name.placeholder": "Seu nome de exibição é a forma com que seu nome aparece em seu perfil e em suas linhas do tempo.",
"account_edit.display_name.title": "Nome de exibição", "account_edit.display_name.title": "Nome de exibição",
"account_edit.featured_hashtags.edit_label": "Adicionar tags", "account_edit.featured_hashtags.edit_label": "Acrescentar hashtags",
"account_edit.featured_hashtags.placeholder": "Ajude todos a identificarem, e acessarem rapidamente seus tópicos favoritos.", "account_edit.featured_hashtags.placeholder": "Ajude outros a identificar e ter acesso rápido a seus tópicos favoritos.",
"account_edit.featured_hashtags.title": "Tags em destaque", "account_edit.featured_hashtags.title": "Hashtags em destaque",
"account_edit.field_actions.delete": "Remover espaço", "account_edit.field_actions.delete": "Remover campo",
"account_edit.field_actions.edit": "Editar espaço", "account_edit.field_actions.edit": "Editar campo",
"account_edit.field_delete_modal.confirm": "Deseja mesmo excluir este espaço? Esta ação não pode ser desfeita.", "account_edit.field_delete_modal.confirm": "Tem certeza que deseja excluir este campo personalizado? Esta ação não pode ser desfeita.",
"account_edit.field_delete_modal.delete_button": "Excluir", "account_edit.field_delete_modal.delete_button": "Excluir",
"account_edit.field_delete_modal.title": "Remover espaço?", "account_edit.field_delete_modal.title": "Remover espaço?",
"account_edit.field_edit_modal.add_title": "Adicionar espaço", "account_edit.field_edit_modal.add_title": "Adicionar espaço",
"account_edit.field_edit_modal.discard_confirm": "Descartar", "account_edit.field_edit_modal.discard_confirm": "Descartar",
"account_edit.field_edit_modal.discard_message": "Você possui alterações não salvas. Deseja mesmo descartá-las?", "account_edit.field_edit_modal.discard_message": "Você possui alterações não salvas. Deseja mesmo descartá-las?",
"account_edit.field_edit_modal.edit_title": "Editar campo personalizado", "account_edit.field_edit_modal.edit_title": "Editar espaço",
"account_edit.field_edit_modal.length_warning": "Limite de caracteres recomendados ultrapassado. Usuários em telefones podem não conseguir ver o espaço completo.", "account_edit.field_edit_modal.length_warning": "Limite de caracteres excedido. Usuários móveis talvez não consigam ver seus espaços por inteiro.",
"account_edit.field_edit_modal.link_emoji_warning": "Recomendamos não utilizar emojis personalizados combinados com URLs. Campos personalizados contendo ambos serão exibidos apenas como texto em vez de link, para evitar confusão dos usuários.", "account_edit.field_edit_modal.link_emoji_warning": "Recomendamos não usar emojis personalizados com URLs. Espaços contendo ambos serão exibidos apenas como um texto invés de um link para evitar confusão.",
"account_edit.field_edit_modal.name_hint": "Ex. \"Site pessoal\"", "account_edit.field_edit_modal.name_hint": "p. e.x.: “Site pessoal”",
"account_edit.field_edit_modal.name_label": "Descrição", "account_edit.field_edit_modal.name_label": "Rótulo",
"account_edit.field_edit_modal.url_warning": "Para adicionar um link, inclua {protocol} no início.", "account_edit.field_edit_modal.url_warning": "Para adicionar links, inclua {protocol} no início.",
"account_edit.field_edit_modal.value_hint": "Ex.: \"https://example.me\"", "account_edit.field_edit_modal.value_hint": "Ex.: \"https://example.me\"",
"account_edit.field_edit_modal.value_label": "Valor", "account_edit.field_edit_modal.value_label": "Valor",
"account_edit.field_reorder_modal.drag_cancel": "O arrasto foi cancelado. O campo \"{item}\" foi descartado.", "account_edit.field_reorder_modal.drag_cancel": "Arraste cancelado. O campo \"{item}\" foi solto.",
"account_edit.field_reorder_modal.drag_end": "O campo \"{item}\" foi descartado.", "account_edit.field_reorder_modal.drag_end": "O campo \"{item}\" foi solto.",
"account_edit.field_reorder_modal.drag_instructions": "Para reordenar campos personalizados, pressione espaço ou enter. Enquanto arrasta, utilize as teclas de seta para mover o campo para cima ou para baixo. Pressione espaço ou enter novamente para colocar o campo em sua nova posição, ou pressione 'Esc' para cancelar.", "account_edit.field_reorder_modal.drag_instructions": "Para reordenar campos personalizados, pressione espaço ou enter. Enquanto arrasta, utilize as teclas de seta para mover o campo para cima ou para baixo. Pressione espaço ou enter novamente para colocar o campo em sua nova posição, ou pressione 'Esc' para cancelar.",
"account_edit.field_reorder_modal.drag_move": "Campo \"{item}\" foi movido.", "account_edit.field_reorder_modal.drag_move": "Campo \"{item}\" foi movido.",
"account_edit.field_reorder_modal.drag_over": "Campo \"{item}\" foi movido para \"{over}\".", "account_edit.field_reorder_modal.drag_over": "Campo \"{item}\" foi movido para \"{over}\".",
@ -201,62 +202,62 @@
"account_edit.image_alt_modal.details_content": "FAÇA: <ul><li> Descreva-se como retratado/a</li><li>Utilize linguagem em terceira pessoa (p. ex.: \"Alex\" em vez de \"eu\")</li><li>Seja sucinto/a — algumas palavras costumam ser o suficiente</li></ul> NÃO FAÇA: <ul><li>Comece com \"Foto de\" — é redundante para leitores de tela</li></ul> EXEMPLO:<ul><li>\"Alex vestindo uma camisa verde e óvulos\"</li></ul>", "account_edit.image_alt_modal.details_content": "FAÇA: <ul><li> Descreva-se como retratado/a</li><li>Utilize linguagem em terceira pessoa (p. ex.: \"Alex\" em vez de \"eu\")</li><li>Seja sucinto/a — algumas palavras costumam ser o suficiente</li></ul> NÃO FAÇA: <ul><li>Comece com \"Foto de\" — é redundante para leitores de tela</li></ul> EXEMPLO:<ul><li>\"Alex vestindo uma camisa verde e óvulos\"</li></ul>",
"account_edit.image_alt_modal.details_title": "Dicas: Texto alternativo para fotos", "account_edit.image_alt_modal.details_title": "Dicas: Texto alternativo para fotos",
"account_edit.image_alt_modal.edit_title": "Editar texto alternativo", "account_edit.image_alt_modal.edit_title": "Editar texto alternativo",
"account_edit.image_alt_modal.text_hint": "Texto alternativo ajuda leitores de tela a entender seu conteúdo.", "account_edit.image_alt_modal.text_hint": "Texto alternativo ajuda susuários de leitores de tela a entender seu conteúdo.",
"account_edit.image_alt_modal.text_label": "Texto alternativo", "account_edit.image_alt_modal.text_label": "Texto alternativo",
"account_edit.image_delete_modal.confirm": "Tem certeza de que deseja excluir esta imagem? Esta ação não pode ser desfeita.", "account_edit.image_delete_modal.confirm": "Tem certeza de que deseja excluir esta imagem? Esta ação não pode ser desfeita.",
"account_edit.image_delete_modal.delete_button": "Deletar", "account_edit.image_delete_modal.delete_button": "Excluir",
"account_edit.image_delete_modal.title": "Deletar imagem?", "account_edit.image_delete_modal.title": "Excluir imagem?",
"account_edit.image_edit.add_button": "Adicionar imagem", "account_edit.image_edit.add_button": "Inserir imagem",
"account_edit.image_edit.alt_add_button": "Adicionar texto alternativo", "account_edit.image_edit.alt_add_button": "Inserir texto alternativo",
"account_edit.image_edit.alt_edit_button": "Editar texto alternativo", "account_edit.image_edit.alt_edit_button": "Editar texto alternativo",
"account_edit.image_edit.remove_button": "Remover imagem", "account_edit.image_edit.remove_button": "Remover imagem",
"account_edit.image_edit.replace_button": "Substituir imagem", "account_edit.image_edit.replace_button": "Substituir imagem",
"account_edit.item_list.delete": "Deletar {name}", "account_edit.item_list.delete": "Excluir {name}",
"account_edit.item_list.edit": "Editar {name}", "account_edit.item_list.edit": "Editar {name}",
"account_edit.name_modal.add_title": "Inserir nome de exibição", "account_edit.name_modal.add_title": "Inserir nome de exibição",
"account_edit.name_modal.edit_title": "Editar nome de exibição", "account_edit.name_modal.edit_title": "Editar nome de exibição",
"account_edit.profile_tab.button_label": "Personalizar", "account_edit.profile_tab.button_label": "Personalizar",
"account_edit.profile_tab.hint.description": "Essas configurações definem o que os usuários veem no {server} nos apps oficiais, mas podem não se aplicar a usuários em servidores e apps de terceiros.", "account_edit.profile_tab.hint.description": "Essas configurações definem o que os usuários veem no {server} através dos aplicativos oficiais, mas podem não se aplicar a usuários em servidores e aplicativos de terceiros.",
"account_edit.profile_tab.hint.title": "Exibições divergem", "account_edit.profile_tab.hint.title": "A exibição pode variar",
"account_edit.profile_tab.show_featured.description": "'Em Destaque' é uma aba opcional onde você pode exibir outras contas.", "account_edit.profile_tab.show_featured.description": "'Em Destaque' é uma aba opcional onde você pode exibir outras contas.",
"account_edit.profile_tab.show_featured.title": "Mostrar aba \"Destaque\"", "account_edit.profile_tab.show_featured.title": "Exibir aba 'Em destaque'",
"account_edit.profile_tab.show_media.description": "\"Mídia\" é uma aba opcional que mostra seus posts, contendo imagens ou vídeos.", "account_edit.profile_tab.show_media.description": "'Mídia' é uma aba opcional que mostra suas publicações contendo imagens ou vídeos.",
"account_edit.profile_tab.show_media.title": "Mostrar aba \"Mídia\"", "account_edit.profile_tab.show_media.title": "Exibir aba 'Mídia'",
"account_edit.profile_tab.show_media_replies.description": "Quando ativa, a aba Mídia mostra seus posts e respostas nos posts de outras pessoas.", "account_edit.profile_tab.show_media_replies.description": "Se ativa, a aba Mídia mostrará ambas suas publicações e respostas a outras pessoas.",
"account_edit.profile_tab.show_media_replies.title": "Incluir respostas na aba \"Mídia\"", "account_edit.profile_tab.show_media_replies.title": "Incluir respostas na aba 'Mídia'",
"account_edit.profile_tab.show_relations.description": "Exibe contas que segue e seguidores para outros usuários no seu perfil. As pessoas poderão ainda ver se você está as seguindo.", "account_edit.profile_tab.show_relations.description": "Exibe em seu perfil as contas que segue e seguidores para outros usuários. As pessoas poderão ainda ver se você as segue.",
"account_edit.profile_tab.show_relations.title": "Exibir 'Seguidores' e 'Seguindo'", "account_edit.profile_tab.show_relations.title": "Exibir 'Seguidores' e 'Seguindo'",
"account_edit.profile_tab.subtitle": "Customizar como seu perfil é exibido.", "account_edit.profile_tab.subtitle": "Personalize como seu perfil é exibido.",
"account_edit.profile_tab.title": "Configurações de exibição do perfil", "account_edit.profile_tab.title": "Configurações de exibição do perfil",
"account_edit.save": "Salvar", "account_edit.save": "Salvar",
"account_edit.upload_modal.back": "Voltar", "account_edit.upload_modal.back": "Voltar",
"account_edit.upload_modal.done": "Concluído", "account_edit.upload_modal.done": "Concluído",
"account_edit.upload_modal.next": "Próximo", "account_edit.upload_modal.next": "Próximo",
"account_edit.upload_modal.step_crop.zoom": "Aproximar", "account_edit.upload_modal.step_crop.zoom": "Ampliar",
"account_edit.upload_modal.step_upload.button": "Procurar arquivos", "account_edit.upload_modal.step_upload.button": "Buscar arquivos",
"account_edit.upload_modal.step_upload.dragging": "Solte para enviar", "account_edit.upload_modal.step_upload.dragging": "Solte para enviar",
"account_edit.upload_modal.step_upload.header": "Escolha uma imagem", "account_edit.upload_modal.step_upload.header": "Escolha uma imagem",
"account_edit.upload_modal.step_upload.hint": "WEBP, formatos GIF ou JPG, até {limit}MB.{br} imagem será redimensionada para {width}x{height}px.", "account_edit.upload_modal.step_upload.hint": "Formato .webp, .png, .gif ou .jpg, até {limit}MB.{br}A imagem será redimensionada para {width}x{height}px.",
"account_edit.upload_modal.title_add.avatar": "Adicionar foto de perfil", "account_edit.upload_modal.title_add.avatar": "Adicionar foto de perfil",
"account_edit.upload_modal.title_add.header": "Adicionar foto de capa", "account_edit.upload_modal.title_add.header": "Adicionar foto de capa",
"account_edit.upload_modal.title_replace.avatar": "Substituir foto de perfil", "account_edit.upload_modal.title_replace.avatar": "Substituir foto de perfil",
"account_edit.upload_modal.title_replace.header": "Substituir foto de capa", "account_edit.upload_modal.title_replace.header": "Substituir foto de capa",
"account_edit.verified_modal.details": "Dê credibilidade ao seu perfil do Mastodon, verificando links para sites pessoais. Veja como funciona:", "account_edit.verified_modal.details": "Dê credibilidade ao seu perfil do Mastodon, verificando links para sites pessoais. Veja como funciona:",
"account_edit.verified_modal.invisible_link.details": "Adicione o link para seu HTML do site. A parte importante é rel=\"eu\" onde previne falsificação de identidade em sites com conteúdo gerado por usuários. Você pode até mesmo usar um link tag no HTML da página ao invés de {tag}, mas o HTML deve ser acessível sem a execução do JavaScript.", "account_edit.verified_modal.invisible_link.details": "Adicione o link ao cabeçalho. A parte importante é rel=\"me\" que impede personificação em sites com conteúdo gerado por usuários. Você pode usar um rótulo de link no cabeçalho em vez de {tag}, porém o HTML deverá ser acessível sem precisar de JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Como posso tornar o link invisível?", "account_edit.verified_modal.invisible_link.summary": "Como tornar o link invisível?",
"account_edit.verified_modal.step1.header": "Copie o código HTML abaixo e cole no cabeçalho do seu site", "account_edit.verified_modal.step1.header": "Copie o código HTML abaixo e cole no cabeçalho do seu site",
"account_edit.verified_modal.step2.details": "Se já adicionou seu site como um campo personalizado, deverá excluí-lo e adicioná-lo novamente para acionar a verificação.", "account_edit.verified_modal.step2.details": "Se já adicionou seu site como um campo personalizado, deverá excluí-lo e adicioná-lo novamente para acionar a verificação.",
"account_edit.verified_modal.step2.header": "Adicione seu site como um campo personalizado", "account_edit.verified_modal.step2.header": "Adicione seu site como um campo personalizado",
"account_edit.verified_modal.title": "Como adicionar um link verificado", "account_edit.verified_modal.title": "Como adicionar um link verificado",
"account_edit_tags.add_tag": "Adicionar #{tagName}", "account_edit_tags.add_tag": "Adicionar #{tagName}",
"account_edit_tags.column_title": "Editar Tags", "account_edit_tags.column_title": "Editar rótulos",
"account_edit_tags.help_text": "Hashtags em destaque ajudam os usuários a descobrir e interagir com seu perfil. Elas aparecem como filtros na visualização de Atividade da sua página de Perfil.", "account_edit_tags.help_text": "Hashtags em destaque ajudam os usuários a descobrir e interagir com seu perfil. Elas aparecem como filtros na visualização de Atividade da sua página de Perfil.",
"account_edit_tags.max_tags_reached": "Você atingiu o número máximo de hashtags em destaque.", "account_edit_tags.max_tags_reached": "Você atingiu o número máximo de hashtags em destaque.",
"account_edit_tags.search_placeholder": "Insira uma hashtag…", "account_edit_tags.search_placeholder": "Insira uma hashtag…",
"account_edit_tags.suggestions": "Sugestões:", "account_edit_tags.suggestions": "Sugestões:",
"account_edit_tags.tag_status_count": "{count, plural, one {# publicação} other {# publicações}}", "account_edit_tags.tag_status_count": "{count, plural, one {# publicação} other {# publicações}}",
"account_list.hidden_notice": "Isto é apenas visível a ti. Para mostrar essa lista aos outros, vá a <link>{page} > {modal} > {field}</link>.", "account_list.hidden_notice": "Isto é visível somente para você. Para exibir para todos, vá a <link>{page} > {modal} > {field}</link>.",
"account_list.total": "{total, plural,one {#conta}other {#contas}}", "account_list.total": "{total, plural, one {# conta} other {# contas}}",
"admin.dashboard.daily_retention": "Taxa de retenção de usuários por dia, após a inscrição", "admin.dashboard.daily_retention": "Taxa de retenção de usuários por dia, após a inscrição",
"admin.dashboard.monthly_retention": "Taxa de retenção de usuários por mês, após a inscrição", "admin.dashboard.monthly_retention": "Taxa de retenção de usuários por mês, após a inscrição",
"admin.dashboard.retention.average": "Média", "admin.dashboard.retention.average": "Média",
@ -277,17 +278,17 @@
"alt_text_modal.change_thumbnail": "Alterar miniatura", "alt_text_modal.change_thumbnail": "Alterar miniatura",
"alt_text_modal.describe_for_people_with_hearing_impairments": "Descreva isto para pessoas com deficiências auditivas…", "alt_text_modal.describe_for_people_with_hearing_impairments": "Descreva isto para pessoas com deficiências auditivas…",
"alt_text_modal.describe_for_people_with_visual_impairments": "Descreva isto para pessoas com deficiências visuais…", "alt_text_modal.describe_for_people_with_visual_impairments": "Descreva isto para pessoas com deficiências visuais…",
"alt_text_modal.done": "Feito", "alt_text_modal.done": "Concluído",
"announcement.announcement": "Anúncio", "announcement.announcement": "Anúncio",
"annual_report.announcement.action_build": "Gerar meu Wrapstodon", "annual_report.announcement.action_build": "Gerar meu Wrapstodon",
"annual_report.announcement.action_dismiss": "Não, obrigado/a", "annual_report.announcement.action_dismiss": "Não, obrigado",
"annual_report.announcement.action_view": "Ver meu Wrapstodon", "annual_report.announcement.action_view": "Ver meu Wrapstodon",
"annual_report.announcement.description": "Descubra mais sobre seu engajamento no Mastodon ao longo do último ano.", "annual_report.announcement.description": "Descubra mais sobre seu engajamento no Mastodon ao longo do último ano.",
"annual_report.announcement.title": "Chegou o Wrapstodon de {year}", "annual_report.announcement.title": "Chegou o Wrapstodon de {year}",
"annual_report.nav_item.badge": "Novo", "annual_report.nav_item.badge": "Novo",
"annual_report.shared_page.donate": "Doe", "annual_report.shared_page.donate": "Doar",
"annual_report.shared_page.footer": "Criado com {heart} pela equipe do Mastodon", "annual_report.shared_page.footer": "Criado com {heart} pela equipe do Mastodon",
"annual_report.shared_page.footer_server_info": "{username} utiliza {domain}, uma das várias comunidades baseadas no Mastodon.", "annual_report.shared_page.footer_server_info": "{username} usa {domain}, uma de muitas comunidades baseadas no Mastodon.",
"annual_report.summary.archetype.booster.desc_public": "{name} se manteve na caça por publicações para impulsionar, amplificando outros criadores com uma mira perfeita.", "annual_report.summary.archetype.booster.desc_public": "{name} se manteve na caça por publicações para impulsionar, amplificando outros criadores com uma mira perfeita.",
"annual_report.summary.archetype.booster.desc_self": "Você se manteve na caça por publicações para impulsionar, amplificando outros criadores com uma mira perfeita.", "annual_report.summary.archetype.booster.desc_self": "Você se manteve na caça por publicações para impulsionar, amplificando outros criadores com uma mira perfeita.",
"annual_report.summary.archetype.booster.name": "O Arqueiro", "annual_report.summary.archetype.booster.name": "O Arqueiro",
@ -362,20 +363,19 @@
"closed_registrations_modal.preamble": "O Mastodon é descentralizado, não importa onde você criou a sua conta, será possível seguir e interagir com qualquer pessoa neste servidor. Você pode até mesmo criar o seu próprio servidor!", "closed_registrations_modal.preamble": "O Mastodon é descentralizado, não importa onde você criou a sua conta, será possível seguir e interagir com qualquer pessoa neste servidor. Você pode até mesmo criar o seu próprio servidor!",
"closed_registrations_modal.title": "Inscrevendo-se no Mastodon", "closed_registrations_modal.title": "Inscrevendo-se no Mastodon",
"collection.share_modal.share_link_label": "Compartilhar link", "collection.share_modal.share_link_label": "Compartilhar link",
"collection.share_modal.share_via_post": "Postar no Mastodon", "collection.share_modal.share_via_post": "Publicar no Mastodon",
"collection.share_modal.share_via_system": "Enviar para…", "collection.share_modal.share_via_system": "Enviar para…",
"collection.share_modal.title": "Compartilhar coleção", "collection.share_modal.title": "Compartilhar coleção",
"collection.share_modal.title_new": "Compartilhe sua nova coleção!", "collection.share_modal.title_new": "Compartilhe sua nova coleção!",
"collection.share_template_other": "Confira esta coleção incrível: {link}",
"collection.share_template_own": "Confira minha nova coleção: {link}",
"collections.account_count": "{count, plural, one {# conta} other {# conta}}", "collections.account_count": "{count, plural, one {# conta} other {# conta}}",
"collections.accounts.empty_description": "Adicione até {count} contas", "collections.accounts.empty_description": "Adicione até {count} contas",
"collections.accounts.empty_editor_title": "Ainda não há ninguém nesta coleção", "collections.accounts.empty_editor_title": "Ainda não há ninguém nesta coleção",
"collections.accounts.empty_title": "Esta coleção está vazia", "collections.accounts.empty_title": "Esta coleção está vazia",
"collections.add_to_collection": "Adicionar {name} à coleção",
"collections.block_collection_owner": "Bloquear conta", "collections.block_collection_owner": "Bloquear conta",
"collections.by_account": "por {account_handle}", "collections.by_account": "por {account_handle}",
"collections.collection_description": "Descrição", "collections.collection_description": "Descrição",
"collections.collection_language": "Língua", "collections.collection_language": "Idioma",
"collections.collection_language_none": "Nenhum", "collections.collection_language_none": "Nenhum",
"collections.collection_name": "Nome", "collections.collection_name": "Nome",
"collections.collection_topic": "Tópico", "collections.collection_topic": "Tópico",
@ -388,17 +388,17 @@
"collections.create.basic_details_title": "Detalhes básicos", "collections.create.basic_details_title": "Detalhes básicos",
"collections.create.steps": "Passo {step}/{total}", "collections.create.steps": "Passo {step}/{total}",
"collections.create_collection": "Criar coleção", "collections.create_collection": "Criar coleção",
"collections.delete_collection": "Eliminar coleção", "collections.delete_collection": "Excluir coleção",
"collections.description_length_hint": "Limite de 100 caracteres", "collections.description_length_hint": "Limite de 100 caracteres",
"collections.detail.author_added_you_on_date": "{author} te adicionou em {date}", "collections.detail.author_added_you_on_date": "{author} te adicionou em {date}",
"collections.detail.loading": "Carregando coleção…", "collections.detail.loading": "Carregando coleção…",
"collections.detail.revoke_inclusion": "Remover-me", "collections.detail.revoke_inclusion": "Remover-me",
"collections.detail.sensitive_content": "Conteúdo sensível", "collections.detail.sensitive_content": "Conteúdo sensível",
"collections.detail.sensitive_note": "A descrição e as contas talvez possam não ser adequadas para todos.", "collections.detail.sensitive_note": "A descrição e as contas podem não ser adequadas para todos os públicos.",
"collections.detail.share": "Compartilhar esta coleção", "collections.detail.share": "Compartilhar esta coleção",
"collections.detail.you_are_in_this_collection": "Você aparece nesta coleção", "collections.detail.you_are_in_this_collection": "Você aparece nesta coleção",
"collections.edit_details": "Editar detalhes", "collections.edit_details": "Editar detalhes",
"collections.error_loading_collections": "Houve um erro ao tentar carregar essas coleções.", "collections.error_loading_collections": "Houve um erro ao tentar carregar estas coleções.",
"collections.hidden_accounts_description": "Você bloqueou ou silencilou {count, plural, one{este usuário} other {estes usuários}}", "collections.hidden_accounts_description": "Você bloqueou ou silencilou {count, plural, one{este usuário} other {estes usuários}}",
"collections.hidden_accounts_link": "{count, plural, one {# conta oculta} other {# contas ocultas}}", "collections.hidden_accounts_link": "{count, plural, one {# conta oculta} other {# contas ocultas}}",
"collections.hints.accounts_counter": "{count}/{max} contas", "collections.hints.accounts_counter": "{count}/{max} contas",
@ -491,7 +491,7 @@
"compose.saved.body": "Publicação salva.", "compose.saved.body": "Publicação salva.",
"compose_form.direct_message_warning_learn_more": "Saiba mais", "compose_form.direct_message_warning_learn_more": "Saiba mais",
"compose_form.encryption_warning": "As publicações no Mastodon não são criptografadas de ponta-a-ponta. Não compartilhe nenhuma informação sensível no Mastodon.", "compose_form.encryption_warning": "As publicações no Mastodon não são criptografadas de ponta-a-ponta. Não compartilhe nenhuma informação sensível no Mastodon.",
"compose_form.hashtag_warning": "Esta publicação não será exibida sob nenhuma hashtag, já que não é pública. Apenas postagens públicas podem ser pesquisadas por meio de hashtags.", "compose_form.hashtag_warning": "Esta publicação não será exibida sob nenhuma hashtag, já que não é pública. Apenas publicações públicas podem ser pesquisadas por meio de hashtags.",
"compose_form.lock_disclaimer": "Seu perfil não está {locked}. Qualquer um pode te seguir e ver as suas publicações privadas.", "compose_form.lock_disclaimer": "Seu perfil não está {locked}. Qualquer um pode te seguir e ver as suas publicações privadas.",
"compose_form.lock_disclaimer.lock": "trancado", "compose_form.lock_disclaimer.lock": "trancado",
"compose_form.placeholder": "No que você está pensando?", "compose_form.placeholder": "No que você está pensando?",
@ -513,9 +513,9 @@
"confirmations.delete.confirm": "Excluir", "confirmations.delete.confirm": "Excluir",
"confirmations.delete.message": "Você tem certeza de que deseja excluir esta publicação?", "confirmations.delete.message": "Você tem certeza de que deseja excluir esta publicação?",
"confirmations.delete.title": "Excluir publicação?", "confirmations.delete.title": "Excluir publicação?",
"confirmations.delete_collection.confirm": "Deletar", "confirmations.delete_collection.confirm": "Excluir",
"confirmations.delete_collection.message": "Esta ação não pode ser desfeita.", "confirmations.delete_collection.message": "Esta ação não pode ser desfeita.",
"confirmations.delete_collection.title": "Deletar \"{name}\"?", "confirmations.delete_collection.title": "Excluir \"{name}\"?",
"confirmations.delete_list.confirm": "Excluir", "confirmations.delete_list.confirm": "Excluir",
"confirmations.delete_list.message": "Você tem certeza de que deseja excluir esta lista?", "confirmations.delete_list.message": "Você tem certeza de que deseja excluir esta lista?",
"confirmations.delete_list.title": "Excluir lista?", "confirmations.delete_list.title": "Excluir lista?",
@ -559,7 +559,7 @@
"confirmations.remove_from_followers.message": "{name} vai parar de te seguir. Tem certeza de que deseja continuar?", "confirmations.remove_from_followers.message": "{name} vai parar de te seguir. Tem certeza de que deseja continuar?",
"confirmations.remove_from_followers.title": "Remover seguidor?", "confirmations.remove_from_followers.title": "Remover seguidor?",
"confirmations.revoke_collection_inclusion.confirm": "Remover-me", "confirmations.revoke_collection_inclusion.confirm": "Remover-me",
"confirmations.revoke_collection_inclusion.message": "Esta ação é permanente e o curador não poderá adicionar-lhe de volta à coleção mais tarde.", "confirmations.revoke_collection_inclusion.message": "Esta ação é permanente e o curador não poderá lhe adicionar de volta à coleção mais tarde.",
"confirmations.revoke_collection_inclusion.title": "Remover-se desta coleção?", "confirmations.revoke_collection_inclusion.title": "Remover-se desta coleção?",
"confirmations.revoke_quote.confirm": "Remover publicação", "confirmations.revoke_quote.confirm": "Remover publicação",
"confirmations.revoke_quote.message": "Esta ação não pode ser desfeita.", "confirmations.revoke_quote.message": "Esta ação não pode ser desfeita.",
@ -595,7 +595,7 @@
"domain_block_modal.block_account_instead": "Bloquear @{name} em vez disso", "domain_block_modal.block_account_instead": "Bloquear @{name} em vez disso",
"domain_block_modal.they_can_interact_with_old_posts": "Pessoas deste servidor podem interagir com suas publicações antigas.", "domain_block_modal.they_can_interact_with_old_posts": "Pessoas deste servidor podem interagir com suas publicações antigas.",
"domain_block_modal.they_cant_follow": "Ninguém deste servidor pode lhe seguir.", "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.they_wont_know": "O/A usuário/a não saberá que foi bloqueado/a.",
"domain_block_modal.title": "Bloquear domínio?", "domain_block_modal.title": "Bloquear domínio?",
"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_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_will_lose_relationships": "Você irá perder todos os seguidores e pessoas que você segue neste servidor.",

View File

@ -345,8 +345,6 @@
"collection.share_modal.share_via_system": "Compartilhar com…", "collection.share_modal.share_via_system": "Compartilhar com…",
"collection.share_modal.title": "Partilhar coleção", "collection.share_modal.title": "Partilhar coleção",
"collection.share_modal.title_new": "Partilhe a sua nova coleção!", "collection.share_modal.title_new": "Partilhe a sua nova coleção!",
"collection.share_template_other": "Veja esta coleção interessante: {link}",
"collection.share_template_own": "Veja a minha nova coleção: {link}",
"collections.account_count": "{count, plural, one {# conta} other {# contas}}", "collections.account_count": "{count, plural, one {# conta} other {# contas}}",
"collections.accounts.empty_description": "Adicione até {count} contas", "collections.accounts.empty_description": "Adicione até {count} contas",
"collections.accounts.empty_editor_title": "Ainda não há ninguém nesta coleção", "collections.accounts.empty_editor_title": "Ainda não há ninguém nesta coleção",

View File

@ -342,8 +342,6 @@
"collection.share_modal.share_via_system": "Поделиться…", "collection.share_modal.share_via_system": "Поделиться…",
"collection.share_modal.title": "Поделиться подборкой", "collection.share_modal.title": "Поделиться подборкой",
"collection.share_modal.title_new": "Поделитесь вашей новой подборкой!", "collection.share_modal.title_new": "Поделитесь вашей новой подборкой!",
"collection.share_template_other": "Зацените эту замечательную подборку: {link}",
"collection.share_template_own": "Зацените мою новую подборку: {link}",
"collections.account_count": "{count, plural, one {# пользователь} few {# пользователя} other {# пользователей}}", "collections.account_count": "{count, plural, one {# пользователь} few {# пользователя} other {# пользователей}}",
"collections.accounts.empty_description": "Вы можете добавить максимум {count} пользователей", "collections.accounts.empty_description": "Вы можете добавить максимум {count} пользователей",
"collections.accounts.empty_editor_title": "В этой подборке пока никого нет", "collections.accounts.empty_editor_title": "В этой подборке пока никого нет",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Gjendja e privatësisë së kësaj llogarie është caktuar si e kyçur. I zoti merr dorazi në shqyrtim cilët mund ta ndjekin.", "account.locked_info": "Gjendja e privatësisë së kësaj llogarie është caktuar si e kyçur. I zoti merr dorazi në shqyrtim cilët mund ta ndjekin.",
"account.media": "Media", "account.media": "Media",
"account.mention": "Përmendni @{name}", "account.mention": "Përmendni @{name}",
"account.menu.add_to_collection": "Shtoni në koleksion…",
"account.menu.add_to_list": "Shtoni në listë…", "account.menu.add_to_list": "Shtoni në listë…",
"account.menu.block": "Bllokoje llogarinë", "account.menu.block": "Bllokoje llogarinë",
"account.menu.block_domain": "Bllokoje {domain}", "account.menu.block_domain": "Bllokoje {domain}",
@ -361,12 +362,13 @@
"collection.share_modal.share_via_system": "Ndajeni me të tjerë në…", "collection.share_modal.share_via_system": "Ndajeni me të tjerë në…",
"collection.share_modal.title": "Ndani koleksionin me të tjerë", "collection.share_modal.title": "Ndani koleksionin me të tjerë",
"collection.share_modal.title_new": "Ndani me të tjerë koleksionin tuaj të ri!", "collection.share_modal.title_new": "Ndani me të tjerë koleksionin tuaj të ri!",
"collection.share_template_other": "Shihni këtë koleksion të hijshëm: {link}", "collection.share_template_other": "Shihni këtë koleksion të hijshëm:",
"collection.share_template_own": "Shihni koleksionin tim të ri: {link}", "collection.share_template_own": "Shihni koleksionin tim të ri:",
"collections.account_count": "{count, plural, one {# llogari} other {# llogari}}", "collections.account_count": "{count, plural, one {# llogari} other {# llogari}}",
"collections.accounts.empty_description": "Shtoni deri në {count} llogari", "collections.accounts.empty_description": "Shtoni deri në {count} llogari",
"collections.accounts.empty_editor_title": "Në këtë koleksion ska ende njeri", "collections.accounts.empty_editor_title": "Në këtë koleksion ska ende njeri",
"collections.accounts.empty_title": "Ky koleksion është i zbrazët", "collections.accounts.empty_title": "Ky koleksion është i zbrazët",
"collections.add_to_collection": "Shtoje {name} te koleksione",
"collections.block_collection_owner": "Bllokoje llogarinë", "collections.block_collection_owner": "Bllokoje llogarinë",
"collections.by_account": "nga {account_handle}", "collections.by_account": "nga {account_handle}",
"collections.collection_description": "Përshkrim", "collections.collection_description": "Përshkrim",

View File

@ -366,8 +366,6 @@
"collection.share_modal.share_via_system": "Dela med…", "collection.share_modal.share_via_system": "Dela med…",
"collection.share_modal.title": "Dela samling", "collection.share_modal.title": "Dela samling",
"collection.share_modal.title_new": "Dela din nya samling!", "collection.share_modal.title_new": "Dela din nya samling!",
"collection.share_template_other": "Kolla in denna coola samling: {link}",
"collection.share_template_own": "Kolla in min nya samling: {link}",
"collections.account_count": "{count, plural, one {# konto} other {# konton}}", "collections.account_count": "{count, plural, one {# konto} other {# konton}}",
"collections.accounts.empty_description": "Lägg till upp till {count} konton", "collections.accounts.empty_description": "Lägg till upp till {count} konton",
"collections.accounts.empty_editor_title": "Ingen finns i denna samling ännu", "collections.accounts.empty_editor_title": "Ingen finns i denna samling ännu",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Bu hesabın gizlilik durumu gizli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle onaylıyor.", "account.locked_info": "Bu hesabın gizlilik durumu gizli olarak ayarlanmış. Sahibi, onu kimin takip edebileceğini elle onaylıyor.",
"account.media": "Medya", "account.media": "Medya",
"account.mention": "@{name} kişisinden bahset", "account.mention": "@{name} kişisinden bahset",
"account.menu.add_to_collection": "Koleksiyona ekle…",
"account.menu.add_to_list": "Listeye ekle…", "account.menu.add_to_list": "Listeye ekle…",
"account.menu.block": "Hesabı engelle", "account.menu.block": "Hesabı engelle",
"account.menu.block_domain": "{domain} alan adını engelle", "account.menu.block_domain": "{domain} alan adını engelle",
@ -366,12 +367,11 @@
"collection.share_modal.share_via_system": "Paylaş…", "collection.share_modal.share_via_system": "Paylaş…",
"collection.share_modal.title": "Koleksiyonu paylaş", "collection.share_modal.title": "Koleksiyonu paylaş",
"collection.share_modal.title_new": "Yeni koleksiyonunuzu paylaşın!", "collection.share_modal.title_new": "Yeni koleksiyonunuzu paylaşın!",
"collection.share_template_other": "Bu harika koleksiyona göz atın: {link}",
"collection.share_template_own": "Yeni koleksiyonuma göz atın: {link}",
"collections.account_count": "{count, plural, one {# hesap} other {# hesap}}", "collections.account_count": "{count, plural, one {# hesap} other {# hesap}}",
"collections.accounts.empty_description": "{count} hesap ekleyebilirsiniz", "collections.accounts.empty_description": "{count} hesap ekleyebilirsiniz",
"collections.accounts.empty_editor_title": "Koleksiyonda henüz kimse yok", "collections.accounts.empty_editor_title": "Koleksiyonda henüz kimse yok",
"collections.accounts.empty_title": "Bu koleksiyon boş", "collections.accounts.empty_title": "Bu koleksiyon boş",
"collections.add_to_collection": "{name} kişisini koleksiyonlara ekle",
"collections.block_collection_owner": "Hesabı engelle", "collections.block_collection_owner": "Hesabı engelle",
"collections.by_account": "Hazırlayan: {account_handle}", "collections.by_account": "Hazırlayan: {account_handle}",
"collections.collection_description": "Açıklama", "collections.collection_description": "Açıklama",

View File

@ -86,6 +86,7 @@
"account.locked_info": "Đây là tài khoản riêng tư. Chủ tài khoản tự mình xét duyệt các yêu cầu theo dõi.", "account.locked_info": "Đây là tài khoản riêng tư. Chủ tài khoản tự mình xét duyệt các yêu cầu theo dõi.",
"account.media": "Phương tiện", "account.media": "Phương tiện",
"account.mention": "Nhắc đến @{name}", "account.mention": "Nhắc đến @{name}",
"account.menu.add_to_collection": "Thêm vào gói khởi đầu…",
"account.menu.add_to_list": "Thêm vào danh sách", "account.menu.add_to_list": "Thêm vào danh sách",
"account.menu.block": "Chặn tài khoản", "account.menu.block": "Chặn tài khoản",
"account.menu.block_domain": "Chặn {domain}", "account.menu.block_domain": "Chặn {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "Chia sẻ qua…", "collection.share_modal.share_via_system": "Chia sẻ qua…",
"collection.share_modal.title": "Chia sẻ gói khởi đầu", "collection.share_modal.title": "Chia sẻ gói khởi đầu",
"collection.share_modal.title_new": "Chia sẻ gói khởi đầu mới của bạn!", "collection.share_modal.title_new": "Chia sẻ gói khởi đầu mới của bạn!",
"collection.share_template_other": "Xem ngay gói khởi đầu tuyệt vời này: {link}", "collection.share_template_other": "Xem ngay gói khởi đầu tuyệt vời này:",
"collection.share_template_own": "Xem ngay gói khởi đầu mới của tôi: {link}", "collection.share_template_own": "Xem ngay gói khởi đầu mới của tôi:",
"collections.account_count": "{count, plural, other {# tài khoản}}", "collections.account_count": "{count, plural, other {# tài khoản}}",
"collections.accounts.empty_description": "Thêm tối đa {count} tài khoản", "collections.accounts.empty_description": "Thêm tối đa {count} tài khoản",
"collections.accounts.empty_editor_title": "Chưa có ai trong gói khởi đầu này", "collections.accounts.empty_editor_title": "Chưa có ai trong gói khởi đầu này",
"collections.accounts.empty_title": "Gói khởi đầu này trống", "collections.accounts.empty_title": "Gói khởi đầu này trống",
"collections.add_to_collection": "Thêm {name} vào gói khởi đầu",
"collections.block_collection_owner": "Chặn tài khoản", "collections.block_collection_owner": "Chặn tài khoản",
"collections.by_account": "bởi {account_handle}", "collections.by_account": "bởi {account_handle}",
"collections.collection_description": "Mô tả", "collections.collection_description": "Mô tả",

View File

@ -86,6 +86,7 @@
"account.locked_info": "此账号已锁嘟。账号所有人会手动审核新关注者。", "account.locked_info": "此账号已锁嘟。账号所有人会手动审核新关注者。",
"account.media": "媒体", "account.media": "媒体",
"account.mention": "提及 @{name}", "account.mention": "提及 @{name}",
"account.menu.add_to_collection": "加入收藏列表…",
"account.menu.add_to_list": "添加到列表…", "account.menu.add_to_list": "添加到列表…",
"account.menu.block": "屏蔽账号", "account.menu.block": "屏蔽账号",
"account.menu.block_domain": "屏蔽 {domain}", "account.menu.block_domain": "屏蔽 {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "分享到…", "collection.share_modal.share_via_system": "分享到…",
"collection.share_modal.title": "分享收藏列表", "collection.share_modal.title": "分享收藏列表",
"collection.share_modal.title_new": "分享你的新收藏列表!", "collection.share_modal.title_new": "分享你的新收藏列表!",
"collection.share_template_other": "发现了个收藏列表,来看看:{link}", "collection.share_template_other": "发现了个收藏列表,来看看:",
"collection.share_template_own": "我的新收藏列表,来看看:{link}", "collection.share_template_own": "我的新收藏列表,来看看:",
"collections.account_count": "{count, plural, other {# 个账号}}", "collections.account_count": "{count, plural, other {# 个账号}}",
"collections.accounts.empty_description": "添加最多 {count} 个账号", "collections.accounts.empty_description": "添加最多 {count} 个账号",
"collections.accounts.empty_editor_title": "此收藏列表中暂无用户", "collections.accounts.empty_editor_title": "此收藏列表中暂无用户",
"collections.accounts.empty_title": "收藏列表为空", "collections.accounts.empty_title": "收藏列表为空",
"collections.add_to_collection": "将 {name} 添加到收藏列表",
"collections.block_collection_owner": "屏蔽账号", "collections.block_collection_owner": "屏蔽账号",
"collections.by_account": "由 {account_handle}", "collections.by_account": "由 {account_handle}",
"collections.collection_description": "说明", "collections.collection_description": "说明",

View File

@ -86,6 +86,7 @@
"account.locked_info": "此帳號的隱私狀態被設為鎖定。該擁有者會手動審核能跟隨此帳號的人。", "account.locked_info": "此帳號的隱私狀態被設為鎖定。該擁有者會手動審核能跟隨此帳號的人。",
"account.media": "媒體", "account.media": "媒體",
"account.mention": "提及 @{name}", "account.mention": "提及 @{name}",
"account.menu.add_to_collection": "加入至收藏名單...",
"account.menu.add_to_list": "新增至列表...", "account.menu.add_to_list": "新增至列表...",
"account.menu.block": "封鎖帳號", "account.menu.block": "封鎖帳號",
"account.menu.block_domain": "封鎖 {domain}", "account.menu.block_domain": "封鎖 {domain}",
@ -366,12 +367,13 @@
"collection.share_modal.share_via_system": "分享至...", "collection.share_modal.share_via_system": "分享至...",
"collection.share_modal.title": "分享收藏名單", "collection.share_modal.title": "分享收藏名單",
"collection.share_modal.title_new": "分享您的新收藏名單!", "collection.share_modal.title_new": "分享您的新收藏名單!",
"collection.share_template_other": "來看看這個酷酷的收藏名單:{link}", "collection.share_template_other": "來看看這個酷酷的收藏名單:",
"collection.share_template_own": "來看看我的新收藏名單:{link}", "collection.share_template_own": "來看看我的新收藏名單:",
"collections.account_count": "{count, plural, other {# 個帳號}}", "collections.account_count": "{count, plural, other {# 個帳號}}",
"collections.accounts.empty_description": "加入最多 {count} 個帳號", "collections.accounts.empty_description": "加入最多 {count} 個帳號",
"collections.accounts.empty_editor_title": "此收藏名單尚未有任何人", "collections.accounts.empty_editor_title": "此收藏名單尚未有任何人",
"collections.accounts.empty_title": "此收藏名單是空的", "collections.accounts.empty_title": "此收藏名單是空的",
"collections.add_to_collection": "將 {name} 加入至收藏名單",
"collections.block_collection_owner": "封鎖帳號", "collections.block_collection_owner": "封鎖帳號",
"collections.by_account": "來自 {account_handle}", "collections.by_account": "來自 {account_handle}",
"collections.collection_description": "說明", "collections.collection_description": "說明",

View File

@ -0,0 +1,21 @@
import type {
ApiInstanceJSON,
ApiExtendedDescriptionJSON,
ApiDomainBlockJSON,
} from 'mastodon/api_types/instance';
export type Server = ApiInstanceJSON;
export const createServerFromServerJSON = (obj: ApiInstanceJSON): Server => obj;
export type ExtendedDescription = ApiExtendedDescriptionJSON;
export const createExtendedDescriptionFromServerJSON = (
obj: ApiExtendedDescriptionJSON,
): ExtendedDescription => obj;
export type DomainBlock = ApiDomainBlockJSON;
export const createDomainBlockFromServerJSON = (
obj: ApiDomainBlockJSON,
): DomainBlock => obj;

View File

@ -30,7 +30,7 @@ import { pollsReducer } from './polls';
import push_notifications from './push_notifications'; import push_notifications from './push_notifications';
import { relationshipsReducer } from './relationships'; import { relationshipsReducer } from './relationships';
import { searchReducer } from './search'; import { searchReducer } from './search';
import server from './server'; import { serverReducer } from './server';
import settings from './settings'; import settings from './settings';
import { sliceReducers } from './slices'; import { sliceReducers } from './slices';
import status_lists from './status_lists'; import status_lists from './status_lists';
@ -58,7 +58,7 @@ const reducers = {
relationships: relationshipsReducer, relationships: relationshipsReducer,
settings, settings,
push_notifications, push_notifications,
server, server: serverReducer,
contexts: contextsReducer, contexts: contextsReducer,
compose: composeReducer, compose: composeReducer,
search: searchReducer, search: searchReducer,

View File

@ -1,63 +0,0 @@
import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
import {
SERVER_FETCH_REQUEST,
SERVER_FETCH_SUCCESS,
SERVER_FETCH_FAIL,
SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST,
SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS,
SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL,
EXTENDED_DESCRIPTION_REQUEST,
EXTENDED_DESCRIPTION_SUCCESS,
EXTENDED_DESCRIPTION_FAIL,
SERVER_DOMAIN_BLOCKS_FETCH_REQUEST,
SERVER_DOMAIN_BLOCKS_FETCH_SUCCESS,
SERVER_DOMAIN_BLOCKS_FETCH_FAIL,
} from 'mastodon/actions/server';
const initialState = ImmutableMap({
server: ImmutableMap({
isLoading: false,
}),
extendedDescription: ImmutableMap({
isLoading: false,
}),
domainBlocks: ImmutableMap({
isLoading: false,
isAvailable: true,
items: ImmutableList(),
}),
});
export default function server(state = initialState, action) {
switch (action.type) {
case SERVER_FETCH_REQUEST:
return state.setIn(['server', 'isLoading'], true);
case SERVER_FETCH_SUCCESS:
return state.set('server', fromJS(action.server)).setIn(['server', 'isLoading'], false);
case SERVER_FETCH_FAIL:
return state.setIn(['server', 'isLoading'], false);
case SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST:
return state.setIn(['translationLanguages', 'isLoading'], true);
case SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS:
return state.setIn(['translationLanguages', 'items'], fromJS(action.translationLanguages)).setIn(['translationLanguages', 'isLoading'], false);
case SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL:
return state.setIn(['translationLanguages', 'isLoading'], false);
case EXTENDED_DESCRIPTION_REQUEST:
return state.setIn(['extendedDescription', 'isLoading'], true);
case EXTENDED_DESCRIPTION_SUCCESS:
return state.set('extendedDescription', fromJS(action.description)).setIn(['extendedDescription', 'isLoading'], false);
case EXTENDED_DESCRIPTION_FAIL:
return state.setIn(['extendedDescription', 'isLoading'], false);
case SERVER_DOMAIN_BLOCKS_FETCH_REQUEST:
return state.setIn(['domainBlocks', 'isLoading'], true);
case SERVER_DOMAIN_BLOCKS_FETCH_SUCCESS:
return state.setIn(['domainBlocks', 'items'], fromJS(action.blocks)).setIn(['domainBlocks', 'isLoading'], false).setIn(['domainBlocks', 'isAvailable'], action.isAvailable);
case SERVER_DOMAIN_BLOCKS_FETCH_FAIL:
return state.setIn(['domainBlocks', 'isLoading'], false);
default:
return state;
}
}

View File

@ -0,0 +1,127 @@
import { createReducer } from '@reduxjs/toolkit';
import {
fetchServer,
fetchServerTranslationLanguages,
fetchExtendedDescription,
fetchDomainBlocks,
} from 'mastodon/actions/server';
import type {
Server,
ExtendedDescription,
DomainBlock,
} from 'mastodon/models/server';
import {
createServerFromServerJSON,
createExtendedDescriptionFromServerJSON,
createDomainBlockFromServerJSON,
} from 'mastodon/models/server';
interface State {
server: {
isLoading: boolean;
item?: Server;
};
extendedDescription: {
isLoading: boolean;
item?: ExtendedDescription;
};
translationLanguages: {
isLoading: boolean;
item?: Record<string, string[]>;
};
domainBlocks: {
isLoading: boolean;
isAvailable: boolean;
items: DomainBlock[];
};
}
const initialState: State = {
server: {
isLoading: false,
item: undefined,
},
extendedDescription: {
isLoading: false,
item: undefined,
},
translationLanguages: {
isLoading: false,
item: undefined,
},
domainBlocks: {
isLoading: false,
isAvailable: true,
items: [],
},
};
export const serverReducer = createReducer(initialState, (builder) => {
builder.addCase(fetchServer.pending, (state) => {
state.server.isLoading = true;
});
builder.addCase(fetchServer.fulfilled, (state, action) => {
state.server.item = createServerFromServerJSON(action.payload);
state.server.isLoading = false;
});
builder.addCase(fetchServer.rejected, (state) => {
state.server.isLoading = false;
});
builder.addCase(fetchExtendedDescription.pending, (state) => {
state.extendedDescription.isLoading = true;
});
builder.addCase(fetchExtendedDescription.fulfilled, (state, action) => {
state.extendedDescription.item = createExtendedDescriptionFromServerJSON(
action.payload,
);
state.extendedDescription.isLoading = false;
});
builder.addCase(fetchExtendedDescription.rejected, (state) => {
state.extendedDescription.isLoading = false;
});
builder.addCase(fetchServerTranslationLanguages.pending, (state) => {
state.translationLanguages.isLoading = true;
});
builder.addCase(
fetchServerTranslationLanguages.fulfilled,
(state, action) => {
state.translationLanguages.item = action.payload;
state.translationLanguages.isLoading = false;
},
);
builder.addCase(fetchServerTranslationLanguages.rejected, (state) => {
state.translationLanguages.isLoading = false;
});
builder.addCase(fetchDomainBlocks.pending, (state) => {
state.domainBlocks.isLoading = true;
});
builder.addCase(fetchDomainBlocks.fulfilled, (state, action) => {
state.domainBlocks.items = action.payload.map((obj) =>
createDomainBlockFromServerJSON(obj),
);
state.domainBlocks.isLoading = false;
state.domainBlocks.isAvailable = true;
});
builder.addCase(fetchDomainBlocks.rejected, (state) => {
state.domainBlocks.isLoading = false;
state.domainBlocks.isAvailable = false;
});
});

View File

@ -282,12 +282,8 @@ export const updateField = createAppAsyncThunk(
throw new Error('Profile fields not found'); throw new Error('Profile fields not found');
} }
const maxFields = getState().server.getIn([ const maxFields =
'server', getState().server.server.item?.configuration.accounts.max_profile_fields;
'configuration',
'accounts',
'max_fields',
]) as number | undefined;
if (maxFields && fields.length >= maxFields && !arg.id) { if (maxFields && fields.length >= maxFields && !arg.id) {
throw new Error('Maximum number of profile fields reached'); throw new Error('Maximum number of profile fields reached');
} }

View File

@ -1,5 +1,4 @@
@mixin search-input { @mixin search-input {
outline: 0;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
box-shadow: none; box-shadow: none;
@ -11,6 +10,10 @@
font-size: 17px; font-size: 17px;
line-height: normal; line-height: normal;
margin: 0; margin: 0;
outline: var(--outline-focus-default);
outline-color: transparent;
outline-offset: -1px;
transition: outline-color 0.15s ease-out;
} }
@mixin search-popout { @mixin search-popout {

View File

@ -136,6 +136,11 @@ $content-width: 840px;
transition: all 100ms linear; transition: all 100ms linear;
transition-property: color, background-color; transition-property: color, background-color;
} }
&:focus-visible {
outline: var(--outline-focus-default);
outline-offset: -2px;
}
} }
ul { ul {
@ -1903,6 +1908,28 @@ a.sparkline {
} }
} }
.navigation-skip-link {
position: fixed;
z-index: 100;
margin: 10px;
padding: 10px 16px;
border-radius: 10px;
font-size: 15px;
color: var(--color-text-primary);
background: var(--color-bg-primary);
box-shadow: var(--dropdown-shadow);
/* Hide visually when not focused */
&:not(:focus-within) {
width: 1px;
height: 1px;
margin: 0;
padding: 0;
clip-path: inset(50%);
overflow: hidden;
}
}
.section-skip-link { .section-skip-link {
float: right; float: right;

Some files were not shown because too many files have changed in this diff Show More