Merge commit '9d5e10a70e006c1c0bc61e7f591b1078c7be6ab4' into glitch-soc/merge-upstream

This commit is contained in:
Claire
2026-03-26 18:23:45 +01:00
155 changed files with 1849 additions and 872 deletions

View File

@@ -0,0 +1,15 @@
# frozen_string_literal: true
class Api::V1::Instances::TermsOfServiceController < Api::V1::Instances::BaseController
before_action :cache_even_if_authenticated!
def index
@terms_of_service = TermsOfService.current || raise(ActiveRecord::RecordNotFound)
render json: @terms_of_service, serializer: REST::TermsOfServiceSerializer
end
def show
@terms_of_service = TermsOfService.published.find_by!(effective_date: params[:date])
render json: @terms_of_service, serializer: REST::TermsOfServiceSerializer
end
end

View File

@@ -1,23 +0,0 @@
# frozen_string_literal: true
class Api::V1::Instances::TermsOfServicesController < Api::V1::Instances::BaseController
before_action :set_terms_of_service
def show
cache_even_if_authenticated!
render json: @terms_of_service, serializer: REST::TermsOfServiceSerializer
end
private
def set_terms_of_service
@terms_of_service = begin
if params[:date].present?
TermsOfService.published.find_by!(effective_date: params[:date])
else
TermsOfService.current
end
end
not_found if @terms_of_service.nil?
end
end

View File

@@ -18,23 +18,7 @@ module WellKnown
private
def set_account
username = username_from_resource
@account = begin
if username == Rails.configuration.x.local_domain || username == Rails.configuration.x.web_domain
Account.representative
else
Account.find_local!(username)
end
end
end
def username_from_resource
resource_user = resource_param
username, domain = resource_user.split('@')
resource_user = "#{username}@#{Rails.configuration.x.local_domain}" if Rails.configuration.x.alternate_domains.include?(domain)
WebfingerResource.new(resource_user).username
@account = WebfingerResource.new(resource_param).account
end
def resource_param

View File

@@ -4,6 +4,7 @@ module ContextHelper
NAMED_CONTEXT_MAP = {
activitystreams: 'https://www.w3.org/ns/activitystreams',
security: 'https://w3id.org/security/v1',
webfinger: 'https://purl.archive.org/socialweb/webfinger',
}.freeze
CONTEXT_EXTENSION_MAP = {

View File

@@ -95,7 +95,7 @@ export const Avatar: React.FC<Props> = ({
};
export const AvatarById: React.FC<
{ accountId: string } & Omit<Props, 'account'>
{ accountId: string | undefined } & Omit<Props, 'account'>
> = ({ accountId, ...otherProps }) => {
const account = useAccount(accountId);
return <Avatar account={account} {...otherProps} />;

View File

@@ -31,7 +31,7 @@ export const Badge: FC<BadgeProps> = ({
data-account-role-id={roleId}
>
{icon}
{label}
<span>{label}</span>
{domain && <span className='account-role__domain'>{domain}</span>}
</div>
);

View File

@@ -6,10 +6,11 @@ import { Skeleton } from '../skeleton';
import type { DisplayNameProps } from './index';
import { DisplayNameWithoutDomain } from './no-domain';
export const DisplayNameDefault: FC<
Omit<DisplayNameProps, 'variant'> & ComponentPropsWithoutRef<'span'>
> = ({ account, localDomain, className, ...props }) => {
const username = useMemo(() => {
export function useAccountHandle(
account: DisplayNameProps['account'],
localDomain: DisplayNameProps['localDomain'],
) {
return useMemo(() => {
if (!account) {
return null;
}
@@ -20,6 +21,12 @@ export const DisplayNameDefault: FC<
}
return `@${acct}`;
}, [account, localDomain]);
}
export const DisplayNameDefault: FC<
Omit<DisplayNameProps, 'variant'> & ComponentPropsWithoutRef<'span'>
> = ({ account, localDomain, className, ...props }) => {
const username = useAccountHandle(account, localDomain);
return (
<DisplayNameWithoutDomain

View File

@@ -6,16 +6,12 @@ import { AuthorLink } from 'mastodon/features/explore/components/author_link';
export const MoreFromAuthor: React.FC<{ accountId: string }> = ({
accountId,
}) => (
<FormattedMessage
id='link_preview.more_from_author'
defaultMessage='More from {name}'
values={{ name: <AuthorLink accountId={accountId} /> }}
>
{(chunks) => (
<div className='more-from-author'>
<IconLogo />
{chunks}
</div>
)}
</FormattedMessage>
<div className='more-from-author'>
<IconLogo />
<FormattedMessage
id='link_preview.more_from_author'
defaultMessage='More from {name}'
values={{ name: <AuthorLink accountId={accountId} /> }}
/>
</div>
);

View File

@@ -6,6 +6,7 @@ export const NotSignedInIndicator: React.FC = () => (
<FormattedMessage
id='not_signed_in_indicator.not_signed_in'
defaultMessage='You need to login to access this resource.'
tagName='span'
/>
</div>
</div>

View File

@@ -20,6 +20,7 @@ export const RegenerationIndicator: React.FC = () => (
<FormattedMessage
id='regeneration_indicator.please_stand_by'
defaultMessage='Please stand by.'
tagName='span'
/>
</div>
</div>

View File

@@ -37,7 +37,11 @@ export const ItemList = forwardRef<
}
>(({ isLoading, emptyMessage, className, children, ...otherProps }, ref) => {
if (!isLoading && Children.count(children) === 0 && emptyMessage) {
return <div className='empty-column-indicator'>{emptyMessage}</div>;
return (
<div className='empty-column-indicator'>
<span>{emptyMessage}</span>
</div>
);
}
return (

View File

@@ -385,7 +385,7 @@ class ScrollableList extends PureComponent {
{alwaysPrepend && prepend}
<div className='empty-column-indicator'>
{emptyMessage}
<span>{emptyMessage}</span>
</div>
{footer}

View File

@@ -435,7 +435,7 @@ class Status extends ImmutablePureComponent {
prepend = (
<div className='status__prepend'>
<div className='status__prepend__icon'><Icon id='retweet' icon={RepeatIcon} /></div>
<FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name }} />
<FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name }} tagName='span' />
</div>
);
@@ -447,7 +447,7 @@ class Status extends ImmutablePureComponent {
prepend = (
<div className='status__prepend'>
<div className='status__prepend__icon'><Icon id='at' icon={AlternateEmailIcon} /></div>
<FormattedMessage id='status.direct_indicator' defaultMessage='Private mention' />
<FormattedMessage id='status.direct_indicator' defaultMessage='Private mention' tagName='span' />
</div>
);
} else if (showThread && status.get('in_reply_to_id')) {

View File

@@ -51,7 +51,7 @@ export const StatusThreadLabel: React.FC<{
<div className='status__prepend__icon'>
<Icon id='reply' icon={ReplyIcon} />
</div>
{label}
<span>{label}</span>
</div>
);
};

View File

@@ -65,5 +65,9 @@ export const EmptyMessage: React.FC<EmptyMessageProps> = ({
);
}
return <div className='empty-column-indicator'>{message}</div>;
return (
<div className='empty-column-indicator'>
<span>{message}</span>
</div>
);
};

View File

@@ -154,6 +154,7 @@ const AccountFeatured: React.FC<{ multiColumn: boolean }> = ({
key={item.id}
collection={item}
withoutBorder={index === listedCollections.length - 1}
withAuthorHandle={false}
positionInList={index + 1}
listSize={listedCollections.length}
/>

View File

@@ -9,6 +9,11 @@
.barWrapper {
border-bottom: none;
padding-inline: 24px;
@container (width < 500px) {
padding-inline: 16px;
}
}
.avatarWrapper {
@@ -125,7 +130,7 @@ $button-fallback-breakpoint: $button-breakpoint + 55px;
position: sticky;
bottom: var(--mobile-bottom-nav-height);
padding: 12px 16px;
margin: 0 -20px;
margin: 0 -16px;
@container (width >= #{$button-breakpoint}) {
display: none;
@@ -388,7 +393,7 @@ svg.badgeIcon {
padding: 0 24px;
@container (width < 500px) {
padding: 0 12px;
padding: 0 16px;
a {
flex: 1 1 0px;

View File

@@ -78,6 +78,7 @@ export const TagSuggestions: FC = () => {
values={{
link: (chunks) => <Link to='/profile/featured_tags'>{chunks}</Link>,
}}
tagName='span'
/>
</Callout>
);
@@ -122,6 +123,7 @@ export const TagSuggestions: FC = () => {
/>
),
}}
tagName='span'
/>
</Callout>
);

View File

@@ -1,8 +1,9 @@
.wrapper {
display: flex;
align-items: center;
align-items: start;
margin-inline: 24px;
padding-block: 12px;
gap: 16px;
padding-inline: 16px;
&:not(.wrapperWithoutBorder) {
border-bottom: 1px solid var(--color-border-primary);
@@ -12,12 +13,42 @@
.content {
position: relative;
flex-grow: 1;
padding-block: 15px;
display: flex;
align-items: center;
column-gap: 12px;
}
.avatarGrid {
position: relative;
display: grid;
grid-template-columns: repeat(2, min-content);
gap: 2px;
&.avatarGridSensitive {
.avatar {
filter: blur(4px);
}
}
}
.avatar {
background: var(--color-bg-brand-softest);
}
.avatarSensitiveBadge {
position: absolute;
inset: 0;
margin: auto;
padding: 3px;
width: 18px;
height: 18px;
border-radius: 8px;
color: var(--color-text-primary);
background: var(--color-bg-warning-softest);
}
.link {
display: block;
margin-bottom: 2px;
font-size: 15px;
font-weight: 500;
text-decoration: none;
@@ -40,15 +71,12 @@
color: var(--color-text-secondary);
}
.metaList {
--gap: 0.75ch;
.menuButton {
padding: 4px;
margin-top: -2px;
display: flex;
flex-wrap: wrap;
gap: var(--gap);
& > li:not(:last-child)::after {
content: '·';
margin-inline-start: var(--gap);
svg {
width: 20px;
height: 20px;
}
}

View File

@@ -5,70 +5,65 @@ import { FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import { Link } from 'react-router-dom';
import WarningIcon from '@/material-icons/400-24px/warning.svg?react';
import type { ApiCollectionJSON } from 'mastodon/api_types/collections';
import { AvatarById } from 'mastodon/components/avatar';
import { useAccountHandle } from 'mastodon/components/display_name/default';
import { RelativeTimestamp } from 'mastodon/components/relative_timestamp';
import { Article } from 'mastodon/components/scrollable_list/components';
import { useAccount } from 'mastodon/hooks/useAccount';
import { domain } from 'mastodon/initial_state';
import classes from './collection_list_item.module.scss';
import { CollectionMenu } from './collection_menu';
export const CollectionMetaData: React.FC<{
collection: ApiCollectionJSON;
extended?: boolean;
className?: string;
}> = ({ collection, extended, className }) => {
export const AvatarGrid: React.FC<{
accountIds: (string | undefined)[];
sensitive?: boolean;
}> = ({ accountIds: ids, sensitive }) => {
const avatarIds = [ids[0], ids[1], ids[2], ids[3]];
return (
<ul className={classNames(classes.metaList, className)}>
<FormattedMessage
id='collections.account_count'
defaultMessage='{count, plural, one {# account} other {# accounts}}'
values={{ count: collection.item_count }}
tagName='li'
/>
{extended && (
<>
{collection.discoverable ? (
<FormattedMessage
id='collections.visibility_public'
defaultMessage='Public'
tagName='li'
/>
) : (
<FormattedMessage
id='collections.visibility_unlisted'
defaultMessage='Unlisted'
tagName='li'
/>
)}
{collection.sensitive && (
<FormattedMessage
id='collections.sensitive'
defaultMessage='Sensitive'
tagName='li'
/>
)}
</>
<div
className={classNames(
classes.avatarGrid,
sensitive ? classes.avatarGridSensitive : null,
)}
<FormattedMessage
id='collections.last_updated_at'
defaultMessage='Last updated: {date}'
values={{
date: <RelativeTimestamp timestamp={collection.updated_at} long />,
}}
tagName='li'
/>
</ul>
>
{avatarIds.map((id) => (
<AvatarById
animate={false}
key={id}
accountId={id}
className={classes.avatar}
size={25}
/>
))}
{sensitive && <WarningIcon className={classes.avatarSensitiveBadge} />}
</div>
);
};
export const CollectionListItem: React.FC<{
collection: ApiCollectionJSON;
withoutBorder?: boolean;
withAuthorHandle?: boolean;
withTimestamp?: boolean;
positionInList: number;
listSize: number;
}> = ({ collection, withoutBorder, positionInList, listSize }) => {
}> = ({
collection,
withoutBorder,
withAuthorHandle = true,
withTimestamp,
positionInList,
listSize,
}) => {
const { id, name } = collection;
const linkId = useId();
const uniqueId = useId();
const linkId = `${uniqueId}-link`;
const infoId = `${uniqueId}-info`;
const authorAccount = useAccount(collection.account_id);
const authorHandle = useAccountHandle(authorAccount, domain);
return (
<Article
@@ -78,19 +73,67 @@ export const CollectionListItem: React.FC<{
withoutBorder && classes.wrapperWithoutBorder,
)}
aria-labelledby={linkId}
aria-describedby={infoId}
aria-posinset={positionInList}
aria-setsize={listSize}
>
<div className={classes.content}>
<h2 id={linkId}>
<Link to={`/collections/${id}`} className={classes.link}>
{name}
</Link>
</h2>
<CollectionMetaData collection={collection} className={classes.info} />
<AvatarGrid
accountIds={collection.items.map((item) => item.account_id)}
sensitive={collection.sensitive}
/>
<div>
<h2 id={linkId}>
<Link to={`/collections/${id}`} className={classes.link}>
{name}
</Link>
</h2>
<ul className={classes.info} id={infoId}>
{collection.sensitive && (
<li className='sr-only'>
<FormattedMessage
id='collections.sensitive'
defaultMessage='Sensitive'
/>
</li>
)}
{withAuthorHandle && authorAccount && (
<FormattedMessage
id='collections.by_account'
defaultMessage='by {account_handle}'
values={{
account_handle: authorHandle,
}}
tagName='li'
/>
)}
<FormattedMessage
id='collections.account_count'
defaultMessage='{count, plural, one {# account} other {# accounts}}'
values={{ count: collection.item_count }}
tagName='li'
/>
{withTimestamp && (
<FormattedMessage
id='collections.last_updated_at'
defaultMessage='Last updated: {date}'
values={{
date: (
<RelativeTimestamp timestamp={collection.updated_at} long />
),
}}
tagName='li'
/>
)}
</ul>
</div>
</div>
<CollectionMenu context='list' collection={collection} />
<CollectionMenu
context='list'
collection={collection}
className={classes.menuButton}
/>
</Article>
);
};

View File

@@ -6,6 +6,7 @@ import { Helmet } from 'react-helmet';
import { useHistory, useLocation, useParams } from 'react-router';
import { openModal } from '@/mastodon/actions/modal';
import { RelativeTimestamp } from '@/mastodon/components/relative_timestamp';
import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';
import ShareIcon from '@/material-icons/400-24px/share.svg?react';
import type { ApiCollectionJSON } from 'mastodon/api_types/collections';
@@ -25,7 +26,6 @@ import { fetchCollection } from 'mastodon/reducers/slices/collections';
import { useAppDispatch, useAppSelector } from 'mastodon/store';
import { CollectionAccountsList } from './accounts_list';
import { CollectionMetaData } from './collection_list_item';
import { CollectionMenu } from './collection_menu';
import classes from './styles.module.scss';
@@ -40,6 +40,54 @@ const messages = defineMessages({
},
});
const CollectionMetaData: React.FC<{
collection: ApiCollectionJSON;
extended?: boolean;
}> = ({ collection, extended }) => {
return (
<ul className={classes.metaList}>
<FormattedMessage
id='collections.account_count'
defaultMessage='{count, plural, one {# account} other {# accounts}}'
values={{ count: collection.item_count }}
tagName='li'
/>
{extended && (
<>
{collection.discoverable ? (
<FormattedMessage
id='collections.visibility_public'
defaultMessage='Public'
tagName='li'
/>
) : (
<FormattedMessage
id='collections.visibility_unlisted'
defaultMessage='Unlisted'
tagName='li'
/>
)}
{collection.sensitive && (
<FormattedMessage
id='collections.sensitive'
defaultMessage='Sensitive'
tagName='li'
/>
)}
</>
)}
<FormattedMessage
id='collections.last_updated_at'
defaultMessage='Last updated: {date}'
values={{
date: <RelativeTimestamp timestamp={collection.updated_at} long />,
}}
tagName='li'
/>
</ul>
);
};
export const AuthorNote: React.FC<{ id: string; previewMode?: boolean }> = ({
id,
// When previewMode is enabled, your own display name
@@ -137,7 +185,6 @@ const CollectionHeader: React.FC<{ collection: ApiCollectionJSON }> = ({
<CollectionMetaData
extended={account_id === me}
collection={collection}
className={classes.metaData}
/>
</div>
);

View File

@@ -52,9 +52,19 @@
font-size: 13px;
}
.metaData {
.metaList {
--gap: 0.75ch;
display: flex;
flex-wrap: wrap;
margin-top: 16px;
gap: var(--gap);
font-size: 15px;
& > li:not(:last-child)::after {
content: '·';
margin-inline-start: var(--gap);
}
}
.columnSubheading {

View File

@@ -47,6 +47,7 @@ export const Collections: React.FC<{
<FormattedMessage
id='collections.error_loading_collections'
defaultMessage='There was an error when trying to load your collections.'
tagName='span'
/>
) : (
<>
@@ -92,6 +93,8 @@ export const Collections: React.FC<{
<ItemList emptyMessage={emptyMessage} isLoading={status === 'loading'}>
{collections.map((item, index) => (
<CollectionListItem
withTimestamp
withAuthorHandle={false}
key={item.id}
collection={item}
positionInList={index + 1}

View File

@@ -30,17 +30,19 @@ export const UploadProgress: React.FC<UploadProgressProps> = ({
<Icon id='upload' icon={UploadFileIcon} />
<div className='upload-progress__message'>
{isProcessing ? (
<FormattedMessage
id='upload_progress.processing'
defaultMessage='Processing'
/>
) : (
<FormattedMessage
id='upload_progress.label'
defaultMessage='Uploading…'
/>
)}
<span>
{isProcessing ? (
<FormattedMessage
id='upload_progress.processing'
defaultMessage='Processing…'
/>
) : (
<FormattedMessage
id='upload_progress.label'
defaultMessage='Uploading…'
/>
)}
</span>
<div className='upload-progress__backdrop'>
<animated.div className='upload-progress__tracker' style={styles} />

View File

@@ -47,7 +47,7 @@ class Links extends PureComponent {
return (
<div className='explore__links scrollable scrollable--flex'>
<div className='empty-column-indicator'>
<FormattedMessage id='empty_column.explore_statuses' defaultMessage='Nothing is trending right now. Check back later!' />
<FormattedMessage id='empty_column.explore_statuses' defaultMessage='Nothing is trending right now. Check back later!' tagName='span' />
</div>
</div>
);

View File

@@ -45,7 +45,7 @@ class Suggestions extends PureComponent {
return (
<div className='explore__suggestions scrollable scrollable--flex'>
<div className='empty-column-indicator'>
<FormattedMessage id='empty_column.explore_statuses' defaultMessage='Nothing is trending right now. Check back later!' />
<FormattedMessage id='empty_column.explore_statuses' defaultMessage='Nothing is trending right now. Check back later!' tagName='span' />
</div>
</div>
);

View File

@@ -46,7 +46,7 @@ class Tags extends PureComponent {
return (
<div className='explore__links scrollable scrollable--flex'>
<div className='empty-column-indicator'>
<FormattedMessage id='empty_column.explore_statuses' defaultMessage='Nothing is trending right now. Check back later!' />
<FormattedMessage id='empty_column.explore_statuses' defaultMessage='Nothing is trending right now. Check back later!' tagName='span' />
</div>
</div>
);

View File

@@ -63,6 +63,7 @@ const Followers: FC = () => {
<FormattedMessage
id='followers.hide_other_followers'
defaultMessage='This user has chosen to not make their other followers visible'
tagName='span'
/>
</div>
);

View File

@@ -65,6 +65,7 @@ const Followers: FC = () => {
<FormattedMessage
id='following.hide_other_following'
defaultMessage='This user has chosen to not make the rest of who they follow visible'
tagName='span'
/>
</div>
);

View File

@@ -115,7 +115,7 @@ const Source: React.FC<{ id: ApiSuggestionSourceJSON }> = ({ id }) => {
title={hint}
>
<Icon id='' icon={InfoIcon} />
{label}
<span>{label}</span>
</div>
);
};

View File

@@ -285,6 +285,7 @@ const ListMembers: React.FC<{
<FormattedMessage
id='lists.no_results_found'
defaultMessage='No results found.'
tagName='span'
/>
)
}

View File

@@ -126,7 +126,7 @@ export const NotificationGroupWithStatus: React.FC<{
</div>
<div className='notification-group__main__header__label'>
{label}
<span>{label}</span>
{timestamp && (
<>
<span className='notification-group__main__header__label-separator'>

View File

@@ -194,6 +194,7 @@ const Comment: React.FC<Props> = ({
id='report.forward'
defaultMessage='Forward to {target}'
values={{ target: domain }}
tagName='span'
/>
</label>
))}

View File

@@ -406,6 +406,7 @@ export const DetailedStatus: React.FC<{
<FormattedMessage
id='status.direct_indicator'
defaultMessage='Private mention'
tagName='span'
/>
</div>
)}

View File

@@ -141,8 +141,8 @@
"account.unmute": "Не ігнараваць @{name}",
"account.unmute_notifications_short": "Апавяшчаць",
"account.unmute_short": "Не ігнараваць",
"account_edit.bio.add_label": "Апісаць сябе",
"account_edit.bio.edit_label": "Змяніць апісанне",
"account_edit.bio.label": "хто я",
"account_edit.bio.placeholder": "Коратка апішыце сябе, каб дапамагчы іншым пазнаць Вас.",
"account_edit.bio.title": "Хто я",
"account_edit.bio_modal.add_title": "Апісаць сябе",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Vis @{name} igen",
"account.unmute_notifications_short": "Vis notifikationer igen",
"account.unmute_short": "Vis igen",
"account_edit.bio.add_label": "Tilføj bio",
"account_edit.bio.edit_label": "Rediger bio",
"account_edit.bio.label": "bio",
"account_edit.bio.placeholder": "Tilføj en kort introduktion, så andre kan få et indtryk af, hvem du er.",
"account_edit.bio.title": "Bio",
"account_edit.bio_modal.add_title": "Tilføj bio",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Stummschaltung von @{name} aufheben",
"account.unmute_notifications_short": "Stummschaltung der Benachrichtigungen aufheben",
"account.unmute_short": "Stummschaltung aufheben",
"account_edit.bio.add_label": "Biografie hinzufügen",
"account_edit.bio.edit_label": "Biografie bearbeiten",
"account_edit.bio.label": "Biografie",
"account_edit.bio.placeholder": "Gib anderen einen Einblick über dich, damit sie wissen, wer du bist.",
"account_edit.bio.title": "Über mich",
"account_edit.bio_modal.add_title": "Biografie hinzufügen",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Άρση σίγασης @{name}",
"account.unmute_notifications_short": "Σίγαση ειδοποιήσεων",
"account.unmute_short": "Κατάργηση σίγασης",
"account_edit.bio.add_label": "Προσθήκη βιογραφικού",
"account_edit.bio.edit_label": "Επεξεργασία βιογραφικού",
"account_edit.bio.label": "βιογραφικό",
"account_edit.bio.placeholder": "Προσθέστε μια σύντομη εισαγωγή για να βοηθήσετε άλλους να σας αναγνωρίσουν.",
"account_edit.bio.title": "Βιογραφικό",
"account_edit.bio_modal.add_title": "Προσθήκη βιογραφικού",

View File

@@ -359,6 +359,7 @@
"collections.account_count": "{count, plural, one {# account} other {# accounts}}",
"collections.accounts.empty_description": "Add up to {count} accounts you follow",
"collections.accounts.empty_title": "This collection is empty",
"collections.by_account": "by {account_handle}",
"collections.collection_description": "Description",
"collections.collection_language": "Language",
"collections.collection_language_none": "None",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications_short": "Dejar de silenciar notificaciones",
"account.unmute_short": "Dejar de silenciar",
"account_edit.bio.add_label": "Agregar biografía",
"account_edit.bio.edit_label": "Editar biografía",
"account_edit.bio.label": "biografía",
"account_edit.bio.placeholder": "Agregá una breve introducción para ayudar a otras personas a identificarte.",
"account_edit.bio.title": "Biografía",
"account_edit.bio_modal.add_title": "Agregar biografía",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications_short": "Dejar de silenciar notificaciones",
"account.unmute_short": "Dejar de silenciar",
"account_edit.bio.add_label": "Añadir biografía",
"account_edit.bio.edit_label": "Editar biografía",
"account_edit.bio.label": "biografía",
"account_edit.bio.placeholder": "Añade una breve introducción para ayudar a los demás a identificarte.",
"account_edit.bio.title": "Biografía",
"account_edit.bio_modal.add_title": "Añadir biografía",

View File

@@ -141,27 +141,39 @@
"account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications_short": "Dejar de silenciar notificaciones",
"account.unmute_short": "Dejar de silenciar",
"account_edit.bio.add_label": "Añadir biografía",
"account_edit.bio.edit_label": "Editar biografía",
"account_edit.bio.placeholder": "Añade una breve introducción para ayudar a los demás a identificarte.",
"account_edit.bio.title": "Biografía",
"account_edit.bio_modal.add_title": "Añadir biografía",
"account_edit.bio_modal.edit_title": "Editar biografía",
"account_edit.column_button": "Hecho",
"account_edit.column_title": "Editar perfil",
"account_edit.custom_fields.add_label": "Añadir campo",
"account_edit.custom_fields.edit_label": "Editar campo",
"account_edit.custom_fields.placeholder": "Añade tus pronombres, enlaces externos o cualquier otra cosa que quieras compartir.",
"account_edit.custom_fields.reorder_button": "Reordenar campos",
"account_edit.custom_fields.tip_content": "Puedes añadir credibilidad fácilmente a tu cuenta de Mastodon verificando los enlaces a tus propias webs.",
"account_edit.custom_fields.tip_title": "Consejo: Añade enlaces verificados",
"account_edit.custom_fields.title": "Campos personalizados",
"account_edit.custom_fields.verified_hint": "¿Cómo añado un enlace verificado?",
"account_edit.display_name.add_label": "Añadir nombre para mostrar",
"account_edit.display_name.edit_label": "Editar nombre para mostrar",
"account_edit.display_name.placeholder": "Tu nombre de usuario es el nombre que aparece en tu perfil y en las cronologías.",
"account_edit.display_name.title": "Nombre para mostrar",
"account_edit.featured_hashtags.edit_label": "Añadir etiquetas",
"account_edit.featured_hashtags.placeholder": "Ayuda a otros a identificar tus temas favoritos y a acceder rápidamente a ellos.",
"account_edit.featured_hashtags.title": "Etiquetas destacadas",
"account_edit.field_actions.delete": "Eliminar campo",
"account_edit.field_actions.edit": "Editar campo",
"account_edit.field_delete_modal.confirm": "¿Estás seguro de que quieres borrar este campo personalizado? La acción no se puede deshacer.",
"account_edit.field_delete_modal.delete_button": "Borrar",
"account_edit.field_delete_modal.title": "¿Borrar campo personalizado?",
"account_edit.field_edit_modal.add_title": "Añadir campo personalizado",
"account_edit.field_edit_modal.discard_confirm": "Descartar",
"account_edit.field_edit_modal.discard_message": "Tiene cambios no guardados. ¿Seguro que quieres descartarlos?",
"account_edit.field_edit_modal.edit_title": "Editar campo personalizado",
"account_edit.field_edit_modal.limit_warning": "Se ha superado el límite recomendado de caracteres. Es posible que los usuarios móviles no vean el campo completo.",
"account_edit.field_edit_modal.link_emoji_warning": "Recomendamos no usar emojis personalizados combinados con enlaces. Los campos personalizados que contengan ambos solo se mostrarán como texto en vez de un enlace, para evitar confusiones.",
"account_edit.field_edit_modal.name_hint": "Ej. \"Web personal\"",
"account_edit.field_edit_modal.name_label": "Etiqueta",
@@ -190,6 +202,8 @@
"account_edit.image_edit.alt_edit_button": "Editar texto alternativo",
"account_edit.image_edit.remove_button": "Quitar imagen",
"account_edit.image_edit.replace_button": "Sustituir imagen",
"account_edit.item_list.delete": "Eliminar {name}",
"account_edit.item_list.edit": "Editar {name}",
"account_edit.name_modal.add_title": "Añadir nombre para mostrar",
"account_edit.name_modal.edit_title": "Editar nombre para mostrar",
"account_edit.profile_tab.button_label": "Personalizar",
@@ -212,6 +226,10 @@
"account_edit.upload_modal.step_upload.dragging": "Suelta para subir",
"account_edit.upload_modal.step_upload.header": "Elige una imagen",
"account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF o JPG, hasta {limit}MB.{br}La imagen será escalada a {width}x{height}px.",
"account_edit.upload_modal.title_add.avatar": "Añadir foto de perfil",
"account_edit.upload_modal.title_add.header": "Añadir foto de portada",
"account_edit.upload_modal.title_replace.avatar": "Reemplazar foto de perfil",
"account_edit.upload_modal.title_replace.header": "Reemplazar foto de portada",
"account_edit.verified_modal.details": "Añade credibilidad a tu perfil de Mastodon verificando enlaces a tus webs personales. Así es como funciona:",
"account_edit.verified_modal.invisible_link.details": "Añade el enlace en el encabezado. La parte importante es rel=\"me\", que evita la suplantación de identidad en webs con contenido generado por usuarios. Incluso puedes utilizar un enlace con etiqueta en el encabezado de la página en vez de {tag}, pero el HTML debe ser accesible sin ejecutar JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "¿Cómo puedo hacer el enlace invisible?",
@@ -220,10 +238,13 @@
"account_edit.verified_modal.step2.header": "Añade tu web como un campo personalizado",
"account_edit.verified_modal.title": "Cómo añadir un enlace verificado",
"account_edit_tags.add_tag": "Agregar #{tagName}",
"account_edit_tags.column_title": "Editar Etiquetas",
"account_edit_tags.help_text": "Las etiquetas destacadas ayudan a los usuarios a descubrir e interactuar con tu perfil. Aparecen como filtros en la vista de actividad de tu página de perfil.",
"account_edit_tags.max_tags_reached": "Has alcanzado el número máximo de etiquetas destacadas.",
"account_edit_tags.search_placeholder": "Introduce una etiqueta…",
"account_edit_tags.suggestions": "Sugerencias:",
"account_edit_tags.tag_status_count": "{count, plural, one {# publicación} other {# publicaciones}}",
"account_list.total": "{total, plural, one {# cuenta} other {# cuentas}}",
"account_note.placeholder": "Haz clic para añadir nota",
"admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después del registro",
"admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después del registro",
@@ -339,6 +360,8 @@
"collections.accounts.empty_description": "Añade hasta {count} cuentas que sigas",
"collections.accounts.empty_title": "Esta colección está vacía",
"collections.collection_description": "Descripción",
"collections.collection_language": "Idioma",
"collections.collection_language_none": "Ninguno",
"collections.collection_name": "Nombre",
"collections.collection_topic": "Tema",
"collections.confirm_account_removal": "¿Estás seguro de que quieres eliminar esta cuenta de la colección?",
@@ -662,7 +685,9 @@
"follow_suggestions.who_to_follow": "A quién seguir",
"followed_tags": "Etiquetas seguidas",
"followers.hide_other_followers": "Este usuario ha elegido no hacer visible sus otros seguidores",
"followers.title": "Siguiendo a {name}",
"following.hide_other_following": "Este usuario ha elegido no hacer visible a quién más sigue",
"following.title": "Seguido por {name}",
"footer.about": "Acerca de",
"footer.about_mastodon": "Acerca de Mastodon",
"footer.about_server": "Acerca de {domain}",

View File

@@ -142,7 +142,6 @@
"account.unmute_notifications_short": "Kumoa ilmoitusten mykistys",
"account.unmute_short": "Kumoa mykistys",
"account_edit.bio.edit_label": "Muokkaa elämäkertaa",
"account_edit.bio.label": "elämäkerta",
"account_edit.bio.placeholder": "Lisää lyhyt esittely, joka auttaa muita tunnistamaan sinut.",
"account_edit.bio.title": "Elämäkerta",
"account_edit.bio_modal.add_title": "Lisää elämäkerta",

View File

@@ -141,27 +141,39 @@
"account.unmute": "Ne plus masquer @{name}",
"account.unmute_notifications_short": "Ne plus masquer les notifications",
"account.unmute_short": "Ne plus masquer",
"account_edit.bio.add_label": "Ajouter une présentation",
"account_edit.bio.edit_label": "Modifier la présentation",
"account_edit.bio.placeholder": "Ajouter une courte introduction pour aider les autres à vous connaître.",
"account_edit.bio.title": "Présentation",
"account_edit.bio_modal.add_title": "Ajouter une présentation",
"account_edit.bio_modal.edit_title": "Modifier la présentation",
"account_edit.column_button": "Terminé",
"account_edit.column_title": "Modifier le profil",
"account_edit.custom_fields.add_label": "Ajouter un champ",
"account_edit.custom_fields.edit_label": "Modifier le champ",
"account_edit.custom_fields.placeholder": "Ajouter vos pronoms, vos sites, ou tout ce que vous voulez partager.",
"account_edit.custom_fields.reorder_button": "Réorganiser les champs",
"account_edit.custom_fields.tip_content": "Vous pouvez facilement ajouter de la crédibilité à votre compte Mastodon en vérifiant les liens vers tous les sites Web que vous possédez.",
"account_edit.custom_fields.tip_title": "Astuce : ajout de liens vérifiés",
"account_edit.custom_fields.title": "Champs personnalisés",
"account_edit.custom_fields.verified_hint": "Comment ajouter un lien vérifié ?",
"account_edit.display_name.add_label": "Ajouter un nom public",
"account_edit.display_name.edit_label": "Modifier le nom public",
"account_edit.display_name.placeholder": "Votre nom public est le nom qui apparaît sur votre profil et dans les fils d'actualités.",
"account_edit.display_name.title": "Nom public",
"account_edit.featured_hashtags.edit_label": "Ajouter des hashtags",
"account_edit.featured_hashtags.placeholder": "Aider les autres à identifier et à accéder rapidement à vos sujets préférés.",
"account_edit.featured_hashtags.title": "Hashtags mis en avant",
"account_edit.field_actions.delete": "Supprimer le champ",
"account_edit.field_actions.edit": "Modifier le champ",
"account_edit.field_delete_modal.confirm": "Voulez-vous vraiment supprimer ce champ personnalisé ? Cette action ne peut pas être annulée.",
"account_edit.field_delete_modal.delete_button": "Supprimer",
"account_edit.field_delete_modal.title": "Supprimer le champ personnalisé ?",
"account_edit.field_edit_modal.add_title": "Ajouter un champ personnalisé",
"account_edit.field_edit_modal.discard_confirm": "Abandonner",
"account_edit.field_edit_modal.discard_message": "Vos modifications nont pas été enregistrées. Voulez-vous vraiment les abandonner ?",
"account_edit.field_edit_modal.edit_title": "Modifier un champ personnalisé",
"account_edit.field_edit_modal.limit_warning": "Le nombre de caractères dépasse la limite recommandée. Le champ peut ne pas s'afficher entièrement sur les téléphones.",
"account_edit.field_edit_modal.link_emoji_warning": "Nous déconseillons l'usage d'émoji personnalisé avec les URL. Les champs personnalisés contenant les deux seront affichés comme du texte et non un lien, afin d'éviter toute confusion.",
"account_edit.field_edit_modal.name_hint": "Par exemple « Site Web personnel »",
"account_edit.field_edit_modal.name_label": "Libellé",
@@ -190,6 +202,8 @@
"account_edit.image_edit.alt_edit_button": "Modifier le texte alternatif",
"account_edit.image_edit.remove_button": "Supprimer limage",
"account_edit.image_edit.replace_button": "Remplacer l'image",
"account_edit.item_list.delete": "Supprimer {name}",
"account_edit.item_list.edit": "Modifier {name}",
"account_edit.name_modal.add_title": "Ajouter un nom public",
"account_edit.name_modal.edit_title": "Modifier le nom public",
"account_edit.profile_tab.button_label": "Personnaliser",
@@ -212,6 +226,10 @@
"account_edit.upload_modal.step_upload.dragging": "Déposer pour téléverser",
"account_edit.upload_modal.step_upload.header": "Choisir une image",
"account_edit.upload_modal.step_upload.hint": "Format WebP, PNG, GIF ou JPEG, jusqu'à {limit} Mo.{br}L'image sera redimensionnée à {width} × {height} px.",
"account_edit.upload_modal.title_add.avatar": "Ajouter une photo de profil",
"account_edit.upload_modal.title_add.header": "Ajouter une photo de couverture",
"account_edit.upload_modal.title_replace.avatar": "Remplacer la photo de profil",
"account_edit.upload_modal.title_replace.header": "Remplacer la photo de couverture",
"account_edit.verified_modal.details": "Ajouter de la crédibilité à votre profil Mastodon en vérifiant les liens vers vos sites Web personnels. Voici comment cela fonctionne :",
"account_edit.verified_modal.invisible_link.details": "Ajouter le lien dans votre en-tête. La partie importante est « rel=\"me\" » qui empêche l'usurpation d'identité sur des sites Web ayant du contenu généré par d'autres utilisateur·rice·s. Vous pouvez aussi utiliser une balise link dans l'en-tête de la page au lieu de {tag}, mais le code HTML doit être accessible sans avoir besoin d'exécuter du JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Comment rendre le lien invisible ?",
@@ -220,7 +238,9 @@
"account_edit.verified_modal.step2.header": "Ajouter votre site Web en tant que champ personnalisé",
"account_edit.verified_modal.title": "Comment ajouter un lien vérifié?",
"account_edit_tags.add_tag": "Ajouter #{tagName}",
"account_edit_tags.column_title": "Modifier les hashtags",
"account_edit_tags.help_text": "Les hashtags mis en avant aident les personnes à découvrir et interagir avec votre profil. Ils apparaissent comme des filtres dans la vue « Activité » de votre profil.",
"account_edit_tags.max_tags_reached": "Vous avez atteint le nombre maximum de hashtags mis en avant.",
"account_edit_tags.search_placeholder": "Saisir un hashtag…",
"account_edit_tags.suggestions": "Suggestions :",
"account_edit_tags.tag_status_count": "{count, plural, one {# message} other {# messages}}",
@@ -996,7 +1016,7 @@
"onboarding.profile.note_hint": "Vous pouvez @mentionner d'autres personnes ou #hashtags…",
"onboarding.profile.title": "Configuration du profil",
"onboarding.profile.upload_avatar": "Importer une photo de profil",
"onboarding.profile.upload_header": "Importer un entête de profil",
"onboarding.profile.upload_header": "Importer une image de couverture",
"password_confirmation.exceeds_maxlength": "La confirmation du mot de passe dépasse la longueur maximale du mot de passe",
"password_confirmation.mismatching": "Les deux mots de passe ne correspondent pas",
"picture_in_picture.restore": "Remettre en place",

View File

@@ -141,27 +141,39 @@
"account.unmute": "Ne plus masquer @{name}",
"account.unmute_notifications_short": "Réactiver les notifications",
"account.unmute_short": "Ne plus masquer",
"account_edit.bio.add_label": "Ajouter une présentation",
"account_edit.bio.edit_label": "Modifier la présentation",
"account_edit.bio.placeholder": "Ajouter une courte introduction pour aider les autres à vous connaître.",
"account_edit.bio.title": "Présentation",
"account_edit.bio_modal.add_title": "Ajouter une présentation",
"account_edit.bio_modal.edit_title": "Modifier la présentation",
"account_edit.column_button": "Terminé",
"account_edit.column_title": "Modifier le profil",
"account_edit.custom_fields.add_label": "Ajouter un champ",
"account_edit.custom_fields.edit_label": "Modifier le champ",
"account_edit.custom_fields.placeholder": "Ajouter vos pronoms, vos sites, ou tout ce que vous voulez partager.",
"account_edit.custom_fields.reorder_button": "Réorganiser les champs",
"account_edit.custom_fields.tip_content": "Vous pouvez facilement ajouter de la crédibilité à votre compte Mastodon en vérifiant les liens vers tous les sites Web que vous possédez.",
"account_edit.custom_fields.tip_title": "Astuce : ajout de liens vérifiés",
"account_edit.custom_fields.title": "Champs personnalisés",
"account_edit.custom_fields.verified_hint": "Comment ajouter un lien vérifié ?",
"account_edit.display_name.add_label": "Ajouter un nom public",
"account_edit.display_name.edit_label": "Modifier le nom public",
"account_edit.display_name.placeholder": "Votre nom public est le nom qui apparaît sur votre profil et dans les fils d'actualités.",
"account_edit.display_name.title": "Nom public",
"account_edit.featured_hashtags.edit_label": "Ajouter des hashtags",
"account_edit.featured_hashtags.placeholder": "Aider les autres à identifier et à accéder rapidement à vos sujets préférés.",
"account_edit.featured_hashtags.title": "Hashtags mis en avant",
"account_edit.field_actions.delete": "Supprimer le champ",
"account_edit.field_actions.edit": "Modifier le champ",
"account_edit.field_delete_modal.confirm": "Voulez-vous vraiment supprimer ce champ personnalisé ? Cette action ne peut pas être annulée.",
"account_edit.field_delete_modal.delete_button": "Supprimer",
"account_edit.field_delete_modal.title": "Supprimer le champ personnalisé ?",
"account_edit.field_edit_modal.add_title": "Ajouter un champ personnalisé",
"account_edit.field_edit_modal.discard_confirm": "Abandonner",
"account_edit.field_edit_modal.discard_message": "Vos modifications nont pas été enregistrées. Voulez-vous vraiment les abandonner ?",
"account_edit.field_edit_modal.edit_title": "Modifier un champ personnalisé",
"account_edit.field_edit_modal.limit_warning": "Le nombre de caractères dépasse la limite recommandée. Le champ peut ne pas s'afficher entièrement sur les téléphones.",
"account_edit.field_edit_modal.link_emoji_warning": "Nous déconseillons l'usage d'émoji personnalisé avec les URL. Les champs personnalisés contenant les deux seront affichés comme du texte et non un lien, afin d'éviter toute confusion.",
"account_edit.field_edit_modal.name_hint": "Par exemple « Site Web personnel »",
"account_edit.field_edit_modal.name_label": "Libellé",
@@ -190,6 +202,8 @@
"account_edit.image_edit.alt_edit_button": "Modifier le texte alternatif",
"account_edit.image_edit.remove_button": "Supprimer limage",
"account_edit.image_edit.replace_button": "Remplacer l'image",
"account_edit.item_list.delete": "Supprimer {name}",
"account_edit.item_list.edit": "Modifier {name}",
"account_edit.name_modal.add_title": "Ajouter un nom public",
"account_edit.name_modal.edit_title": "Modifier le nom public",
"account_edit.profile_tab.button_label": "Personnaliser",
@@ -212,6 +226,10 @@
"account_edit.upload_modal.step_upload.dragging": "Déposer pour téléverser",
"account_edit.upload_modal.step_upload.header": "Choisir une image",
"account_edit.upload_modal.step_upload.hint": "Format WebP, PNG, GIF ou JPEG, jusqu'à {limit} Mo.{br}L'image sera redimensionnée à {width} × {height} px.",
"account_edit.upload_modal.title_add.avatar": "Ajouter une photo de profil",
"account_edit.upload_modal.title_add.header": "Ajouter une photo de couverture",
"account_edit.upload_modal.title_replace.avatar": "Remplacer la photo de profil",
"account_edit.upload_modal.title_replace.header": "Remplacer la photo de couverture",
"account_edit.verified_modal.details": "Ajouter de la crédibilité à votre profil Mastodon en vérifiant les liens vers vos sites Web personnels. Voici comment cela fonctionne :",
"account_edit.verified_modal.invisible_link.details": "Ajouter le lien dans votre en-tête. La partie importante est « rel=\"me\" » qui empêche l'usurpation d'identité sur des sites Web ayant du contenu généré par d'autres utilisateur·rice·s. Vous pouvez aussi utiliser une balise link dans l'en-tête de la page au lieu de {tag}, mais le code HTML doit être accessible sans avoir besoin d'exécuter du JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Comment rendre le lien invisible ?",
@@ -220,7 +238,9 @@
"account_edit.verified_modal.step2.header": "Ajouter votre site Web en tant que champ personnalisé",
"account_edit.verified_modal.title": "Comment ajouter un lien vérifié?",
"account_edit_tags.add_tag": "Ajouter #{tagName}",
"account_edit_tags.column_title": "Modifier les hashtags",
"account_edit_tags.help_text": "Les hashtags mis en avant aident les personnes à découvrir et interagir avec votre profil. Ils apparaissent comme des filtres dans la vue « Activité » de votre profil.",
"account_edit_tags.max_tags_reached": "Vous avez atteint le nombre maximum de hashtags mis en avant.",
"account_edit_tags.search_placeholder": "Saisir un hashtag…",
"account_edit_tags.suggestions": "Suggestions :",
"account_edit_tags.tag_status_count": "{count, plural, one {# message} other {# messages}}",
@@ -996,7 +1016,7 @@
"onboarding.profile.note_hint": "Vous pouvez @mentionner d'autres personnes ou #hashtags…",
"onboarding.profile.title": "Configuration du profil",
"onboarding.profile.upload_avatar": "Importer une photo de profil",
"onboarding.profile.upload_header": "Importer un entête de profil",
"onboarding.profile.upload_header": "Importer une image de couverture",
"password_confirmation.exceeds_maxlength": "La confirmation du mot de passe dépasse la longueur du mot de passe",
"password_confirmation.mismatching": "Les deux mots de passe ne correspondent pas",
"picture_in_picture.restore": "Remettre en place",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Díbhalbhaigh @{name}",
"account.unmute_notifications_short": "Díbhalbhaigh fógraí",
"account.unmute_short": "Díbhalbhaigh",
"account_edit.bio.add_label": "Cuir beathaisnéis leis",
"account_edit.bio.edit_label": "Cuir beathaisnéis in eagar",
"account_edit.bio.label": "beathaisnéis",
"account_edit.bio.placeholder": "Cuir réamhrá gearr leis chun cabhrú le daoine eile tú a aithint.",
"account_edit.bio.title": "Beathaisnéis",
"account_edit.bio_modal.add_title": "Cuir beathaisnéis leis",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Deixar de silenciar a @{name}",
"account.unmute_notifications_short": "Reactivar notificacións",
"account.unmute_short": "Non silenciar",
"account_edit.bio.add_label": "Engadir biografía",
"account_edit.bio.edit_label": "Editar biografía",
"account_edit.bio.label": "sobre ti",
"account_edit.bio.placeholder": "Escribe unha breve presentación para que te coñezan mellor.",
"account_edit.bio.title": "Sobre ti",
"account_edit.bio_modal.add_title": "Engadir biografía",
@@ -171,7 +171,9 @@
"account_edit.field_delete_modal.title": "Eliminar campo persoal?",
"account_edit.field_edit_modal.add_title": "Engadir campo persoal",
"account_edit.field_edit_modal.discard_confirm": "Desbotar",
"account_edit.field_edit_modal.discard_message": "Tes cambios sen gardar. Tes certeza de querer desbotalos?",
"account_edit.field_edit_modal.edit_title": "Editar campo persoal",
"account_edit.field_edit_modal.limit_warning": "Superouse o límite de caracteres recomendado. Nos móbiles podería non verse a información completa.",
"account_edit.field_edit_modal.link_emoji_warning": "Non recomendamos o uso de emojis persoais combinados con URLs. Os campos persoais que conteñen ambos móstranse só como texto e non como unha ligazón, para evitar a confusión de quen os lea.",
"account_edit.field_edit_modal.name_hint": "Ex. \"Páxina web persoal\"",
"account_edit.field_edit_modal.name_label": "Etiqueta",
@@ -200,6 +202,8 @@
"account_edit.image_edit.alt_edit_button": "Editar descrición",
"account_edit.image_edit.remove_button": "Retirar a imaxe",
"account_edit.image_edit.replace_button": "Substituír a imaxe",
"account_edit.item_list.delete": "Eliminar {name}",
"account_edit.item_list.edit": "Editar {name}",
"account_edit.name_modal.add_title": "Engadir nome público",
"account_edit.name_modal.edit_title": "Editar o nome público",
"account_edit.profile_tab.button_label": "Personalizar",
@@ -222,6 +226,10 @@
"account_edit.upload_modal.step_upload.dragging": "Solta aquí para subir",
"account_edit.upload_modal.step_upload.header": "Escoller unha imaxe",
"account_edit.upload_modal.step_upload.hint": "Formato WEBP, PNG, GIF ou JPG, ata {limit}MB.{br}A imaxe será comprimida a {width}x{height}px.",
"account_edit.upload_modal.title_add.avatar": "Engadir foto do perfil",
"account_edit.upload_modal.title_add.header": "Engadir foto da cabeceira",
"account_edit.upload_modal.title_replace.avatar": "Substituír foto do perfil",
"account_edit.upload_modal.title_replace.header": "Substituír foto da cabeceira",
"account_edit.verified_modal.details": "Engade maior credibilidade ao teu perfil Mastodon verificando as ligazóns ás túas páxinas web persoais. Funciona así:",
"account_edit.verified_modal.invisible_link.details": "Engade a ligazón ao «header» da páxina web. A parte importante é rel=\"me\", que evita a suplantación en sitios web con contido creado polas usuarias. Tamén podes usar a etiqueta «link» na cabeceira da páxina no lugar de {tag}, pero o HTML ten que ser accesible sen usar JavaScript.",
"account_edit.verified_modal.invisible_link.summary": "Como fago visible a ligazón?",
@@ -230,10 +238,13 @@
"account_edit.verified_modal.step2.header": "Engade a túa páxina como campo persoal",
"account_edit.verified_modal.title": "Como engadir unha ligazón verificada",
"account_edit_tags.add_tag": "Engadir #{tagName}",
"account_edit_tags.column_title": "Editar etiquetas",
"account_edit_tags.help_text": "Os cancelos destacados axúdanlle ás usuarias a atopar e interactuar co teu perfil. Aparecen como filtros na túa páxina de perfil na vista Actividade.",
"account_edit_tags.max_tags_reached": "Acadaches o número máximo de cancelos destacados.",
"account_edit_tags.search_placeholder": "Escribe un cancelo…",
"account_edit_tags.suggestions": "Suxestións:",
"account_edit_tags.tag_status_count": "{count, plural, one {# publicación} other {# publicacións}}",
"account_list.total": "{total, plural, one {# conta} other {# contas}}",
"account_note.placeholder": "Preme para engadir nota",
"admin.dashboard.daily_retention": "Ratio de retención de usuarias diaria após rexistrarse",
"admin.dashboard.monthly_retention": "Ratio de retención de usuarias mensual após o rexistro",
@@ -674,7 +685,9 @@
"follow_suggestions.who_to_follow": "A quen seguir",
"followed_tags": "Cancelos seguidos",
"followers.hide_other_followers": "Esta usuaria escolleu non mostrar as outras persoas que a seguen",
"followers.title": "Seguindo a {name}",
"following.hide_other_following": "Esta usuaria escolleu non mostrar as outras persoas que segue",
"following.title": "Seguida por {name}",
"footer.about": "Sobre",
"footer.about_mastodon": "Sobre Mastodon",
"footer.about_server": "Sobre {domain}",

View File

@@ -141,27 +141,38 @@
"account.unmute": "הפסקת השתקת @{name}",
"account.unmute_notifications_short": "הפעלת הודעות",
"account.unmute_short": "ביטול השתקה",
"account_edit.bio.edit_label": "עריכת ביוגרפיה",
"account_edit.bio.placeholder": "הוסיפו הצגה קצרה כדי לעזור לאחרים לזהות אותך.",
"account_edit.bio.title": "ביוגרפיה",
"account_edit.bio_modal.add_title": "הוסיפו ביוגרפיה",
"account_edit.bio_modal.edit_title": "עריכת ביוגרפיה",
"account_edit.column_button": "סיום",
"account_edit.column_title": "עריכת הפרופיל",
"account_edit.custom_fields.add_label": "הוספת שדה",
"account_edit.custom_fields.edit_label": "עריכת שדה",
"account_edit.custom_fields.placeholder": "הוסיפו צורת פניה, קישורים חיצוניים וכל דבר שתרצו לשתף.",
"account_edit.custom_fields.reorder_button": "הגדרת סדר השדות",
"account_edit.custom_fields.tip_content": "ניתן להוסיף אמינות לחשבון המסטודון שלך על ידי וידוא קישורים לאתרים שבבעלותך.",
"account_edit.custom_fields.tip_title": "טיפ: הוספת קישורים מוודאים",
"account_edit.custom_fields.title": "שדות בהתאמה אישית",
"account_edit.custom_fields.verified_hint": "כיצד תוסיפו קישורים מוודאים?",
"account_edit.display_name.add_label": "הוספת שם תצוגה",
"account_edit.display_name.edit_label": "עריכת שם תצוגה",
"account_edit.display_name.placeholder": "שם התצוגה שלכן הוא איך שהשם יופיע בפרופיל ובצירי הזמנים.",
"account_edit.display_name.title": "שם תצוגה",
"account_edit.featured_hashtags.edit_label": "הוספת תגיות",
"account_edit.featured_hashtags.placeholder": "עזרו לאחרים לזהות ולגשת בקלות לנושאים החביבים עליכם.",
"account_edit.featured_hashtags.title": "תגיות נבחרות",
"account_edit.field_actions.delete": "מחיקת שדה",
"account_edit.field_actions.edit": "עריכת שדה",
"account_edit.field_delete_modal.confirm": "האם אתם בטוחיםות שברצונכן למחוק את השדה המיוחד הזה? פעולה זו לא ניתנת לביטול.",
"account_edit.field_delete_modal.delete_button": "מחק",
"account_edit.field_delete_modal.title": "מחיקת שדה מתואם אישית?",
"account_edit.field_edit_modal.add_title": "הוסף שדה מותאם אישית",
"account_edit.field_edit_modal.discard_confirm": "השלך",
"account_edit.field_edit_modal.discard_message": "יש שינויים שלא נשמרו. לסלק אותם?",
"account_edit.field_edit_modal.edit_title": "עריכת שדה מותאם אישית",
"account_edit.field_edit_modal.limit_warning": "עברת את מספר התווים המירבי המומלץ. משתמשים בנייד עלולים שלא לראות את השדה המלא.",
"account_edit.field_edit_modal.link_emoji_warning": "אנו ממליצים נגד שימוש באמוג'י ייחודיים ביחד עם URL. שדות מיוחדים שמכילים את שניהם יופיעו כמלל בלבד ולא כקישור, כדי למנוע בלבול משתמשים.",
"account_edit.field_edit_modal.name_hint": "למשל \"אתר אישי\"",
"account_edit.field_edit_modal.name_label": "תווית",
@@ -190,6 +201,8 @@
"account_edit.image_edit.alt_edit_button": "עריכת מלל חלופי",
"account_edit.image_edit.remove_button": "הסרת תמונה",
"account_edit.image_edit.replace_button": "החלפת תמונה",
"account_edit.item_list.delete": "מחיקת {name}",
"account_edit.item_list.edit": "עריכת {name}",
"account_edit.name_modal.add_title": "הוספת שם תצוגה",
"account_edit.name_modal.edit_title": "עריכת שם תצוגה",
"account_edit.profile_tab.button_label": "התאמה אישית",
@@ -212,6 +225,10 @@
"account_edit.upload_modal.step_upload.dragging": "גרור להעלאה",
"account_edit.upload_modal.step_upload.header": "בחר/י תמונה",
"account_edit.upload_modal.step_upload.hint": "תכנים בתקן WEBP, PNG, GIF או JPG, עד לגודל {limit} מ\"ב.{br}התמונה תתוקן לגודל {width} על {height} פיקסלים.",
"account_edit.upload_modal.title_add.avatar": "הוספת תמונת פרופיל",
"account_edit.upload_modal.title_add.header": "הוספת תמונת מסגרת",
"account_edit.upload_modal.title_replace.avatar": "החלפת תמונת פרופיל",
"account_edit.upload_modal.title_replace.header": "החלפת תמונת מסגרת",
"account_edit.verified_modal.details": "הוספת אמינות לחשבון המסטודון על ידי הוספת קישורים מוודאים לאתרים אישיים. כך זה עובד:",
"account_edit.verified_modal.invisible_link.details": "הוסיפו את הקישור בכותרת. החלק החשוב הוא rel=\"me\" שמונע התחזות על אתרים עם תוכן משתמשים. ניתן גם ליצור תגית link בכותרת העמוד במקום קישור {tag} אבל קוד ה־HTML חייב להופיע שם ללא הרצה של ג'אווהסקריפט.",
"account_edit.verified_modal.invisible_link.summary": "כיצד לגרום לקישור להיות בלתי נראה?",
@@ -220,7 +237,9 @@
"account_edit.verified_modal.step2.header": "הוסיפו את אתרכן בשדה המיוחד",
"account_edit.verified_modal.title": "כיצד תוסיפו קישורים מוודאים",
"account_edit_tags.add_tag": "הוספת #{tagName}",
"account_edit_tags.column_title": "עריכת תגיות",
"account_edit_tags.help_text": "תגיות נבחרות עוזרות למשתמשים לגלות ולהשתמש בפרופיל שלך. הן יופיעו כסננים במבט הפעילויות על עמוד הפרופיל שלך.",
"account_edit_tags.max_tags_reached": "הגעת למספר התגיות הנבחרות המירבי.",
"account_edit_tags.search_placeholder": "הזנת תגית…",
"account_edit_tags.suggestions": "הצעות:",
"account_edit_tags.tag_status_count": "{count, plural, one {הודעה אחת} two {הודעותיים} other {# הודעות}}",

View File

@@ -142,7 +142,6 @@
"account.unmute_notifications_short": "Értesítések némításának feloldása",
"account.unmute_short": "Némitás feloldása",
"account_edit.bio.edit_label": "Bemutatkozás szerkesztése",
"account_edit.bio.label": "bemutatkozás",
"account_edit.bio.placeholder": "Adj meg egy rövid bemutatkozást, hogy mások könnyebben megtaláljanak.",
"account_edit.bio.title": "Bemutatkozás",
"account_edit.bio_modal.add_title": "Bemutatkozás hozzáadása",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Hætta að þagga niður í @{name}",
"account.unmute_notifications_short": "Hætta að þagga í tilkynningum",
"account.unmute_short": "Hætta að þagga niður",
"account_edit.bio.add_label": "Bættu við æviágripi",
"account_edit.bio.edit_label": "Breyta æviágripi",
"account_edit.bio.label": "æviágrip",
"account_edit.bio.placeholder": "Settu inn stutta kynningu á þér svo aðrir eigi betur með að auðkenna þig.",
"account_edit.bio.title": "Æviágrip",
"account_edit.bio_modal.add_title": "Bættu við æviágripi",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Riattiva @{name}",
"account.unmute_notifications_short": "Riattiva notifiche",
"account.unmute_short": "Attiva audio",
"account_edit.bio.add_label": "Aggiungi biografia",
"account_edit.bio.edit_label": "Modifica la biografia",
"account_edit.bio.label": "biografia",
"account_edit.bio.placeholder": "Aggiungi una breve introduzione per aiutare gli altri a identificarti.",
"account_edit.bio.title": "Biografia",
"account_edit.bio_modal.add_title": "Aggiungi biografia",

View File

@@ -141,27 +141,38 @@
"account.unmute": "@{name} niet langer negeren",
"account.unmute_notifications_short": "Meldingen niet langer negeren",
"account.unmute_short": "Niet langer negeren",
"account_edit.bio.edit_label": "Biografie bewerken",
"account_edit.bio.placeholder": "Vertel iets over jezelf, zodat anderen inzicht krijgen in wat voor persoon je bent.",
"account_edit.bio.title": "Biografie",
"account_edit.bio_modal.add_title": "Biografie toevoegen",
"account_edit.bio_modal.edit_title": "Biografie bewerken",
"account_edit.column_button": "Klaar",
"account_edit.column_title": "Profiel bewerken",
"account_edit.custom_fields.add_label": "Veld toevoegen",
"account_edit.custom_fields.edit_label": "Veld bewerken",
"account_edit.custom_fields.placeholder": "Voeg je voornaamwoorden, externe links of iets anders toe dat je wilt delen.",
"account_edit.custom_fields.reorder_button": "Velden opnieuw ordenen",
"account_edit.custom_fields.tip_content": "Je kunt gemakkelijk je Mastodon-account geloofwaardig maken door links naar websites die van jou zijn te laten verifiëren.",
"account_edit.custom_fields.tip_title": "Tip: Geverifieerde links toevoegen",
"account_edit.custom_fields.title": "Extra velden",
"account_edit.custom_fields.verified_hint": "Hoe voeg ik een geverifieerde link toe?",
"account_edit.display_name.add_label": "Weergavenaam toevoegen",
"account_edit.display_name.edit_label": "Weergavenaam bewerken",
"account_edit.display_name.placeholder": "Je weergavenaam wordt op jouw profiel en op tijdlijnen weergegeven.",
"account_edit.display_name.title": "Weergavenaam",
"account_edit.featured_hashtags.edit_label": "Hashtags toevoegen",
"account_edit.featured_hashtags.placeholder": "Geef anderen een overzicht van en snel toegang tot je favoriete onderwerpen.",
"account_edit.featured_hashtags.title": "Uitgelichte hashtags",
"account_edit.field_actions.delete": "Veld verwijderen",
"account_edit.field_actions.edit": "Veld bewerken",
"account_edit.field_delete_modal.confirm": "Weet je zeker dat je dit aangepaste veld wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.",
"account_edit.field_delete_modal.delete_button": "Verwijderen",
"account_edit.field_delete_modal.title": "Aangepast veld verwijderen?",
"account_edit.field_edit_modal.add_title": "Aangepast veld toevoegen",
"account_edit.field_edit_modal.discard_confirm": "Weggooien",
"account_edit.field_edit_modal.discard_message": "U heeft niet-opgeslagen wijzigingen. Weet u zeker dat u ze wilt weggooien?",
"account_edit.field_edit_modal.edit_title": "Aangepast veld bewerken",
"account_edit.field_edit_modal.limit_warning": "Aanbevolen tekenlimiet overschreden. Mobiele gebruikers zien mogelijk uw veld niet volledig.",
"account_edit.field_edit_modal.link_emoji_warning": "We raden aan om geen lokale emoji in combinatie met URL's te gebruiken. Aangepaste velden die beide bevatten worden alleen als tekst weergegeven, in plaats van als een link. Dit om verwarring voor de gebruiker te voorkomen.",
"account_edit.field_edit_modal.name_hint": "Bijv. \"Persoonlijke website\"",
"account_edit.field_edit_modal.name_label": "Label",
@@ -190,6 +201,8 @@
"account_edit.image_edit.alt_edit_button": "Alt-tekst bewerken",
"account_edit.image_edit.remove_button": "Afbeelding verwijderen",
"account_edit.image_edit.replace_button": "Afbeelding vervangen",
"account_edit.item_list.delete": "{name} verwijderen",
"account_edit.item_list.edit": "{name} bewerken",
"account_edit.name_modal.add_title": "Weergavenaam toevoegen",
"account_edit.name_modal.edit_title": "Weergavenaam bewerken",
"account_edit.profile_tab.button_label": "Aanpassen",
@@ -212,6 +225,10 @@
"account_edit.upload_modal.step_upload.dragging": "Hierheen slepen om te uploaden",
"account_edit.upload_modal.step_upload.header": "Kies een afbeelding",
"account_edit.upload_modal.step_upload.hint": "WEBP-, PNG-, GIF- of JPG-formaat, tot max. {limit}MB.{br}Afbeelding wordt geschaald naar {width}x{height}px.",
"account_edit.upload_modal.title_add.avatar": "Profielfoto toevoegen",
"account_edit.upload_modal.title_add.header": "Omslagfoto toevoegen",
"account_edit.upload_modal.title_replace.avatar": "Profielfoto vervangen",
"account_edit.upload_modal.title_replace.header": "Omslagfoto vervangen",
"account_edit.verified_modal.details": "Maak je Mastodonprofiel geloofwaardig door links naar persoonlijke websites te verifiëren. Zo werkt het:",
"account_edit.verified_modal.invisible_link.details": "Voeg de link aan de HTML van je website toe. Het belangrijkste onderdeel is rel=\"me\", waarmee wordt voorkomen dat websites met user-generated content geïmpersoneerd kunnen worden. Je kunt zelfs een <link>-tag gebruiken binnen de <head>-tag van je website in plaats van {tag}, maar de HTML moet zonder JavaScript toegankelijk zijn.",
"account_edit.verified_modal.invisible_link.summary": "Hoe maak ik de link onzichtbaar?",
@@ -220,10 +237,13 @@
"account_edit.verified_modal.step2.header": "Voeg je website toe als een aangepast veld",
"account_edit.verified_modal.title": "Hoe voeg je een geverifieerde link toe",
"account_edit_tags.add_tag": "#{tagName} toevoegen",
"account_edit_tags.column_title": "Labels bewerken",
"account_edit_tags.help_text": "Uitgelichte hashtags helpen gebruikers je profiel te ontdekken en om er interactie mee te communiceren. Ze verschijnen als filters op je Profielpagina onder het tabblad Activiteit.",
"account_edit_tags.max_tags_reached": "Maximum aantal uitgelichte hashtags bereikt.",
"account_edit_tags.search_placeholder": "Voer een hashtag in…",
"account_edit_tags.suggestions": "Suggesties:",
"account_edit_tags.tag_status_count": "{count, plural, one {# bericht} other {# berichten}}",
"account_list.total": "{total, plural, one {# account} other {# accounts}}",
"account_note.placeholder": "Klik om een opmerking toe te voegen",
"admin.dashboard.daily_retention": "Retentiegraad van gebruikers per dag, vanaf registratie",
"admin.dashboard.monthly_retention": "Retentiegraad van gebruikers per maand, vanaf registratie",
@@ -618,6 +638,10 @@
"featured_carousel.header": "{count, plural, one {Vastgezet bericht} other {Vastgezette berichten}}",
"featured_carousel.slide": "Bericht {current, number} van {max, number}",
"featured_tags.more_items": "+{count}",
"featured_tags.suggestions": "De laatste tijd heb over {items} gepost. Deze toevoegen als uitgelichte hashtags?",
"featured_tags.suggestions.add": "Toevoegen",
"featured_tags.suggestions.added": "Je kunt je uitgelichte hashtags beheren onder <link>Profiel bewerken > Uitgelichte hashtags</link>.",
"featured_tags.suggestions.dismiss": "Nee, bedankt",
"filter_modal.added.context_mismatch_explanation": "Deze filtercategorie is niet van toepassing op de context waarin je dit bericht hebt benaderd. Als je wilt dat het bericht ook in deze context wordt gefilterd, moet je het filter bewerken.",
"filter_modal.added.context_mismatch_title": "Context komt niet overeen!",
"filter_modal.added.expired_explanation": "Deze filtercategorie is verlopen. Je moet de vervaldatum wijzigen om de categorie toe te kunnen passen.",
@@ -660,7 +684,9 @@
"follow_suggestions.who_to_follow": "Wie te volgen",
"followed_tags": "Gevolgde hashtags",
"followers.hide_other_followers": "Deze gebruiker heeft ervoor gekozen diens andere volgers niet zichtbaar te maken",
"followers.title": "{name} volgen",
"following.hide_other_following": "Deze gebruiker heeft ervoor gekozen de rest van diens gevolgde accounts niet zichtbaar te maken",
"following.title": "Gevolgd door {name}",
"footer.about": "Over",
"footer.about_mastodon": "Over Mastodon",
"footer.about_server": "Over {domain}",

View File

@@ -14,9 +14,16 @@
"about.powered_by": "Zdecentralizowane media społecznościowe napędzane przez {mastodon}",
"about.rules": "Regulamin serwera",
"account.account_note_header": "Notatka",
"account.activity": "Aktywność",
"account.add_note": "Dodaj osobistą notkę",
"account.add_or_remove_from_list": "Dodaj lub usuń z list",
"account.badges.admin": "Admin",
"account.badges.blocked": "Zablokowane",
"account.badges.bot": "Bot",
"account.badges.domain_blocked": "Zablokowana domena",
"account.badges.group": "Grupa",
"account.badges.muted": "Wyciszone",
"account.badges.muted_until": "Wyciszone do {until}",
"account.block": "Blokuj @{name}",
"account.block_domain": "Blokuj wszystko z {domain}",
"account.block_short": "Zablokuj",
@@ -27,6 +34,7 @@
"account.direct": "Napisz bezpośrednio do @{name}",
"account.disable_notifications": "Przestań powiadamiać mnie o wpisach @{name}",
"account.domain_blocking": "Blokowanie domeny",
"account.edit_note": "Edytuj osobistą notkę",
"account.edit_profile": "Edytuj profil",
"account.edit_profile_short": "Edytuj",
"account.enable_notifications": "Powiadamiaj mnie o wpisach @{name}",
@@ -36,9 +44,17 @@
"account.familiar_followers_two": "To konto jest obserwowane przez {name1} i {name2}",
"account.featured": "Wyróżnione",
"account.featured.accounts": "Profile",
"account.featured.collections": "Kolekcje",
"account.featured.hashtags": "Tagi",
"account.featured_tags.last_status_at": "Ostatni post {date}",
"account.featured_tags.last_status_never": "Brak postów",
"account.field_overflow": "Pokaż całą zawartość",
"account.filters.all": "Wszystkie aktywności",
"account.filters.boosts_toggle": "Pokaż ulepszenia",
"account.filters.posts_boosts": "Posty i ulepszenia",
"account.filters.posts_only": "Posty",
"account.filters.posts_replies": "Posty i odpowiedzi",
"account.filters.replies_toggle": "Pokaż odpowiedzi",
"account.follow": "Obserwuj",
"account.follow_back": "Również obserwuj",
"account.follow_back_short": "Również obserwuj",
@@ -63,6 +79,24 @@
"account.locked_info": "To konto jest prywatne. Właściciel ręcznie wybiera kto może go obserwować.",
"account.media": "Multimedia",
"account.mention": "Wspomnij o @{name}",
"account.menu.add_to_list": "Dodaj do listy…",
"account.menu.block": "Zablokuj konto",
"account.menu.block_domain": "Zablokuj {domain}",
"account.menu.copied": "Skopiowano link do konta do schowka",
"account.menu.copy": "Skopiuj link",
"account.menu.direct": "Prywatna wzmianka",
"account.menu.hide_reblogs": "Ukryj ulepszenia na osi czasu",
"account.menu.mention": "Wzmianka",
"account.menu.mute": "Wycisz konta",
"account.menu.note.description": "Widoczne tylko dla Ciebie",
"account.menu.open_original_page": "Zobacz na {domain}",
"account.menu.remove_follower": "Usuń obserwującego",
"account.menu.report": "Zgłoś konto",
"account.menu.share": "Udostępnij...",
"account.menu.show_reblogs": "Pokaż ulepszenia na osi czasu",
"account.menu.unblock": "Odblokuj konto",
"account.menu.unblock_domain": "Odblokuj {domain}",
"account.menu.unmute": "Odcisz konto",
"account.moved_to": "{name} jako swoje nowe konto wskazał/a:",
"account.mute": "Wycisz @{name}",
"account.mute_notifications_short": "Wycisz powiadomienia",
@@ -90,6 +124,35 @@
"account.unmute": "Nie wyciszaj @{name}",
"account.unmute_notifications_short": "Nie wyciszaj powiadomień",
"account.unmute_short": "Nie wyciszaj",
"account_edit.bio_modal.add_title": "Szczegóły profilu",
"account_edit.bio_modal.edit_title": "Edytuj szczegóły profilu",
"account_edit.column_button": "Gotowe",
"account_edit.column_title": "Edytuj profil",
"account_edit.custom_fields.add_label": "Dodaj pole",
"account_edit.custom_fields.edit_label": "Edytuj pole",
"account_edit.custom_fields.placeholder": "Dodaj swoje zaimki, linki zewnętrzne lub cokolwiek innego, które chcesz udostępnić.",
"account_edit.custom_fields.reorder_button": "Zmień kolejność pól",
"account_edit.custom_fields.tip_content": "Możesz z łatwością zwiększyć wiarygodność swojego konta Mastodon poprzez weryfikację linków do wszelkich stron internetowych, które posiadasz.",
"account_edit.custom_fields.tip_title": "Wskazówka: Dodawanie zweryfikowanych linków",
"account_edit.custom_fields.title": "Pola niestandardowe",
"account_edit.custom_fields.verified_hint": "Jak dodać zweryfikowany link?",
"account_edit.display_name.add_label": "Dodaj nazwę wyświetlaną",
"account_edit.display_name.edit_label": "Edytuj nazwę wyświetlaną",
"account_edit.display_name.placeholder": "Twoja nazwa wyświetlana jest jak Twoja nazwa pojawia się na Twoim profilu i na osi czasu.",
"account_edit.display_name.title": "Wyświetlana nazwa",
"account_edit.featured_hashtags.edit_label": "Dodaj hashtagi",
"account_edit.featured_hashtags.placeholder": "Pomóż innym zidentyfikować i mieć szybki dostęp do Twoich ulubionych tematów.",
"account_edit.featured_hashtags.title": "Wyróżnione hashtagi",
"account_edit.field_actions.delete": "Usuń pole",
"account_edit.field_actions.edit": "Edytuj pole",
"account_edit.field_delete_modal.confirm": "Czy na pewno chcesz usunąć to pole niestandardowe? Tej czynności nie można cofnąć.",
"account_edit.field_delete_modal.delete_button": "Usuń",
"account_edit.field_delete_modal.title": "Usuń pole niestandardowe ",
"account_edit.field_edit_modal.add_title": "Dodaj pole niestandardowe",
"account_edit.field_edit_modal.discard_confirm": "Odrzuć",
"account_edit.field_edit_modal.discard_message": "Masz niezapisane zmiany. Czy na pewno chcesz je odrzucić?",
"account_edit.field_edit_modal.edit_title": "Edytuj dodatkowe pole",
"account_edit.field_edit_modal.limit_warning": "Przekroczono limit zalecanych znaków. Użytkownicy mobilni mogą nie widzieć Twojego pola w całości.",
"account_note.placeholder": "Kliknij, aby dodać notatkę",
"admin.dashboard.daily_retention": "Wskaźnik utrzymania użytkowników według dni od rejestracji",
"admin.dashboard.monthly_retention": "Wskaźnik utrzymania użytkowników według miesięcy od rejestracji",

View File

@@ -142,7 +142,6 @@
"account.unmute_notifications_short": "Ativar som de notificações",
"account.unmute_short": "Desativar silêncio",
"account_edit.bio.edit_label": "Editar Biografia",
"account_edit.bio.label": "biografia",
"account_edit.bio.placeholder": "Insira uma breve introdução para ajudar os outros a lhe identificar.",
"account_edit.bio.title": "Bio",
"account_edit.bio_modal.add_title": "Adicionar biografia",

View File

@@ -141,12 +141,16 @@
"account.unmute": "Desocultar @{name}",
"account.unmute_notifications_short": "Desocultar notificações",
"account.unmute_short": "Desocultar",
"account_edit.bio.add_label": "Adicionar biografia",
"account_edit.bio.edit_label": "Editar biografia",
"account_edit.bio.placeholder": "Adicione uma breve apresentação para ajudar os outros a identificá-lo.",
"account_edit.bio.title": "Bio",
"account_edit.bio_modal.add_title": "Adicionar biografia",
"account_edit.bio_modal.edit_title": "Editar biografia",
"account_edit.column_button": "Concluído",
"account_edit.column_title": "Editar Perfil",
"account_edit.custom_fields.add_label": "Adicionar campo",
"account_edit.custom_fields.edit_label": "Editar campo",
"account_edit.custom_fields.placeholder": "Adicione os seus pronomes, hiperligações externas ou qualquer outra coisa que queira partilhar.",
"account_edit.custom_fields.reorder_button": "Reordenar campos",
"account_edit.custom_fields.tip_content": "Pode adicionar facilmente credibilidade à sua conta Mastodon, verificando ligações para qualquer website que possua.",
@@ -157,10 +161,13 @@
"account_edit.display_name.title": "Nome a mostrar",
"account_edit.featured_hashtags.placeholder": "Ajude à sua identificação por outros e tenha acesso rápido aos seus tópicos favoritos.",
"account_edit.featured_hashtags.title": "Etiquetas em destaque",
"account_edit.field_actions.delete": "Eliminar campo",
"account_edit.field_actions.edit": "Editar campo",
"account_edit.field_delete_modal.confirm": "Tem certeza de 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.title": "Excluir campo personalizado?",
"account_edit.field_edit_modal.add_title": "Adicionar campo personalizado",
"account_edit.field_edit_modal.discard_confirm": "Descartar",
"account_edit.field_edit_modal.edit_title": "Editar campo personalizado",
"account_edit.field_edit_modal.link_emoji_warning": "Não recomendamos o uso de emojis personalizados em combinação com URLs. Campos personalizados que contenham ambos serão exibidos apenas como texto, em vez de como hiperligação, para evitar confusão aos utilizadores.",
"account_edit.field_edit_modal.name_hint": "Ex.: \"Site pessoal\"",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Ktheji zërin @{name}",
"account.unmute_notifications_short": "Shfaqi njoftimet",
"account.unmute_short": "Çheshtoje",
"account_edit.bio.add_label": "Shtoni jetëshkrim",
"account_edit.bio.edit_label": "Përpunoni jetëshkrim",
"account_edit.bio.label": "jetëshkrim",
"account_edit.bio.placeholder": "Shtoni një hyrje të shkurtër për të ndihmuar të tjerët tju identifikojnë.",
"account_edit.bio.title": "Jetëshkrim",
"account_edit.bio_modal.add_title": "Shtoni jetëshkrim",

View File

@@ -134,6 +134,7 @@
"account.unmute": "Sluta tysta @{name}",
"account.unmute_notifications_short": "Aktivera aviseringsljud",
"account.unmute_short": "Avtysta",
"account_edit.bio.add_label": "Lägg till biografi",
"account_edit.bio.placeholder": "Lägg till en kort introduktion för att hjälpa andra att identifiera dig.",
"account_edit.bio.title": "Biografi",
"account_edit.bio_modal.add_title": "Lägg till biografi",

View File

@@ -141,27 +141,39 @@
"account.unmute": "@{name} adlı kişinin sesini aç",
"account.unmute_notifications_short": "Bildirimlerin sesini aç",
"account.unmute_short": "Susturmayı kaldır",
"account_edit.bio.add_label": "Kişisel bilgi ekle",
"account_edit.bio.edit_label": "Kişisel bilgiyi düzenle",
"account_edit.bio.placeholder": "Diğerlerinin sizi tanımasına yardımcı olmak için kısa bir tanıtım ekleyin.",
"account_edit.bio.title": "Kişisel bilgiler",
"account_edit.bio_modal.add_title": "Kişisel bilgi ekle",
"account_edit.bio_modal.edit_title": "Kişisel bilgiyi düzenle",
"account_edit.column_button": "Tamamlandı",
"account_edit.column_title": "Profili Düzenle",
"account_edit.custom_fields.add_label": "Alan ekle",
"account_edit.custom_fields.edit_label": "Alanı düzenle",
"account_edit.custom_fields.placeholder": "Zamirlerinizi, harici bağlantılarınızı veya paylaşmak istediğiniz diğer bilgileri ekleyin.",
"account_edit.custom_fields.reorder_button": "Alanları yeniden sırala",
"account_edit.custom_fields.tip_content": "Sahip olduğunuz web sitelerine bağlantıları doğrulayarak Mastodon hesabınıza kolayca güvenilirlik katabilirsiniz.",
"account_edit.custom_fields.tip_title": "İpucu: Doğrulanmış bağlantılar ekleme",
"account_edit.custom_fields.title": "Özel alanlar",
"account_edit.custom_fields.verified_hint": "Doğrulanmış bir bağlantı nasıl eklerim?",
"account_edit.display_name.add_label": "Görüntülenecek ad ekle",
"account_edit.display_name.edit_label": "Görüntülenecek adı düzenle",
"account_edit.display_name.placeholder": "Görünen adınız profilinizde ve zaman akışlarında adınızın nasıl göründüğüdür.",
"account_edit.display_name.title": "Görünen ad",
"account_edit.featured_hashtags.edit_label": "Etiket ekle",
"account_edit.featured_hashtags.placeholder": "Başkalarının favori konularınızı tanımlamasına ve bunlara hızlı bir şekilde erişmesine yardımcı olun.",
"account_edit.featured_hashtags.title": "Öne çıkan etiketler",
"account_edit.field_actions.delete": "Alanı sil",
"account_edit.field_actions.edit": "Alanı düzenle",
"account_edit.field_delete_modal.confirm": "Bu özel alanı silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
"account_edit.field_delete_modal.delete_button": "Sil",
"account_edit.field_delete_modal.title": "Özel alanı sil?",
"account_edit.field_edit_modal.add_title": "Özel alan ekle",
"account_edit.field_edit_modal.discard_confirm": "Yoksay",
"account_edit.field_edit_modal.discard_message": "Kaydedilmemiş değişiklikleriniz var. Bunları silmek istediğinizden emin misiniz?",
"account_edit.field_edit_modal.edit_title": "Özel alanı düzenle",
"account_edit.field_edit_modal.limit_warning": "Önerilen karakter sınırııldı. Mobil kullanıcılar sahayı tam olarak görmeyebilirler.",
"account_edit.field_edit_modal.link_emoji_warning": "Url'lerle birlikte özel emoji kullanmamanızı öneririz. Her ikisini de içeren özel alanlar, kullanıcıların kafasını karıştırmamak için bağlantı yerine yalnızca metin olarak görüntülenir.",
"account_edit.field_edit_modal.name_hint": "Örn. \"Kişisel web sitesi\"",
"account_edit.field_edit_modal.name_label": "Etiket",
@@ -190,6 +202,8 @@
"account_edit.image_edit.alt_edit_button": "Alternatif metni düzenle",
"account_edit.image_edit.remove_button": "Görseli kaldır",
"account_edit.image_edit.replace_button": "Görseli değiştir",
"account_edit.item_list.delete": "{name} sil",
"account_edit.item_list.edit": "{name} düzenle",
"account_edit.name_modal.add_title": "Görünen ad ekle",
"account_edit.name_modal.edit_title": "Görünen adı düzenle",
"account_edit.profile_tab.button_label": "Özelleştir",
@@ -212,6 +226,10 @@
"account_edit.upload_modal.step_upload.dragging": "Yüklemek için bırakın",
"account_edit.upload_modal.step_upload.header": "Bir resim seç",
"account_edit.upload_modal.step_upload.hint": "WEBP, PNG, GIF veya JPG formatında, en fazla {limit} MB.{br}Görsel {width}x{height} piksel boyutuna getirilir.",
"account_edit.upload_modal.title_add.avatar": "Profil fotoğrafı ekle",
"account_edit.upload_modal.title_add.header": "Kapak fotoğrafı ekle",
"account_edit.upload_modal.title_replace.avatar": "Profil fotoğrafını değiştir",
"account_edit.upload_modal.title_replace.header": "Kapak fotoğrafını değiştirin",
"account_edit.verified_modal.details": "Kişisel web sitelerine bağlantıları doğrulayarak Mastodon profilinize güvenilirlik katın. İşte böyle çalışıyor:",
"account_edit.verified_modal.invisible_link.details": "Bağlantıyı başlığınıza ekleyin. Önemli olan kısım, kullanıcı tarafından oluşturulan içeriğe sahip web sitelerinde kimlik sahtekarlığını önleyen rel=\"me\" özniteliğidir. {tag} yerine sayfanın başlığında bir bağlantı etiketi bile kullanabilirsiniz, ancak HTML, JavaScript çalıştırılmadan erişilebilir olmalıdır.",
"account_edit.verified_modal.invisible_link.summary": "Bağlantıyı nasıl görünmez hale getirebilirim?",
@@ -220,7 +238,9 @@
"account_edit.verified_modal.step2.header": "Web sitenizi özel bir alan olarak ekleyin",
"account_edit.verified_modal.title": "Doğrulanmış bir bağlantı nasıl eklenir",
"account_edit_tags.add_tag": "#{tagName} ekle",
"account_edit_tags.column_title": "Etiketleri Düzenle",
"account_edit_tags.help_text": "Öne çıkan etiketler kullanıcıların profilinizi keşfetmesine ve etkileşim kurmasına yardımcı olur. Profil sayfanızın Etkinlik görünümünde filtreler olarak görünürler.",
"account_edit_tags.max_tags_reached": "Azami öne çıkan etiket sayısına ulaştınız.",
"account_edit_tags.search_placeholder": "Bir etiket girin…",
"account_edit_tags.suggestions": "Öneriler:",
"account_edit_tags.tag_status_count": "{count, plural, one {# gönderi} other {# gönderi}}",

View File

@@ -141,8 +141,8 @@
"account.unmute": "Bỏ phớt lờ @{name}",
"account.unmute_notifications_short": "Bỏ phớt lờ thông báo",
"account.unmute_short": "Bỏ phớt lờ",
"account_edit.bio.add_label": "Thêm giới thiệu",
"account_edit.bio.edit_label": "Sửa giới thiệu",
"account_edit.bio.label": "giới thiệu",
"account_edit.bio.placeholder": "Thêm một dòng giới thiệu để giúp mọi người nhận ra bạn.",
"account_edit.bio.title": "Giới thiệu",
"account_edit.bio_modal.add_title": "Thêm giới thiệu",

View File

@@ -141,8 +141,8 @@
"account.unmute": "不再隐藏 @{name}",
"account.unmute_notifications_short": "恢复通知",
"account.unmute_short": "取消隐藏",
"account_edit.bio.add_label": "添加个人简介",
"account_edit.bio.edit_label": "编辑个人简介",
"account_edit.bio.label": "简介",
"account_edit.bio.placeholder": "添加一段简短介绍,帮助其他人认识你。",
"account_edit.bio.title": "简介",
"account_edit.bio_modal.add_title": "添加个人简介",

View File

@@ -141,8 +141,8 @@
"account.unmute": "解除靜音 @{name}",
"account.unmute_notifications_short": "解除靜音推播通知",
"account.unmute_short": "解除靜音",
"account_edit.bio.add_label": "新增個人簡介",
"account_edit.bio.edit_label": "編輯個人簡介",
"account_edit.bio.label": "個人簡介",
"account_edit.bio.placeholder": "加入一段簡短介紹以幫助其他人識別您。",
"account_edit.bio.title": "個人簡介",
"account_edit.bio_modal.add_title": "新增個人簡介",
@@ -639,7 +639,7 @@
"featured_carousel.header": "{count, plural, other {# 則釘選嘟文}}",
"featured_carousel.slide": "{max, number} 則嘟文中之第 {current, number} 則",
"featured_tags.more_items": "+{count}",
"featured_tags.suggestions": "最近您曾發有關 {items} 之嘟文。是否新增其為推薦主題標籤?",
"featured_tags.suggestions": "最近您曾發有關 {items} 之嘟文。是否新增其為推薦主題標籤?",
"featured_tags.suggestions.add": "新增",
"featured_tags.suggestions.added": "於 <link>編輯個人檔案 > 推薦主題標籤</link> 隨時管理您的推薦主題標籤。",
"featured_tags.suggestions.dismiss": "不需要,謝謝",

View File

@@ -29,7 +29,7 @@ export const selectUserListWithoutMe = createAppSelector(
.filter((id) => id !== currentAccountId)
.toArray(),
isLoading: !!list.get('isLoading', true),
hasMore: !!list.get('hasMore', false),
hasMore: !!list.get('next'),
};
},
);

View File

@@ -442,6 +442,53 @@ $content-width: 840px;
}
}
}
.callout {
display: flex;
align-items: start;
padding: 12px;
gap: 8px;
background-color: var(--color-bg-brand-softest);
color: var(--color-text-primary);
border-radius: 12px;
font-size: 15px;
margin-bottom: 30px;
.icon {
padding: 4px;
border-radius: 9999px;
width: 1rem;
height: 1rem;
margin-top: -2px;
background-color: var(--color-bg-brand-soft);
}
.content {
display: flex;
flex-direction: column;
gap: 8px;
flex-grow: 1;
padding: 0;
@media screen and (width >= 630px) {
flex-direction: row;
}
}
.body {
flex-grow: 1;
}
.title {
font-weight: 600;
margin-bottom: 8px;
}
a {
color: inherit;
font-weight: 600;
}
}
}
hr.spacer {

View File

@@ -4099,11 +4099,10 @@ a.account__display-name {
.column-subheading {
background: var(--color-bg-secondary);
color: var(--color-text-secondary);
padding: 8px 20px;
font-size: 12px;
padding: 12px 24px;
font-size: 13px;
font-weight: 500;
text-transform: uppercase;
cursor: default;
}
.getting-started__wrapper {
@@ -10679,6 +10678,7 @@ noscript {
&__source {
display: inline-flex;
align-items: center;
max-width: 100%;
color: var(--color-text-tertiary);
gap: 4px;
overflow: hidden;
@@ -10899,12 +10899,6 @@ noscript {
color: var(--color-text-secondary);
}
& > span {
display: flex;
align-items: center;
gap: 8px;
}
a {
display: inline-flex;
align-items: center;

View File

@@ -7,7 +7,7 @@ class ActivityPub::Activity::FeatureRequest < ActivityPub::Activity
return unless Mastodon::Feature.collections_federation_enabled?
return if non_matching_uri_hosts?(@account.uri, @json['id'])
@collection = @account.collections.find_by(uri: value_or_id(@json['instrument']))
@collection = find_or_fetch_collection
@featured_account = ActivityPub::TagManager.instance.uris_to_local_accounts([value_or_id(@json['object'])]).first
return if @collection.nil? || @featured_account.nil?
@@ -37,6 +37,17 @@ class ActivityPub::Activity::FeatureRequest < ActivityPub::Activity
queue_delivery!(collection_item, ActivityPub::RejectFeatureRequestSerializer)
end
def find_or_fetch_collection
uri = value_or_id(@json['instrument'])
collection = @account.collections.find_by(uri:)
return collection if collection.present?
collection = ActivityPub::FetchRemoteFeaturedCollectionService.new.call(uri)
return collection if collection.present? && collection.account == @account
nil
end
def collection_item_attributes(state = :accepted)
{ account: @featured_account, activity_uri: @json['id'], state: }
end

View File

@@ -9,14 +9,14 @@ class WebfingerResource
@resource = resource
end
def username
def account
case resource
when %r{\A(https?://)?#{instance_actor_regexp}/?\Z}
Rails.configuration.x.local_domain
Account.representative
when /\Ahttps?/i
username_from_url
account_from_url
when /@/
username_from_acct
account_from_acct
else
raise InvalidRequest
end
@@ -31,11 +31,11 @@ class WebfingerResource
Regexp.union(hosts)
end
def username_from_url
def account_from_url
if account_show_page?
path_params[:username]
path_params.key?(:username) ? Account.find_local!(path_params[:username]) : Account.local.find(path_params[:id])
elsif instance_actor_page?
Rails.configuration.x.local_domain
Account.representative
else
raise ActiveRecord::RecordNotFound
end
@@ -53,10 +53,13 @@ class WebfingerResource
Rails.application.routes.recognize_path(resource)
end
def username_from_acct
def account_from_acct
raise ActiveRecord::RecordNotFound unless domain_matches_local?
local_username
username = local_username
return Account.representative if username == Rails.configuration.x.local_domain || username == Rails.configuration.x.web_domain
Account.find_local!(username)
end
def split_acct
@@ -76,6 +79,6 @@ class WebfingerResource
end
def domain_matches_local?
TagManager.instance.local_domain?(local_domain) || TagManager.instance.web_domain?(local_domain)
TagManager.instance.local_domain?(local_domain) || TagManager.instance.web_domain?(local_domain) || Rails.configuration.x.alternate_domains.include?(local_domain)
end
end

View File

@@ -32,7 +32,7 @@ class Admin::TagFilter
when :status
status_scope(value)
when :name
Tag.search_for(value.to_s.strip, params[:limit], params[:offset], exclude_unlistable: false)
Tag.search_for(value, params[:limit], params[:offset], exclude_unlistable: false)
when :order
order_scope(value)
else

View File

@@ -128,7 +128,7 @@ class Tag < ApplicationRecord
end
def search_for(term, limit = 5, offset = 0, options = {})
stripped_term = term.strip
stripped_term = term.to_s.strip
options.reverse_merge!({ exclude_unlistable: true, exclude_unreviewed: false })
query = Tag.matches_name(stripped_term)

View File

@@ -4,7 +4,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer
include RoutingHelper
include FormattingHelper
context :security
context :security, :webfinger
context_extensions :manually_approves_followers, :featured, :also_known_as,
:moved_to, :property_value, :discoverable, :suspended,
@@ -55,6 +55,10 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer
ActivityPub::TagManager.instance.uri_for(object)
end
def webfinger
object.local_username_and_domain
end
def type
if object.instance_actor?
'Application'

View File

@@ -2,9 +2,11 @@
class REST::ProfileSerializer < ActiveModel::Serializer
include RoutingHelper
include FormattingHelper
# Please update app/javascript/api_types/profile.ts when making changes to the attributes
attributes :id, :display_name, :note, :fields,
:formatted_note, :formatted_fields,
:avatar, :avatar_static, :avatar_description, :header, :header_static, :header_description,
:locked, :bot,
:hide_collections, :discoverable, :indexable,
@@ -17,10 +19,18 @@ class REST::ProfileSerializer < ActiveModel::Serializer
object.id.to_s
end
def formatted_note
account_bio_format(object)
end
def fields
object.fields.map(&:to_h)
end
def formatted_fields
object.fields.map { |field| { name: field.name, value: account_field_value_format(field), verified_at: field.verified_at } }
end
def avatar
object.avatar_file_name.present? ? full_asset_url(object.avatar_original_url) : nil
end

View File

@@ -27,11 +27,23 @@ class ActivityPub::FetchRemoteActorService < BaseService
raise Error, "Unsupported JSON-LD context for document #{uri}" unless supported_context?
raise Error, "Unexpected object type for actor #{uri} (expected any of: #{SUPPORTED_TYPES})" unless expected_type?
raise Error, "Actor #{uri} has moved to #{@json['movedTo']}" if break_on_redirect && @json['movedTo'].present?
raise Error, "Actor #{uri} has no 'preferredUsername', which is a requirement for Mastodon compatibility" if @json['preferredUsername'].blank?
raise Error, "Actor #{uri} has neither 'preferredUsername' nor `webfinger`, which is a requirement for Mastodon compatibility" if @json['preferredUsername'].blank? && @json['webfinger'].blank?
@uri = @json['id']
@username = @json['preferredUsername']
@domain = Addressable::URI.parse(@uri).normalized_host
@uri = @json['id']
# FEP-2c59 defines a `webfinger` attribute that makes things more explicit and spares an extra request in some cases.
# It supersedes `preferredUsername`.
if @json['webfinger'].present? && @json['webfinger'].is_a?(String)
@username, @domain = split_acct(@json['webfinger'])
Rails.logger.debug { "Actor #{uri} has an invalid `webfinger` value, falling back to `preferredUsername`" }
end
if @username.blank? || @domain.blank?
raise "Actor #{uri} has no `preferredUsername`, and either a bogus or missing `webfinger`, which is a requirement for Mastodon compatibility" if @json['preferredUsername'].blank?
@username = @json['preferredUsername']
@domain = Addressable::URI.parse(@uri).normalized_host
end
check_webfinger! unless only_key

View File

@@ -17,20 +17,15 @@ class ActivityPub::ProcessFeaturedCollectionService
Collection.transaction do
@collection = @account.collections.find_or_initialize_by(uri: @json['id'])
@collection.update!(
local: false,
name: (@json['name'] || '')[0, Collection::NAME_LENGTH_HARD_LIMIT],
description_html: truncated_summary,
language:,
sensitive: @json['sensitive'],
discoverable: @json['discoverable'],
original_number_of_items: @json['totalItems'] || 0,
tag_name: @json.dig('topic', 'name')
)
@collection.update!(collection_attributes)
process_items!
@items = (@json['orderedItems'] || [])[0, ITEMS_LIMIT]
item_uris = @items.filter_map { |i| value_or_id(i) }
@collection.collection_items.where.not(uri: item_uris).delete_all
end
process_items!
@collection
end
end
@@ -46,14 +41,22 @@ class ActivityPub::ProcessFeaturedCollectionService
@json['summaryMap']&.keys&.first
end
def collection_attributes
{
local: false,
name: (@json['name'] || '')[0, Collection::NAME_LENGTH_HARD_LIMIT],
description_html: truncated_summary,
language:,
sensitive: @json['sensitive'],
discoverable: @json['discoverable'],
original_number_of_items: @json['totalItems'] || 0,
tag_name: @json.dig('topic', 'name'),
}
end
def process_items!
uris = []
items = @json['orderedItems'] || []
items.take(ITEMS_LIMIT).each_with_index do |item_json, index|
uris << value_or_id(item_json)
@items.each_with_index do |item_json, index|
ActivityPub::ProcessFeaturedItemWorker.perform_async(@collection.id, item_json, index + 1, @request_id)
end
uris.compact!
@collection.collection_items.where.not(uri: uris).delete_all
end
end

View File

@@ -5,6 +5,15 @@
%h1= t('settings.profile')
= render partial: 'settings/shared/profile_navigation'
- if Mastodon::Feature.profile_redesign_enabled?
%aside.callout
= material_symbol 'info'
.content
.body
%p.title= t('edit_profile.redesign_title')
%p= t('edit_profile.redesign_body')
= link_to t('edit_profile.redesign_button'), '/profile/edit'
= simple_form_for @account, url: settings_profile_path, html: { id: :edit_profile } do |f|
= render 'shared/error_messages', object: @account